KCTF2019 CurseofPyramid
前言
看雪CTF2019的题,bss的格式化字符串,比较通用的解决思路,稍微记录一下
程序逻辑
程序就一个Main函数,里面printf一个bss段的用户输入值
漏洞分析
可以多次利用漏洞,调试下到断点看到栈里有关于程序加载基址,栈地址,libc地址的值,挨个泄露出来。
断点到printf继续看栈,栈里有两个地址比较有趣,0xfff2e1e4和0xfff2e1e8,可以使用%n把0xfff2e274地址的值改为target_addr,用%n把0xfff2e27c地址的值改为target_addr+2。之后再到0xfff2e274把target_addr的值修改2字节,到0xfff2e27c把target_addr+2对的值修改2字节,即可完成任意地址任意写。
这里的target_addr即返回地址所在的栈地址,覆写成功即可返回到shell_addr
exp.py
1 | #coding=utf-8 |