安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御
写在篇头:
随着国内的互联网产业日臻成熟,软件质量的要求越来越高,对测试团队和测试工程师提出了种种新的挑战。
传统的行业现象是90%的测试工程师被堆积在基本的功能、系统、黑盒测试,但是随着软件测试整体行业的技术积累和大环境,市场对于测试工程师的要求越来越全栈化,技术的突破是测试工程师的必修课。
安全测试就是测试工程师的高阶技能之一,不过安全性测试领域水非常深,对于普通测试工程师而言可能并不容易上手。
所以笔者准备写这个系列文章,做一个安全性测试入门级攻略。文章会采用DVWA项目,就其提供的几大模块,来进行安全性测试的初探和对安全性防御措施的简析。
1. DVWA - 非常脆弱的一个网页应用
DVWA- Damn voulnerable web application(直译就是:非常脆弱的网页应用-_-!!!),是UK的一家安全性研究机构发布的一套网站系统,专门用来展示网站安全性问题和防御机制。对于我们学习web安全性相关知识是一个很好的工具。
这套web项目可以在http://www.dvwa.co.uk/官网由github下载。
DVWA的安装很简单,只要架设起本地的Tomcat+MySql服务器,将DVWA部署到相应目录即可。
部署完毕后,登录应用,可以在左侧的菜单中看到如下模块:

他们分别是Brute Force(暴力(破解))、Command Injection(命令行注入)、CSRF(跨站请求伪造)、File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA(不安全的验证码)、SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、Weak Session IDs(弱会话标识)、XSS(DOM)(文档对象模型跨站脚本)、XSS(Reflected)(反射型跨站脚本)、XSS(Stored)(存储型跨站脚本)、JavaScript。
DVWA设置有4种安全级别:Low,Medium,High,Impossible,分别对应着这个应用对于安全性攻击的防御级别。并且给出示例代码让我们了解相应攻击方式的防御机制。

今天我们来研习其中的第一种攻击方式:Brute Force暴力破解。
2. Brute Force暴力破解
Brute Force,即暴力破解,是指黑客利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻击手法之一。
现实场景中,穷举法的范围太广,通常会基于一定的策略和规则来进行穷举,比如12306曾经遭受的“撞库”攻击。
撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。由于很多用户习惯在各大网站和应用上使用同一套用户名和密码,这就意味着一旦其中某一个站点的用户隐私泄漏后,就有可能被黑客收集并用作撞库的数据。
下图是DVWA的暴力破解界面,将DVWA安全级别设为最低:

下面我们通过穷举的方式来破解这个应用的用户密码。手工输入用户名密码显然是不现实的,犹如大海捞针,所以考虑使用工具来实现。
我们使用OWASP ZAP来实现,ZAP的安装和初始设置参考:OWASP ZAP使用入门指南
设置好ZAP代理后,访问DVWA的Brute Force模块,用任意用户名密码尝试登录,即可抓到相关请求:

下面使用Fuzz功能来实现对用户名密码穷举破解:
1. 右键点击登录请求,选择Attack->Fuzz

2. 在Fuzzer界面中,选中用户名字段,点击Add进行字典添加:

3. 在添加字典界面,逐行添加(也可采用外部文件等形式)用于破解的用户名。如前文所说,用户名的穷举肯定要基于一定的规则猜测,比如曾经获取的一些用户名。

4. 对于密码字段重复上述2-3步操作,完成后点击Start Fuzzer:

5. 任务执行完毕后,对结果按返回信息大小排序,可以明显看到几条不一样的结果:

6. 手动登录发现以上账号可以登录成功,本次暴力破解完毕:

3. 防御机制
前文提到,DVWA的优点在于它提供了基于PHP的安全防御机制以供参考。
分别对比其4各安全级别的后台核心代码:
Low:
基本没有做任何防御。

Medium:
加入了SQL字符转义逻辑,避免了SQL注入攻击,但是不能防御暴力破解。

High:
加入了Token机制,每次登录页面都会随机生成Token字串,那么无脑爆破就不可能了,因为Token是完全随机的。
但是如果用更复杂的方法,每次先抓取当前页面Token值再随即进行字典式爆破,仍可以实现破解。

Impossible:
加入了账号锁定机制,数次登录失败后,账号会锁定,那么暴力破解就行不通了。可以说这是比较完善的防御机制。

