0%

在大多数情况下,[远程的ld.so以及TLS等结构的地址与libc地址之间的偏移与本地的会不一样,但是大致处于一个范围内]{.mark},并且,在同一个系统里,这个差值是固定的,其差值的变化往往在偏移的第1.5BYTE~2.5BYTE的位置,即地址十六进制的第4、5个数,因此我们只需爆破2个十六进制数即可。

以列题来说明

BCTF_2018_bugstore

阅读全文 »

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

然后,我们用IDA分析一下,delete功能里存在数组下标越界,可以free掉第21个堆指针,而第21个位置对应name的空间

阅读全文 »

large bin attack是一种堆利用手法,而house of strom则是在large bin attack的基础上借用unsorted bin来达到任意地址分配,首先我们从源码入手来分析large bin attack原理,然后再讲讲house of strom的原理,接着再看几个题目。

为例方便分析,以2.23为例,新版本有tcache的情况类似,只需填满tcache bin绕过tcache即可。

在free的时候,chunk要么被放入fastbin,要么就被放到unsorted bin。当我们再次malloc的时候,[如果对unsorted bin做了遍历,unsorted bin里的chunk才会被放到对应的bin里]{.mark},比如large bin、small bin。比如我在unsorted bin里有一个size为0x420的chunk,那么它会被放到对应的large bin里。而large bin attack就是利用了unsorted bin里未归位的chunk插入到large bin时的解链、成链操作。来看一段malloc中的源码

阅读全文 »

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

然后,我们用IDA分析一下,转换的时候没有检查flag_hex[2i]和flag_hex[2i+1]的值是否向上越界,如果向上越界,我们可以令flag_hex[i]为’0’,而flag_hex[i+1]为p8(offset),这样s[i] = value2 | 16 * value1的值就是value2就是bin_by_hex[flag_hex[2*i+1]]也就是bin_by_hex[offset],那么如果取到上面v4的内容,就能通过比较。

阅读全文 »

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

然后,我们用IDA分析一下,游戏结束后释放掉了ptr

阅读全文 »