💁🏻♂️《今日头条》 2020-11-16 《从玩转靶机DVWA看程序设计安全》 童建平
前言
靶机,在军事领域意指作为射击训练目标的一种军用飞行器。类似地,在网络安全行业,靶机,也称靶场,泛指作为渗透测试用途的一种软件或系统。常见的渗透测试靶机系统有DVWA、Metasploitable、mutillidaemutillidae、SQLol、hackxor、BodgeIt、Exploit KB、WackoPicko、OWASP Hackademic、WebGoat、XSSeducation、Web for Pentester、Lazysysadmin等等,举不胜举。DVWA就是其中最著名、最基础的靶场。
关于DVWA
DVWA,全称Dam Vulnerable Web Application,是著名的OWASP开源的一个在线web安全教学平台,基于PHP+Mysql编写,用于常规WEB漏洞教学及检测WEB脆弱性,包含暴力破解、命令执行、CSRF、文件包含、SQL注入、XSS、盲注等常见的一些安全漏洞,并且分Low、Medium、High、Impossible四种不同的安全等级,等级越高难度也越大,同时每一个漏洞可以直接在页面选择查看源码进行源码对比加以学习。
安装配置DVWA
DVWA是推荐新手首选靶场,配置简单,可运行在LAMP(Linux+Apache+Mysql+Php)之类的环境中,也可以运行在Windows系统中,只要您有个支持php+mysql的环境即可。这种环境的配置方法,网络上文章多如牛毛,这里就不赘述了。下面小编为您讲述如何在Centos 7.x下安装配置DVWA。
下载源码
首先,我们需要到DVWA官方Github地址下载源码:
官方于2个月前的9月13日发布了最新版本2.01,也可以直接通过下面地址下载源码包:
安装配置
- 将下载的压缩包保存到本地后,通过rz命令(如果找不到此命令,请运行yum –y install lrzsz安装)将其上传到您的服务器上。解压后,会生成子目录DVWA-2.0.1,需要将该子目录下的所有文件移至您的站点根目录下。假设您的站点根目录是/opt/allsite/domain.com/wwwroot,则解压后目录结构如下图:
- 进入上图中config目录,重命名配置文件:
|
|
修改其中$_DVWA数组各项值,如将$_DVWA[ ‘db_server’ ]、$_DVWA[ ‘db_database’ ]、$_DVWA[ ‘db_user’ ]、$_DVWA[ ‘db_password’ ]的值更改为您的数据库地址、数据库名、数据库用户名、数据库密码对应的值。如下图:
- 如果您的php配置文件/etc/php.ini中没有开启允许allow_url_include,需要开启之,否则安装过程中会提示:
|
|
下面是修改后正确的配置:
如果变更了php配置,记得用systemctl reload httpd等命令重启下apache服务!
- 还有一个坑需要事先修改配置以避免,否则您可能在安装过程中遇到如下错误:
|
|
这是有关谷歌验证码的功能,解决方法很简单,修改前面第2步骤中的配置文件config.inc.php,将其中$_DVWA[ ‘recaptcha_public_key’ ]和$_DVWA[ ‘recaptcha_private_key’ ]的值改为如下即可:
|
|
如下图:
- 假设您的网站域名是www.domain.com,此时即可访问http://www.domain.com/setup.php 进行初始化数据库,如下图:
只要在Status in red一行前面的检测项都是绿色的,就可以下拉页面,点击下图的Create / Reset Database按钮就行初始化数据。否则,请根据红色错误提示进行修改相关配置解决。
这个setup.php页面,可以在任何时候,您需要时进行访问,进行重新初始化操作,方便重新测试使用。 - 成功初始化数据库后,即完成安装。系统自动跳转到登录页面http://www.domain.com/login.php ,如下图:
- 此时输入默认的用户名admin,密码password,即可成功登录DVWA,如下图:
DVWA演练
上面已经完成了DVWA的安装,下面我们可以开始愉快的学习之旅了,让我们来看看如何在DVWA中进行渗透攻防演练。
安全级别
本文开头介绍了DVWA分4种安全模式,安装完成后默认配置是最高级别的Impossible安全模式,为方便我们学习渗透测试,需要修改等级为最低级别Low:
登录DVWA后,点击左边菜单"DVWA Security",在如下图中的下拉菜单中选择Low并点击Submit按钮提交,即可完成配置:
Brute Force(暴力破解)
然后我们点击左边菜单"Brute Force(暴力破解)",如下图:
我们在用户名和密码框中输入随意的字符,将提示用户名或密码不正确,如下图:
此时,我们可以在该页面右下角点击"View Surce(查看源代码)“按钮,查看此页面的源代码,这是DVWA很有用的一个功能,方便我们边查询源码边学习如何渗透测试,如下图:
如图所示,代码中的SQL语句为:
|
|
如上图,我们输入的用户名是gdfgdsf,密码是fgsdgsdfg,则此SQL查询语句向数据库提交查询:
|
|
由于数据库中不存在此用户名,自然通过不了,提示用户名或密码错误。
那如果我们用户名改为输入:
|
|
即admin后面加个英文单引号再加双连字符(–)再加1个空格,如下图:
是不是见证奇迹的时刻发生了?我们成功绕过了程序设置,系统提示我们登录成功,而我们连密码都输入为空的。
我们来看看当输入上面用户名时,SQL语句变成了什么?SQL语句就变成:
|
|
为什么这个语句能绕过验证呢?这是因为双连字符(–)在SQL中通常具有特别的含义,它起到注释作用,表示其后面的语句属于注释,应被忽略不予执行。于是上面的语句等价于执行了:
|
|
数据库正好存在有名称为admin的用户,于是攻击者就能绕过成功登录系统了。
类似如上,构建含有特殊字符的用户名,还可以结合使用union等语句进行攻击,是很有用的技巧。
启示录
限于时间和篇幅,上面只是简单介绍下DVWA的暴力破解模块,仅为其冰山一角,更多功能有待您去发现和体验,本文仅为抛砖引玉。从上面的源代码可看出,写出那样的代码是程序新手经常犯的错误,对SQL语句中引用的变量等缺乏应有的过滤操作,引发了安全风险。
那如何提高程序安全设计呢?其实DVWA也隐藏了给我们提高程序安全设计的技巧。我们将DVWA Security安全级别改为Medium,然后再返回菜单"Brute Force(暴力破解)",点击查看源代码,将看到如下图所示:
由上可见,DVWA提供了使用mysqli_real_escape_string和md5函数对用户输入值进行相关转换操作,某种程度上提升了安全性。但道高一尺,魔高一丈,这点小把戏还是对付不了中级黑客的。
接着,我们将DVWA Security安全级别改为High,然后同样再返回菜单"Brute Force(暴力破解)",点击查看源代码,将看到如下图所示:
怎么样,代码是不是更进化了?还对session进行了认证。然并卵,在高级黑客面前这点改进估计还是相形见拙,还是会被攻破。您自己可以再更改安全等级,再看DVWA新的代码安全改进。从中,您可以学到很多程序安全设计技巧。
所以,DVWA不仅仅是一款供渗透测试人员进行演练的靶场,也是广大"程序猿"学习提高的榜样。希望您能喜欢这套系统。
好了,本期教程先到这里,希望能给您带来帮助。小编一字字码字好累,一张张截图好苦,如果您喜欢,请记得帮忙点赞、收藏、转发,并点击关注小编,不胜感激!您的肯定将是小编前进的动力!本文由"世说鹰语"原创,欢迎关注,带您一起涨知识!