一次文件下载漏洞获取源代码审计

之前挖src,挖到一个网站存在文件下载漏洞,想通过文件下载获取源码,但历史命令一直没有管理员操作源码的命令。功夫不负有心人,经过一年不断得下载历史命令,终于成功下载到源码。

漏洞点:

一、文件下载漏洞

在上传附件处,可将上传的文件进行下载。

一次文件下载漏洞获取源代码审计

下载链接为:

https://xxxx.com/internships/student/task/apply/localDownloadFile?filePath=xxx/xxx/xxx/xxx/xxxx.pdf&fileName=1(1).pdf

构造请求地址,可下载到历史命令:

https://xxxx.com/internships/student/task/apply/localDownloadFile?filePath=../../../../root/.bash_history&fileName=1.txt


查看历史命令,拼接出源码路径为/root/student.war

一次文件下载漏洞获取源代码审计


成功下载到源码

https://xxxx.com/internships/student/task/apply/localDownloadFile?filePath=../../../../root/student.war&fileName=4.war

一次文件下载漏洞获取源代码审计



二、反编译war文件

将war文件改为zip后缀再解压即可

一次文件下载漏洞获取源代码审计


一次文件下载漏洞获取源代码审计

再使用idea打开文件夹

一次文件下载漏洞获取源代码审计

三、代码审计

漏洞1:文件下载

先查看刚才的文件下载漏洞代码,

https://xxxx.com/internships/student/task/apply/localDownloadFile?filePath=xxx/xxx/xxx/xxx/xxxx.pdf&fileName=1(1).pdf

搜索internships/student/task/apply,查看@RequestMapping接口

一次文件下载漏洞获取源代码审计


再在java文件中搜索localDownloadFile,查看该接口。

filePath和fileName参数可控


一次文件下载漏洞获取源代码审计


跟进去downloadFile函数,可知path没有任何的过滤,所以使用../的方式可以实现文件下载漏洞。

一次文件下载漏洞获取源代码审计


该downloadFile函数有大量接口调用,尝试其中一个接口复现一下。

一次文件下载漏洞获取源代码审计

根据代码的接口进行构造,https://xxx.cn/xxxx/societyWorkLog/localDownloadFile?filePath=../../../../../etc/passwd&fileName=1.txt

一次文件下载漏洞获取源代码审计

成功下载passwd文件

一次文件下载漏洞获取源代码审计

漏洞2:sql注入

根据代码中的jar包可知项目中用的是mybatis

一次文件下载漏洞获取源代码审计

搜索在xml文件搜索${},查看是否有拼接sql语句


发现了唯一一个使用了拼接方式的sql语句

一次文件下载漏洞获取源代码审计


根据selectid对应的值,查找实现该sql语句的方法

一次文件下载漏洞获取源代码审计


TLogisticsRepairApplyMapper:

找到了实现方法,

再根据TLogisticsRepairApplyMapper跟踪调用了该方法的server层

一次文件下载漏洞获取源代码审计



在RepairService中调用了该方法,再根据该server层找到对应的cotroller层

一次文件下载漏洞获取源代码审计

其中,因为RepairService实现了iRepairService,所以应该查找iRepairService.getApplyByPage

一次文件下载漏洞获取源代码审计


共两处调用了该server层的方法,查看其中一个controller层接口

一次文件下载漏洞获取源代码审计



跟进TLogisticsRepairApply类,查看可造成sql注入的参数怎么构造

一次文件下载漏洞获取源代码审计

creatorId为string类型,可控,满足了sql注入的条件

一次文件下载漏洞获取源代码审计


然后就根据接口进行构造参数

https://xxx.cn/student/logistics/repair/getApplyByPage?

creatorid=555


一次文件下载漏洞获取源代码审计


https://xxxxx.cn/student/logistics/repair/getApplyByPage?creatorid=555+and+length(user())>0–%20


判断数据库用户名长度大于0,成功回显数据,存在sql注入

一次文件下载漏洞获取源代码审计


判断数据库用户长度为10,错误,无数据回显

一次文件下载漏洞获取源代码审计

判断数据库用户名长度为14,正确,返回数据

一次文件下载漏洞获取源代码审计



漏洞3:敏感信息越权

在xml中搜索cardID,因为这个大概率是用户身份证信息,发现了有几条sql语句是查询了用户身份证的。

一次文件下载漏洞获取源代码审计


一次文件下载漏洞获取源代码审计

根据刚才sql注入查找函数调用同理,最后跟到了该接口,其中id是用户可控的,存在越权的可能性。

一次文件下载漏洞获取源代码审计

构造一下参数:https://xxxx.cn/student/wx/student/base/student_family_edit/1000,访问成功,数据包中回显了用户身份证信息,存在敏感信息越权漏洞。

一次文件下载漏洞获取源代码审计


一次文件下载漏洞获取源代码审计


漏洞4:配置信息泄露

代码中存在大量数据库等配置信息,但是都在内网,无法利用。

一次文件下载漏洞获取源代码审计

其中wx.properties泄露了微信公众配置信息。appId与appSecret

一次文件下载漏洞获取源代码审计

利用方法:

https://api.weixin.qq.com/cgi-bin/
token?grant_type=client_credential&appid=xxxx&secret=xxxx

将对应的appid和appSecret填入,访问url即可。回显了微信access-token。

一次文件下载漏洞获取源代码审计

接着可以使用access_token调用该小程序所有后台接口的目的,后台服务端接口已涵盖数据、运维、消息等多方面场景能力

利用方法如下图所示

一次文件下载漏洞获取源代码审计

其他利用方法可到微信公众平台后台服务端接口查找。

漏洞5:垂直越权

翻找代码,看到该接口名称,疑似是系统配置接口,这种接口一般是管理员才有权限访问的。

一次文件下载漏洞获取源代码审计

其中一个接口疑似是上传图标的,而且未对上传用户进行权限校验,看起来可以垂直越权,这段代码逻辑大概是这样的:

从请求数据包获取上传文件数据,将文件上传,判断list是否为空,不为空就通过updatelogo方法,将上传文件响应的data与一些学校id参数等数据储存到数据库中。

一次文件下载漏洞获取源代码审计


漏洞复现:

先访问该接口对应的页面看看

一次文件下载漏洞获取源代码审计

确实是一个文件上传图标的地方,上传一个文件试试


一次文件下载漏洞获取源代码审计

上传后,重新访问网站主页,图标修改成功。太可拷了,得马上将logo改回原样。

一次文件下载漏洞获取源代码审计


好好好,下机。


原文始发于微信公众号(有恒安全):一次文件下载漏洞获取源代码审计

版权声明:admin 发表于 2024年6月7日 下午7:33。
转载请注明:一次文件下载漏洞获取源代码审计 | CTF导航

相关文章