网络知识 娱乐 DVWA全级别通关教程

DVWA全级别通关教程

首先选择难度,我们从low开始,如上图所示进行修改 

目录

SQL手工注入

过程:

low

Medium

high

Impossible 

 SQL 盲注

过程:

SQL 工具注入

工具安装过程:

过程: 

low

Medium

High:

暴力破解

过程:

Low

Medium

High

Impossible

命令注入

过程:

Low

Medium

High:

Impossible

文件上传

过程:

Low

Medium

High

Impossible

XSS漏洞

过程:

Low(反射型)

Medium

High 

Impossible

Low(存储型)

Medium

High

Impossible

Low(DOM型)

High

Impossible

文件包含漏洞

过程:

Low

Medium

High

Impossible

CSRF漏洞

过程:

Low

Medium

High

Impossible

 


SQL手工注入

解释(来自百度):SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。

过程:

low

首先在表单中输入1,如上图正常结果显示

输入2如上图正常显示 

查看源代码可知这一关对于表单输入ID没有进行任何过滤 

 

注入点判断,如上图可知受到单引号闭合影响 

为了方便我们直接把SQL语句中后续语句全部注释掉不执行,在判断语句后加#或者--+即可,全部注释掉就可以不用考虑单双引号闭合的问题

语句1’ or 1=1#可以查出所有ID内容(为什么,可以自己学习逻辑语句的知识) 

找出注入点以及符号问题,然后判断字段(就是正常查询时可以显示用户的几条信息),通过1’ and 1=1 order by 1# 

1’ and 1=1 order by 2# 

1’ and 1=1 order by 3#//如果2是正确的的,3返回错误那么就有2个字段,2即为分界点

找出字段之后(找字段的作用是为了后续报错,看会有几个位置可以报错)

之后结合union联合查询(union的知识学习SQL语句相关知识) 

有两种语句1’ union select 1,2#   -1’ union select 1,2#(至于有什么区别,个人参照上图,只是页面更简洁,目前我也是小白在我目前的学习进度看来这两条语句在后续操作上没有任何区别,可能会有没有被我发现吧,能记住那个用哪个)

走到这一步就可以进行内容信息查询了

把查询语句中2的位置换成你要查询到内容,那么在返回结果上就在你替换掉的数字的位置上即可显示该信息。

顺序首先是数据库名,表名,列名,之后是具体信息(如上图以及下图,如果自己还想查别的信息,可以再去搜索相关的资料)

语句是-1’ union select 1,table_name from information_schema.tables where table_schema=’dvwa’#(dvwa是根据上一个图查出来的数据库名字)

也可以用group_concat把表名拼接起来 -1’ union select 1, group_concat(table_name) from information_schema.tables where table_schema=’dvwa’#

知识点:1.在MYSQL5.0以上版本中存在自带数据库information_schema,他是一个存储所有数据库名,表明,列名的数据库,相当于可以通过查询此库获得相应信息。(没有的话只能靠猜,暴力破解)

2.符号“.”代表下一级: Information_schema.tables:

Information_schema.columns:

查完表名,查列名,语句是-1’ union select  1, group_concat(column_names) from information_schema.columns where table_name=’users’# 

查完列名就可以查自己想查的东西了。

语句是:-1’ union select group_concat(user_id,first_name),group_concat(user,password) from users#

上图就是数据库表中信息了,密码是通过MD5加密,在网上搜索MD5解密工具线上解密就可以了。

一个简单的SQL手工注入就完成了

Medium

下面增加丢丢难度

首先是修改关卡

修改好了之后再次点开SQL注入,有人可能会出现如下图所示的错误(这个有人就是本人,但有的人很幸运没有,别怕,这都是小问题,只是因为你的PHP版本不对,那么怎么修改呢,我没有截图简单告诉你,打开PHPstudy你自然就会,修改完成后就可以打开了) 

正确的界面如下图所示 点开之后是不是吓到了,跟上一关不一样了不是提交表单了,那么我们的注入点怎么找,别慌,这时候就需要那个很牛的工具burpsuite,至于安装什么的,我的一个笔记里写过,你也可以找其他大佬写的文章来解决你的问题,安装完成后,就需要把burp和DVWA连接起来,首先你需要往浏览器导入一个东西(是你运行DVWA的浏览器),然后你需要打开burp,导入证书,设置代理很多东西,这些都设置完成以后很多人如果用127.0.0.1或者localhost这个地址登录的可能会出现依旧抓不到包的情况(因为我就是)这个时候就需要你把地址改成你自己的IP地址(莫?有人会不知道IP地址怎么查吗,那就是网络基础没学好,乖乖去找度娘吧)一切准备就绪,burp成功抓包

