在 ctf-wiki 上,记载了多个堆实现,除了常见的 ptmalloc,还有 tcmalloc 和 jemalloc, 于是我一时兴起,找了找有关文章,想借此出题。其中 jemalloc 比较难利用, 因为在拿到的堆块附近没有任何堆的元数据,反倒是 tcmalloc 在堆块附近有很多堆指针。于是我就随便改了一个指针,然后分配 2 次同样大小的堆块就实现了任意堆块分配。这么好的特性,拿来出题正好。
-
DASCTF 2024金秋十月 WhereIsMySauce 出题博客
debuginfod 是二进制调试当中非常好用的工具,可以从网上自动拉取调试符号和源码。题目名叫做 WhereIsMySauce,小小玩了一个谐音梗,Sauce 谐音 source, 实际上是在暗指 flag 就放在源码里。由于 debuginfod 是可以分发源码的, 而源码是最便于显示 flag 的方式,因此这道题的终极目标就是找到藏有 flag 的源码。
-
sctf2024 - GoCompiler
利用Go语言编译器中的
printf
漏洞,通过%hhn
逐字节修改内存,实现ROP链,最终执行/bin/sh
以获得shell。 -
sctf2024 - vmCode
编写字节码利用
open
、read
、write
系统调用,巧妙利用栈布局避免数据错位,成功获取flag。 -
sctf2024 - kno_puts
通过替换可写的
poweroff
命令为cat /flag
,在以1000身份运行的shell结束后成功用root的身份获取flag。 -
Ptrace syscall 初学者常见困惑解答
在羊城杯2024的 Hard Sandbox 中,有
RET_TRACE
的沙箱,因此如何构造rce并绕过限制的问题,就来到了如何使用ptrace上。ptrace作为Linux的syscall,已经存在很久了,相关的文档也很完善,具体细则可以通过man ptrace
查看,这篇博客主要讲讲一些值得注意的点。 -
羊城杯2024 - logger
通过栈溢出覆盖返回地址并修改字符串内容,将"Buffer Overflow"替换为
/bin/sh
,借catch
块调用system
获得shell。 -
羊城杯2024 - Httpd
通过验证HTTP/1.0协议和请求头,利用路径遍历和
popen
函数,从靶机复制flag。 -
优化,还是过优化?
通过将温度、充电状态和电池容量的显示功能集成到一个C程序中,并进行syscall优化,最终实现了高效的tmux配置,但反思后认为过度优化并不必要。
-
看电影的学问——IMAX & Dolby Cinema
IMAX影院分为多代,选择优先级为IMAX GT > IMAX COLA = Dolby Cinema > IMAX Laser XT > IMAX氙灯,杜比影院也是不错选择。