介绍:在2.29的libc版本中,进行了unsorted bin的双向链表完整性检查。因此unsorted bin attack也就失效了,不过在libc2.29的版本中tcache stashing unlink attack却可以达到类似的效果(在一个任意地址写入一个libc地址)。

阅读全文 »

写在前面:

通过学习house of orange,又对unsorted bin attack以及FSOP有了一些新的理解。说到底house of orange本身的效果很小,但加上两个组合拳(unsorted bin attack和FSOP)则威力就会变的很大。这篇文章我将对这三种手法都详细记录一下原理和利用方式,最后放上例题。

阅读全文 »

io leak

大致原理:

通过篡改_IO_2_1_stdout_结构体中的flags字段和_IO_write_base字段,通过篡改flags字段来绕过一些检查,通过篡改_IO_write_base字段使得系统调用write打印_IO_write_base字段与_IO_write_ptr字段之间的内容泄露出libc地址。

使用前提:

1、程序没有show函数

2、开启了FULL RELRO保护

利用过程:

1、想办法将_IO_2_1_stdout_结构体申请出来。

2、往_IO_2_1_stdout_结构体写入构造好的数据(具体是什么下面会说)。

3、执行任意一个puts函数,就可以将libc地址泄露出来。

阅读全文 »

这两天打 CSAW 又学到了一种新的沙箱逃逸的方法–切换进程的工作模式,使用32位的系统调用号执行系统调用,来绕过原本沙箱禁用掉的系统调用。理解起来倒也不难,但是有几个点需要注意一下,这里详细的记录下利用过程。

阅读全文 »

在PWN的学习过程中,阅读glibc的源代码是一项必备的技能。一方面而言有些问题需要深入到源码中寻找答案,另一方面阅读源码来探究glibc中函数的实现是再合适不过的方法(有很多师傅做了优秀的总结,可不论怎么阅读他人的总结还是不如自己去实际的探究一下),最后一方面,在不断探究和学习源码的过程中其实也在不断的进步并打下基础,如此看来阅读glibc中的源码百利而无一害。但我对于第一次尝试阅读源码的印象颇深,无从下手,不知所措。于是乎我写下了这篇文章,来向当初和我一样入门的师傅们提供一些经验和建议。

阅读全文 »

之前分析的三个函数文章链接:

IO学习–源码调试fopen函数

IO学习–源码分析fread函数

IO学习–源码分析fwrite函数

这篇是IO函数源码分析四部曲中的最后一个fclose函数(并不是以后不分析了,说实话我感觉分析源码去看看我们平常使用的函数到底是怎么实现的,这个过程很有意思,因此以后有机会的话会再调试一些其他函数,花了四天分析了这四个函数,从最开始分析fopen函数源码的时候懵懵逼逼(那篇文章我基本是纯配合着动态调试才搞懂的整体逻辑),到分析fread函数时对reserve area以及输入和输出缓冲区有了认识,再到基本是对着源码分析的fwrite函数(也是配合着动态调试,不过此时就是静态分析源码为主了),最后到分析fclose函数源码时感觉的异常顺利和自然。真的是分析每个函数时都有不同的感受。

阅读全文 »