OCCTF2025
0x00老乡鸡CTF,奇妙的组合,遂打来玩玩 0x01 bad-with-numbers没啥好说的,过于简单 1234567891011121314151617181920212223242526272829303132333435#!/usr/bin/env python3from pwn import *context(os='linux', arch='amd64', log_level='debug')filename = "pwn_patched"libcname = "/home/r3t2/.config/cpwn/pkgs/2.39-0ubuntu8.6/amd64/libc6_2.39-0ubuntu8.6_amd64/usr/lib/x86_64-linux-gnu/libc.so.6"host = "challenge.cyclens.tech"port = 30100elf = context.binary =...
RCTF2025
0x00打了 RCTF2025,放下wp再复现几题 0x01 only经过逆向发现堆部分以及其他部分没有什么洞,但是可以写shellcode 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859unsigned __int64 backdoor(){ _QWORD *addr_1; // rax int n2; // [rsp+8h] [rbp-28h] BYREF int i; // [rsp+Ch] [rbp-24h] __int64 *v4; // [rsp+10h] [rbp-20h] unsigned __int64 v5; // [rsp+18h] [rbp-18h] void *addr; // [rsp+20h] [rbp-10h] unsigned __int64 v7; // [rsp+28h] [rbp-8h] __int64 savedregs; //...
关于top-chunk的利用
0x00还是 nssctf 的每日一题,发现是对于top chunk的利用,还没有总结过,于是记录一下 0x01 house of orange主要应对没有free的情况,通过溢出修改top chunk的size字段,改小后并绕过一些检查即可将top chunk放入unsortedbin;因为只适用于比较古早的版本(glibc2.29-)就不放源码过多分析了;具体见 wiki上的叙述只要满足: 伪造的 size 必须要对齐到内存页 size 要大于 MINSIZE(0x10) size 要小于之后申请的 chunk size + MINSIZE(0x10) size 的 prev inuse 位必须为 1 这样再申请一个大于top chunk伪造size的chunk,即可将top chunk放入unsorted bin,后续就可以再从这个old top-chunk中切割chunk来leak出libc地址或者进行一些堆风水构造出uaf,具体情况具体应用,不赘述 0x02 house of...
记一次off-by-null利用--无法控制pre_size
0x00笔者昨天打开nssctf的每日一题,发现是个off-by-null的堆题,但似乎和常规的不太一样…贴上几篇关于off-by-null的参考博客 https://tttang.com/archive/1614/#toc_expglibc231ubuntu2004 https://bbs.kanxue.com/thread-269146.htm...
moectf2025 & newstarctf2025(before week3)
0x00粗糙地贴一份moectf2025以及newstarctf2025(至week3) pwn方向的全解。笔者已经不是新生,贴全题解也不是为了享受炸鱼快感。原本不打算发布,只是因为一些事,有一些感慨,所以发布此题解,仅仅希望能帮助到正在看的你,也权且算是笔者投身 pwn 的一次回望。0x01 - 0x16 为 moectf2025题解,0x17及以后为 newstarctf2025 week3前的题解 0x01 boom12345678910111213141516171819202122232425262728293031323334353637383940414243#!/usr/bin/env python3from pwn import *import ctypescontext(os='linux', arch='amd64', log_level='debug')filename = "pwn_patched"libcname =...
关于stdin的利用
0x00之前写了一篇关于stdout的利用,stdin一直拖着,强网杯2025 遇到了一个 stdin 来任意地址写的应用,于是补充一下 0x01 _IO_file_xsgetn / _IO_new_file_underflow在 glibc2.39 找到_IO_file_xsgetn定义 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192size_t_IO_file_xsgetn (FILE *fp, void *data, size_t n){ size_t want, have; ssize_t count; char *s = data; want = n; if (fp->_IO_buf_base == NULL) // 缓冲区未分配 ...
强网杯2025
0x00也是第一次参加这么重量级的比赛,回想起第一次参加正式比赛是学校的校赛,真是感慨良多 0x01 flag-market题目 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970__int64 __fastcall main(__int64 a1, char **a2, char **a3){ int i; // [rsp+Ch] [rbp-84h] int fd; // [rsp+14h] [rbp-7Ch] FILE *stream; // [rsp+18h] [rbp-78h] char filename[9]; // [rsp+27h] [rbp-69h] BYREF char s[16]; // [rsp+30h] [rbp-60h] BYREF char s_1[72]; // [rsp+40h] [rbp-50h] BYREF ...
关于libc-got hijack
0x00在湾区杯2025的题目 digtal_bomb 中,除了复现过的house of cat打法,还有另一种打法:libc-got hijack,学习一下参考博客 https://veritas501.github.io/2023_12_07-glibc_got_hijack%E5%AD%A6%E4%B9%A0/ https://github.com/n132/Libc-GOT-Hijacking 0x01 libc-got关于got表和plt表的组合机制我们已经了解,其在可执行文件的作用往往就是解析libc函数的加载地址,然而,libc共享库文件本身也是存在got表和plt表的就以Ubuntu GLIBC 2.35-0ubuntu3.11来调试;这里有一个小插曲:我们使用 gdb 调试libc.so.6时候,发现运行会有 12345678910111213pwndbg> rStarting program: /home/r3t2/ctf/pwn_demos/libc-got/libc.so.6warning: Unable to find...
黄鹤杯2025
0x00黄鹤杯也是光荣爆0,师傅们都卡在同一步了(悲)拖到现在复现了一下 0x01 题目分析逆向后的源码如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980void __fastcall __noreturn main(int argc, char **argv, char **envp){ int n1131796; // [rsp+14h] [rbp-Ch] int instruction_pointer; // [rsp+18h] [rbp-8h] n1131796 = 0; init_vm(); puts("Please input your op:"); read(0, vm_context->instruction_buffer, 0x100uLL); while...
关于house of corrosion
0x00网谷杯没报名上没打成,但是题目不算难,其中一道堆题用到了house of corrosion,学习一下参考博客https://xz.aliyun.com/news/6458https://www.anquanke.com/post/id/263622源码分析为glibc2.35这个手法也有针对tcache的变体,这里姑且先只分析针对fastbins的手法,后续再说(咕咕)到 glibc2.37 之后,global_max_fast 的类型被修改为 int8_t,使用该技巧可以控制的地址范围大大缩小。 0x01 global_max_fast 与 fastbinsY在malloc的初始化时,会设置全局变量global_max_fast的值 123456789101112131415161718192021222324252627282930/* Initialize a malloc_state struct. This is called from ptmalloc_init () or from _int_new_arena () when...


