最近 dbgbgtf 在编写ceccomp的代码,为了做和内核一样的bpf检查,他研究了内核对于 seccomp
系统调用传入的结构体做的检查。在检查过程中,他发现原本指令中的 LD|W|ABS
被内核替换成了LDX|W|ABS
,而这是从seccomp_data
中加载nr
等关键数据结构的指令。 难道syscall_nr其实在内核中一直是加载到X寄存器中,而非A寄存器中?
-
内核加载seccomp:syscall_nr赋给了X寄存器?
-
京麒CTF 2025 - OldWine
通过修改栈上
[rbp]
为rbp+0x10
,使call read@plt
时rsp
指向可控区域,从而劫持返回地址泄露libc,最终利用ROP链调用execveat
实现利用。 -
ACTF2025 - only_read
通过栈溢出控制
rbp
到bss,伪造write
符号并利用dl_resolve
泄露libc,最终执行execl
获取shell。 -
初探Linux内核调试
这学期有操作系统实验课,第一课就是要求在Linux内核中实现一个系统调用,显示学号。 由于系统调用不能通过加内核模块来实现,因此必须要拉取内核源码并编译。 我想着正好我没有做过内核题,也没有配环境,于是决定借此机会配置一个可调试的内核。 正好遇到能源比赛的题中发现当
write
的size很大时,写的字节数是0x800的倍数, 而非对齐到内存页边界上,直接启动内核源码调试分析!最后发现... -
逆向操作系统实验课的rust评测程序
我们操作系统实验课的配套任务有一个专门的评测程序来判断是否通过, 就像oj一样。然而,他是在本地评测的,测完需要我们复制结果到平台上, 整个程序是用rust写的,不仅需要权限,而且报错也很抽象,让我用得很恼火。
file
一看,竟然没剥符号!直接逆向启动,还原处理逻辑,手写注册机实现任意题目 token输出... -
从 Vim 到 NeoVim:感知不强
Vim原来的功能固然很强大,但是总有人说,现在是时候把Vim换成新时代的NeoVim了。话虽如此,但是要想把NeoVim配得和我现在用的Vim一样丝滑,就需要花大量的时间调配置。但当我全部配完后,却发现好像和之前配的vim差别并不大...
-
DiceCTF 2025 - r2uwu2s-resort
通过随机数预测和计算偏移,控制bunny hp,实现对返回地址的修改,利用OneGadget获取shell。
-
国赛 x 长城杯 半决赛
本次国赛暨长城杯半决赛,我们0RAYS战队人人有输出,最终取得了团体第14名的成绩。以下是我在比赛中的一些题解。
-
国赛 x 长城杯 初赛 - Anyip
通过控制队列的
rear
和树节点,实现了对logname
的覆盖,最终输出flag。 -
国赛 x 长城杯 初赛 - avm
利用程序逻辑错误实现越界存取,通过ROP链获取shell。