DVWA通关教程

brute force

首先我们看到第一关,这一关其实讲的是万能密码的使用,我们可以看到他的代码

766770e3a2374a8b91f29442d6cfe1a6.png

我们看到第12行,他的语句是select * from 'user' where user = '$user' AND password='$pass';

然后我们将我们刚刚输入的账号和密码放到这个语句中看看

Select * from 'user' where user = admin' and 1=1# AND password=' ';

7c2bcec981164b2b929f9b2a29131be8.png

在PHP中#相当于是注释的符号,也就是说#号后面的语句已经被注释掉了,我们现在密码那一行中不管输入什么东西都可以登录成功。这其实也是万能密码的用法。

然后我们在来讲一下关于逻辑运算符的一些知识点吧。

and和or这两个是我们在万能密码中常用的两个逻辑运算符。

 

and表示:如果两个表达式都为真,则返回true。

or表示:如果任意一个表达式为真,则返回ture。

 

我们现在将难度调到medium,然后我们在分析一下源代码。

42eb396c853445cc9e31093472e81cb3.png

我们看到mysqli_real_escape_string这个函数,这个函数在username和password中都用来一次,他的作用是用来预防sql注入的,他将MySQL中的特殊字符都进行了转义,以此方法来达到预防sql注入的功能。

 

其实按正常的逻辑来讲的话,更具这一章的名字,暴力破解,我们其实可以是使用burpsuite中的爆破米快进行密码爆破。理论存在,实践开始。

bp抓包因该不用太过于的细讲了,配置一下代理,然后开始抓包

2e4af864e74949d9a407c4264c5fbd89.png

然后我们发送到爆破模块,配置一下爆破字典,然后开始爆破。

d27fa973f14f427080811ce2b984afd2.png

得到密码,然后我们就可以登录成功。

abf67d0f46164b2485bb315797a95bae.png

command injection

这一章是关于命令注入的知识点,源代码是这样的:

c2053a94cb8e445984770e1f613b5055.png

我们看到问题,题目要求我们输入ip

fb36692760184560a3d59567f3b6133f.png

 

7eb5b5e76a0b47518da2ca0effd45fba.png

发现出现了类似于cmd里面的一些东西,虽然是乱码,但是可以看出是ping通了,然后我们就可以开始构造payload的了:

127.0.0.1 | whoami 查看一下权限,发现现在是管理员权限。

51a914e9f464403a840d841580bf959c.png

 

我们切换到medium,查看一下源代码,发现存在过滤

9a475955634f4b39b74462af83142e99.png

 

但是并没有过滤| 所以我们还是可以进行命令注入的。

构造payload:

127.0.0.1|whoami

 

我们看到high:

查看一下源代码,发现过滤了很多的一些符号。

0e4cd6d4219f43d9a080946ebc77d42c.png

 

但是如果我们细看的话,|的后面有一个空格号,所以我们其实也是可以利用命令注入的,所以我们可以这样构造payload:

127.0.0.1|whoami

然后可以发现系统当前的权限:

cb21d4bba616462292e01133e1fd71c5.png

file inclusion

这一章是讲的文件包含漏洞的,这个漏洞如果处理的不好,可能会造成隐私文件泄露。

但是这个漏洞的前提是要打开allow_url_fopen和allow_url_include。

我们看到靶场页面。

将等级切换到low,然后我们查看一下页面的源代码:

b76afaeda6914c5ab6b8433a01a69e3d.png

发现没有进行过滤,我们只需要传入参数就可以了。

 

43a7904bf1f247f69e4853289bccd6b4.png

 

我们打开这三个文件,看看里面有什么内容

eb75213b157d4bc2b339e11a66df6535.png

 

8cabf60688c7497aa9dfc6ba6949b3aa.png

 

3d8e26c02b8e4688b26efa1b15d1ec58.png

 

发现没有什么重要的东西,我们将url中的参数更改一下,比如我们查看一下他的/etc/passwd文件。

80977c36fba84570a17701dda278e22f.png

 

出现了报错,但是他也把他的路径给显示出来了,我们切换到靶机,在靶机的www目录创建一个muma.php文件,但是我们要构造的是相对路径而不是绝对路径,因为在比赛的靶场中,一般是将相对路径爆出来,不会爆绝对路径,然后我们就需要使用../来构造相对路径,“..”是退回到上一个目录

