格式化字符串漏洞打补丁办法 patch


方法 —–> 替换printf 为puts

0x1 确定计算方法

由于地址是相对的 所以

新地址 = 目标地址(这里即为 puts的plt地址) - 当前修改指令地址的下一指令地址

0x02 确定目标地址

在plt 段 可以看到 puts_plt 地址为 0x08048410

0x03 确定当前地址

当前指令 call _printf的地址为 0x08048618 下一指令地址为 0x0804861D

0x04 计算

计算结果 如果为负数 记得补码~

1
2
3
4
5
6
7
8
9
>>> puts_plt = 0x8048410
>>> call_net_addr = 0x0804861d
>>> offset = puts_plt - call_next_addr
>>> offset
-525
>>> hex(offset)
'-0x20d'
>>> hex(0xffffffff-0x20d+1)
'0xfffffdf3L'

0x05 修改

Edit –> Patch Program –> Change Byte

E8 是操作码 后四位是偏移 即 又因为高字节在后面~

E8 C3 FD FF FF C7 04 24 72 87 04 08 E8 E7 FD FF

我们需要修改 C3 FD FF FF —> F3 FD FF FF

修改后 F5 伪代码~

0x06 保存

Edit –> Patch Program –> Apply patches to input file

运行情况~


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值