odat 不能直接挖掘 PHP 漏洞,它仅针对 Oracle 数据库开展渗透测试,如暴力破解监听器口令、枚举用户、利用 UTL_* 包发起 SSRF、读写文件或执行系统命令等。

odat 不能直接挖 PHP 漏洞
odat 是一个针对 Oracle 数据库的渗透测试工具,它本身不解析、不审计 PHP 代码,也不利用 PHP 语言层漏洞(比如 eval()、unserialize()、文件包含等)。如果你在 Kali 中运行 odat 并期望它“挖出 PHP 漏洞”,那会完全跑偏——它只跟 Oracle 的 TNS 监听器、数据库账号、PL/SQL、Oracle Java VM、UTL_* 包等打交道。
常见误解是:看到网站用 PHP + Oracle,就以为 odat 能顺手把 PHP 那层也打了。其实两者属于不同攻击面:PHP 是应用层,Oracle 是后端服务层。
odat 能打什么 Oracle 相关的点?
在 Kali 中用 odat,真正能尝试的是 Oracle 数据库自身的配置缺陷或默认凭据问题,典型场景包括:
- 暴力破解
tnscmd可达的监听器口令(如lsnrctl默认口令) - 枚举有效 Oracle 用户(
sid、username/password),尤其是system、sys、scott等默认账户 - 利用
UTL_HTTP、UTL_INADDR、DBMS_LDAP等包发起 SSRF 或带外请求 - 通过
stty或external table尝试读写文件(需高权限且 Oracle 版本+配置支持) - 调用 Java 存储过程执行系统命令(
DBMS_JAVA,11g 及以前更常见)
这些操作的前提是:目标 Oracle 实例网络可达、TNS 端口(默认 1521)开放、且未禁用高危包或未加固监听器。
立即学习“PHP免费学习笔记(深入)”;
如果 PHP 应用连 Oracle 出了问题,该从哪下手?
真正的攻击链往往是:PHP 代码存在漏洞 → 泄露 Oracle 凭据 → 再用 odat 或 sqlplus 连接提权。所以重点不在 odat 怎么“挖 PHP”,而在于如何从 PHP 入口找到 Oracle 的突破口:
- 检查 PHP 报错是否暴露
ORA-错误码、用户名、SID 名(如ORA-01017: invalid username/password) - 搜索 PHP 源码中硬编码的
$conn = oci_connect('scott', 'tiger', '//10.0.0.5:1521/orcl')类连接字符串 - 测试 SQL 注入点是否可注入到 Oracle 语法中(注意
||拼接、CHR()、DUAL表、EXECUTE IMMEDIATE等特性) - 若 PHP 使用
oci_parse()+oci_execute(),且参数未过滤,可能触发 PL/SQL 注入(如通过;分隔多语句)
这时候,odat 的作用只是后续阶段:拿到凭据后,用 odat password -s 10.0.0.5 -p 1521 -d orcl -U scott -P tiger 验证并进一步探测。
容易被忽略的实战细节
在 Kali 上跑 odat 时,很多人卡在第一步连不上,不是因为没漏洞,而是环境没配对:
-
odat依赖cx_Oracle,Kali 默认不装;必须手动pip3 install cx_Oracle,且要匹配 Oracle 客户端版本(推荐用instantclient-basic-linux.x64-21.10.0.0.0dbru.zip解压后设LD_LIBRARY_PATH) - Oracle 12c+ 默认关闭
UTL_*包,odat utlfile会直接报ORA-00900;得先用odat sidguesser确认 SID,再用odat accounts找低权限账号试权限 - TNS 响应里若含
UNKNOWN或拒绝连接,大概率是防火墙拦截或监听器未启用ADMIN_RESTRICTIONS关闭状态,此时odat所有模块都无效
别指望一个工具通吃 PHP 和 Oracle —— 把 PHP 当入口,把 Oracle 当靶机,中间的凭据和上下文流转,才是最常断掉的一环。











