-
-
[原创]2017 湖湘杯Pwn100 栈溢出绕过canary
-
发表于:
2018-2-12 23:44
16606
-
[原创]2017 湖湘杯Pwn100 栈溢出绕过canary
e9fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2N6r3g2J5L8X3q4D9M7$3q4C8N6i4u0S2i4K6u0r3j5%4c8X3i4K6g2X3M7s2N6F1i4K6u0r3N6s2u0W2k6g2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8W2!0q4y4W2!0n7z5g2)9&6y4W2!0q4y4W2!0n7z5g2)9&6z5q4!0q4y4W2)9&6c8q4!0m8c8U0t1H3x3e0N6Q4x3V1k6H3N6$3^5I4x3o6m8Z5
先随手输入测试一下

从结果来看很像栈溢出了。
打开IDA查看代码

找到main函数,跟进sub_8048B29()


跟进去找到输入点,可以看到最大可以输入512字节的数据,对于输入格式的要求是能够进行base64解码。

根据我圈起来的地方基本上可以很明显的看出这是base64解密了
如果对base64还有不懂,可以参考base64 c语言实现和维基百科
base64解码的结果存入char数组v21[257],base64解码之后的数据大小大概是原来的3/4,足够造成栈溢出了。

漏洞函数地址为0x080487E6

wait(0)函数的作用是等待任意一个子进程退出。
4f0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1j5X3I4G2k6%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6D9K9h3&6#2P5q4)9J5k6s2y4A6M7W2)9J5c8X3q4J5j5$3S2A6N6X3g2Q4x3V1j5J5x3o6p5J5i4K6u0r3x3o6q4Q4x3V1j5J5y4#2)9J5c8U0t1K6x3K6l9H3x3e0c8Q4x3X3g2Z5N6r3#2D9

一般的思路是先leak出canary的cookie,然后在payload里,把原来的canary位置的cookie用我们leak出的正确的cookie写入,之后就是正常的rop。
不过这题,emmm,有个fork呀……参考这篇文章8a8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0m8^5y4o6S2Q4x3X3g2H3N6#2)9J5c8U0t1H3x3e0N6Q4x3V1j5H3x3#2)9J5c8U0p5@1i4K6u0r3x3s2R3J5k6q4)9J5c8W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4#2)9&6b7W2!0n7y4q4!0q4y4W2)9^5c8g2!0m8y4g2!0q4y4#2)9^5z5q4)9^5y4W2!0q4y4#2!0m8x3q4!0n7y4r3y4S2L8X3q4J5P5b7`.`.
这是个32位的程序,所以canary有4个字节,最低位一定是\x00,所以只需要爆破三个字节即可。
构造爆破payload格式为:padding+canary+chr(i)
(canary的玩法不要太多,可以参考这篇文章:b66K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4k6W2M7X3W2@1j5i4x3#2x3o6q4Q4x3X3g2K6M7r3q4U0k6g2)9J5c8U0t1H3x3e0N6Q4x3V1j5H3y4q4)9J5c8U0t1^5i4K6u0r3i4@1f1^5i4@1q4q4i4@1u0m8j5$3q4F1j5i4u0&6i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4K6R3%4i4@1p5H3i4@1f1%4i4@1p5%4i4K6S2p5i4@1f1%4i4K6S2q4i4@1p5&6i4@1f1$3i4@1t1K6i4K6V1#2i4K6u0r3
先找到padding的大小

再看看canary在哪,在数组旁边。


所以我们的padding大小就是257字节了。
再重复一遍,对fork而言,作用相当于自我复制,每一次复制出来的程序,内存布局都是一样的,当然canary值也一样。 那我们就可以逐位爆破,如果程序GG了就说明这一位不对,如果程序正常就可以接着跑下一位,直到跑出正确的canary。
爆破函数
关于构造rop可以参考蒸米的文章:567K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6M7g2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8X3q4J5N6r3W2U0L8r3g2K6i4K6u0r3y4e0R3$3z5e0V1`.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-1-28 15:02
被admin编辑
,原因: