首页
社区
课程
招聘
[原创]printf格式化漏洞魔术公式。
发表于: 2018-2-8 12:56 15357

[原创]printf格式化漏洞魔术公式。

2018-2-8 12:56
15357

我又来了 同学你们烦不烦?.........废话不多开始正题。有什么错误的地方纠正一下谢谢了。

两个高位字节 0x0804

将0x8048410写入到内存:0x804a00c
分两次写入:

两个高位字节 0x0804

两个低位字节: 0x8410
因为0x8410大于0x0804,所以需要先将0x0804写入。公式如下:
'\x0c\xa0\x04\x08\x0e\xa0\x04\x08%.2044x%8$hn%.31756x%7$hn'
其中%.2044x 和 %.31756x 为重复输入字符‘0’ 2044次和31756次。
使用$可以指定特定序号的栈参数。例如: printf(“%20$x”)实际输出的是第20个参数的值。尽管调用者没有提供20个参数,但是c调用格式的压栈方式,能使该代码顺利执行。printf(“%2$x”)就是打印第二个参数以16进制显示
这里 %8$hn和 %7$hn分别表示printf自己认为压入占中的第7个参数( \x0c\xa0\x04\x08)和第8个参数( \x0e\xa0\x04\x08 ), 0x804a00c的低位和高位
两个数 2044, 31756 转换为16进制为 0x7FC和0x7C0C,          0x7FC加上前面的8个字节刚好等于0x804,而0x7C0C+0x804=0x8410
为什么需要将 %8$hn写在 %7$hn的前面呢?
原因就在上面了,因为0x8410大于0x0804。反之如果高位大于低位可能就要反过来写了。

下面来到例题:
用checksec 发现 got.plt可写。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 300
活跃值: (2472)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2018-2-8 14:00
0
雪    币: 11
活跃值: (16)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
3
mark
2018-2-28 14:58
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
2019-1-30 13:29
0
雪    币: 300
活跃值: (2472)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
mark
2019-1-30 14:03
0
雪    币: 3209
活跃值: (953)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
mark
2019-1-30 21:37
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
mark
2019-5-16 10:03
0
游客
登录 | 注册 方可回帖
返回
//