0x01 DVWA简介
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 1.9的代码分为四种安全级别:Low,Medium,High,Impossible。初学者可以通过比较四种级别的代码,接触到一些PHP代码审计的内容。
0x02 DVWA的搭建方法
DVWA的搭建方法很简单请大家自行参考Freebuf上的这篇文章《新手指南:手把手教你如何搭建自己的渗透测试环境。
0x03 Brute Force
Brute Force及暴力破解,就是利用字典对账号密码进行穷举,进而猜出用户的口令,是比较常见的一种攻击手法。
下面就对Brute Force两个等级的PHP代码进行解析,高级的部分由于我python太菜了,这里会参考fb上的文章,当然是发个链接出来,因为没有得到原作者的允许,不敢转载。
0x04 LOW
这个是安全级别最低的一个等级,其服务端核心代码如下:
这个代码简单,只是对Login进行了简单的校验即用php的isset函数判断Login参数是否被设置,没有任何的防爆破机制,而且从它的SQL语句的编写可以看出该登陆点存在注入,可以通过构造特定的SQL语句绕过他的验证机制。下面是具体的方法:
Burpsuite爆破
Burpsuite是一款很好的渗透测试工具,当初听学长说,他搞渗透一般只用两个工具即Burp和SQLMAP,而老子渗透都是一咕噜工具一快上的,也许这就是大牛的世界吧。下面是具体步骤。
1.1burp抓包
1.2 使用Burp的Intruder模块,即在Proxy模块处Ctrl+I,接着是设置攻击参数,如下图所示。
这里我们把攻击参数设置为password,接着是设置Payload即加载字典
1.3设置payload
点击Intruder模块中的Payloads功能,在这里加载我们的密码字典,然后点击左上角的Intruder,在选取Start Attack启动攻击
1.3攻击过程和结果
点击Start Attack之后,Burp就会开始对密码进行爆破,接下来我们只需要找Lenth中与众不同的那个就可以得到他的正确口令了。
SQL注入绕过
Low代码中的sql语句构造是这样的:
而他的判断语句是这样的:
讲一下上面的代码吧,首先先通过mysqli_query执行SQL语句,返回一个资源标识符,如果查询执行不正确则返回 FALSE。接着通过判断语句判断查询的结果是否正确,即输入的账号密码是否正确与返回的结果是否只有一行。
讲完了代码,知道了原理,我们构造绕过的SQL语句就很容易了,首先,我们只要让$query中的SQL语句在查询执行的时候返回True就行了,这里我们只要在$user中闭合单引号,然后使用mysql注释符号注释掉掉后面 AND password语句就可了,在利用mysql的LIMIT 限制他的查询输出,综上所述,我们构造的语句如下:
CC' OR 1=1 LIMIT 0,1#
使用效果如下:
成功绕过。
0x05 总结
上面写的都是总结,本来想把low和medium两个等级都写完了,然后刚写完这个发现自己头晕了,歇会先。今晚或者明天再更。