通达OARCE远程代码执⾏漏洞分析(含EXPPOC)
⽬录
前记
在上个⽉,通达OA爆出了任意⽂件上传及任意⽂件包含漏洞,影响版本⾮常⼴,这两个漏洞结合可以获取shell权限,为什么在漏洞爆出⼀个⽉后我才写这篇⽂章呢,因为我也是最近才看到的。所以我也赶忙的写完EXP和POC就发了这篇⽂章,下⾯我会从代码层进⾏审计,分析漏洞。希望对⼤家有所帮助!
0x02 影响版本
tongdaOA V11
tangdaOA 2017
tangdaOA 2016
tangdaOA 2015
tangdaOA 2013 增强版
tangdaOA 2013
任意⽂件上传分析
该⽂件上传漏洞的产⽣位置就是在upload.php⽂件中,因为其未对⽤户⾝份进⾏严格认证导致任意⽂件上传漏洞,下⾯我们来看⼀下吧。
源码采⽤了zend加密,解密后才能正常阅读代码,从下图中我们可以看到代码对变量P进⾏了判断,如果变量P被设置并且不为空则获取session否则进⾏⾝份验证(从⽂件名不难判断)。这⾥值得吐槽的⼀点是既然使⽤了isset函数进⾏判断,为什么⼜要在后⾯检查P是否为空,这样不是多此⼀举吗?
继续向下看,要求$DEST_UID不为空,后⾯调⽤了⽅法td_verify_ids是说这个参数需要是0-9开头的值。
下图框内代码的意思是如果DEST_UID的值为0那么UPLOAD_MODE的值必须是2否则返回接收⽅ID⽆效。
继续向下看,判断是否有⽂件进⾏上传,然后对UPLOAD_MODE的值进⾏判断,如果不为1则进⾏调⽤upload函数,否则会进⼊if语句中进⾏判断上传的名url解码后与解码前是否⼀致。upload函数位于inc/utility_file.php中,所以我们继续跟进该⽂件。
我们进⼊inc/utility_file.php中发现其中调⽤了is_uploadable()函数对⽂件吗进⾏验证。如果⽂件后缀名为php则返回false,返回false的结果⾃然就是禁⽌上传,这⾥要注意。
从上⾯的审计中我们得知了⼀些必须提交的参数,好在这些参数都是我们可控,所以我需要构建⼀个数据包。如下图提交相应参数,P、UPLOAD_MODE、DEST_UID这三个参数是必须提交的,其中上⾯有说到的⼀些判断条件也需要注意。
现在通过返回值我们得到上传后⽂件名及路径信息。
我们发现已经成功上传,但是上传后的路径并不在web⽬录下,并没有办法直接访问,所以我们就需要结合另⼀个⽂件包含漏洞了。
任意⽂件包含漏洞
php如何运行代码
在上⾯我们讲到了任意⽂件上传,但是并没有办法去作为php代码利⽤,所以我们需要利⽤另⼀个任意⽂件包含漏洞,该漏洞产⽣于gateway.php⽂件中,下⾯我们来看⼀下吧!
奇淫巧技
既然上⾯已经有了⽂件包含漏洞那么⾃然我们也可以通过⼀些其他⽅法进⾏利⽤。⽐如⽇志包含来进⾏代码执⾏,下⾯我们来看⼀下吧。
在GET请求处写⼊⼀段php代码,注意⼀定要抓包后写,如果直接在浏览器进⾏构建语句,则会被url编码,写进⽇志⾃然⽆法执⾏代码语句。
下⾯我们进⾏包含⽇志⽂件吧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。