正常的double free题目。
题目在del的时候没有检查inuse位而直接free内存。可以触发double的利用。然后通过double free将一块正在被使用的内存free掉就是一个uaf。
这里我使用的方法是使用uaf去触发著名的unlink漏洞来完成利用。具体的技术原理可以看我以前写的博客ec8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4A6j5X3y4Q4x3X3g2H3N6#2)9J5c8U0t1H3x3e0g2Q4x3V1j5H3z5q4)9J5c8U0l9@1i4K6u0r3i4K6t1#2c8e0g2Q4x3U0g2m8x3q4)9J5y4e0R3$3i4K6t1#2c8e0k6Q4x3U0g2n7b7g2)9J5y4f1p5J5i4K6t1#2c8e0g2Q4x3U0f1^5y4#2)9J5y4f1u0m8i4K6t1#2c8e0k6Q4x3U0g2n7b7#2)9J5y4e0S2r3i4K6t1#2c8e0k6Q4x3U0g2n7y4q4)9J5y4e0W2q4i4K6t1#2c8e0N6Q4x3U0g2m8c8g2)9J5y4e0R3H3i4K6t1#2c8e0c8Q4x3U0g2n7b7W2)9J5y4e0S2n7i4K6u0r3
总的流程是这样的,首先create一块大小为0x1000的内存在index_1的位置然后释放,这样index_1处就有一个野指针,然后再创建一个0x1000的内存在index_0上。这时候0和1都是指向同一个内存的。然后再创建一块内存,防止之后free的chunk被合并到top chunk中。接下来就是在一个次释放index_1。这样虽然index_1指向的内存已经被释放了,但是仍然可以通过edit去修改。
此时内存结构应该是这样的
末尾的pad仅仅用来防止top_chunk的合并。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!