4. 暴力破解测试
结合着上述讨论,我们可以总结一下安全测试的思路。
比如对于Brute Force暴力破解攻击:
渗透性测试:
第一种思路就是扮演攻击者的角色,利用已知的攻击手段尝试暴力破解。
这是一种渗透性测试的策略,需要一些专业测试工具比如文中的OWASP ZAP来支持。
代码审计:
既然我们知道了暴力破解的几个级别的防御机制,那么就可以通过代码审计的方式来确定被测应用的后台逻辑有无相应防御机制了。
安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御的更多相关文章
- 安全性测试入门 (四):Session Hijacking 用户会话劫持的攻击和防御
本篇继续对于安全性测试话题,结合DVWA进行研习. Session Hijacking用户会话劫持 1. Session和Cookies 这篇严格来说是用户会话劫持诸多情况中的一种,通过会话标识规则来 ...
- 【DVWA】Brute Force(暴力破解)通关教程
日期:2019-08-01 14:49:47 更新: 作者:Bay0net 介绍:一直以为爆破很简单,直到学习了 Burp 的宏录制和匹配关键词,才发现 burp 能这么玩... 0x01. 漏洞介绍 ...
- DVWA之Brute Force(暴力破解)
目录 Low Medium High Impossible 暴力破解是指使用穷举法,举出所有的可能的结果,然后逐一验证是否正确! Low 源代码: <?php if( isset( $_GET[ ...
- Brute Force(暴力(破解))
一.攻击模块1:Brute Force(暴力破解) 暴力破解一般指穷举法,穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况 ...
- Brute Force暴力破解
Low 服务器只是验证了参数Login是否被设置,没有任何的防爆破机制,且对参数username.password没有做任何过滤,存在明显的sql注入漏洞. 方法一:bp爆破 直接对爆破密码得到pas ...
- 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试.当 ...
- 安全性测试入门:DVWA系列研究(二):Command Injection命令行注入攻击和防御
本篇继续对于安全性测试话题,结合DVWA进行研习. Command Injection:命令注入攻击. 1. Command Injection命令注入 命令注入是通过在应用中执行宿主操作系统的命令, ...
- 安全性测试入门 (五):Insecure CAPTCHA 验证码绕过
本篇继续对于安全性测试话题,结合DVWA进行研习. Insecure Captcha不安全验证码 1. 验证码到底是怎么一回事 这个Captcha狭义而言就是谷歌提供的一种用户验证服务,全称为:Com ...
- 渗透测试入门DVWA 教程1:环境搭建
首先欢迎新萌入坑.哈哈.你可能抱着好奇心或者疑问.DVWA 是个啥? DVWA是一款渗透测试的演练系统,在圈子里是很出名的.如果你需要入门,并且找不到合适的靶机,那我就推荐你用DVWA. 我们通常将演 ...
随机推荐
- 循环神经网络(RNN)--学习笔记
一.基本概念 RNN针对的数据是时序数据.RNN它解决了前馈神经网络,无法体现数据时序关系的缺点.在RNN网络中,不仅同一个隐含层的节点可以相互连接,同时隐含层的输入不仅来源于输入层的输入还包括了上一 ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- 使用清华源替代Ubuntu源
sudo nano /etc/apt/source.list 替换为如下文本 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main ...
- (汇总)os模块以及shutil模块对文件的操作
''' # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux ...
- TCP的流量控制和拥塞处理
1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失.所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收. 利用滑动窗口机制可以 ...
- PHP内核之旅-3.变量
PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 一.弱类型语言 php是弱类型语言.一个变量可以表示任意数据类型. php强大的一 ...
- css的input文本框的 propertychange、focus、blur
1.输入框检查的需求--即时搜索--解决方案 当input的value发生变化就会发生,无论是键盘输入还是鼠标黏贴的改变都能及时监听到变化,propertychange,只要当前对象属性发生改变.(I ...
- C++的反思[转]
最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵. 咱们要有点娱乐精神,关于 C++的笑 ...
- xinetd被动服务唤醒
rsync设置: 1.打开rsync控制开关(修改文件 /etc/default/rsync)2.sudo cp /usr/share/doc/rsync/examples/rsyncd.conf / ...
- AJAX from S3 CORS fails on preflight OPTIONS with 403
解决办法: 将 <!-- Sample policy --> <CORSConfiguration> <CORSRule> <AllowedOrigin> ...