011c2970f4da4883b3b64a574113e2f7.png

发现查看到了,因为没有进行过滤,所以我们可以查看任何的东西

3e6aa0837ad449908556972a4bcda7bb.png

 

我们在切换到medium

5a83c867a16245a39e9ba7c6ba90747b.png

 

我们可以看见他将../,..\,http://,https://都转换为了空字符。

我们在尝试使用../../来读取一下我们的php.ini文件

1ee588bd16f74525a1b1b43bfe95f277.png

 

发现读取失败。然后我们尝试双写http://来进行绕过

800cd3c38c2e44db9217d4ab0a1243a0.png

 

发现可以得到,然后我们在尝试读一下我们的木马文件

f177eb0ff76a477998affe66d8270527.png

 

读取成功

 

难度切换到high:

2982bc37219d4e02bdb6728deba4bfcd.png

我们发现也是存在过滤的,我们看到if那一条代码,意思是这样的,如果说我们查看的文件没有file或者include.php这两个字符串就会报错。

我们可以这样绕过,因为我们读取的是php.ini这个配置文件,所以我们可以在page的后面加上file://字段,他也是可以的取到文件的

0e07a57f7a7e445b9f1d7a61c0d72962.png

所以我们就可以这样构造payload。

file upload

本章讲的是文件上传漏洞,老规矩,先看源代码:

74f11782dd6e44339b98cb31cad68c95.png

貌似没有过滤,我们也许是可以直接上传一个php文件给他,然后在通过菜刀来获得他的权限,因为他直接把他文件的位置都给爆出来了。

然后我们在看到medium,查看一下他的源代码。

2ad0979257514d50b03570f9b2c16b5d.png

我们看到$uploaded_type这里,这里应该是一个过滤,只允许我们上传jpeg和png这两种类型的文件,很明显是白名单绕过。

然后我们看到这个题目,更具源代码,我们其实可以上传一个图片码,首先是写一个一句话木马,然后在随便找一张图片,在cmd中使用copy 图片/b+木马  生成的图片名字。

构造完之后我们就可以上传了

a2322b19157b4619b6336018fc81b73c.png

因为他是没有太难的过滤的,所以我们可以直接上传一个图片码。

然后我们在将难度设置到high,其实high和上一题是一样的思路,就是上传图片码,然后用菜刀连接。

8fe6db5e6308427d822ef30e52e5cb34.png

他的源码也只是对后缀做了一些处理。

如果想对文件上传漏洞更加熟悉的同学,建议去学习一下upload-master这个靶场,里面全是文件上传的漏洞,基本上常见的都在这里面。

sql injection

这一章我们来到了最习惯也是最熟悉的sql注入。

危害:

1.造成用户的信息泄露。

2.可以对数据库的数据进行增加或删除操作

3.如果网站目录存在写入权限,可以写入网页木马

4.经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。

09aed2ccd74644a19d7cba8d58460c84.png

没有对我们输入的sql语句做什么过滤,那如果我们按照正常的思路,看看是否可以渗透进去。

首先我们先判断一下他有没有注入,最简单的,在我们传参的后面加上一个',看看会不会报错

2062ecb18c9e443da8f965f82f61546f.png

发现报错,说明存在注入,然后我们在看看他的字段长度,使用order by

1' and 1=1 order by 2#

通过尝试,我们发现他的字段长度是2,如果我们将2改为3的话就会引起报错。

bd57fc1c331149a4934d8e1dfa30a5dc.png

 

f2c450163ffd4750870a005f06aaafa9.png

 

既然我们现在已经发现他存在两个字段长度,然后我们来查看他两个字段的回显。

我们使用1' and 1=1 union select 1,2#

2a5ed17187be42c2a261d2b3974b64b7.png

我们得到回显,然后我们将1的位置更改为database()。

c8f3549a1f81494792ccc58571a013be.png

我们得到他的数据库为dvwa,然后我们开始进行爆表。

1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

d4e21253b7f849819dc03af0bc236e52.png

我们发现他有guestbook,users这几个表,然后我们来爆破一下表中的字段。

然后我们在进行爆破字段:

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

802d3ca7397c40be947b4467523e4c3d.png

 

现在知道了字段,我们发现有user,password这几个数据,我们查看一些内容

93f6e7a8b70144d9bc83cd1ee57d1e9d.png

 

