2019 第五空间 WriteUp
🏛️ 组织架构:多方联合,共筑平台
指导/主办阵容强大:由中宣部、中央网信办等国家部委和天津市人民政府共同主办,具体由天津市委网信办、中国网络空间安全协会、滨海新区政府牵头。
高校与企业深度参与:南开大学、天津大学、天津理工大学等高校承办,360、启明星辰、天津麒麟、天津飞腾等安全与国产软硬件核心企业也参与了人才对接
Pwn
pwn5(格式化字符串漏洞)

程序从 /dev/urandom 读 4 字节随机数到 dword_804C044,然后要求输入的 passwd 经 atoi() 后等于这个随机数;成功后直接 system("/bin/sh")

但是存在格式化字符串漏洞在 printf(buf);
所以我们不猜随机数,而是直接把随机数变量改成一个我们知道的值
目标变量地址是 0x0804C044,利用 %n 可以把 “当前已经输出的字符数” 写入指定地址
测试偏移发现,我们输入的内容在 printf 参数里的偏移是 第 10 个参数,也就是可以用 %10$n 写
1 | $ ./pwn |
前面的 p32(0x0804c044) 本身会被 printf 当作 4 个字符输出,所以执行 %10$n 时,会把数字 4 写入 0x0804c044
1 | payload = p32(0x0804c044) + b"%10$n" |
最后输入 4 即可满足 atoi("4") == dword_804C044
1 | from pwn import * |