从一道CTF题看整数溢出

        整数溢出漏洞是程序开发过程中危害较大的一种漏洞,经常是PWN中各大神的突破点,利用此跳板,攻入系统,进而攻陷真个系统。此类漏洞不容易发觉,也不容易引起编程人员的注意。

      近期在研究“网鼎杯2020白虎组”的比赛试题中,有一道RE逆向题目-“恶龙”,涉及到整数溢出,如利用此漏洞,可快速拿到Flag。本题解题思路有多种,详见 https://blog.csdn.net/Palmer9/article/details/106117208/,这篇博客中有详细的解释。网上大多数的解法是,动态调试程序,在断点处patch 程序运行的内存值,简单粗暴的修改 自己的战斗值(eff)。这里从另外一个角度触发,利用整数溢出漏洞,也可快速得到flag。 部分代码如下图

sorcecode

 

    如下图界面,在选项3,go to shop,购买体力值时,输入大整数5999999999,导致购买体力值溢出,coins 变为了一个大整数884901895,后面直接获取得到flag。

process


      在idea 中代码静态分析,可以看到,在12行,输入了一个整数值,直接存入了v1。

99

 

       此处特别要注意有符号整数向无符号整数转换的问题。重点在于红色断点处v2为 signed int ,最大值为2^31 - 1,最小值为   -2 ^ 31,当(coin-2*v1) 小于最小值时,就会造成最小值溢出,coin的值回卷到一个很多的正数,达到溢出获取异常体力值的目的。coin的初始值为5,即
     `5-2*v1 < -2 ^ 31,即v1 > (5+2^31)/2`,v1 > 2.5+2^30即可。输入最小整数值(1073741824+3)即可获取flag,如图

code

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值