Python2-Oracle爆破

做渗透的时候遇到Oracle端口对外开放,用python编写脚本去自动爆破,爆破成功就是拿下数据库。

环境搭建

Oracle安装

去Oracle官网下载Oracle Database 11g,下载地址。我这边下载Windows版本进行安装,两个文件都要下载,下载完成之后全部选中解压。
下载.png
解压之后,运行setup.exe。取消【我希望通过My Oracle Support接受安全更新】勾选,点下一步。
Oracle安装1.png
会跳出一个提示,直接点击【是】即可。
Oracle安装2.png
选择【创建和配置数据库】。
Oracle安装3.png
由于我们用来做测试,所以选择【桌面类】即可。
Oracle安装4.png
接下来对数据库进行配置,我这边将全局数据库名设置为Brute,管理口令设置成BruteTest,别的保持默认即可。
Oracle安装5.png
如果管理口令不符合Oracle建议的标准,会有一个提示,直接点击【是】即可。
Oracle安装6.png
接下来程序就会进行检查,待检查完成会出现一个概要。
Oracle安装7.png
点击完成,开始安装。
Oracle安装8.png
安装完成之后,点击【口令管理】对用户口令进行修改。
Oracle安装9.png
对sys、system两个用户设置新口令。
Oracle安装10.png
如果口令不满足复杂性策略,会有一个提示,直接点击【是】即可。
Oracle安装11.png
最后Oracle数据库安装成功。
Oracle安装12.png

Oracle配置

安装完成之后,在所有程序菜单中找到Oracle,打开【Database Control - Brute】。
Oracle配置1.png
使用sys用户、SYSDBA身份登录。
Oracle配置2.png

表空间

点击【服务器】→【表空间】。
Oracle配置3.png
点击【创建】。
Oracle配置4.png
输入名称,点击【添加】。
Oracle配置5.png
输入文件名,点击【继续】。
Oracle配置6.png
点击【确定】,建立表空间。
Oracle配置7.png

用户

点击【服务器】→【用户】。
Oracle配置8.png
点击【创建】。
Oracle配置9.png
输入名称、口令,点击【确定】。由于只是用于爆破,所以这里就不设置【角色】、【权限】等。
Oracle配置10.png

端口对外开放

对listener.ora、tnsnames.ora文件进行修改,文件路径类似:\app\Administrator\product\11.2.0\dbhome_2\NETWORK\ADMIN\,根据安装时所选的目录自行寻找。将两个文件里的localhost修改成计算机名。
Oracle配置11.png
重启【OracleDBConsoleBrute】、【OracleOraDb11g_home1TNSListener】服务。
Oracle配置12.png
可以使用其他电脑成功连接。
登录成功.png

脚本编写

Python27有一个库支持对Oracle进行操作,cx_Oracle,使用pip安装即可。

1
pip install cx_Oracle

安装好之后,需要安装Oracle的client,不同系统安装的方式也不同,具体可以参考官方文档。client安装完成之后,使用cx_Oracle尝试连接。
python连接.png
信息错误情况的各种错误信息。
报错信息.png

终端输出

爆破时,信息有很多。如果不对样式进行设置,导致不能快速找到有效信息。因此,需要对终端输出设置样式。有一个外部库colorama支持输出时的样式设置,通过pip安装即可.

1
pip install colorama

安装完成之后,需要先调用init进行初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
# --coding=utf-8--

## 参照表
## Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
## Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
## Style: DIM, NORMAL, BRIGHT, RESET_ALL

from colorama import init, Fore, Style, Back

init(autoreset=True)
print Fore.GREEN + u'字体颜色设置'
print Style.DIM + u'字体样式设置'
print Back.GREEN + u'背景颜色设置'

print效果图.png

异步设置

使用gevent进行爆破,当爆破量很大的时候,会导致内存飙高。因此,设置了阀值。

1
2
3
4
5
6
7
8
9
10
11
while True:
if not blasting.empty():
if len(self.threads) < 5000:
self.threads.append(gevent.spawn(self._test, blasting.get()))
else:
gevent.joinall(self.threads)
self.threads = []
else:
if len(self.threads) > 0:
gevent.joinall(self.threads)
break

总结

在编写Oracle爆破脚本的时候,大部分的问题由环境搭建、配置引起。

  1. Oracle安装完成之后,数据库是不对外开放需要修改配置文件,配置文件localhost修改成计算机名,当服务器IP修改时,其他计算机还是可以连接。修改成ip时,服务器IP修改时,需要修改配置文件中的ip;
  2. Oracle端口不对外开放,确认配置文件修改正确的情况下,【OracleDBConsoleBrute】、【OracleOraDb11g_home1TNSListener】服务需要重启,网上说只需要重启TNS服务即可,但是测试时,发现两个服务都需要重启;
  3. Python终端彩字输出可以使用\033[显示方式;前景色;背景色m + 结尾部分:\033[0m,但Windows下失败,Linux下没去尝试;
  4. 使用colorama需要先初始化init(autoreset=True)。

完整代码

完整代码已经上传到我的GiHub。如果有兴趣,不妨移步到Github上一观!**Code**。