数据包中的内容想必大家也不陌生了,如果看不懂那么请你去认真学习HTTP,在数据包中会找到我们提交的ID,这里的ID的位置就是我们可以利用的注入位置,之后的步骤就跟上面一模一样,以下就是简单的演示。 

有人会在这一步可能会遇到这个问题,那么查看源代码会发现了一个转移函数,这个经典的函数想必大家略有耳闻,那么采用十六进制等绕过,把需要用到单双引号的词,用十六进制(在网上查)

 

 

 

 

 以上,就是中级SQL手工注入的全部步骤。

high

学到这儿了,相比对注入语句已经很熟悉了,那么我们开始下一关。

同之前一样,修改,进入。

跳转界面,在另一个界面输入注入语句。 

我们同样能查到内容,查看源代码会发现有limit限制只能输出一条,我们在这里用#注释掉后续内容,那么这一关的意义到底何在,主要是为了防止SQLmap注入,至于SQLmap的使用后续再说明。

Impossible 

分析源代码

可以看到,Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,同时只有返回的查询结果数量为一时,才会成功输出,这样就有效预防了“脱裤”,Anti-CSRFtoken机制的加入了进一步提高了安全性。

参考内容:新手指南:DVWA-1.9全级别教程之SQL Injection - linuxsec - 博客园

 SQL 盲注

与一般注入的区别是,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知,因此盲注的难度要比一般注入高,目前网络上现存的SQL注入漏洞大多是SQL盲注。

基于布尔的盲注(怎么方便的理解这个概念呢,就是他只会告诉你是或不是,比如你猜版本是什么他只会告诉你是或不是这个版本),基于时间的盲注以及基于报错的盲注,在此只演示前两个。

过程:

(过程怎么说呢,只说明一下思路因为主要是猜,然后具体名字就是无数遍的二分法等算法猜)

一开始的步骤肯定驾轻就熟,直接开讲。思路上面已经很清楚了,那么首先先确定是字符型还是数字型注入。

如果不明白怎么去判断请参考:https://blog.csdn.net/qq_44798520/article/details/122453649

从上面看即使添加错误的逻辑语句仍然是正确的返回,那么开始猜解字符型。(至于怎么猜,把引号一个位置一个位置的放,总能猜出来)

 

以上就可以确定它是字符型。

确定完注入类型,就要开始猜解数据库名字

语句是1’ and length(database())=1#   

1’ and length(database())=2#   

1’ and length(database())=3#   

1’ and length(database())=4#  可以知道数据库名的长度是4,之前我们知道数据库名字是“dvwa”,所以长度是4(不要问为什么我知道,因为手工注入那一关就知道了,这里只是验证一下)

知道了长度,就得准备猜名字了,最麻烦的部分来了。

