记一次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和newstarctf2025PWN方向wp
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) // 缓冲区未分配 ...
强网杯2025PWN方向wp及复现
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...
黄鹤杯2025PWN方向复现
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...
记栈上格式化字符串漏洞利用
0x00上次仅仅有栈地址的低两字节,一次非栈上格式化字符串利用的比较极限的题打完,现在又碰到一个啥都不给的栈上格串题,但好在静态链接,有后门函数,分析一下参考博客 https://bbs.kanxue.com/thread-281920.htm 0x01 只有一次机会的栈上fmtstr题目 ida 看一眼 12345678910111213141516int __fastcall main(int argc, const char **argv, const char **envp){ int v3; // edx int v4; // ecx int v5; // r8d int v6; // r9d char buf[104]; // [rsp+0h] [rbp-70h] BYREF unsigned __int64 v9; // [rsp+68h] [rbp-8h] v9 = __readfsqword(0x28u); init_0(argc, argv, envp); puts("one printf"); ...
关于house of cat
0x00湾区杯被堆题斩于马下,赛后找到powchan的exp,利用堆风水打house of cat,并且相比于板子,更特殊的点就是打stdout并修改mode为**-1**,不需要__malloc_assert、exit或者是fflush来触发。另一个题解则是打libc-got姑且先学习一下常规的house of cat参考博客 https://bbs.kanxue.com/thread-273895.htm https://nicholas-wei.github.io/2022/08/02/house-of-cat/ https://zikh26.github.io/posts/7de5a5b7.html 本文贴出源码无特别提及皆为glibc2.35 0x01 __malloc_assert正常情况下,glibc 的断言失败会走 __assert_fail(在 <assert.h> 里定义)。而在 malloc 的时候,它单独定义了一个版本,走 __malloc_assert,这样方便在 malloc...
关于ret2dlresolve
0x00时值 moectf2025 ,出了一题打ret2dlresolve(虽然仍然可以打ret2libc),回想起自从学习了re2dlresolve后几乎没碰到过只能打这个的题,所以也没有记录,于是借此机会记录一下参考博客https://xz.aliyun.com/news/17612 0x01 延迟绑定流程 PLT与GOT炒炒冷饭( 延迟绑定流程初次调用 解析完成后,后续调用 我们简单验证一下,调用前 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667pwndbg> pltSection .plt 0x401020 - 0x401070:No symbols found in section .pltSection .plt.sec 0x401070 - 0x4010b0:0x401070: write@plt0x401080: strlen@plt0x401090:...


