From
pivot
2026-05-25
这道题最不同于之前的题的地方,就在于原栈上空间很小,需要利用 gadgets 把 rsp 跳到其他地方来继续利用 rop 链达到目的。达到目的的方法题目也说的比较清楚:利用惰性绑定性质通过 got 表项找到动态库中 foothold_function() 的真实地址,再通过偏移量解析到库中 ret2win() 函数的真实地址
1567 字
8 min
fluff
2026-05-23
跟前面一样,这道题同样是需要在可写段写入目标字符串”flag.txt“,并作为参数调用目标函数,这个过程中同样需要找到有用的gadgets,并控制相应寄存器来完成,总体看来思路很简单——但或许没有那么简单,毕竟能放在第六题。来看看怎么个事
1597 字
8 min
badchars
2026-05-22
这道题就像上一题,我们仍然需要把目标字符串写入内存并将其作为第一参数调用目标函数,但多了个问题:坏字符不能直接出现在我们输入的 payload 里,否则会被程序处理/破坏;但我们可以先写入替代字符,再在内存中修回真正的坏字符
1510 字
8 min
write4
2026-05-20
正如题目所言,我们最感兴趣的字符串"/bin/cat flag.txt"这次并不存在。为此我们引入了新的方法:通过找允许我们将值写入内存的 gadget和写入位置,构造rop链,达到在指定地址写入目标字符串并使用的目的。
1155 字
6 min
callme
2026-05-16
虽然同样是调用plt形式的函数,但相比于上一道题,这道题需要按照顺序调用3个函数,并且还贴心地告诉你了参数。只不过要注意,正如题目提示, **x86_64 二进制文件,**需要将这些值加倍
675 字
3 min
split
2026-05-15
相比于第一题把system()函数和字符串参数都准备好了,调用到目标函数flag就相当于点击即送而言,这道题需要我们自己找到有用参数和目标函数,正如题目的提示。不过我们还是来正常走一遍,主动搜索信息远比依赖提示来的重要
1843 字
9 min