首页
社区
课程
招聘
[原创]2017 湖湘杯pwn200 格式化字符串
发表于: 2018-2-12 23:49 14016

[原创]2017 湖湘杯pwn200 格式化字符串

2018-2-12 23:49
14016

这篇在FreeBuf发过了,不过那边快两个周没联系我发稿费……就把之前写的几篇pwn入门文章都发到看雪好了~希望为论坛做一点点贡献。

c28K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2N6r3g2J5L8X3q4D9M7$3q4C8N6i4u0S2i4K6u0r3j5%4c8X3i4K6g2X3M7s2N6F1i4K6u0r3N6s2u0W2k6g2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8W2!0q4y4W2!0n7z5g2)9&6y4W2!0q4y4W2!0n7z5g2)9&6z5q4!0q4y4W2)9&6c8q4!0m8c8U0t1H3x3e0N6Q4x3V1k6H3N6$3^5J5x3o6l9`.

图片描述
图片描述
形如

找到格式化字符串漏洞

图片描述
tips1
查看本机ASLR
图片描述
so地址变动,确定本机开启了aslr
关闭ASLR
echo 0 > /proc/sys/kernel/randomize_va_space
确认关闭
图片描述

看到printf(&buf)之后
read(buf)
atoi(buf)
所以我们的思路就是,利用格式化字符串漏洞的任意地址读,先leak出puts函数的地址puts_addr
到利用格式化字符串漏洞的任意地址写,去将atoi函数在got.plt表中的地址改为system函数的地址,然后通过read去控制buf,传入"/bin/sh",构造出system("bin/sh"),获取shell

关于覆盖got表,不知道为什么的话,参考下面的文章。
050K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2B7K9h3q4F1M7$3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0m8S2j5K6j5K6j5K6x3%4y4o6c8V1k6l9`.`.
1daK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0A6j5$3E0Y4M7X3q4&6i4K6u0W2L8h3g2Q4x3V1k6#2M7$3g2Q4x3X3c8Y4k6r3u0Q4x3X3c8@1L8#2)9J5k6s2y4@1N6h3c8&6i4K6u0V1k6$3!0@1i4K6u0V1j5h3&6V1i4K6u0V1M7r3I4@1

任意地址读:0bcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0N6r3k6Q4x3X3c8%4K9h3E0A6i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1k6U0N6r3k6Q4x3X3c8%4K9h3E0A6i4K6u0r3M7s2N6F1i4K6u0r3k6X3#2@1M7%4c8J5i4K6u0r3k6X3#2@1M7%4c8J5i4K6g2X3k6i4S2H3L8r3!0A6N6q4)9J5k6h3S2@1L8h3H3`.
调试找到puts的地址在栈中的位置。
图片描述
在gdb中调试(这里我使用了gef插件),可以看出地址在7个参数(仔细分析一下AAAA%7$x,把AAAA换掉就是地址,把%x换成%s就可以打印出内容)

libc.symbols['system'] - libc.symbols['puts'] + u32(puts_addr)

输出为
abcabc
val = 3
这就告诉我们,%n可以把其前面输出的字符个数,写入&val指向的地址。
如果还不理解的话可以参考:
41cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0N6r3k6Q4x3X3c8%4K9h3E0A6i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1k6U0N6r3k6Q4x3X3c8%4K9h3E0A6i4K6u0r3M7s2N6F1i4K6u0r3k6X3#2@1M7%4c8J5i4K6u0r3k6X3#2@1M7%4c8J5i4K6g2X3k6i4S2H3L8r3!0A6N6q4)9J5k6h3S2@1L8h3H3`.
48bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1j5X3I4G2k6%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6a6P5o6W2m8z5o6u0Q4x3V1k6H3i4K6u0r3y4e0b7J5z5e0l9&6z5g2)9J5k6h3S2@1L8h3H3`.


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2019-1-28 13:13 被admin编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 1218
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主,学习到了
2018-4-28 00:47
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感激
2018-5-16 12:23
0
雪    币: 39
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢  感谢
2018-5-16 14:20
0
雪    币: 32
活跃值: (30)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
楼主  我在自己写的测试程序中 往printf@got写入system@got的地址,通过printf("/bin/sh")来getshell
结果就崩溃了!!! 


coredump 卡在system@got地址那一帧 已经调用到了 不清楚原因 我发了一个求助帖 能帮忙看看吗
最后于 2018-5-25 20:01 被老头人编辑 ,原因:
2018-5-25 20:00
0
雪    币: 199
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持大佬。。。。。。。。。。。。
最后于 2019-4-11 09:35 被toAlice编辑 ,原因:
2019-4-11 09:34
0
雪    币: 177
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
看懂了。
最后于 2019-4-27 16:38 被RENK编辑 ,原因:
2019-4-27 16:30
0
游客
登录 | 注册 方可回帖
返回