介绍:
DVWA,全称Damn Vulnerable Web Application,是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。DVWA是randomstorm的一个开源项目。如果你更多的了解randomstorm的服务和产品你可以访问他们官方网站www.randomstorm.com(但是好像这个网站莫名其妙停了)。
DVWA共有十个模块,分别是Brute Force(暴力(破解))、Command Injection(命令行注入)、CSRF(跨站请求伪造)、File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA(不安全的验证码)、SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(Reflected)(反射型跨站脚本)、XSS(Stored)(存储型跨站脚本)。
总之,这就是一个供所有网络安全爱好者及学习者练习入侵破解的开源平台。
环境搭建:
需要PhpStudy,具体的安装步骤请参考我的博客:Sqli-labs相关环境的下载与安装,这里我们只要下载DVWA的压缩包即可,重点,解压时需要解压到PhpStudy的www文件夹中:
然后打开解压后的DVWA-master文件夹,你可以改名,也可以不改,随你开心,然后打开config文件夹,发现里面只有一个文件,叫config.inc.php.bak,复制它,就粘贴在这个文件夹下,它的名字里有复制的字样,把复制字样和.bak字样删除,这个文件夹的名字就变成了config.inc.php,此时这个文件夹下就有两个文件了(我这里因为使用过DVWA,所以里面多了一个文件,请自动忽略):
用Notepad打开config.inc.php这个文件,把password修改为root,用户名为root:
搭建完成。
全等级暴力破解:
LOW:
法一:Burp Suite暴力破解
Brute Force,即为暴力破解,我们使用Burp Suite进行遍历,快速对所有的密码进行尝试,我们提前在桌面创建文本文档,在其中把所有怀疑的密码都写进去,这就是创建字典。
我们进入火狐,在这里,点击进入DVWA,然后把模式调到Low模式:
用Notepad打开暴力破解(bruce)Low级别的php文件,查看用户名和密码,打开路径如下图:
然后在火狐中进入Bruce Force,用admin和password登录,发现登陆成功:
接下来,我们需要进行代理,浏览器设置代理模式,注意,火狐的代理默认是localhost 、 127.0.0.1 不是用代理,需要把这里的内容删除:
然后输入admin,随便输入一个密码,在Burp Suite中抓到包:
抓包得到数据:然后发送到爆破模块:
点击Load,选择我们刚开始创建的字典,点击打开:
进入Options,把Number of threads调为50:
因为要对password参数进行爆破,所以在password参数的内容两边加$:
在菜单栏点击Start Attack,开始爆破:
我们看到爆破的结果里,可以看到password的响应包长度(length)跟其他的不一样,可推测password为正确密码,手工验证登陆成功:
法二:手工注入
虽然这是爆破破解模块,但是因为网页防护等级较低,所以也可以sql注入。
用户名admin‘# ,密码随意即可登录
用户名admin ’ or ‘1’=‘1 ,密码随意即可登录:
Medium
Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义
$pass也做了MD5校验,杜绝了通过参数password进行sql注入的可能性。以上的内容我们在中级的php文件的代码中都能看到:
那么手工注入的方式当然就被过滤掉了,我们只能采取暴力破解的方式,用Burp Suite抓包,具体的操作步骤与Low等级相同,不再赘述。
High
我们查看php文件,发现增加了user_token参数,所以爆破要选择两个参数来进行:
user_token,从字面翻译也能看出来它是什么东西,用户令牌,每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。就好像皇宫禁*,人人都认识你是哪位官员或者将军,但是只有一张脸和姓名也不会让你进去,必须有皇帝临时给你提供的手谕或者圣旨才能进入。
所以显而易见,我们这里不仅要爆破密码,还需要爆破用户令牌user_token
同时,High级别的代码中,使用了stripslashes函数(去除字符串中的反斜线字符,如果有两个连续的反斜线,则只去掉一个):
除此之外,当然少不了mysql_real_escape_string对参数username、password进行过滤、转义,进一步抵御sql注入:
这一关可谓是面面俱到,每一个方面都进行了考虑,我们采用的方法,还是用Burp Suite来进行穷举,把所有可能的结果全都试一遍。
照旧抓包,此时设置两个参数 password和user_token为变量,攻击类型选择pitchfork,意思是草叉模式(Pitchfork )【它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload,举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为B和D。】:
我们接下来进入Options中,在option选项卡中将攻击线程thread设置为1,因为Recursive_Grep模式不支持多线程攻击:
然后选择Grep-Extract,意思是用于提取响应消息中的有用信息,在Grep - Extract模块中,点击Add,出现下图,在左上方Start after expression中,输入 value='即可,其他部分无需输入,点击Refetch response, 就会在下方的内容栏里出现若干内容,我们查看后,把value='后面的数字(即服务器返回的token,表示每次从响应中获取该值)选中,并且复制该值,因为待会还要另作他用,最后点击确定:
347889435050fe64b062485715246f39
最后将Redirections设置为Always:
接下来,我们就转到Payload里面。我们需要把Payload set设置为2,因为我们有两个参数需要爆破,下面的Payload type需要对两种爆破分别设置,先选择Simple list,然后在下面载入字典:
之后把Payload type调到Recursive grep,下面的Payload Options就变成了当前的Recursive grep模式了。在最下面一个文本框,把刚刚在Options中复制的那个token值复制到其中:
然后点击Start attack爆破,爆破后如下图所示,我们能够找到Length与其他的值没有重复的唯一的值,(此处为4841),说明这个密码为登陆密码:
断开代理连接,在DVWA中输入密码登录成功。
另外,除了使用工具burpsuite之外,还可以编写python脚本来实现自动化爆破:
Impossible
首先说明,我们无法通过暴力破解来爆破这个难度,Impossible级别的代码加入了可靠的防爆破机制,当检测到频繁的错误登录后,系统会将账户锁定,爆破也就无法继续,简而言之,在代码中我们可以看到对登录次数做了限定,这也最接近我们现实生活中的真实情况。
它同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令。
防止暴力破解的有效手段:
- 限制尝试次数;
- 验证码(验证码存在被技术的破解风险,仅用于增加每次尝试的成本);
- PDO技术;