得到账号和密码,其中这些密码需要进行md5解密,就不一一去搞了。

然后我们把难度切换到medlium,查看一下他的源代码。

6233764cd480425eb5f99e3ce5e76526.png

 

然后在看到题目,发现是POST传参。

我们的思路是这样的,使用BP抓包,然后进行渗透。我们首先先打开代理,然后我们使用bp抓到的数据包是

48b39957c87c4d90a3abf66e96d4ff53.png

发现id参数,然后我们发送到repeater中,在id=1的后面加一个单引号,看看有没有报错,发现报错。

42728485ecf544d690597deba74d81e4.png

然后我们将order by 的参数改为2,发现可以

684c20685f24436b84ea742a18d4b9a7.png

 

然后后面就和刚刚的思路差不读,开始爆破数据库。

11f75be49c834ba9974425b26d3417d4.png

 

我们得到数据库为dvwa,随后我们就可以爆出他的表

08a673787d4b4659885c3321951b5cd2.png

 

19b3cab877504416bf53dadc4708a650.png

 

发现有guestbook,users两个表,然后是开始爆破字段。

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

 

08c63b3d8f80481dbdec26e7fcea9290.png

 

我们发现报错了,这个报错是因为单引号被转义了,变成了\'

所以我们要将表名字的user更改为16进制

7573657273  然后我们加上0x,因为0x是16进制的标识符

082ff6e75da7449888b9037ef8aad309.png

 

得到了他的字段,现在只需要将他的解出来就可以了

f3336bbaba2049c790b39d2061557370.png

 

3566ba507db14d06b8928ffc2964c059.png

然后我们切换到high,查看一下他的源代码,我们发现了他在sql语句后面添加了一个limit 1,这个语句是这样的,他只会显示一行,以此来防止多条数据的显示,我的思路是将后面的limit 1 给注释掉,用一个#因该就可以了

由于前面的打法和low一样。但是这个难度也挺特殊的

首先打开靶场

a1947b692ba24410b366e2ad12044d88.png

这个是题目,更具要求,我们点击这个链接,我们会来到一个新的地方

7b8ed7a962a34a8f8939dd9e559edd84.png

我们尝试输入一个1,看看有没有什么反应。

发现这个页面没有什么特殊的变化,但是刚刚那个页面出现了回显

d6d67e30d60a42238b77a916403a5870.png

 

然后我们更具原来的注入方法进行注入,由于之前已经写过了,所以我们直接跳一下

a830d692fe094a3e872aa7765859102e.png

 

然后我们得到了他的表,开始爆字段

c877bf844df04b2bb1e32376646b6a11.png

 

可能有人会疑惑为什么我要在#号的前面加一个;  是这样的,我们看到源代码

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

因为我们要过滤掉limit 1 ,所以我们要用注释符将limit 1 注释掉,但是我们发现在limit 1;"的后面还有一个;  但是他被注释掉了,所以如果我们不加;的话,则这个sql语句就是不完整的。

这也就是我们加;的原因。

查看字段的数据

c91a42ca9a3c48aa9382238cd7938251.png

以上就是关于SQL注入的教程

DOM型XSS

dom型xss差不多是这样的:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。

反射型呢属于是:交互的数据不存在数据库中,一般都是一次性的。

然后我们看到题目:

4884014920b647dba915de8022411909.png

 

emmmm,送分了,直接在url那里更改一下?default=English,我们将English更改为xss的脚本

