Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
odat — 유효한 SID를 발견하고, 자격 증명을 무차별 대입하며, 권한을 DBA로 상승시키고, 시스템 명령을 실행하며, 알려진 CVE를 악용하는 Oracle 데이터베이스용 침투 테스트 도구입니다. | Kitploit
도구/GitHubGitHub/quentinhardy/odat
Privilege EscalationVulnerability ScannersPassword AttacksExploitationPenetration TestingCommand and ControlDatabase Security
GitHubquentinhardy/odat

odat

유효한 SID를 발견하고, 자격 증명을 무차별 대입하며, 권한을 DBA로 상승시키고, 시스템 명령을 실행하며, 알려진 CVE를 악용하는 Oracle 데이터베이스용 침투 테스트 도구입니다.

저장소 보기
1.8k3494개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Quentin HARDY
[email protected]
[email protected]

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
  • 파일 삭제:
    • UTL_FILE
  • 다음 시스템 권한 조합을 사용하여 권한 있는 액세스 획득 ( 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_HTTP
    • HttpUriType
    • UTL_TCP
  • 다음을 통해 SMB 인증 캡처:
    • SMB 연결을 트리거하는 인덱스
  • 일부 CVE 악용:
    • CVE-2012-3137
      • 임의 사용자의 세션 키 및 솔트 획득
      • 세션에 대한 사전 공격
    • CVE-2012-????: 인증된 사용자가 일반적으로 수정할 수 없는(ALTER 권한 없음) 모든 SELECT 가능 테이블을 수정할 수 있습니다.
    • CVE-2012-1675 (일명 TNS 포이즈닝 공격)
  • search 모듈을 사용한 열 이름 검색:
    • 열 이름에서 패턴(예: password) 검색
  • PL/SQL 소스 코드 언래핑 (10g/11g 및 12c)
  • 시스템 권한 및 부여된 역할 가져오기. 부여된 역할의 권한 및 역할도 가져올 수 있습니다.
  • 임의 SELECT 요청 실행 (일명 최소 SQL 셸)

이 목록은 완전하지 않습니다.

마인드 맵 - ODAT & Oracle Database 침투 테스트

Alt text

지원 플랫폼 및 종속성

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 소스 코드를 가져옵니다:
root@kitploit:~
git clone https://github.com/quentinhardy/odat.git
  • 이 저장소에서 위키 페이지를 업데이트하여 로컬에서 ODAT 문서를 가져옵니다:
root@kitploit:~
cd odat/
git submodule init
git submodule update
  • Oracle 웹 사이트에서 instant client basic, sdk (devel) 및 sqlplus를 가져옵니다:

    • X64: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
    • X86: http://www.oracle.com/technetwork/topics/linuxsoft-082809.html
  • 현재 (2021년 3월 기준), pyinstaller로 ODAT 독립 실행형을 생성하려면 Oracle Database instant client 버전 11.2가 가장 좋습니다. ODAT 개발 버전을 사용하려면 최신 Oracle 클라이언트 버전(예: 버전 19)을 사용할 수 있습니다.

  • python3-dev, alien 및 libaio1 패키지 설치 (sqlplus용):

root@kitploit:~
sudo apt-get install libaio1 python3-dev alien python3-pip
  • RPM 파일에서 DEB 파일 생성:
root@kitploit:~
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 설치:
root@kitploit:~
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
  • Oracle env 변수를 정의하기 위해 /etc/profile 파일에 다음 줄을 추가합니다:
root@kitploit:~
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
  • 세션 다시 시작 (환경 변수 적용을 위해)

  • /etc/ld.so.conf.d/oracle.conf 파일을 생성하고 Oracle 홈 경로를 추가합니다:

root@kitploit:~
/usr/lib/oracle/19.3/client64/lib/
  • ldpath 업데이트:
root@kitploit:~
sudo ldconfig
  • CX_Oracle 설치:
root@kitploit:~
sudo -s
source /etc/profile
pip3 install cx_Oracle
  • 모든 것이 잘 작동하는지 테스트:
root@kitploit:~
python3 -c 'import cx_Oracle' 

이 명령은 오류 없이 그냥 반환되어야 합니다.

  • 일부 python 라이브러리 설치:
root@kitploit:~
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
  • Python 3용 pyinstaller의 개발 버전 다운로드 및 설치 (http://www.pyinstaller.org/).
root@kitploit:~
python setup.py install
  • 또는 pip를 통해 설치:
root@kitploit:~
pip3 install pyinstaller
  • ODAT 실행:
root@kitploit:~
./odat.py -h

오류가 없으면 잘한 것입니다 :)

문서 및 예제

문서 및 예제는 WIKI에 있습니다.

기부

기부를 통해 제 작업을 지원하고 싶다면 매우 감사하겠습니다:

  • BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf
도구 다운로드
  • 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):
    • 버그 수정:
      • 외부 테이블 및 false negative
  • 버전 2.3.1 (2018/08/10):
    • Java 모듈의 새로운 옵션: CVE-2018-3004 악용: 인증된 사용자가 OS에 파일을 임의로 쓸 수 있음 (Oracle JVM 보안 우회를 통한 권한 상승). 자세한 내용 http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html.
  • 버전 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 포이즈닝 모듈 (정수 버그)
    • 개선 사항:
      • 새로운 SID
  • 버전 2.2 (2016/03/25):
    • TNS 리스너 포이즈닝 공격(CVE-2012-1675)을 악용하는 새로운 모듈 (tnspoison). Joxean Koret와 donctl에게 큰 감사.
    • 버그 수정
    • 더 나은 도움말 메뉴
    • ODAT 저장소에 WIKI 페이지 추가
  • 버전 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 버전.