0%

首先,还是查看一下程序的保护机制。看起来不错。

然后用IDA分析

阅读全文 »

本题是一个栈溢出题,难点在于开启了PIE,因此里面的函数地址是随机的。

溢出点在这里

阅读全文 »

首先用IDA查看

发现主函数不能栈溢出,我们看看echo这个函数

阅读全文 »

本题,首先,为了方便调试,我们需要解决alarm clock问题

程序运行几十秒后就会自动退出,所以,为了方便调试,我们需要先修改一下这个二进制

阅读全文 »

Libc2.26以下的解法

使用的是double free的unlink漏洞

unlink是利用glibc malloc 的内存回收机制造成攻击的,核心就在于当两个free的堆块在物理上相邻时,会将他们合并,并将原来free的堆块在原来的链表中解链,加入新的链表中,但这样的合并是有条件的,向前或向后合并。

阅读全文 »

知识点1
在linux shell中,假如有如下语句,这就是shell注入方面
echo ‘’;ls;cat 1.txt;/bin/sh;’’
则ls、cat 1.txt、/bin/sh这三个命令会依次执行,这也就是本题突破的关键

知识点2
C语言或C++ 申请内存后,用free或delete释放堆后,指针的值还在,如果不手动设置为NULL,就可以被我们利用。

堆内存的分配有规律,我们用如下的代码做试验

阅读全文 »

本题,用checksec检查二进制,发现开启了CANARY、NX、以及RELRO保护,CANARY是用来检测栈溢出的,canary是一个随机数,存储在栈里。程序通过对比栈里的canary值和读取到的实际canary值进行对比,如果不相等,则抛出异常。因此,为了绕过canary机制,我们需要先想泄露canary的值,然后利用栈溢出,把这个值放到payload中对应的位置里,这样,程序发现canary的值没变,我们就成功绕过。

阅读全文 »