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):
- search 모듈에 최소 대화형 SQL 셸
- DbmsXslprocessor 모듈에서 DBMS_XSLPROCESSOR.read2clob을 사용한 파일 다운로드 기능
- 인증 후 원격 OS 확인 기능 개선
- 버그 수정 (예: 터미널 크기)
- 버전 4.1 (2020/01/15):
- SID 대신 SERVICE NAME으로 연결하는 옵션
- 일부 작업(예: NVARCHAR2 및 NCLOB, VARCHAR2 및 CLOB)에 대해 기본 인코딩 UTF-8 설정
- 여러 버그 수정 (인코딩 문제)
- 버전 4.0 (2019/08/10):
- Python 3을 사용하는 Odat, 안정 버전
- 버전 3.0 (2019/01/09):
- Oracle Database 18c와 호환
- Java 모듈에 셸 경로 설정 옵션 추가 (예: CentOS에서 /usr/bin/sh)
- 버전 2.3.2 (2019/07/16):
- 버전 2.3.1 (2018/08/10):
- 버전 2.3 (2018/03/06):
- 버그 수정:
- passwordguesser 모듈에서 일부 데이터베이스 자격 증명이 감지되지 않을 수 있음 (SYSDBA/SYSOPER로 연결을 시도할 때). 중요한 버그 수정!
- smb 모듈에서 PPoutput 누락 (dirkjanm에게 감사)
- tnspoison 모듈에서 false positive
- VSNNUM에서 버전을 가져올 수 없는 경우가 있음
- 개선 사항:
- 계정 무차별 대입 시 성능 향상.
- TNS 연결 문자열로 연결하는 옵션
- 계정 파일에 새로운 사소한 자격 증명
- dbmsLob 모듈에서 더 나은 파일 읽기 방법 (omair2084에게 감사)
- 버전 2.2.1 (2017/04/12):
- 버그 수정:
- tnscmd의 버전 (정보)
- 외부 모듈 (Oracle 오류 포착)
- "서버 연결 실패" 오류 포착
- tnscmd: "-d SID 옵션으로 서버 SID를 제공해야 합니다."
- tnspoison 모듈의 TypeError 버그 수정
- 포트가 1521이 아닐 때 TNS 포이즈닝 모듈 (정수 버그)
- 개선 사항:
- 버전 2.2 (2016/03/25):
- 버전 2.1 (2016/03/04) :
- 일부 CVE(Common Vulnerabilities and Exposures)를 악용하는 새로운 모듈 (cve). 현재 구현된 CVE-2012-3137 (이 숫자가 맞는지 확실하지 않음): 인증된 사용자가 일반적으로 수정할 수 없는(ALTER 권한 없음) 모든 SELECT 가능 테이블을 수정할 수 있습니다.
- 원격 인증 공격을 위한 새로운 옵션 (--accounts-files): 로그인 목록과 암호 목록의 두 개별 파일 사용.
- oclHashcat 호환성을 위해 10g 암호 출력.
- __nc__로 수신 시 버그 수정.
- 버전 2.0 (2016/02/21) :
- Oracle 사용자의 시스템 권한(예: CREATE ANY PROCEDURE)을 사용하여 권한 있는 액세스(즉, DBA)를 얻는 새로운 모듈 (privesc). 이 버전에서 ODAT가 사용할 수 있는 시스템 권한:
- CREATE ANY PROCEDURE: APEX_040200의 권한으로 임의 요청 실행 (예: Oracle 사용자 암호 수정)
- CREATE PROCEDURE 및 EXECUTE ANY PROCEDURE: SYS로 임의 요청 실행 (예: 사용자에게 DBA 역할 부여)
- CREATE ANY TRIGGER (및 CREATE PROCEDURE): SYS로 임의 요청 실행 (예: 사용자에게 DBA 역할 부여)
- ANALYZE ANY (및 CREATE PROCEDURE): SYS로 임의 요청 실행 (예: 사용자에게 DBA 역할 부여)
- CREATE ANY INDEX (및 CREATE PROCEDURE): SYS로 임의 요청 실행 (예: 사용자에게 DBA 역할 부여)
- privesc 모듈을 사용하여 부여된 모든 시스템 권한 및 역할을 가져올 수 있습니다. 권한 있는 액세스를 얻는 데 사용할 수 있는 시스템 권한을 표시합니다.
- 디버그에서 ODAT가 보내는 SQL 요청을 표시하는 새로운 옵션 (-vvv)
- 독립 실행형 버전이 releases로 이동 (https://github.com/quentinhardy/odat/releases/)
- 버전 1.6 (2015/07/14) :
- 대상이 TNS 포이즈닝(CVE-2012-1675)에 취약한지 감지하는 기능
- unwrapper라는 새 모듈: 파일 또는 원격 데이터베이스에서 래핑된 PL/SQL 소스 코드를 언래핑
- 몇 가지 개선 사항
- 버전 1.5 (2015/03/17) :
- 열 이름을 검색하는 search라는 새 모듈
- 몇 가지 개선 사항 (예: 테이블 출력)
- 새 옵션: 출력 인코딩
- 버전 1.4 (2014/12/07) :
- 일부 false positive 수정
- CVE-2012-3137 모듈 개선: 취약점을 악용할 수 있는지 더 쉽게 확인
- 버전 1.3 (2014/10/07) :
- all 모듈에 -C 옵션 추가. 이 옵션은 자격 증명이 포함된 파일을 사용할 수 있음 (-U 및 -P 옵션 비활성화)
- tnscmd 모듈 추가: TNS 별칭, 데이터베이스 버전 (VSNNUM 사용) 및 TNS 상태 가져오기
- 버그 수정: -s 옵션에 이름 서버를 제공할 수 있음
- 버전 1.2 (2014/08/08) :
- SMB 인증을 캡처하는 SMB 모듈 추가
- Constants.py에 옵션 추가 (SHOW_SQL_REQUESTS_IN_VERBOSE_MODE): 데이터베이스 서버로 보내는 SQL 요청 표시
- 버전 1.1 (2014/07/28) :
- Oracle Database를 통해 원격 서버에 저장된 파일을 다운로드하는 데 유용한 DBMS_LOB 모듈 추가
- 버그 수정: 자바 소스 코드: "getenv no longer supported, use properties and -D instead"
- 버전 1.0 (2014/06/26) :
기능
ODAT를 사용하면 다음을 수행할 수 있습니다: