Tag:python

Tag (python)'s result:

千倍速一句话密码爆破工具awBruter

0x00 概述 大概1年前就出现了可以让一句话木马密码爆破速度提升千倍的技术,但由于遇到一句话木马的几率太小,没机会操作一番,前段时间遇到了疑似一句话木马,就参考网上两篇大神的文章(见参考资料)研究下这个技术。   0x01 原理 其原理就是apache和iis可以多参数提交,apache最多同时提交1000个参数,本人试过超过1000就报错了。而iis据说可以提交5883个参数,但本人win7下的iis7.5尝试提交3700个参数就500错误了,郁闷。那么就可以批量提交千个参数去判断哪个是一句话的密码,效率就比一个一个参数提交提高了千倍!   0x02 awBruter 根据上述原理写了这个可以千倍速爆破一句话密码的工具。 地址:https://github.com/theLSA/awBruter 效果图: python awBruter.py -h python awBruter.py -u “http://192.168.43.173/onewordshell.asp” python awBruter.py -u “http://192.168.43.173/onewordshell.aspx” -v python awBruter.py -u “http://192.168.43.173:8999/onewordshell.php” -f ../dic0.txt -v   0x03 结语 万一遇到一句话木马,尝试下千倍爆破,可能就有惊喜哦!   0x04 参考资料 https://www.t00ls.net/articles-36985.html https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=16952&fromuid=220563    

谈谈cms识别方式(附小工具)

0x00 前言 对目标渗透测试过程中,目标的cms是十分重要的信息,有了目标的cms,就可以利用相关bug进行测试,进行代码审计等。 0x01 cms识别方式 1. 网站特有文件 如/templets/default/style/dedecms.css—dedecms 2. 网站独有文件的md5 如favicon.ico,但是该文件可以被修改导致不准确。 3. 网站文件命名规则 4. 返回头的关键字 5. 网页关键字 如/data/sessions/index.html——dedecms 6. Url特征 7. Meta特征 8. Script特征 9. robots.txt 10. 网站路径特征 11. 网站静态资源 12. 爬虫网站目录信息 相对比较准确,但是可能有反爬。 13.在线网站 www.iguoli.cn/cms.php www.yunsee.cn whatweb.bugscaner.com/look/   0x01 cms识别脚本 参考了一些资料写了一个脚本,利用了网站特有文件,网站独有文件的md5,返回头关键字,网页关键字进行识别。 有5种识别模式 1. 结合式:利用json的1400+指纹进行识别[关键字+md5]。 2. 御剑式:利用御剑指纹识别的指纹进行识别[关键字] 3. 主页式:利用fofa的规则对目标主页和返回头关键字进行识别[关键字] 该模式利用了https://github.com/cuijianxiong/cmscan,感兴趣的读者可以访问该项目更新fofa规则,本人这里利用的还是老的规则。 4. 快速式:利用收集的txt进行识别[md5] 5. 急速式:利用收集的txt进行识别[特有文件] 效果图: 御剑式: 快速式: 急速式: 指纹识别关键在于指纹库,库越强壮,识别成功率越高。 本脚本完善的方向是结合多种识别方式,形成统一的规则,就不用分那么多文件了。大家有好的建议欢迎联系,共同交流学习。 项目地址:https://github.com/theLSA/cmsIdentification/   0x02 结语 改进方向:结合多种识别方式,形成统一的规则,就不用分那么多文件了。 由于时间仓促,脚本可能有Bug或不完善的地方,欢迎大家反馈或issues。   0x03 参考资料: https://masterxsec.github.io/2017/06/05/CMS识别方法/ https://landgrey.me/cms-identity-system/ seaii-blog.com/index.php/2017/01/17/16.html https://www.hzl-fj.com/49.html www.iguoli.cn/cms.php www.yunsee.cn whatweb.bugscaner.com/look/ www.freebuf.com/articles/web/129939.html www.freebuf.com/articles/2555.html https://github.com/junmoxiao/cms_identify https://github.com/AliasIO/Wappalyzer https://github.com/cuijianxiong/cmscan https://github.com/boy-hack/gwhatweb

Python 协程笔记0

0x00 啥是协程(coroutine) 用户态,共享堆,不共享栈,单线程,不需要锁机制。上下文切换比线程效率高,多用于IO密集型。IO耗时就切换到其他协程,极大提高效率,互相协作让控制权。异步IO,高并发。拥有自己的寄存器和栈,可保留状态。需要多进程配合才能运行在多核CPU上。线程越多,协程优势越明显。   0x01 为什么用协程 占用资源相对少(轻量级) 效率高(子程序切换) 不需要锁(单线程) 高性能,高并发   0x02 python中怎么用协程 Greenlet 手动切换 Gevent 自动调度,猴子补丁,greenlet模式,基于libev,底层epoll。   0x03 gevent简单用例 同步vs异步: #coding:utf-8 import gevent import random def task(number): gevent.sleep(random.randint(0,5)*0.001) #交出控制权 print(‘number %s done’ % number) def synchronous(): #同步 for i in xrange(5): task(i) def asynchronous(): #异步 c = [gevent.spawn(task, i) for i in xrange(5)] #spawn创建greenlet协程对象 gevent.joinall(c) #等待所有greenlet协程结束才退出 print(‘Synchronous:’) synchronous() print ‘—————————‘ print(‘Asynchronous:’) asynchronous() 更有用的例子: #coding:utf-8 from gevent import monkey; monkey.patch_all() #猴子补丁,把所有python原生库打上补丁变协作式 import gevent import urllib2 def getData(url): print(‘GET: %s’ % url) rsp = urllib2.urlopen(url) data = rsp.read() print(‘%d bytes received from %s.’ % (len(data), url)) gevent.joinall([ gevent.spawn(getData, ‘https://www.python.org/’), gevent.spawn(getData, ‘https://www.baidu.com/’), gevent.spawn(getData, ‘https://github.com/’), ]) 最好是需要协作的库才打补丁,避免影响其他功能,如from gevent import socket。 多线程和协程效率对比: 多线程版: #coding:utf-8 import socket import time import Queue import urllib2 import threading urls = [‘http://www.sina.com’, ‘http://www.gevent.org’, ‘https://www.python.org’,’https://www.baidu.com’,’https://github.com’,’http://www.cnblogs.cn’,’http://blog.csdn.net’] q = Queue.Queue() threads = 3 threadlist = [] tNumber = 0 for url in urls: q.put(url) def getData(): while not q.empty(): theUrl = q.get() print(‘GET: %s’ % theUrl) rsp = urllib2.urlopen(theUrl) data = rsp.read() print(‘%d bytes received from %s.’ % (len(data), theUrl)) start = time.time() for thread in range(threads): t =……

用python打造x云漏洞词云

0x00 前言 突然想做一个漏洞词云,看看哪些漏洞比较高频,如果某些厂商有漏洞公开(比如ly),也好针对性挖掘。就选x云吧(镜像站 http://wy.hxsec.com/bugs.php)。用jieba和wordcloud两个强大的第三方库,就可以轻松打造出x云漏洞词云。 github地址:https://github.com/theLSA/wooyun_wordcloud   0x01 爬取标题 直接上代码: #coding:utf-8 #Author:LSA #Description:wordcloud for wooyun #Date:20170904 import urllib import urllib2 import re import threading import Queue q0 = Queue.Queue() threads = 20 threadList = [] def gettitle(): while not q0.empty(): i = q0.get() url = ‘http://wy.hxsec.com/bugs.php?page=’ + str(i) html = urllib.urlopen(url).read() reg = re.compile(r'<li style=”width:60%;height:25px;background-color:#FFFFFF;float:left” ><a href=”.*?”>(.*?)</a>’) titleList = re.findall(reg,html) fwy = open(“wooyunBugTitle.txt”,”a”) for title in titleList: fwy.write(title+’\n’) fwy.flush() fwy.close() print ‘Page ‘ + str(i) + ‘ over!’ def main(): for page in range(1,2962): q0.put(page) for thread in range(threads): t = threading.Thread(target=gettitle) t.start() threadList.append(t) for th in threadList: th.join() print ‘***********************All pages over!**********************’ if __name__ == ‘__main__’: main() 0x02 打造词云 还是直接上代码: # coding: utf-8 import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt data = open(“wooyunBugTitle.txt”,”r”).read() cutData = jieba.cut(data, cut_all=True) word = ” “.join(cutData) cloud = WordCloud( #设置字体,不指定可能会出现中文乱码 font_path=”msyh.ttf”, #font_path=path.join(e,’xxx.ttc’), #设置背景色 background_color=’white’, #词云形状 #mask=color_mask, #允许最大词汇 max_words=2000, #最大号字体 max_font_size=40 ) wc = cloud.generate(word) wc.to_file(“wooyunwordcloud.jpg”) plt.imshow(wc) plt.axis(“off”) plt.show() 0x03 效果演示: 0x04 结语 由词云图可以看出,SQL注入依旧风光无限,其次是命令执行,继而是信息泄漏,整体看还是比较直观的。 %e4%b9%8c%e4%ba%91%e5%b7%b2%e9%80%9d%ef%bc%8c%e6%9c%aa%e8%a7%81%e5%bd%a9%e8%99%b9    

s2sniper开源分享:针对struts2漏洞的检测工具

//声明:此工具只能用于教育学习和安全检测,不得用于非法用途,此工具引发的一切非法后果皆与本人无关! 0x00 简介: 这是一款针对struts2的漏洞检测工具,目前支持检测045,046,048,并且可以继续添加,可批量,可自定义线程数。 github 地址:https://github.com/theLSA/s2sniper/ 0x01 功能描述: 1.单url检测。 2.批量url检测。 3.命令执行。 4.程序执行日志记录。 0x02 使用方法: python s2sniper.py -h 单url直接输出结果,批量的结果保存在result文件夹。 0x03 效果图: 使用帮助: 批量检测: 单url检测: 命令执行: 0x04 结语: 简单的小工具,后续会不断完善,欢迎大家反馈bug和建议!

记一次python2.7中文乱码的解决历程

0x00 前言 最近用python写个小爬虫,想回复下feeling,却被中文乱码的问题搞得寝食难安,不过经过两天的各种搜索尝试,还是解决掉了这个问题。 0x01 乱码前奏 我的环境:debian8+python2.7 那是一个风雨交加的夜晚,本人打算写个小小的爬虫,当我高兴地按下回车,控制台输出 UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position……,这好办,因为python默认是ascii编码,只有1个字节,当然无法编码中文,加上几行就ok: import sys reload(sys) sys.setdefaultencoding(‘utf-8’) 好,再来一次,冥冥之中我觉得事情不会这么顺利,果然,中文乱码隆重登场! 0x02 中文乱码 看见中文乱码,如下图: 第一感觉,稳住别乱!Python2.7中文乱码就像家常便饭,都是见过大风大浪的人了…….,控制台和写入文件夹一样的乱码,有了PHP中文乱码的经验,先看看哪里的编码没统一吧,如下: 1.python源码编码:utf-8 2.python源码的文件编码:utf-8 3.Python系统编码:utf-8(见0x01) 4.控制台编码:utf-8 5.文件系统编码:utf-8 6.爬取的json文件编码:貌似gbk 为什么说貌似呢,因为那是一个json文件,没META,但是看了下别的网页都是gbk。那应该就是这个问题了,那也好办,heroName[n].decode(‘gbk’).encode(‘utf-8’)就行咯,再运行一次,心想这下该没问题了,好的,真的没乱码了,如图: 但是输出的并不是人名啊,而是一串无意义的中文,这就奇怪了,输出了中文就证明解码应该没错了啊,那试试用gb2312解码 heroName[n].decode(‘gb2312’).encode(‘utf-8’),结果: UnicodeDecodeError: ‘gb2312’ codec can’t decode bytes in position 4-5,接着又各种decode各种encode,几乎都组合了一遍还是各种乱…… 0x03 一行解决 经过各种搜索,突然发现可以把get下来的网页再encoding,于是尝试加了这句: heroListHtml.encoding = ‘utf-8’,这下都是utf-8了,该和谐了吧,于是第n次运行,终于见到了正常的中文!从来都没觉得原来中文是这么诱人…… 0x04 结语 遇到乱码,别乱,没什么特殊的话就是编码不统一的问题了,仔细找,多搜索,应该就ok了,有时候,与其找问题原因,还不如避开问题,python2这个编码问题真是烦人啊,py3这个编码就好多了,不用decode/encode,直接中文变量都没事。最后,送神图一张 # # #             ┌─┐                  ┌─┐ #      ┌──┘ ┴───────┘ ┴──┐ #       │                                          │ #       │                ───                  │ #       │  ─┬┘                └┬─        │ #       │                                          │ #       │                 ─┴─                 │ #       │                                          │ #       └───┐                    ┌───┘ #                 │                     │ #                  │                    │ #                  │                    │ #                  │                    └──────────────┐ #                  │                                                             │ #                  │                                                             ├─┐ #                  │                                                             ┌─┘ #                  │                                                             │ #                  └─┐  ┐  ┌───────┬──┐  ┌──┘ #                       │ ─┤ ─┤                 │ ─┤ ─┤ #                       └──┴──┘             └──┴──┘ #                                      神兽保佑 ! #                                      永无乱码 ! #/

王者荣耀高清英雄大图赠送

听说xx荣耀最近很火,那不如一起……写个小爬虫玩玩,顺便找回手感。 功能说明: 爬取xx荣耀官网英雄大图,并保存到本地。 这是单线程版本,保存的地址根据自身情况修改。还写了个多线程版本,但是开5个线程就被反爬了,有空优化一下再发。 源码: #coding:utf-8 #Author:LSA #Description:crawler wzyy heros pics #Data:20170827 import requests,os,urllib2,json import sys reload(sys) sys.setdefaultencoding(‘utf-8’) heroListUrl = ‘http://pvp.qq.com/web201605/js/herolist.json’ headers = { “User-Agent”:”Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)” } def main(): print ‘Starting……’ heroListHtml = requests.get(heroListUrl,headers=headers) heroListHtml.encoding = ‘utf-8’ heroListJson = heroListHtml.json() #print heroListJson heroName = list(map(lambda x:x[‘cname’],heroListJson)) heroNumber = list(map(lambda x:x[‘ename’],heroListJson)) print ‘——–Total hero number ‘+str(len(heroNumber))+’———‘ print ‘Crawler……’ n = 0 for i in heroNumber: os.mkdir(“/lsa/Pictures/kingheropics/”+heroName[n]) os.chdir(“/lsa/Pictures/kingheropics/”+heroName[n]) print ‘===Get ‘+heroName[n]+’ pics===’ for j in range(1,16): heroUrl = “http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/%s/%s-bigskin-%s.jpg” % (str(i),str(i),str(j)) heroPic = requests.get(heroUrl,headers=headers) if heroPic.status_code == 200 or heroPic.status_code == 304: open(heroUrl.split(‘-‘)[-1],’wb’).write(heroPic.content) print ‘Got ‘+str(heroName[n])+’ pic’+’ ‘+str(j) else: break n = n + 1 print ‘=========================All over!=======================’ if __name__==’__main__’: main() 效果图: 写这个程序的时候遇到了中文乱码问题,将在下一篇文章中细细道来。  

用python实现多种http请求

0x00 主要的HTTP请求: 1. GET :从指定的服务器中获取数据。 2. POST :提交数据给指定的服务器处理。 3. HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。 4. OPTIONS:查询可以执行哪些请求,也可以利用向Web服务器发送’*’的请求来测试服务器的的性能。 5. PUT:向指定资源位置上传其最新内容。 6. MOVE:请求服务器将指定的页面移至另一个网络地址。 7. DELETE:请求服务器删除Request-URI所标识的资源。 8. TRACE:回显服务器收到的请求,主要用于测试或诊断。 9. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 10. COPY:请求服务器将指定的页面拷贝至另一个网络地址。 11. LINK:请求服务器建立链接关系。 12. UNLINK:断开链接关系。 13. LOCK(wedav):加锁。 14. UNLOCK(wedav):解锁。 0x01 python实现get,post,put,delete,options,head 请求: 利用了urllib2,requests,httplib库,其实利用其中之一便可以实现。 get请求比较简单,直接利用urllib2。 post请求由于可能需要cookie,header,data等元素,而且要看具体场合,这里就用requests简单post一下。 put请求用urllib2,实现了两遍,一个用opener一个不用opener,区别不大,实现了put文件到服务器的功能。 delete请求也实现了两遍,一个用http的client一个用urllib2,实现了删除服务器文件的功能。 options请求用httplib实现,用来获取信息(主要是allow的请求)。 head请求用httplib实现,用来获取报头信息。   0x02 源码: # -*- coding:utf-8 -*- #Author:LSA #Description:http’s get,post,put,delete,option,head methods #Date:20170804 #Version:v1.0 import urllib2 import urllib import json import httplib import requests import sys from http import client def http_get(url): rsp = urllib2.urlopen(‘http://’+url) return rsp.read() def http_post(url): data = {‘user’:’lsa’,’pwd’:’123456′} rsp = requests.post(‘http://’+url,data=data) return rsp.content def http_put(url): opener = urllib2.build_opener(urllib2.HTTPHandler) upfilepath = raw_input(‘upload file path: http://’+url+’/’) localfilepath = raw_input(‘local file path: ‘) with open(localfilepath) as f: data = f.read() rqt = urllib2.Request(‘http://’+url+’/’+upfilepath,data=data) #rqt.add_header(“Content-Type”, “image/png”) rqt.get_method = lambda:’PUT’ #rsp = urllib2.urlopen(rqt) #return rsp.read() rsp = opener.open(rqt) return rsp.read() def http_put2(url): upfilepath = raw_input(‘upload file path: http://’+url+’/’) localfilepath = raw_input(‘local file path: ‘) with open(localfilepath) as f: data = f.read() rqt = urllib2.Request(‘http://’+url+’/’+upfilepath,data=data) #rqt.add_header(“Content-Type”, “image/png”) rqt.get_method = lambda:’PUT’ rsp = urllib2.urlopen(rqt) return rsp.read() #rsp = opener.open(rqt) def http_delete(url): header……

python采集百度url

最近用python写了一个采集百度url的脚本,一个线程一次爬一个页面的全部url,使用了多线程、队列、bs4,感觉bs4挺强大。 功能描述:采集百度url,自定义页数,线程数,关键词,保存文件名 (注:此脚本使用线程数小于或等于页面数即可,由于使用了队列,即使线程数大于页面数效果也和等于页面数一样) 源代码: #coding: utf-8 import requests,re,threading,time from bs4 import BeautifulSoup as bs from Queue import Queue from argparse import ArgumentParser arg = ArgumentParser(description=’baidu_url_collection’) arg.add_argument(‘keyword’,help=’inurl:.asp?id=1′) arg.add_argument(‘-p’, ‘–page’, help=’page count’, dest=’pagecount’, type=int) arg.add_argument(‘-t’, ‘–thread’, help=’the thread_count’, dest=’thread_count’, type=int, default=10) arg.add_argument(‘-o’, ‘–outfile’, help=’the file save result’, dest=’outfile’, default=’result.txt’) result = arg.parse_args() headers = {‘User-Agent’:’Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)’} class Bd_url(threading.Thread): def __init__(self, que): threading.Thread.__init__(self) self._que = que def run(self): while not self._que.empty(): URL = self._que.get() try: self.bd_url_collect(URL) except Exception,e: print e pass def bd_url_collect(self, url): r = requests.get(url, headers=headers, timeout=5) soup = bs(r.content, ‘lxml’, from_encoding=’utf-8′) bqs = soup.find_all(name=’a’, attrs={‘data-click’:re.compile(r’.’), ‘class’:None}) for bq in bqs: r = requests.get(bq[‘href’], headers=headers, timeout=5) if r.status_code == 200: print r.url with open(result.outfile, ‘a’) as f: f.write(r.url + ‘\n’) def main(): thread = [] thread_count = result.thread_count que = Queue() for i in range(0,(result.pagecount)): que.put(‘https://www.baidu.com/s?wd=’ + result.keyword + ‘&pn=’ + str(i)) for i in range(thread_count): thread.append(Bd_url(que)) for i in thread: i.start() for i in thread: i.join() if __name__ == ‘__main__’: start = time.clock()……

python爬取代理脚本

最近写了一个爬取代理的python脚本,参考了一下别人的代码,有了大量代理就方便了,这是v1.0版本,采用了多线程(一页用一个线程爬代理),顺便熟悉一下队列和bs4,感觉bs4的确很强大而且方便很多。还有很多地方不是很完善,日后有空会继续完善这个脚本。 功能描述:爬取www.xicidaili.com的代理,并去1212.ip138.com/ic.asp验证代理的可用性,最后把可用代理写入useful_proxies.txt文件。 代码: #coding:utf-8 import requests from bs4 import BeautifulSoup as bs import re import Queue import threading import time import optparse url = ‘http://www.xicidaili.com/nn/’ headers = {‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko’} class Proxy_collection(threading.Thread): #继承Thread实现多线程 def __init__(self, que): threading.Thread.__init__(self) #重用父类Thread的__init__() self._que = que def run(self): while not self._que.empty(): url = self._que.get() r = requests.get(url, headers=headers, timeout=5) soup = bs(r.content, ‘lxml’, from_encoding=’utf-8′) bqs = soup.find_all(name=’tr’, attrs={‘class’:re.compile(r’|[^odd]’)}) for bq in bqs: us = bq.find_all(name=’td’) try: self.proxies_confirm(str(us[5].string), str(us[1].string), str(us[2].string)) #取协议:ip:端口去验证 except Exception,e: #print e pass def proxies_confirm(self, type_self, ip, port): ip_dic = {} ip_dic[type_self.lower()] = ip + ‘:’ + port r = requests.get(‘http://1212.ip138.com/ic.asp’, headers=headers, proxies=ip_dic, timeout=5) result = re.findall(r’\d+\.\d+\.\d+\.\d+’, r.content) result_ip = ”.join(result) #转为字符串 if ip == result_ip: print type_self + ‘—‘ + ip + ‘:’ + port + ‘ is useful!!!\n’ with open(‘useful_proxies.txt’, ‘a’) as f: f.write(type_self.lower() + ‘—‘ + ip + ‘:’ + port + ‘\n’) if __name__ == ‘__main__’: thread = [] que =……