Writeup: 32c3ctf

forth

forth 直接能跑system1

S" sh" system

gurke

pickle 在 unpickle 的时候会执行对象的 __reduce__ 方法2。用 eval 把 __main__.flag.flag 打进 stderr 就行了。

teufel

这题的 bin 不大,里面的 gadgets 很少,但是给了 libc. 思路就是先 leak 出保存在栈中的 rbp, 然后 offset 到 system。

这个 offset 要先在本机确定后三位(16 进制), 然后跑个脚本,用 0x1000 的步长去爆破服务器上的 offset. 我的办法是先找__stack_chk_fail, 原因是这个函数不需要参数就能输出。

offset.py
exp.py

吐槽

readme 的 flag 居然是文件名… 不过LIBC_FATAL_STDERR_这个环境变量确实是以前没见过的。

update 2016-01-24: 关于 readme 这道题,之前以为 flag 是文件名,做 ZCTF 的 guess 时3,回来看才发现原来是把argv[1]改掉了,蛮有意思。

@rickyz 的 sandbox 解法4蛮有意思,居然想到争抢修改系统调用参数。直接改/proc/self/mem来改变程序流也是第一次见。

References

Creative Commons License