BUUCTF-bjdctf_2020_babystack2
题目简介
BUUCTF原题,链接见BUUCTF-bjdctf_2020_babystack2
(记做出来的第一道整数溢出类型题目)
漏洞点分析
首先checksec,看到只开启了NX保护,如图:
进入IDA,看到存在后门函数,调用了system(“/bin/sh”)
之后分析main函数,如图:
可以看到read读取多少字节取决于我们的输入,但是如果大于10会被检测出来
看似没有溢出点,但是仔细分析程序对于nbytes的处理会发现,类型强转带来了整数溢出类型漏洞
具体来说,由于比较和10的大小时转换成int类型,而nbytes本身是无符号类型,因此如果输入-1,在校验时会出现-1<10从而避免退出,而输入时由于-1在无符号整数下是一个大数,从而实现溢出
漏洞点利用
首先确定偏移量,由于溢出发生在main函数,而main函数的汇编一般都会遵守正常进栈(函数序言)、退栈(leave ret)流程,因此可以直接在IDA里查看偏移,从第一张图可以看到offset=0x10+0x8
之后确定backdoor函数地址,通过objdump的反汇编结果可以看到在0x400726
但保险起见不要劫持到这里,可以选择劫持到0x40072a;具体原因见Pwn的坑:堆栈平衡问题
综上,可以写出如下的利用脚本了:
1 | |
BUUCTF-bjdctf_2020_babystack2
http://0x4a-210.github.io/2025/08/06/pwn刷题记录/整数溢出/BUUCTF-bjdctf-2020-babystack2/