0x01 前言
0x02 漏洞分析
XXE漏洞
可以看到主要有四个参数需要传递,encode设置为true获取参数的时候会进行base64解码,elemId不为空可以进入循环体即可,imgvalue传入内容长度大于65即可。
然后会进入signature方法,它接收xmlValue并调用runSignature。
runSignature调用了xmlToList,xmlToList调用了getNodes,最后调用saxReader.read解析xml造成了XXE漏洞。
JDBC反序列化
driverClass可控,调用testDBConnect进而调用getConnection。
直接访问发现全局拦截器判断了用户token,首先需要token不为空还要满足TokenUtils.isChecktoken的条件才会返回true。
tokenMap中如果包含传递的这个token就会返回true。
全局搜索tokenMap.发现TokenUtils类中的getToken调用了 tokenMap.put将token存入。
全局搜索调用TokenUtils类getToken方法的位置,需要传递两个参数,传递之后会将传递的数据进行处理(看注释),最后经过toJavaBean的转换传递给各个变量。
可以看到在调用TokenUtils类的getToken方法之前,还判断了seeyon用户的密码,校验通过之后才会生成token存进tokenMap,最后返回token到响应体。所以此时需要知道seeyon用户的密码。
在Dao层搜seeyon,可以看到modifyDefaultUserInfo修改了seeyon用户的密码。
Service层没有任何条件直接调用Dao层这边修改了seeyon用户的密码。
Controller这边也是直接接收了参数,然后调用了Service层的modifyDefaultUserInfo方法。
0x03 漏洞复现
将111.xml与222.xml放到vps,开一个web端口,修改111.xml与222.xml中外带数据的请求地址为你的vps web端口地址,之后修改拼接xmldata1进行密码重置。
修改为xmldata2获取token。
修改上传的文件名以及内容,拼接xmldata3运行即可。
成功上传。
原文始发于微信公众号(小黑说安全):致远oa xxe getshell分析(附脚本)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论