语句:1’ and ascii(substr(database(),1,1)>97#

那么上面这个句子什么意思,就是为了猜数据库名字,ASCII码想必大家都不陌生,不清楚的同学可以去查度娘,一句一句试。好了剩下的步骤想必大家也都明白了,盲注就是靠试。

上面讲述的是基于布尔的盲注,接下来简单说一下基于时间的盲注(同样是小白,造诣也不高)

结果不会延迟,说明不是数字型 

结果延迟五秒说明是字符型

接下来几个难度跟之前都是一样的,在此就不再说明(因为是真的懒,要猜的话得很久)

后面利用工具,没错就是著名的sqlmap工具给大家进行说明。

SQL 工具注入

工具安装过程:

接下来只给大家说过程,至于概念什么的直接百度吧。

没错接下来就是给大家介绍著名的注入工具sqlmap

首先,就开始安装这个工具

sqlmap使用python2编写的工具,所以大家先去官网下载python2 Welcome to Python.org

然后下载sqlmap 官网地址sqlmap: automatic SQL injection and database takeover tool

 

在此要注意,sqlmap要下载到python下面

 

下载完成,开始配置环境变量。首先要看清楚自己的安装地址。

此电脑->属性->高级系统设置->环境变量->Path

 

 

 

在Path里面添加如下两条语句。确定之后,至此全部配置完成,打开命令窗口,输入python查看信息

出现如图所示,证明你的安装没有问题。然后查看sqlmap的安装是否成功,首先语句进入sqlmap底下,如下图所示。

然后输入python sqlmap.py --version查看sqlmap的安装情况(在此提醒一下大家直接输入python就行,不用添加版本号,因为一开始我就是后面添加了版本号结果一直不对,我也不知道为什么查了好久,才解决了这个问题,当然本身没有这个问题最好),如下图所示,证明sqlmap安装成功。在此就可以开始利用工具进行注入,后面我们依然利用DVWA之前那个手工注入那一关作为实验环境。

过程: 

sqlmap相关命令的概念直接查百度,在这里直接引用

low

跟之前一样该打开什么打开什么,进入low

输入1之后,打开burpsuite抓包,或者直接打开浏览器开发者工具查看数据包情况。

 

 

抓包之后,输入python sqlmap.py -u “(url地址)”如图所示 

 

但最后出现了302重定向会返回登录页面,证明这个页面需要cookie,那么我们接下来就复制数据包中的cookie

 

在后面用 --cookie” ” 

输入成功之后,会出现下图所示

他会问你很多东西,可以直接在上面的语句后面再加一个 --batch默认回答,直接显示结果。

 

在上面这个图上面我们可以看到注入点的相关信息。

 

继续添加我们想知道的信息,比如可以查看数据库相关信息,添加语句--dbs(如上图所示,查看所有数据库名称)

 

继续添加--current-db即可查看该数据库名称(如上图所示)

 

继续添加命令 -D dvwa --tables(列出dvwa数据库中全部表名)

 

修改命令-D dvwa -T users --columns(如上图所示,列出user表中字段信息)

 

修改命令-D dvwa -T users -C user,password,user_id --dump(一般数据库中的信息都会加密,这个命令可以直接显示解密后的情况,并且会自动保存到本地)

 

结果如上图所示,显然已经达到了我们的目的。

Medium

接下来进入下一个级别

抓包结果如上图所示

之前手动注入,我们可以直接在这个里面添加语句进行注入,那么这块该怎么办呢。

我们把数据包复制,创建成一个文件,记住,记住,记住,千万记住(重要的事情说好几遍)一定要把这个文件放在sqlmap下面,不要问我为什么,因为新建文件的原理就是让工具读取文件,你已经进入sqlmap里面了,所以为了方便你当然得把文件建在sqlmap里面啊。

 

输入语句python.py -r 1.txt --batch(-r 就是读文件)

 

结果如上图所示,那么之后的步骤就跟之前一样一样的了。

High:

第三关跟之前的主要区别在于,是跨页面,同样抓包

抓包之后该怎么办呢,当然是把两个页面连接起来,输入命令-second-url“”后面这个地址是第一个页面的地址(前面的文件记得改成新抓的包)。

 

之后的命令也是跟之前是一样的。 

最后的结果如上图所示,在这里给大家说一下那个详细用户信息解密后自动下载到本地,上图打个地址根据自己的地址查找,是一个excel文件。

 

上面就是全部工具注入的步骤,大功告成。

暴力破解

什么是暴力破解(来自百度)暴力破解或称为穷举法,是一种针对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试10000次就能找到正确的密码。理论上利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。有些人运用计算机来增加效率,有些人辅以字典来缩小密码组合的范围

过程:

Low

在表单内,随便填上东西,然后抓包,如上图所示。

 

然后发送到intruder。

 

需要哪个,选中哪个。

 

 

 

这个字典里面就是一些经常可能用到的弱口令(这个字典仅针对于这个关卡)

导入字典以后,对于数据很多的,我们可以考虑增加进程,如下图所示,把进程修改为10。

 

然后开始攻击。

如图我们可以看到攻击完成,那么怎么确定哪一个是正确的用户名密码,纵观全局我们会发现有一个特殊的长度数字,没错就是这个,那么在此我们便找出了我们所需要的东西,发送验证一下。

 

如上图所示,这一步骤全部完成。

至于attack type是什么个意思,接下来告诉你。

Attack type:攻击模式设置

Sniper:对变量一次进行破解,多个标记依次进行。(俗话简单来说就是,用户名和密码用的是一套字典,破解的时候也只是导入一个字典,但是它会根据先破解用户名,破解出来以后急需破解密码这样的顺序,对于简单的用户名密码字典数目少的可以考虑)

Battering ram:对变量同时进行破解,多个标记同时进行。(这个也是只有一个字典但区别是,可以同时进行,就是先破解用户名破解完了继续破解密码,相比遇上一个速度更快)

Pitchfork:每一个变量标记对应一个字典,取每个字典的对应项。(这个意思就是,每个变量一个字典,破解的时候每个字典的一号对应另一个字典的一号进行破解,这样破解对于那些一一对应的用户名密码来说速度很快,但很明显我们没办法准确的定位用户名和密码,显然不适用于每个情况)

Cluster bomb:每个变量对应一个字典,并且进行交际破解,尝试各种组合,适合于用户名加密码破解。(这种情况就是普罗大众很容易明白理解的情况就是多个字典进行笛卡尔积,依次破解,这种就会有多种组合,时间上也是一个问题,当然对于需要用时很长的,我们可以添加进程,用来适量缩短时间)

选择好攻击模式之后,开始导入字典,burp本身会携带字典,但更多的时候是利用我们自己找的字典进行爆破。

Medium

中级跟low级别基本一致,分析源代码我们发现medium采用了符号转义,一定程度上防止了sql注入,采用暴力破解也可以完成,在此不过多描述。

High

这一关与之前的区别主要在于token

(解释来自于百度) Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

接下来我们开始闯关,首先进行抓包。

   

抓包之后,发送到intruder.

在这里我们要爆破的内容是密码和token,选中,设置攻击模式。

线程设置为一

 

在grep-extract中点击add,选择refetch response

记住token的值简单来说就是复制,后面要用。

 

然后开始设置负载,对于第一个参数就是密码,我们采用字典爆破,导入字典。(如上图)

第二个参数是token如下图进行设置,在payload option中粘贴token的值

全部设置完成,开始进行爆破。如下图所示,找出不同数字即为最终结果。

 

在render中测试结果,表示爆破成功,进入,至此完成。

Impossible

  分析源代码

 可以看到,impossible级别在 high 的基础上对用户的登录次数有所限制,当用户登录失败达到3次,将会锁住账号15秒,同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这里因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令。

参考内容:DVWA通过教程之暴力破解Brute Force_红烧兔纸的博客-CSDN博客

命令注入

什么是命令注入:

命令注入就是在需要输入数据的地方输入了恶意代码,而且系统并没有对其进行过滤或者其他处理导致恶意代码也被执行,最终导致数据泄露或者正常数据被破坏。

常用到的命令:(总结来说就是系统操作命令DOS命令都可以在此执行试试)

ipconfig,net user(查看系统用户),dir(查看当前目录),find(查找包含指定字符的行),whoami(查看系统当前有效用户名)A&B(简单的拼接,AB之间无制约关系),A&&B(A执行成功才会执行B),A|B(A的输出作为B的输入),A||B(A执行失败,然后才会执行B)

过程:

Low

首先跟往常一样把要打开的打开。

输入127.0.0.1进行测试,类似于ping命令。

哦莫,出现了乱码,这个时候不要慌,该吃吃该喝喝遇事别往心里搁,听我下面给你说。

找到DVWA中如上所对应的文件,打开,然后把编码形式进行修改,意思就是把utf-8改为gb2312,方便一点直接编辑,替换,记住utf-8是小写,不然找不出来。

改完记得保存,然后再次输入进行测试。

 

OK,看上图,乱码解决了。

接下来继续下一步,输入自己想知道的信息的命令,试一下子。

 

查ip(如上图) 查用户(如上),结果在下图。

查看系统信息

 

结果如下图所示 

查看目录

 

 

结果如上图,OK以上就是一些简单的命令注入,接下来进入下一关,看看有啥不一样的吧。

Medium

首先修改难度,分析源代码

我们发现在这一关进行了一些简单的转义,但是我们在一开始不是告诉大家那么多语句,可以一个一个试一试,总会有办法的。

分析源代码,我们发现对&&进行了转义,那么在这块这个符号就不能再用了。哎!没有双引号我们有单引号啊。(简单来说就是用一个符号把命令连起来就行了,那多试试不就可以了吗,要记住黑名单总是有办法的) 

另一种办法,我们可以采用;把两个&符号分开,这样不也能绕过吗,看下面。 

medium只是简单的对一些符号进行了转义。

High:

首先打开源代码分析,哦呦,这么多符号被转移了怎么办,别急别慌。

就像我上面说过的,总会有办法的,上面的被转义的符号你真的看清楚了吗,哪些之间有空格,哪些没有你确定自己看清楚了吗,我这不,又找出了问题,好了,剩下的自己去试试吧。

Impossible

最后一关了,每每到这一关是不是心情大好,因为这一关就是告诉你怎么防御这些漏洞的。

查看源代码我们发现了问题,是什么呢,没错IP地址被限制了,就是只能输入IP地址那样的格式,不能再加入东西了,同时也设置了token,至于token是什么,就劳烦大家去百度吧,因为我说出来的也是在网上找的,去找找自己更容易理解的解释吧。

至此,关于命令注入的就全部结束了,DVWA上面确实很简单,各位大佬们可以试试别的实验环境。

文件上传

什么是文件上传漏洞:

大部分的网站和应用都有上传功能,如用户头像上传,图片,logo,文档等。一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者像某个可通过web访问的目录上传任意php文件,并能够将这些文件传递给php解释器,就可以在远程服务器上执行任意php脚本。

当系统存在文件上传漏洞同时攻击者可以将病毒,木马,webshell,其他恶意脚本或者是包含了脚本的图片上传到服务器