Q1IQ's blog

Home

About

Archives

loading..
PWN

安洵杯 MIPS wp

题目名字就叫做mips,肯定是mips架构的了。 $ file pwn2 pwn2: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, not stripped 直接运行程序会显示下面的信息。 搭建环境的目标是:1.能运行题目程序 2.能用python脚本和题目程序进行交互 3.能够调试题目程序 所以要搭环境mipsmip汇编知识https://ray-cp.github.io/archivers/MIPS_Debug_Environment_and_Stack_Overflow#mips-%E6%B1%87%E7%BC%96%E5%9F%BA%E7%A..

Read more
loading..
PWN

湖湘杯 wp

历时12h,两道pwn。比赛如何不评价,默默做题。 HackNote题目有add、delete、edit 啥保护也没开,有问题 edit里平白无故多算一次size,很有问题,可以构造off by 好几个 此外这题的难点还在于这题是静态编译的,shellcode不知道往哪写,我一开始找了几个静态的地方,等我想调用它的时候吧,内容就变了。反正后来就随便找到一40的size位就用上了,是IOFILE前面的地方。 from pwn import * context.log_level = 'debug' context(arch = 'amd64', os = 'linux') shellcode=asm(shellcraft.sh()) debug=1 if d..

Read more
loading..
PWN

how2heap学习小结

本文是自己的一点心得,没有特别地总结整理。 编译找了半天编译的方法,结果突然发现文件夹里有个Makefile,一键make就全编译了,我觉得我就是个憨憨。 first_fitchar* a = malloc(512); 经过对齐后 chunk size 为 0x210 free(a); 后块a被放到 unsorted_bins 中 执行 c = malloc(500); (500+8)经过16字节对齐后 chunk size 为 0x200 ,此时small bins是空的,就从unsorted bins中找,找到了大小为0x210的块a。而0x210 的块切割后剩下的块大小为0x10,小于MINSIZE(0x20),所以不切直接分配。 然后自己测试了一下 c = malloc(512-0x20+8)..

Read more
loading..
PWN

巅峰极客 ichunqiu wp

记录一下巅峰极客的两道pwn,比赛只出了第一道,第二道PWN是赛后复现的,感觉很值得一学,对理解IOFILE很有帮助。 Pwn题目分析保护全开,乍看add、delete、show、change全有 然而仔细一看这个change往块里读的是stream的内容 而stream是fopen("/dev/urandom", "r");得到的fd delete存在UAF add要求块数量<=0xF,大小>0x7F,块的地址必须在[heapbase,heapbase+0x600] show,没什么特别的 利用 泄露libc和heap base 构造overlap改top的size,利用house_of_force在堆基地址分配块,改stream的内容 改st..

Read more
loading..
PWN

RoarCTF wp

realloc_magic一共三个功能 realloc。realloc 0可以达到free+清零的效果。 free。存在UAF,可以realloc已经free的内存。 backdoor。功能是清零,只能用一次。 overlap tcache 的方法是free块8次,就可以把这一块放到unsorted bin里,把块分为A|B,A和B得不一样大,realloc(A.size)得到A,realloc(0)把A放到tcache里,realloc(B.size)得到B,realloc(0)把B放到tcache里,realloc(A+B的size)改B的size和fd,realloc(B.size),realloc(0),再realloc(B.size)就可以得到fd所在的内存。 通过以上overlap的方法改..

Read more
loading..
PWN

heap overlap方法小结

本文不考虑和top合并, 并且大小非fastbin。实际做题的时候得要考虑top。 free时overlappoison_null_byteP(P是size被null的块)|Q 需要构造的点: 1. chunksize(P) == prev_size (next_chunk(P)) //因为offbyone后的size一定<=原始size,所以prev_size (next_chunk(P)) 可以自己伪造 2.free(P)后分割P为块A和B A|B,此时Q的pre_inuse也为0了 3.free A,free Q,A和Q会 consolidate, B就被overlap了 注意 free 的时候 - 检查前一个chunk空闲吗(检查本块的prev_inuse) - 检查后一个是不是top chu..

Read more
1234