首页
社区
课程
招聘
[原创]淘宝升级程序隐患分析
2014-9-15 15:54 3679

[原创]淘宝升级程序隐患分析

2014-9-15 15:54
3679
测试程序 AliMiserUpdate.exe
首先不得不表扬一下淘宝开发人员的运气好
看如下代码
char data[1015]={0};
	WCHAR wPath[208]={0};
	for (int i=0;i<1014;i++)
	{
		data[i]='1';
	}
	DWORD x=MultiByteToWideChar(0,0,data,-1,0,0);
	if (x<0x400)
	{
		
		DWORD x=MultiByteToWideChar(0,0,data,-1,wPath,x);
	}

很多人以为这样写是正确的
我们伟大的旺旺客户端升级程序也是如此写的
看汇编代码

看到没有申请了一个0x208的buffer
再看下面如何操作

你和0x400比较是什么意思?
我猜测你自以为返回的Unicode字符串的长度吧
晕死
那么我们怎么触发这个问题啊 很简单我们给传入的参数长度小0x399 就溢出了
下面说一下 我说淘宝人家的运气好 是什么意思?
往下看

我们看一下内存结构

没有办法人家运气好,进入下面一个数组了
数组的初始化可以证明出来 那是二个buffer吧
溢出了吧

测试步骤:命令参数 一共有二个 第一个参数输入N 个1 主要大于0x208小于 0x400 就出现了 另外一个随便输入点

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (7)
雪    币: 3235
活跃值: (1541)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
lynnux 2014-9-15 16:42
2
0
程序员都是苦逼的命,为了尽快完工就没考虑那么多了,反正上级也不看代码:P
本来没有网络安全,因为有了专门研究安全的人多了就不那么安全了
雪    币: 341
活跃值: (133)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
地狱怪客 2 2014-9-15 16:43
3
0
看看。。。
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mccsoftgmx 2014-9-15 17:22
4
0
只要输入不是可控,只能算是一个BUG,算不上安全漏洞。发帖人多少有些显摆的意思
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
elianmeng 1 2014-9-15 17:24
5
0
输入时可控的啊
没有看到通过命令行控制啊
比如  AliMiserUpdate.exe 11111111111111111111111111111111111111111111111111111111111111111111?n个   2
这样测试就ok 那里1个长度由你控制
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 2014-9-15 18:45
6
0
输入是可控的……而且阿里这个程序处于所有安全软件的白名单
还好运气好……
雪    币: 132
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
lucieniorl 2 2014-10-26 14:45
7
0
按理这种大公司 每个程序发布都会有安全检测才对~怎么允许 程序员犯这么大的错误~MultiByteToWideChar的返回值理解错误,谁知它有没用其它地方。
雪    币: 7
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
奓奓 2014-10-26 15:37
8
0
char in[1024];
RtlFillMemory(in, 1023, '1');
in[1023] = 0;
WCHAR Out[13];
wsprintf(Out, L"%.12ls", in);
话说最近一直觉得这种很好。为什么各种书上推荐的都是MultiByteToWidechar呢。虽然那种能适合多种编码的宽字符。但是觉得这种很好用啊。莫非这种有什么隐患???
游客
登录 | 注册 方可回帖
返回