DB Listener Testing (OWASP-CM-002) 数据库监听器测试
数据库的监听器是一个网络守护进程。它等待从远程客户端发起的连接请求。这个守护进程可以受到影响,从而影响到数据库的可用性。
对于一个 Oracle 数据库来说,数据监听器就是一个远程连接的接入点。它侦听连接请求,并做出相应处理。如果测试人员可以访问这个服务,这个测试是可能的。测试应该从内联网工作(主要甲骨文不公开此服务的外部网络)。该侦听器默认情况下侦听端口 1521 。改变此端口为另一个任意端口号是很好的做法。如果这个监听进程关闭,那么远程访问数据库是不可能的。所以,如果一个数据库服务器的应用程序失败,可能造成 DDOS 攻击。
Black Box testing and example 黑盒测试
Upon discovering the port on which the listener resides, one can assess the listener by running a tool developed by Integrigy: 通过这个工具,我们可以发现监听进程驻留的端口。
The tool above checks the following:
这个工具可以查看以下内容:
监听器密码。在许多 Oracle 系统,监听密码可能无法设置。该工具验证这一点。如果密码未设置,攻击者就可以设置密码,并劫持了监听器,虽然该密码可以通过本地编辑 listener.ora 文件删除。
启用日志记录。以上工具还能测试出是否已启用日志记录工具。如果没有,没人会发现对监听器的任何改变。此外,对监听器的暴力攻击将不会被审计。
管理限制。如果管理的限制没有启用,可以使用远程“设置”命令。
如果你发现一个服务器上开放了 TCP 的 1521 端口,可能在该服务器上运行了一个监听器。如果这个监听器没有被认证机制保护,或者你能很容易获得凭据,那么通过渗透枚举 Oracle 服务是可能的。使用 LSNRCTL ,可以获得下述信息。
TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Production
TNS for 32-bit Windows: Version 9.2.0.4.0 - Production
Oracle Bequeath NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production
Windows NT Named Pipes NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production,,
SID(s): SERVICE_NAME = CONFDATA
SID(s): INSTANCE_NAME = CONFDATA
SID(s): SERVICE_NAME = CONFDATAPDB
SID(s): INSTANCE_NAME = CONFDATA
SID(s): SERVICE_NAME = CONFORGANIZ
SID(s): INSTANCE_NAME = CONFORGANIZ
The Oracle Listener permits to enumerate default users on Oracle Server:
Oracle 监听器允许枚举在 Oracle 数据库上的默认用户
User name Password
OUTLN OUTLN
DBSNMP DBSNMP
BACKUP BACKUP
MONITOR MONITOR
PDB CHANGE_ON_INSTALL
在这种情况下,我们还没有建立特权 DBA 帐户,但使用 OUTLN 和 BACKUP 帐户有一个基本权限:执行任何程序。这意味着它可以执行所有程序,例如如下:
exec dbms_repcat_admin.grant_admin_any_schema('BACKUP');
The execution of this command permits one to obtain DBA privileges. Now the user can interact directly with the DB and execute, for example:
该命令运行以获得 DBA 权限。现在用户能够直接同 DB 交互,并执行。
select * from session_privs ;
The output is the following screenshot:
现在用户能够执行很多命令,比如删除任何一个表。
一些默认端口的列表
1521: Default port for the TNS Listener.
1522 – 1540: Commonly used ports for the TNS Listener
1575: Default port for the Oracle Names Server
1630: Default port for the Oracle Connection Manager – client connections
1830: Default port for the Oracle Connection Manager – admin connections
2481: Default port for Oracle JServer/Java VM listener
2482: Default port for Oracle JServer/Java VM listener using SSL
2483: New port for the TNS Listener
2484: New port for the TNS Listener using SSL
Gray Box testing and example 灰盒测试
Testing for restriction of the privileges of the listener 测试监听器的权限和限 制
给予监听器最少的权限,使其不能在服务器内存地址空间或数据库中读、写文件。
文件 listener.ora 用于定义数据库侦听器属性。应该检查下列行在 listener.ora 文件中的存在
Listener password: 监听密码
许多常见的攻击能够执行是由于监听器不设置密码。通过检查 listener.ora 文件,我们可以判断密码设置:
不能手动编辑 Listener.ora 文件来设置密码,如下所示来设置密码。
这样设置的问题是,密码通过明文来存储,访问 Listener.ora 的任何人都能读取。一个更为安全的方式是使用 LSNRCTRL 工具,调用 change_password 命令。
LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 24-FEB-2004 11:27:55
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> set current_listener listener
Current Listener is listener
LSNRCTL> change_password
Old password:
New password:
Re-enter new password:
Connecting to <ADDRESS>
Password changed for listener
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to <ADDRESS>
Saved LISTENER configuration parameters.
Listener Parameter File D:/oracle/ora90/network/admin/listener.ora
Old Parameter File D:/oracle/ora90/network/admin/listener.bak
The command completed successfully
LSNRCTL>
工具:
Tools
§ TNS Listener tool (Perl) - http://www.jammed.com/%7Ejwa/hacks/security/tnscmd/tnscmd-doc.html
§ Toad for Oracle - http://www.quest.com/toad