【WP】DASCTF七月pwn题复现
canary3看了wp才知道这个程序在干嘛。。。先对输入进行一个md5加密输入经加密得到的密文与程序的密文用strcmp比较,通过则继续程序
这里如果输入了0x20个字节,会造成一个null字节的溢出用来比较的密文的第一个字节被覆盖为'\x00'
所以如果能够让输入被加密后开头也是'\x00',就能绕过strcmp而gB经MD5加密后就会得到00
后续就是简单了,两次溢出分别拿到canary和程序基址,然后栈溢出返回到后门即可。
exp123456789101112131415161718192021222324252627282930from pwn import*context(os='linux', arch='amd64', log_level='debug')r = process('./canary3')elf = ELF('./canary3')libc = ELF('/lib/x86_64-linux-gnu/libc.so.6& ...
House_of_Orange
House of Orange方法适用于glibc2.23house of orange主要分为两个部分,首先是创造出unsorted bin,然后利用unsorted bin attack修改_IO_list_all指向可控的heap,最后伪造数据FSOP getshell以下以how2heap中的house of orange为例
创造unsorted binmalloc(0x400-16)假设存在溢出,修改top chunk的size需要满足两个条件:Top chunk + size页对齐和pre_inuse位为1示例中top chunk大小为0x20c01,修改为0xc01
接下来malloc(0x1000)由于此时top chunk的大小仅为0xc01会调用sysmalooc,效果就是旧的top chunk被放入unsorted bin中,heap也进行了brk拓展,且紧跟在原本的top chunk之后
10x602000 0x623000 rw-p 21000 0 [heap]
拓展后如下10x602000 0x645 ...
FSOP
FSOPFile Stream Oriented Programming
基础知识IO-FILE基础
原理glibc中有一个函数_IO_flush_all_lockp,功能是刷新所有FILE结构体的输出缓冲区。源码在libio\genops中https://elixir.bootlin.com/glibc/glibc-2.23/source/libio/genops.c
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354int_IO_flush_all_lockp (int do_lock){ int result = 0; struct _IO_FILE *fp; int last_stamp;#ifdef _IO_MTSAFE_IO __libc_cleanup_region_start (do_lock, flush_cleanup, NULL); if (do_lock) _IO_lock_lock (li ...
初识IO-FILE
IO_FILE结构IO_FILE在Linux系统的标准IO库中是用于描述文件的结构,称为文件流。FILE结构在程序执行fopen等函数时会进行创建,并分配在堆中,进程中的FILE结构通过_chain域彼此连接形成一个链表。在标准I/O库中,每个程序启动时有三个文件流是自动打开的:stdin、stdout、stderr,在libc.so的数据段上。在libc-2.23版本中,有个局部变量_IO_list_all,该变量指向了FILE链表的头部。_IO_FILE外包裹着另一种结构体_IO_FILE_plus,其中重要指针vtable指向一系列函数指针。libc2.23下,32位的vtable偏移0x94,64位偏移0xd8。_IO_FILE_plus结构体如下代码所示,其中有包括了两个重要的结构体_IO_FILE和IO_jump_t
12345struct _IO_FILE_plus{ _IO_FILE file; _IO_jump_t *vtable;}
其中_IO_FILE结构体如下1234567891011121314151617181920 ...
House_of_Rabbit
House of Rabbit一种针对fastbin的攻击,造成chunk overlap。当glibc版本大于2.26时需要先绕过tcache
核心原理glibc-2.23当malloc一个很大的chunk时(large bin范围),会检查是否存在fastbin,若存在则触发malloc_consolidate1234567891011121314151617/* If this is a large request, consolidate fastbins before continuing. While it might look excessive to kill all fastbins before even seeing if there is space available, this avoids fragmentation problems normally associated with fastbins. Also, in practice, programs tend to have runs o ...
how2heap之House_of_Roman
House of Roman总结一句话就是fastbin attack+unsorted bin attack+brute force该方法不需要泄露libc地址,partial overwrite写onegadget或者system撞大运(1/4096)
step 1Fastbin Chunk points to __malloc_hook
这里的fastbin attack利用了堆块的布局,结合off_by_one构造fastbin链,值得关注
1fastbin_victim 0x71chunk 0x91main_arena_use 0x91relative_offset_heap 0x71Top chunk
2free(main_arena_use)unsortedbin main_arena_use 0x91
3malloc(0x60)
fastbin_victim 0x71chunk 0x91fake_libc_chunk 0x71unsorted bin 0x21relative_offset_heap 0x71Top chunk
4free(relative_offset ...
【WP】娱乐赛awd的一道pwn题
题目开局一个菜单一开始循环一次就会执行exit退出
encode112345678910111213141516171819202122232425262728293031323334353637383940unsigned __int64 encode1(){ unsigned int v1; // [rsp+8h] [rbp-38h] unsigned int v2; // [rsp+Ch] [rbp-34h] char buf[40]; // [rsp+10h] [rbp-30h] BYREF unsigned __int64 v4; // [rsp+38h] [rbp-8h] v4 = __readfsqword(0x28u); puts("==========encode1=========="); puts("keys?"); v1 = read(0, buf, 0x20uLL); printf("Your key:%s", buf); puts("your message ...
【WP】强网杯之orw
题目开了沙盒开了PIE Canary,没开nx
add1234567891011121314151617181920212223242526__int64 sub_E44(){ int v1; // [rsp+0h] [rbp-10h] int v2; // [rsp+4h] [rbp-Ch] if ( qword_202130 <= 1 ) { puts("index:"); v1 = read_int(); puts("size:"); v2 = read_int(); if ( v2 >= 0 && v2 <= 8 && v1 <= 1 ) { qword_2020E0[v1] = malloc(v2); if ( !qword_2020E0[v1] ) { puts("error"); exit(0); ...
【WP】限制个数和大小的Null-Byte溢出
2021津门杯 pwn2null byte 溢出
题目描述creat最多创建十个chunk申请的chunk最大不超过496=0x1f0
输入0xa字节的topic name输入des size申请相应大小的chunk,指针记录在bss段
先用read读入相应size字节到栈上然后用strcpy存到chunk中
而strcpy会复制截断字符\x00所以这里存在null byte溢出
deletefree chunk指针并置0所有记录在bss段的信息清零
show把信息都打印出来
思路还是利用传统的null byte方法创造出堆块重叠利用埋在其中的两个chunk分别泄露地址和tcache poisoning
操作这道题比较复杂的地方在于个数的限制,需要不断申请释放相应大小的chunk填满tcache同时大小的限制也让unsorted bin没有那么直接的出现还有strcpy的填入方式需要小小改变一下填入数据的方式
先把0x90的tcache填满
布置好chunk申请10个0x108大小的chunk这个大小的chunk可以溢出到下一个chunk的size位同时当相应大小的tcache被填满后 ...
【WP】蓝帽杯2021半决赛pwn题
呃这次比赛呢感觉打的不是很好,主要还是菜,格式化字符串的题一开始思路想歪了,做成了在bss段的打法,导致后来时间都花在了调试上,最后在本地调到了差半个字节但是远程一直EOF……
cover题目1234567891011121314151617181920212223242526272829int __cdecl main(){ _BYTE *buf; // [esp+18h] [ebp-20h] BYREF int n; // [esp+1Ch] [ebp-1Ch] int v3; // [esp+20h] [ebp-18h] int v4; // [esp+24h] [ebp-14h] int v5; // [esp+28h] [ebp-10h] unsigned int v6; // [esp+2Ch] [ebp-Ch] v6 = __readgsdword(0x14u); sub_804862B(); buf = 0; n = 0; v3 = 0; v4 = 0; v5 = 0; printf("Try use a bullet t ...






