Oracle 数据库测试
简介
oracle已经开发了许多软件,从早期的web监听产品再到Apache mod pisql模块,再到xml数据库(XDB)web服务器,有非常重要地位。
如何测试:
PL/SQL网关:本质上是一个人代理服务器,接收用户的输入并将其传递给数据服务器,在数据服务器中执行请求。
- web服务器接收来web客户端的请求,并决定它是否由PL\SQL网关处理
- PL\SQL geetway通过请求提取包名,过程和变量来处理请求
- 被请求的包合过程被包装在一个匿名的PL\SQL块中,并发送数据请求连接服务器
- 数据库服务器在执行的过程中,并将结果以HTML的形式发送到geteway
- 网关通过web服务器响应发送并回显客户端
理解这一点非常重要:PL\SQL代码并不存在web服务器上而是存在于数据库的服务器上,这就是意味着PL\SQL网关上的任何弱点或者是PL\SQL应用程序的任何弱点,一旦被利用,攻击者可以直接访问服务器,再多的防火墙也是无法阻止。
PL/SQLweb应用的程序的url的识别:
http://www.example.com/pls/xyz
http://www.example.com/xyz/owa
http://www.example.com/plsql
例如:http://www.server.com/pls/xyz/web/user.pkg.proc
在上面的url中,xyz是访问数据库的字符或CAD。DAD是指PLSQL Gateway可以连接到数据库的信息,包含TNS连接字符串,用户id和password身份验证的方法等信息
网关的运行验证
首先是url的格式来确定web程序应用的格式,除此之外还要做简单的测试来测试PL/SQL网关的存在性
服务器的响应头(一些典型的服务器的响应头):
* oracle-application-server-10g.....
* oracle http server powered by apache....
* oracle_web_listion/版本
* ocacle_9iAS/9.0.2 oracle http sever
NULL测试
在PL/SQL中的'null'是一个完全可以接受的表达式
http://www.example.com/pls/nul #响应200
http://www.example.com/pls/nosuchproc #响应404
#表明服务器正在运行PL/SQL网关
已知包的访问
在旧版本的PL/SQL的旧版本上,可以直接访问PL/SQL web的包,如http的包和OWA的包
http://www.example.com/pls/dad/owa_uil.signature
访问数据库中的任意PL/SQL包
可能会利用数据库在默认安装的PL/SQL包的漏洞在早期的PL/SQL Gateway早期的版本之中,攻击者可以任意数据库服务器中的任意PL/SQL包,也就是owa_util包。
http://www.example.com/pls/dad/htp.print?CBUF=<script>alter('xss')</script>
oracle引入PL/SQL排除列表来防止直接访问这些危险的过程,但是排除列表不会阻止ctsysa和mdsys或者其他模式访问下的包
测试PL/SQL网关的缺陷
oracle PL/SQL遭受到了许多的缺陷,包括访问admin页面,缓冲区溢出,目录目录遍历bug,允许攻击者绕过排除列表并且继续访问和执行任意数据库的PL/SQL包
绕过PL/SQL网关:
方法1:当oracle首次引入PL/SQL排除列表防止攻击者访问的时候它可以在schema/package的名称前面加一个十六进制编码换行符或者空格或者制表符来轻松绕过
http:www.example.com/pls/dad/%20SYS.PACKGE.PROC
http:www.example.com/pls/dad/%09SYS.PACKGE.PROC
方法2:Gateway版本允许攻击者通过schema/packene名称前加一个标签来绕过排除列表。
http://www.example.com/pls/dad/<<LBL>>SYS.PACKAGE.PROC
方法3:只需要将模式包的名称放在双引号中
http://www.example.com/pls/dad/"SYS".PACKAGE.PROC
方法4:使用字符集编码,"y"字符(oxFF)可能在数据库转换为'y'
http://www.example.com/pls/dad/S%FFS.PACKAGE.PROC
http://www.example.com/pls/dad/S%AFS.PACKAGE.PROC
方法5:一些版本的PL/SQL网关允许反斜杠ox5c绕过排除列表
http://www.example.com/pls/dad/%5cSyS.PACKAGE.PROC
评估自定义PL/SQLweb应用程序
SQL注入测试
应该测试每个输入参数是否存在SQL注入。查找他们很简单,在参数中嵌入单引号并检查响应(包括符404 not found 错误)就像存在SQL注入存在,可以使用连接操作符执行。
http://www.example.com/pls/books.search?author=dickens#正常
http://www.example.com/pls/books.search?author=dick'ens#报错
http://www.example.com/pls/books.search?author=dick'||'ens#正常SQL注入测试
工具:
SQLinjector和其他的工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现