0%

有些情况下,仅有malloc/calloc/realloc和free两种功能,并且可以实现任意地址分配,如果想要达到利用,还需要知道地址,在glibc下,一般就是攻击_IO_2_1_stdout_结构体来实现信息泄露,通过低字节覆盖unsorted bin留下的main_arena指针,再加以爆破4位,就能分配到_IO_2_1_stdout_,通过篡改_IO_2_1_stdout_的flags为0x0FBAD1887,_IO_write_base低字节覆盖,然后当程序调用puts输出任意信息时,就会输出_IO_write_base到_IO_write_ptr之间的数据,而这之间就有libc的指针。

下面以三个例子为例。

roarctf_2019_realloc_magic

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,delete功能清空了标记但是,没有清空指针,使得可以多次free。

阅读全文 »

首先检查一下程序的保护机制

然后用IDA分析一下,edit里存在一个整数溢出导致堆溢出的漏洞。当输入为0x8000000000000000时,即可使得index为-1,由于输入的长度不够,因此将0x8000000000000000转为负数的形式输入进去即可。然后就是正常的unlink了。

阅读全文 »

首先,检查一下程序的保护机制

然后用IDA分析一下,在edit函数里存在一个溢出漏洞,我们只需要让v6-strlen(&dest) == 0,即可绕过’\0’的截断,实现溢出。因此我们只需add(0,’’),即可利用这个chunk来溢出,由于PIE也没开启并且堆指针保存在bss段,因此做unsorted bin unlink比较简单。

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,只要符合条件就可以显示flag,但是按照正常的逻辑是不能的。

阅读全文 »

这是DawgCTF 2020国际赛的一题,作为一血所得者,还是很高兴的。

首先,检查一下程序的保护机制,发现没开PIE

阅读全文 »