来安天之后还是接着研究这个jsunpackn,被安排写一个检测页面存活的脚本,由于对python不算特别熟,所以还是蛋疼了一小下的,吃饭时候听说在CNNVD上面提交漏洞前几,有安天,绿盟,晨星,什么360瑞星什么的反而没什么资格,顿时感觉自己牛鼻了很多,可能是这些公司是为政府工作的机会比较多,绿盟的前身也比较有趣,是绿盟军团,有兴趣的话可以看着篇文章http://www.hudong.com/wiki/%E7%BB%BF%E8%89%B2%E5%85%B5%E5%9B%A2
最后创始人goodwell的一段介绍非常有意思,顿时有一种生不逢时的感觉,什么时候才能有这么多志同道合的伙伴呀。
(本文引用GOODWELL写的绿色兵团的战友录)
Rocky:请允许我把这个人的名字放在第一位,并致以最沉痛的悼念,早期的绿色兵团核心成员,美国国防部的web site上曾留下过他为祖国的呐喊,绿色兵团早期的文章由他翻译。我依然记得四年前rocky第一次进入我的 linux ,当时他的激动和喜悦,然而今天他却永远的离开了我们,走的这么突然。我会记得你,大家会记得你,直到永远、永远,我的朋友 --Rocky。
Dspman(HeHe):绿色兵团核心成员,为人和气,讲义气,做事情大大咧咧。但是Unix基础相当过硬。
Solo:绿色兵团核心成员,美丽的solo,精通数据库,做事比较重感情,曾第一个提出SQL查询语句的严重漏洞。
LittleFish(小鱼儿):绿色兵团核心成员,要是上天再给我一次机会的话,我还是愿意和他做朋友。因为我爱他。果断的性格,冷俊的言语是一个天生的黑客。当年我曾对他说,我们要做一个中国最大的网络安全组织,鱼儿回答我说:“不!,我们要做亚洲最大的。”这句话我永远记得,我会去努力的,即使一事无成。
Blackeye:绿色兵团核心成员,是个具有商业头脑的人,曾为绿色兵团商业化做过很多的付出和努力,中国黑客走到商业化道路和这个名字分不开。
笛亚哥:是一个很老很老的朋友,也许很多人已经遗忘了这个名字,但是我一直在寻找他,曾编写当时来说比较实用的文章(绿色兵团黑客教材)。
冰人:一个人彻底的消失很难尤其是这样出名的一个人物,早期的中国黑客没有不知道这个名字的,但是他的确做到了,彻底的从网络这个世界消失了。
jianyuf:几年前是绿色兵团聊天室的常客,大家一起学习一起进步,对技术他完全不保留。
中国鹰派:绿色兵团早期成员,擅长加密破解曾参加过第一次的绿色兵团年会。为组织出谋化策是个铁杆成员现在中国鹰派发展迅速,成员分布中国各地,和他的努力分不开。
Frankie:辰光站长,说到深圳辰光无人不晓,是中国出名的一个安全站点。
Iamin:97年绿色兵团站点第一万个访客,当时他的站点和绿色兵团是两个主要的安全大站。其安全站点黑客之家也是当初最出名的站点。
袁哥:我非常敬佩的一个程序员,非常实干,热于助人,技术相当过硬,而且看程序有耐心。不管发生什么,他都是我敬佩的一个程序员。
Adam:chinaasp的安全版版主,相识很偶然,很好客和热心,就是喜欢开开小玩笑,借我的那本书不知道啥年头可以还我。
Davidchen(backend):翻译过很多技术文章,很多经典的安全文章出自他的手。
Cloudsky:清华bbs斑竹之一,写过很多好文章。
CK:一个广洲的年轻小伙子,绿色兵团成员,非常好学。
PP:一个老朋友,为中国网络安全做过很多贡献,喜欢在网络上打报不平。
ColdFace:绿色兵团分站网络力量站长,脾气比较大,但是为组织做过很多事情,纯ORG的强烈拥护者。
小榕:从乱刀到流光,用过的人都知道这个名字,他是一个专门开发安全工具的程序员。
Zer9:我非常喜欢的一个朋友,气量很大,代表作品,代理猎手高度分析等。
天行:天行软件的作者,应该不用介绍了,要是你不知道就去用一下他的软件。
LOG:绿色兵团早期成员,曾参加过第一次绿色兵团年会,话语不多,但是为人很诚恳,我一直感到欠疚,他从外地赶来开会我没有招呼好他。
雨馨:千万别以为这是个女孩,不过他的cn105没有人不知道,以前是绿色兵团的常客,技术提高很快。
LoGon(doorless):一个非常谦虚和好学的人,值得交往的朋友。
liwrml:绿色兵团分站,麒麟网络安全小组的站长,兵团铁杆支持者。
Chener:需要什么软件,需要什么地址去问他,觉得他就象活的网络词典。
大鹰:补天的得力干将,很有互助精神,你问他什么问题他总是尽量回答你。
shutgun:一个真正热爱网络安全的技术人员,不为名利,不为金钱。
WoWo:患难之中见真情,得人滴水之恩当涌泉相报。
仙剑:仙剑乐园有一大批的中国安全爱好者,是中国最大的一个电话破解站点。
Casper:是也很好的朋友,他有很cool的外型,谦虚和严谨,对技术从不保留,是个真正热爱安全的技术人员。
椰子:写过不少好文章,看事情比教成熟。
WhoamI:热心,乐于助人,只是有个坏习惯,千万别在他喝醉的时候去和他讨论技术。
**illy:中国每个安全站点的角落都能看到他的灌水贴,绿色兵团常客
weiyangsheng:绿色兵团铁杆支持者,比较低调。
BadBoy:中国红客的领袖人物,知识面教广也是兵团的支持者。
柳咏:绿色兵团的拥护者,其实他比很多人都要强,可是他总是很谦虚,说自己懂的很少,而且不太说废话,只和别人探讨技术。
小小龙女:绿色兵团的很多文章有他翻译,精通linux。
阿飞(remix):绿色兵团的成员,老说自己是垃圾,废话是挺多的,不过人不错,为兵团做了很事情。
五月玫瑰:绿色兵团的成员,虽然没有说过一句话,没见过一次面,而且几乎不看到他发言,
直到有一天他发来的信,把自己发现的微软输入法的新漏洞无私的告诉了我们,永远都会感谢他对兵团的支持。
Ghost_happy:他的桌面实在是叫人流口水,不行你去问他要一张截图看看(win2k + vm +FreeBsd)。
GoodWell: 请允许我把自己的名字写在最后,正是因为大家的努力,才会有一个美丽的光环照在我的头上,我真的、真的愿意做大家成功道路上的一颗垫脚石,一颗永远不需要闪光的垫脚石,我愿意看着你们一个一个的走向成功的道路,同时也希望不久的将来能把你的名字写上去,去为龙的传人争光。
言归正传,下面是第一版本的脚本,运行速度比较慢,主要是因为使用了,较高层次的python模块urllib2
这是关于python 网络方面的模块比较好的说明http://www.cnblogs.com/morya/archive/2011/05/12/2044904.html
它会把网站的所有内容都读取出来。
import urllib2
import os
file = open ('micropoint1000.txt')
report = open ('report.txt','w')
for line in file:
line = 'http://' + line.replace('\n','')
#print line
try:
response = urllib2.urlopen(line)
print line
report.write(line+'\n')
#os.system('echo '+line+' >>report.txt')
#os.system('python jsunpackn.py -V -u '+line+' >>report.txt')
except urllib2.URLError , e:
print '.'
except urllib2.HTTPError , e:
print '.'
except Exception , e:
print Exception,":",data
file.close()
report.close()
之后在网络上找到了这样一个版本,使用了urlparse和httplib
但是发现了几个问题一是使用urlparse不能很好的解析URL,比如port,有一些host,都不能很好的分离出来
而且他好象是根据网站域名来判断,那么比如tk这种诡异的域名就很有可能判断不出来
这是urlparse的详细介绍
http://hi.baidu.com/springemp/item/64613c7457731517d0dcb3a7
但是httplib是netlib的底层模块,所以本着越底层越快度原则,一该会比netlib要快一些。
def httpExists(url):
host, path = urlparse.urlsplit(url)[1:3]
found = 0
try:
connection = httplib.HTTPConnection(host) ## Make HTTPConnection Object
connection.request( "HEAD ", path)
responseOb = connection.getresponse() ## Grab HTTPResponse Object
if responseOb.status == 200:
found = 1
else:
print "Status %d %s : %s " % (responseOb.status, responseOb.reason, url)
except Exception, e:
print e.__class__, e, url
return found
样本中有很多重复,也很蛋疼
修改之后的版本是这样,自己拆分了url,并缩短了timeout,但是还是不够快,timeout是时间上的最大问题,尝试用多线程
timeout 为 0.1 的时候是11kb
timeout 为 1 的时候是 13kb 相差了不少,看来timeout对准确性的确是有所影响
import urllib2
import os
import urlparse
import httplib
import socket
timeout = 0.1
socket.setdefaulttimeout(timeout)
file = open ('micropoint1000.txt')
report = open ('report.txt','w')
for line in file:
url = line.replace('\n','')
host = url[:url.find('/')]
path = url[url.find('/'):]
port = 80
if (host.find(':') != -1):
port = host[host.find(':')+1:]
host = host[:host.find(':')]
print 'host:',host,'\n','path:',path,'\n','port:',port
try:
connection = httplib.HTTPConnection(host,port)
connection.request("HEAD",path)
response = connection.getresponse()
print response.status
if (response.status == 200):
report.write(url+'\n')
#os.system('echo '+line+' >>report.txt')
#os.system('python jsunpackn.py -V -u '+line+' >>report.txt')
except urllib2.URLError , e:
print '.'
except urllib2.HTTPError , e:
print '.'
except Exception , e:
print Exception,":",e
file.close()
report.close()
加了 多进程之后,果然快了很多,但也没有想象中的快,不过可以忍受了
这里的多线程,逻辑些得很弱,不过现在既是周五又快下班了,就不改了。
import urllib2
import os
import urlparse
import httplib
import socket
import threading
timeout = 1
socket.setdefaulttimeout(timeout)
file = open ('micropoint1000.txt')
report = open ('report.txt','w')
fileRows = file.readlines()
threadNum = 10
threads = []
workNum = len(fileRows)/threadNum
def ThreadWork(s,t):
for i in range(workNum):
url = fileRows[s+i].replace('\n','')
host = url[:url.find('/')]
path = url[url.find('/'):]
port = 80
if (host.find(':') != -1):
port = host[host.find(':')+1:]
host = host[:host.find(':')]
print 'host:',host,'\n','path:',path,'\n','port:',port
try:
connection = httplib.HTTPConnection(host,port)
connection.request("HEAD",path)
response = connection.getresponse()
print response.status
if (response.status == 200):
report.write(url+'\n')
#os.system('echo '+line+' >>report.txt')
#os.system('python jsunpackn.py -V -u '+line+' >>report.txt')
except urllib2.URLError , e:
print '.'
except urllib2.HTTPError , e:
print '.'
except Exception , e:
print Exception,":",e
for i in range(threadNum):
t=threading.Thread(target=ThreadWork,args=((i-1)*workNum,i*workNum))
threads.append(t)
for i in range(threadNum):
threads[i].start()
for i in range(threadNum):
threads[i].join()
file.close()
report.close()