ODAT
ODAT(Oracle数据库攻击工具)是一个开源__渗透测试__工具,用于__远程__测试Oracle数据库的安全性。
ODAT的使用示例:
- 你有一个远程监听的Oracle数据库,想要找到有效的__SID__和__凭据__以连接到数据库
- 你有一个有效的Oracle数据库账户,想要__提升权限__成为DBA或SYSDBA
- 你有一个Oracle账户,想要__执行系统命令__(例如__反向shell__)以在托管数据库的操作系统上进一步推进
已在Oracle Database 10g、11g、12c、__18c__和__19c__上测试。
__ODAT Linux独立版__下载地址:https://github.com/quentinhardy/odat/releases/。注意建议使用开发版本(git clone),master-python3分支(Python 3版本)。
更新日志
- 版本__5.1.1__(27/04/2022):
- 当出现"ORA-12519 - TNS:no appropriate service handler found"错误时打印警告信息。此错误可能由数据库服务器(监听器)在连接过多时触发(例如爆破凭据时)。此时应使用__--sleep__选项(例如*--sleep 0.2*)。
- 版本__5.1__(12/03/2021):
- 在_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和OUTBOUND(TNS)连接的超时时间默认为60秒。
- 版本__5.0__(08/02/2021):
- 重要新模块:Service Name Guesser,用于搜索有效的Service Name。独立模块名为__snguesser__,同时也集成在all模块中。默认情况下,all模块在搜索SID之后现在也会搜索所有有效的Service Name。SID可能与Service Name相同。当找到Service Name但未找到SID时,Service Name可作为SID用于连接。
- search__模块中的--basic-info__选项,用于获取数据库/实例的一些基本技术信息。它获取Service Name、SID、数据库、Oracle Database Vault状态、Java状态、主机名、服务器IP地址、密码策略、当前系统权限、当前角色、补丁(当>=12c且用户有权限时)等。需要高权限才能获取非常有趣的信息(例如密码策略和锁定状态)。
- 在_DbmsScheduler_模块中为Windows目标实现了反向shell。启动最小化HTTP服务器,使Oracle数据库下载PowerShell代码并远程执行。用户获得交互式PS shell。下载的文件会自动删除。
- 在_DbmsScheduler_中实现了__--make-download__选项,用于让Windows目标下载脚本/二进制文件。
- 修复了_DbmsScheduler_模块输出中的错误(printOSCmdOutput())。
- 改进了_DbmsScheduler_模块中的说明(选项)。
- 版本__4.3__(28/06/2020):
- 新选项:--both-ul。如果凭据文件中未完成,则尝试每个密码的小写和大写形式。
- 新选项:--random-order。随机顺序测试账户。默认使用文本文件顺序。
- 现在默认所有密码以小写形式测试(账户文件从大写改为小写)。
- 新增了一些账户。
- 版本__4.2__(04/02/2020):
- 在search模块中实现了最小化交互式SQL shell。
- 在DbmsXslprocessor模块中新增使用DBMS_XSLPROCESSOR.read2clob下载文件的功能。
- 改进了认证后获取远程操作系统信息的功能。
- 错误修复(例如终端大小)。
- 版本__4.1__(15/01/2020):
- 支持通过SERVICE NAME(而非SID)连接。
- 某些操作(例如NVARCHAR2和NCLOB、VARCHAR2和CLOB)默认使用UTF-8编码。
- 多个错误修复(编码问题)。
- 版本__4.0__(10/08/2019):
- 版本__3.0__(01/09/2019):
功能
借助ODAT,您可以:
- 通过以下方式在远程Oracle数据库监听器上搜索__有效SID__:
- 通过以下方式搜索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 TRIGER(和CREATE PROCEDURE)
- ANALYZE ANY(和CREATE PROCEDURE)
- CREATE ANY INDEX(和CREATE PROCEDURE)
- 通过以下方式从数据库服务器发送/接收HTTP请求:
- 通过以下方式扫描本地服务器或远程服务器的端口:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- 通过以下方式__捕获SMB认证__:
- 利用某些CVE:
- 通过search模块在__列名中搜索__:
- 解包 PL/SQL源代码(10g/11g和12c)
- 获取__系统权限__和__已授予的角色__。也可以获取已授予角色的权限和角色。
- 执行任意SELECT请求(即最小化SQL shell)
此列表并非详尽无遗。
思维导图 - ODAT与Oracle数据库渗透测试

支持平台和依赖
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(推荐)
安装(可选,用于开发版本)
本节描述如何在__Ubuntu__上安装instantclient、CX_Oracle和其他一些Python库以获取ODAT开发版本。
别忘了ODAT独立版存在于https://github.com/quentinhardy/odat/releases/:使用独立版无需安装任何东西
git clone https://github.com/quentinhardy/odat.git
- 更新此仓库中的wiki页面以在本地获取ODAT文档:
cd odat/
git submodule init
git submodule update
-
从Oracle网站获取instant client basic、sdk(开发版)和sqlplus:
-
目前(2021年3月),Oracle Database instant client 11.2版本是使用pyinstaller生成ODAT独立版的最佳版本。
使用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
- 将以下行添加到*/etc/profile*文件中以定义Oracle环境变量:
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