<script>alert("XSS)</script>

然后enter,就可以看到我们的js脚本运行成功。

df4a86a627b1465faed8afa685a3cd6a.png

然后我们将难度跳到medium,在看源代码,发现他这次有过滤了

72d6385a98a3423180197714b7b20705.png

 

分析代码,如果我们的参数中存在<script就会被过滤掉,xss绕过的方法有这几种:

1.抓包,修改前端代码绕过

2.有一些过滤可能没有那么完整,我们也许可以使用大小写不一样来绕过

3.还有就是双写绕过,比如说<scriscriptpt>alert("xss")</scriscriptpt>这种写法来绕过他的拦截。

4.标签的使用也是可以绕过xss的,html中的a标签的href属性用于指向超链接目标的URL,包含了片段识别

符和JavaScript代码段。也就是说,如果用户用了<a>标签中的内容,浏览器会尝试检索显示href属性指定的url所表示的文档,或者执行JavaScript表达式,方法和函数。所以我们可以这样来构造payload

<a href="javascript:οnclick=alert(1)" >test</a>

<a href=javascript:alert(1)>test</a>test</a>

5.还有就是src属性,<img src=1 οnerrοr=alert(1)>    <iframe src="javascript:alert(1)">

6.利用事件绕过,<iframe οnlοad=alert(1)>

 

然后我们尝试将English修改为一段xss代码。

7866292294504c098d49c8af2d5cc5a4.png

 

然后我们enter,发现没有js弹窗,然后我们打开F12,看了一下,发现我们刚刚的那段代码被放进了

我们发现我们的xss语句被包含在了<options>标签中

fae16373ef3e4f65838a99a7bd6de2c3.png

 

然后我们可以通过闭合<option来完成绕过。

0ef4efbdae0f4e2b80dc2e93e190d389.png

 

我们切换到high 我们查看一下源代码

c01837f52f664490af5d61b1b7e15fa0.png

我们发现是白名单绕过,也就是说,url只允许红字的那几个参数,我们可以尝试使用#,因为url不会将#后面的东西发送给服务器,我们可以使用这个思想进行绕过。

首先我们先随便发送一个数据

f82010a0514b4256b83f1d30b00ae511.png

然后我们尝试绕过,在English后面添加#</option></select><body οnlοad=alert("XSS")>

3a4b36ed8f1d4eb9a06c037b8eb6b3e8.png

然后我们发现绕过成功。

这里提一下<body onload>这个标签,这个是在页面加载完成后立刻触发。

语法:

Onload=javascriptcode

反射型XSS

对于这道题来说,我们xss的打法一直都是先看源代码,其实我是想从medium开始讲的,因为这个靶场中的每一个xss的low等级都是一样的,没有什么难度。如果这里有low看不懂的同学,你可以看看上一篇的DOM型xss是怎么写的。这里我们low就不讲了直接跳到medium。

首先我们先看到medium的代码

8400072934474c35b825dda66397a81c.png

emmm,他将<script>给过滤掉了,这里的思路和上一篇dom型是一样的,我们使用<img src=1 οnerrοr=alert("XSS")>

就是不使用<script>标签。

ad8a9df24d294e089e83bb274a7c72be.png

然后我们在看到high吧。

先看源代码

8bc4e61cc013445e91fe828840a2bf9a.png

他是将<script>这个标签给过滤掉了,所以我们可以使用<img标签进行绕过

payload也是我们一直用的

<img src=1 οnerrοr=alert("XSS")>

b46faf58f6024224bb99b43f5022b2cb.png

储存型XSS

这个因该是储存型xss,因为这种类型的xss一般存在的地方就是评论区和其他的地方,也是最容易用来抓取cookie的一种类型的xss。

我们先看到低等级,看看源码:

3141755e6e4442c292c5f5216e903014.png

 

这里其实没有过滤的语句存在,我们可以直接使用xss

91aa1306841d4e6cbc5bd8fcd3b74ddb.png

 

但是他是储存型xss,也就是说我们每访问一次,就会执行一次xss。

储存型XSS也是经常用户使用cookie脚本的一个漏洞。

然后我们切换到medium,查看一下源代码:

4b6a4822804642419b90d98d0127b3c5.png

在str_replace的地方我们发现了过滤,也就是说我们又要绕过他这个对script的检测 ,但是如果我们仔细看的话就会发现在massage那里是有一个\进行转义了,所以我们要跟换我们渗透的思路,我们要在name那里进行渗透,但是name有字数的限制,我们还要在F12中将前端代码给稍稍更改一下才能进行xss攻击。

62f97983537f4eadaec7e04b9ee01523.png

然后我们在将难度切换到high,分析他的代码

068c4b8c33274f8886259332bbdf4260.png

 

我们发现他和medium的思路是差不多的,过滤掉了<script>和对message使用了\进行了转义。

我们可以像medium一样的打法,使用<img标签进行绕过攻击

961d6f53286e4014ab2bd5177e7821b4.png

 

以上是我做DVWA靶场的一些思路和总结,本人刚学习网络安全,可能上面的文章存在一些问题或者写法是错误的,请各位大佬看出来了告诉我,我一定会改正的。勿喷 。谢谢阅读。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值