一、DVWA简介:
DVWA(Dam Volnerable WebApplication)是用PHP+MYSQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等一些常见的安全漏洞
二、渗透测试前的准备:
(1)在本地搭建PHP+MySQL+Apache环境(可以使用PHPstudy来实现)
(2)将下载好的dvwa解压缩到WWW目录下(此次渗透测试是采用PHPstudy来搭建的)
(3)每次访问DVWA前需要开启本地PHPstudy服务
(4)打开浏览器访问DVWA:
之后使用相应的用户名、密码登陆DVWA:
三、针对Brute Froce的渗透测试:
(1)测试过程中使用到的工具:WebCruiser
(2)漏洞利用原理:
打开Brute Froce页面,在页面的最下方点击View Source查看源代码如下:
可以看出此处仅仅对用户输入的用户名以及密码进行了一些过滤,转换等措施,但是没有对登陆的次数进行限制。从而导致了可以被暴力破解。
(3)漏洞利用演示:
打开WebCruiser,在URL处输入本地DVWA登陆路径,之后使用密码与用户名进行登陆操作:
在页面中选择Brute Force:
随意输入Username和Password,点击login,登陆失败:
选择工具上面的Resend选项,点击Request
选项后可以看到产生的URL,之后点击最上面的URL,可以看到刚才输入的username和password:
之后点击Bruter 选项,就看到刚刚选择的URL,同时可以选择自己的用户名和字典库来进行暴力破解:
之后得到用户名与密码:
admin password
之后使用得到的用户名、密码登陆!
附加:
可以使用burp suite进行暴力破解,其最终结果如下(过程忽略):
(4)漏洞修复建议:
可以对登陆的次数进行限制,当登陆多少次之后限制其再次登录。
添加验证码机制(白名单)
四、CommandInjection 模块:
(1)Command Injection 即命令注入攻击,是指由于web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至web应用程序中,并且利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。
(2)低等级命令注入:
在命令框当中输入IP:192.168.232.134,点击submit即可执行ping命令
查看源代码中的约束:
可知:如果是Windows系统则使用ping 命令,如果是其他系统则使用ping –c 3命令。由于&& 和“;”、“||”在众多的操作系统中都支持,所以我们可以执行多条语句指令:
接下来我们提交一个 192.168.232.134 && net user 来查看系统用户:
(3)中等级命令注入:
调节安全级别为medium:
再次输入:192.168.232.134 &&net user 来查看系统用户
发现并不可以成功!
之后我们查看验证原代码:
此处我们可以看到采用了“黑名单”的方式,将“&&”和“;”用“ 空格 ”
代替了,从而防止了使用低级别是所采用的方式,但是我们注意到它并没有把“||”过滤,所以我们照样可以构造语句来执行命令:
192.168.232.256 || net user
前面的ping 192.168.232.256一定会出错,所以就会去查看“||”后面的内容去查询,所以由此成功查到用户名!
(4)高等级别的命令注入:
调节安全级别为high:
验证过滤源代码:
可以看到此处的过滤机制较为严格,把所有的逻辑连接词全部过滤了,几乎不存在任何绕过的可能(至少现在为发现)!
(5)命令注入的防范措施:
a.尽量不要执行外部的应用程序或命令
b.使用自定义函数或者函数库实现外部应用程序或命令的功能
c.在执行system、eval等命令功能函数前,确定参数内容
d.严谨的过滤机制
五、CSRF(Cross SiteRequest Forgery,跨站请求伪造):
(1)CSRF是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下一受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如说你的名义发送邮件、消息、盗取你的账号,添加系统管理员,甚至购买商品,虚拟货币转账等等。
(2)测试流程:
将dvwa的安全级别调节为low:
转至CSRF选项下:
可知该页面为修改密码的页面,只需要输入新的密码,并确认密码即可。我们输入hello并确认。修改成功:
我们查看源代码:
可知,在low安全等级下,只要输入新密码,并且与再次输入的确认新密码一致,那么密码就修改成功了!
多以导致在不知原密码的情况下可以直接随意修改密码!
(3)安全级别为medium下的测试:
改安全级别为medium:
查看验证源代码:
此处我们可以看到存在一个
if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER['HTTP_REFERER' ] ))的验证,改$_SERVER()函数的作用就是获取服务器与环境配置信息,这段代码的目的是匹配服务器信息中的HTTP_REFERENCE地址是否存在“SERVER-NAME”由于DVWA是在本地搭建的,所以匹配改信息,如果是在其他环境搭建的可以修改头部reference请求源。
我们来提交一个看看:
修改成功!
如果不是在本地访问的,可以使用burp suite进行改包,修改reference即可!此处不再多述!
(4)安全级别为high时:
修改安全级别:
查看VIEW Source:
高等级下需要确认旧密码是否正确,没法
(5)CSRF防御:
服务端防御:验证httpReference字段、在请求地址中添加Token并验证、在http头自定义属性并验证。
用户端防御:不要轻易去点击论坛、聊天室、一些链接的图片,及时退出已经不用的账户(尤其是管理员类的)
安全设备防御:经常借助第三方专业的安全设备加强对CSRF漏洞的防御