- 需要对linux操作有一定的认识,前面的绕过ida或者看源码都能推出来,最后由于我们在input2目录下没有写文件的权限,而tmp目录下只有写权限而没有读权限,所以我们在tmp目录下新建一个input2目录来存放我们的脚本,并用软连接命令来在当前目录创建一个flag副本才能读取到flag
ln -s /home/input2/flag flag
exp:
#coding: utf-8
import subprocess
import os
import socket
import time
payload = []
payload.append('/home/input2/input')
for i in range(64):
payload.append('a')
payload.append('')
payload.append(' \n\r')
payload.append('4567')
for i in range(32):
payload.append('a')
stdinr, stdinw = os.pipe()
stderrr, stderrw = os.pipe()
os.write(stdinw,'\x00\x0a\x00\xff')
os.write(stderrw,'\x00\x0a\x02\xff')
environ = {'\xde\xad\xbe\xef' : '\xca\xfe\xba\xbe' }
f = open('\n','wb')
f.write('\x00'*4)
f.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print subprocess.Popen(payload,stdin = stdinr , stderr = stderrr , env = environ)
time.sleep(2)
s.connect(('127.0.0.1',4567))
s.send('\xde\xad\xbe\xef')
参考文章:
网友评论