某OA的代码审计
2024-1-19 00:2:58 Author: 白帽子(查看原文) 阅读量:43 收藏

某次渗透中,在短期内没有发现突破口,随后决定把重心放在目标的OA系统上,因为前期经过信息搜集,已经知道了该OA的框架,而且此系统是开源的。即使尝试了之前的Nday,发现有价值的漏洞都修复了,但是只要能搞到源码,就能搞点东西出来。

本地搭建好环境后,就开始此次的代码审计。入门审计在搞清楚路由后,只能从功能点一个一个看过去。(菜鸡的代码审计,以下如有问题,请各位大佬指点)

0X01-目录遍历  

获取某个目录下所有文件的实现函数在 include/chajian/fileChajian.php下:

存在漏洞的文件为webmain/system/beifen/beifenAction.php,可以看到这里做了过滤,将../替换为空,但是未作循环过滤,双写即可绕过限制。    

经过测试只要使用.../.../..//就可以进行绕过,实现目录遍历:

当前下载的OA源码是V2.6.0 版本,根据目标OA特征,发现其正在使用的系统版本要低于V2.6.0,所以针对该目录遍历漏洞并没作过滤,直接拼接路径即可实现漏洞利用。    

0X02-数据库备份文件  

当前只有目录遍历漏洞,好像也没什么价值,继续看代码找到一处数据库备份的功能点。

通过代码发现,该网站会将备份数据库文件保存在upload/data文件目录下,而upload文件目录下为静态目录,可以通过文件名直接在URL上访问。而此时只需要获取备份的文件名字,不就可以直接获取该OA的所有数据库文件了么?

以下为代码层面分析:

在beifenAction.php中可以看到getdataAjax接口可以遍历upload/data目录下的文件目录。但此处的代码逻辑,直接写死了目录路径,只能遍历指定目录下的文件目录名。
   

接下来找到数据库备份的功能点。

在数据库备份这里,并没有对权限进行校验,任意账号权限都可访问该接口,访问后会直接备份截止到当前时间的数据,然后将备份文件保存到upload/data目录下面。然后我们可以通过getdataAjax接口获取备份后的文件夹名称,然后通过第一处发现的目录遍历,去遍历该文件目录下的文件。

构造如下链接可以成功进行备份(任意账号都可以)。

http://192.168.26.152/xinhu/index.php?a=beifen&m=beifen&d=system&ajaxbool=true&rnd=430156&lx=0    

备份的数据库文件文件夹保存在upload/data目录下。
接下来通过getedataAjax 接口获取备份的文件名称。
http://192.168.26.152/xinhu/index.php?a=getdata&m=beifen&d=system&ajaxbool=true
再利用0X01中发现的目录遍历漏洞获取目录信息。
http://192.168.26.152/xinhu/index.php?a=getdatssss&m=beifen&d=system&ajaxbool=true    

获取该文件夹下的文件名称,因为存放该备份文件的路径在upload下面,所以浏览器是可以直接访问到的。在数据库备份文件中的admin表里发现所有用户的账号密码。

这不就拿到了该OA的数据库信息。嗯!理论可行,在目标系统成功实践。  

数据库备份的所有表也都可以看到。

直接访问admin表,拿到目标的人员名单、账号、密码,这样邮箱、业务系统啥的都能再搞一波了。
到此审计就结束了,跑路!跑路!

0X03-总结  

审计一开始想着看有没有文件包含,命令执行,文件上传等可以拿到shell的点,但是在对功能点审计的过程中,由于水平有限并没有找到对应可以利用的点。最终在备份功能点处找到文件备份的功能,然后想到该站本身就存在一个目录遍历,看能不能通过目录遍历去获取数据库的文件,然后通过组合拳,最终拿到该OA数据库的所有表信息。    

完整的路径:任意用户可以访问接口直接备份文件-->该备份文件保存在uplaod静态目录下面-->通过getdataAjax获取备份后的文件夹名称-->通过目录遍历遍历该文件夹-->拿到该OA数据库的所有表信息。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650247315&idx=1&sn=7b1de0833f92ff7c30899df8370fd19a&chksm=8303c3260e01cf1dbe4648e1b0c2b4370966d26ffbc522a38e44d7672c719c54763fb943c7f2&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh