ODAT
ODAT(Oracle Database Attacking Tool)는 __원격으로 Oracle Database__의 보안을 테스트하는 오픈 소스 침투 테스트 도구입니다.
ODAT 사용 예:
- 원격으로 수신 중인 Oracle Database가 있고 데이터베이스에 연결하기 위해 유효한 SID 및 __자격 증명__을 찾고 싶은 경우
- 데이터베이스에 유효한 Oracle 계정이 있고 DBA 또는 SYSDBA가 되기 위해 __권한을 상승__시키고 싶은 경우
- Oracle 계정이 있고 데이터베이스가 호스팅된 운영 체제로 이동하기 위해 시스템 명령을 실행(예: 리버스 셸)하고 싶은 경우
Oracle Database 10g, 11g, 12c, 18c 및 __19c__에서 테스트되었습니다.
ODAT 리눅스 독립 실행형 버전은 https://github.com/quentinhardy/odat/releases/에서 확인하세요. 개발 버전(git clone), master-python3 브랜치(python 3 버전)를 사용하는 것이 좋습니다.
변경 로그
- 버전 5.1.1 (2022/04/27):
- "ORA-12519 - TNS:no appropriate service handler found" 오류 발생 시 경고 메시지 출력. 이 오류는 연결이 너무 많이 설정되었을 때(예: 자격 증명 무차별 대입) 데이터베이스 서버(리스너)에 의해 트리거될 수 있습니다. 이런 경우 --sleep 옵션을 사용해야 합니다(예: --sleep 0.2).
- 버전 5.1 (2021/03/12):
- all 모듈의 새로운 옵션: --nmap-file: nmap XML 출력 파일에서 모든 Oracle 데이터베이스 로드
- all 모듈의 새로운 옵션: -l: 텍스트 파일에서 모든 대상 로드(각 줄에 ip:port 또는 ip)
- all 모듈에서 ODAT 테스트를 시작하기 전에 각 대상에 대해 TCP 연결 테스트 수행. __--timeout-tcp-check__로 타임아웃 값을 관리할 수 있습니다.
- all 모듈에서 이제 각 대상에 대해 TNS 리스너가 올바르게 구성되었는지 확인하는 테스트 수행. 이 테스트는 TCP 연결 테스트 후에 수행됩니다.
- 새로운 전역 옵션: --client-driver. 데이터베이스 연결을 위한 클라이언트 이름 설정(__V$SESSION_CONNECT_INFO__의 client_driver).
최종 사용자가 cx_Oracle 사용을 인식하지 못하는 애플리케이션에 유용합니다. 기본값은 이제 'sql*plus'입니다.
- ODAT는 이제 sqlnet.ora 파일을 허용합니다. 기본 파일은 __conf/__에 있습니다. TCP 및 TNS 아웃바운드 연결 타임아웃이 기본적으로 60초로 설정되었습니다.
- 버전 5.0 (2021/02/08):
- 중요한 새 모듈: Service Name Guesser, 유효한 서비스 이름 검색. 전용 모듈 __snguesser__이며 all 모듈에도 통합됨. 기본적으로 all 모듈은 SID 검색 후 모든 유효한 서비스 이름을 검색합니다. SID는 서비스 이름과 동일할 수 있습니다. 서비스 이름이 발견되었지만 SID가 발견되지 않은 경우, 서비스 이름을 연결을 위한 SID로 사용할 수 있습니다.
- search 모듈의 --basic-info 옵션: 데이터베이스/인스턴스에 대한 기본 기술 정보를 얻습니다. 서비스 이름, SID, 데이터베이스, Oracle Database Vault 상태, Java 상태, 호스트 이름, 서버 IP 주소, 암호 정책, 현재 시스템 권한, 현재 역할, 패치(>= 12c 및 권한 있는 사용자일 때) 등을 가져옵니다. 매우 흥미로운 정보(예: 암호 정책 및 잠금 상태)를 위해 높은 권한이 필요합니다.
- Windows 대상일 때 DbmsScheduler 모듈에 리버스 셸 구현. 최소 HTTP 서버를 시작하고 Oracle Database가 PowerShell 코드를 다운로드하여 원격으로 실행하게 합니다. 사용자는 대화형 PS 셸을 사용합니다. 다운로드된 파일은 자동으로 삭제됩니다.
- DbmsScheduler 모듈에 --make-download 옵션 구현: Windows 대상이 스크립트/바이너리 파일을 다운로드하도록 함.
- DbmsScheduler 모듈의 출력 버그 수정 (printOSCmdOutput()).
- DbmsScheduler 모듈에서 더 나은 설명 (옵션).
- 버전 4.3 (2020/06/28):
- 새 옵션: --both-ul. 자격 증명 파일에서 수행되지 않은 경우 각 암호를 소문자와 대문자로 시도
- 새 옵션: --random-order. 계정을 무작위 순서로 테스트. 기본적으로 텍스트 파일 순서 사용
- 모든 암호는 이제 기본적으로 소문자로 테스트됨 (계정 파일이 대문자에서 소문자로 수정됨)
- 새로운 계정 추가
- 버전 4.2 (2020/02/04):
기능
ODAT를 사용하면 다음을 수행할 수 있습니다:
- 원격 Oracle Database 리스너에서 유효한 SID 검색:
- 사전 공격
- 무차별 대입 공격
- 리스너의 ALIAS
- Oracle 계정 검색:
- 사전 공격
- 각 Oracle 사용자를 암호로 사용 (이 공격을 사용하려면 계정이 필요함)
- 데이터베이스 서버에서 시스템 명령 실행:
- DBMS_SCHEDULER
- JAVA
- 외부 테이블
- oradbg
- 데이터베이스 서버에 저장된 파일 다운로드:
- UTL_FILE
- DBMS_XSLPROCESSOR
- 외부 테이블
- CTXSYS
- DBMS_LOB
- 데이터베이스 서버에 파일 업로드:
- UTL_FILE
- DBMS_XSLPROCESSOR
- DBMS_ADVISOR
- 파일 삭제:
- 다음 시스템 권한 조합을 사용하여 권한 있는 액세스 획득 ( privesc 모듈 명령 도움말 참조):
- CREATE ANY PROCEDURE
- CREATE PROCEDURE 및 EXECUTE ANY PROCEDURE
- CREATE ANY TRIGGER (및 CREATE PROCEDURE)
- ANALYZE ANY (및 CREATE PROCEDURE)
- CREATE ANY INDEX (및 CREATE PROCEDURE)
- 데이터베이스 서버에서 HTTP 요청 전송/수신:
- 로컬 서버 또는 원격 서버의 포트 스캔:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- 다음을 통해 SMB 인증 캡처:
- 일부 CVE 악용:
- search 모듈을 사용한 열 이름 검색:
- 열 이름에서 패턴(예: password) 검색
- PL/SQL 소스 코드 언래핑 (10g/11g 및 12c)
- 시스템 권한 및 부여된 역할 가져오기. 부여된 역할의 권한 및 역할도 가져올 수 있습니다.
- 임의 SELECT 요청 실행 (일명 최소 SQL 셸)
이 목록은 완전하지 않습니다.
마인드 맵 - ODAT & Oracle Database 침투 테스트

지원 플랫폼 및 종속성
ODAT는 __Linux__에서만 호환됩니다.
종속성을 설치할 필요가 없는 __독립 실행형 버전__이 있습니다 (https://github.com/quentinhardy/odat/releases/ 참조).
ODAT 독립 실행형은 pyinstaller를 사용하여 생성되었습니다.
컴퓨터에 __개발 버전__을 설치하려면 다음 도구와 종속성이 필요합니다:
- 언어: Python 3
- Oracle 종속성:
- Instant Oracle basic
- Instant Oracle sdk
- Python 라이브러리:
- cx_Oracle
- passlib
- pycrypto
- python-scapy
- python-libnmap (python 5.1부터 새로 추가됨)
- colorlog (권장)
- termcolor (권장)
- argcomplete (권장)
- pyinstaller (권장)
설치 (선택 사항, 개발 버전용)
이 부분은 개발 버전 ODAT를 위해 __Ubuntu__에 instantclient, CX_Oracle 및 기타 python 라이브러리를 설치하는 방법을 설명합니다.
ODAT 독립 실행형 버전이 https://github.com/quentinhardy/odat/releases/에 있다는 것을 잊지 마십시오: 독립 실행형 버전을 사용하기 위해 아무것도 설치할 필요가 없습니다.
- 저장소를 복제하여 ODAT 소스 코드를 가져옵니다:
git clone https://github.com/quentinhardy/odat.git
- 이 저장소에서 위키 페이지를 업데이트하여 로컬에서 ODAT 문서를 가져옵니다:
cd odat/
git submodule init
git submodule update
-
Oracle 웹 사이트에서 instant client basic, sdk (devel) 및 sqlplus를 가져옵니다:
-
현재 (2021년 3월 기준), pyinstaller로 ODAT 독립 실행형을 생성하려면 Oracle Database instant client 버전 11.2가 가장 좋습니다.
ODAT 개발 버전을 사용하려면 최신 Oracle 클라이언트 버전(예: 버전 19)을 사용할 수 있습니다.
-
python3-dev, alien 및 libaio1 패키지 설치 (sqlplus용):
sudo apt-get install libaio1 python3-dev alien python3-pip
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
- instant client basic, sdk 및 sqlplus 설치:
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
- Oracle env 변수를 정의하기 위해 /etc/profile 파일에 다음 줄을 추가합니다:
export ORACLE_HOME=/usr/lib/oracle/19.3/client64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=${ORACLE_HOME}bin:$PATH
/usr/lib/oracle/19.3/client64/lib/
sudo -s
source /etc/profile
pip3 install cx_Oracle
python3 -c 'import cx_Oracle'
이 명령은 오류 없이 그냥 반환되어야 합니다.
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
오류가 없으면 잘한 것입니다 :)
문서 및 예제
문서 및 예제는 WIKI에 있습니다.
기부
기부를 통해 제 작업을 지원하고 싶다면 매우 감사하겠습니다:
- BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf