![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwnable.tw
N1ch0l4s
这个作者很懒,什么都没留下…
展开
-
劫持vtable修改程序执行流——pwnable seethefile
前置知识vtablevtable是和file结构体并列的一段内容,是函数指针数组,其中包含了对file的一些操作函数。以下来自ctf-wiki在 libc2.23 版本下,32 位的 vtable 偏移为 0x94,64 位偏移为 0xd8以下是vtable的实际结构,如图所示,我们需要关注的是close部分。也就是关闭文件时将会调用的函数。## 劫持原理以下内容摘自https://www.jianshu.com/p/2e00afb01606分析close函数,最关键的利用点在这里注意原创 2021-07-22 22:47:18 · 330 阅读 · 0 评论 -
pwnable.tw tcache_tear
需要注意的:首先是free伪造的bss段上堆块的时候要伪造三个才能free,因为都会检查。其次是在这个版本的glibc下,tcache不会检查bins中size为,因此尽管free周围没有0x7f也可以伪造chunkfrom pwn import *# io = process('./tcache_tear')io = remote('chall.pwnable.tw',10207)context.log_level='debug'elf = ELF('./tcache_tear')libc原创 2021-07-21 21:13:09 · 183 阅读 · 0 评论 -
pwnable.tw hacknote
hacknote主要考察:uaf,fastbin数据结构分析程序流程可知,在add部分,创建的数据结构如下所示用图片直观表示,就是所有被分配的chunk数据结构都是puts块+数据块,并且puts块大小固定。注意到每次free的时候两个快都会被free,并且存在uaf,考虑在free两个块之后,一次malloc 0x8大小的内容,再执行show,那么malloc(0x8)时候调用的puts函数即可被劫持,因为0x10大小的块全被放在了一个fastbin中,我们add一个0x8的块,会从fastbi原创 2021-07-14 22:21:16 · 117 阅读 · 0 评论 -
pwnable.tw calc
查看保护查看流程,calc主函数存在溢出,但由于canary可能比较难利用get_expr函数用来逐个读取输入,判断合法性接下来init_pool,用来初始化a中内容全部为0这里需要逆向一下,纪念一下我B+的pore,但是我还是爱你的一开始也没看出来,觉得这里写的没什么问题。测试了几个数字发现calc计算的也是正确的。感觉问题应该不会出在算法上,就没看算法。问题是出在这里,如果不输入第一个操作数,直接输入“+5”store也会读入,但是此时,store[0]=1,在eval里面计算时好,原创 2021-07-08 13:42:47 · 201 阅读 · 0 评论 -
pwnable.tw start,orw学习
暑假开始刷pwnable.twstart这个反编译出来一开始看蒙了,不知道在干啥。后来仔细看看字节码,发现是系统调用write输出的stack上的内容。后面是read函数,观察修改的寄存器内容发现是read系统调用,输入数据大小为0x3c然而buffer大小为0x14,这就产生了栈溢出。这里是把一个shellcode放到返回地址,那就需要知道返回的栈地址,这里比较巧妙。注意到这里将打印esp地址中的数据,只要返回ret的时候调用,就可以输出esp地址,在下一次放在re原创 2021-07-06 22:39:22 · 201 阅读 · 0 评论