某次渗透中,在短期内没有发现突破口,随后决定把重心放在目标的OA系统上,因为前期经过信息搜集,已经知道了该OA的框架,而且此系统是开源的。即使尝试了之前的Nday,发现有价值的漏洞都修复了,但是只要能搞到源码,就能搞点东西出来。
本地搭建好环境后,就开始此次的代码审计。入门审计在搞清楚路由后,只能从功能点一个一个看过去。(菜鸡的代码审计,以下如有问题,请各位大佬指点)
存在漏洞的文件为webmain/system/beifen/beifenAction.php,可以看到这里做了过滤,将../替换为空,但是未作循环过滤,双写即可绕过限制。
经过测试只要使用.../.../..//就可以进行绕过,实现目录遍历:
当前下载的OA源码是V2.6.0 版本,根据目标OA特征,发现其正在使用的系统版本要低于V2.6.0,所以针对该目录遍历漏洞并没作过滤,直接拼接路径即可实现漏洞利用。
当前只有目录遍历漏洞,好像也没什么价值,继续看代码找到一处数据库备份的功能点。
通过代码发现,该网站会将备份数据库文件保存在upload/data文件目录下,而upload文件目录下为静态目录,可以通过文件名直接在URL上访问。而此时只需要获取备份的文件名字,不就可以直接获取该OA的所有数据库文件了么?
以下为代码层面分析:
接下来找到数据库备份的功能点。
构造如下链接可以成功进行备份(任意账号都可以)。
http://192.168.26.152/xinhu/index.php?a=beifen&m=beifen&d=system&ajaxbool=true&rnd=430156&lx=0
获取该文件夹下的文件名称,因为存放该备份文件的路径在upload下面,所以浏览器是可以直接访问到的。在数据库备份文件中的admin表里发现所有用户的账号密码。
这不就拿到了该OA的数据库信息。嗯!理论可行,在目标系统成功实践。
数据库备份的所有表也都可以看到。
审计一开始想着看有没有文件包含,命令执行,文件上传等可以拿到shell的点,但是在对功能点审计的过程中,由于水平有限并没有找到对应可以利用的点。最终在备份功能点处找到文件备份的功能,然后想到该站本身就存在一个目录遍历,看能不能通过目录遍历去获取数据库的文件,然后通过组合拳,最终拿到该OA数据库的所有表信息。
完整的路径:任意用户可以访问接口直接备份文件-->该备份文件保存在uplaod静态目录下面-->通过getdataAjax获取备份后的文件夹名称-->通过目录遍历遍历该文件夹-->拿到该OA数据库的所有表信息。