0


DVWA——XSS注入复现

DVWA——XSS复现

一、预备知识

在对DVWA靶场漏洞复现前,先了解一下XSS漏洞的相关知识
XSS漏洞原理
攻击者利用它向网页中注入恶意的客户端脚本,使得用户在访问页面时执行这些恶意脚本,从而达到攻击的目的。这种攻击通常利用了网站未对用户输入进行充分过滤或转义的情况。
XSS的攻击方式分为三种,分别是:分别为反射型(Reflected),存储型(Stored)和DOM型。
反射型xss:只是简单地把用户输入的数据反射给浏览器,简单来说,黑客往往需要用户诱使用户点击一个恶意链接,才能攻击成功。(经后端,不经数据库)

存储型XSS:将用户输入的数据存储在服务器端。用户访问了带有xss得页面代码后,产生安全问题。(经后端和数据库)

DOM XSS:通过修改页面的DOM节点形成的XSS。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。(不经过后端,是基于文档对象模型的一种漏洞,是通过url传入参数去控制触发的)
常见的基本过滤绕过方法

  1. 空格过滤 当空格被过滤时,我们无法通过构造正常恶意的JavaScript语句来进行。我们可以使用/来代替空格,通常可以用/**/,注释符号绕过;/符号绕过;
<img/src="x"/οnerrοr=alert(1);>
  1. 引号过滤 如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号;
<imgsrc=xonerror=alert(`xss`);>

3.括号过滤
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误;

<imgsrc=xonerror="javascript:window.onerror=alert;throw1">
或 <aοnmοuseοver="javascript:window.οnerrοr=alert;throw 1>

4.关键字过滤
关键字绕过可以分为大小写绕过、双写绕过;
大小写绕过

<sCRiPt>alert(1);</sCrIpT>或
<ImGsRc=xonerRor=alert(1);>

双写绕过(此情况适应于当WAF策略对于前端输入的

<sc<script>ript>alert('xss')</script>或<imimggsrsrcc=xonerror=alert(1);>

5.闭合标签绕过

></option></select><imgsrc=x:alert(alt)οnerrοr=eval(src)alt=xss>

6.组合绕过
通过组合上述绕过方式构造较为复杂的方式

</option></select><imgsrc=x:alert(alt)οnerrοr=eval(src)alt=xss>

二、漏洞复现

2.1. XSS(DOM)复现

①low等级
在low级别中源码没有对任何限制,所以我们可以直通目标在url中直接构造出正常的绕过方式

<script>alert('hello young man');</script>

在这里插入图片描述
②medium等级
在medium等级中,防范策略升级为了限制<script字符串是否存在来判别是否为恶意的XSS攻击。所以我们在low等级中构造的就失效了。
在这里插入图片描述
我们使用img标签来进行尝试是否能进行绕过,可以看到img标签确实以及被插入但并没有在页面中显示出我们想要的结果。
在这里插入图片描述
使用F12查看源码,可以看到对应的select标签里只允许内嵌option标签,而我们使用的img标签是不能够嵌套我们构造的img标签的,所以我们需要使用闭合标签的绕过方式来实现绕过。
在这里插入图片描述
实现方式有两种

</option></select><svgonload=alert(/xss/)>
</option></select><imgsrc=xonerror=alert(`xss`);>

原理就是将option的标签绕过然后就能随意进行XSS注入了。

在这里插入图片描述
③high等级
分析源码,可以看到high等级使用了白名单过滤,只有下面属于的四个内容才会被执行。找方法绕过服务器端的处理,直接在本地运行我们构造的语句,可以通过“#”来注释掉后面的内容,因为URL栏中的“#”之后的内容不会被发送到服务器当中去,不会经过JS的过滤,只在客户端显示,可以直接与浏览器进行交互。
在这里插入图片描述
所以执行代码如下

#<script>alert('xss');</script>

在这里插入图片描述

2.2. XSS(Reflected)复现

①low等级
low等级中它没有对name的客户端输入值进行任何限制所以我们直接输入正常的XSS注入语句就可以注入成功

<script>alert('xss');</script>

在这里插入图片描述
在这里插入图片描述
②medium等级
通过代码分析medium等级是对name输入的值进行了检查,去查找php语言中关于str_replace函数的使用可以得它的函数作用是将

<sc<script>ript>alert('hello')</script>

当然也可以使用大写绕过完成XSS

<Script>alert(' hello ')</script>

在这里插入图片描述
在这里插入图片描述
③high等级
在high等级中,可以看到它使用了PHP 中的 preg_replace() 函数,通过正则表达式尝试从 $_GET[‘name’] 中移除包含

<imgsrc= 1onerror=alert(/xss/)>
<svgonload=alert(/xss/)>

在这里插入图片描述
在这里插入图片描述
④impossible等级
在impossible等级中,它不仅使用了session_token作为防止多次CSRF攻击的防御措施,还使用了htmlspecialchars函数,将输入的script、img、svg等标签直接转义为JavaScript无法读取的语言来杜绝了出现XSS攻击的可能。
在这里插入图片描述

2.3. XSS(Stored驻留型)复现

记得每次进行攻击时需要将留言板内容清空,因为如果你成功注入后会直接在服务器中存入脚本长期驻留所以我们需要清理相关环境才能查看在不同等级中真正完成注入攻击了
①low等级
老道理,分析源码。留言板XSS中它们使用mysqli_real_escape_string函数来对Name、Message变量中的特殊字符转义;除了对Name的输入进行了十个字符的限制(因为在对其进行常规的留言板输入中有字数限制,查看F12源码可以看到)没有对Name和Message进行其他任何限制,我们可以在这里进行随意的XSS注入,例如:

<script>alert('hello young man')</script>
<svgonload=alert(/xss/)>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照常理来说在low等级中没有对Name做任何限制是应该能够对其进行同样的XSS攻击的,查看别人的博客得知前端页面中返回给后端的Name的值是没有限制的,所以我们可以通过更改Name的maxlenth的值来对它进行XSS攻击实现
②medium等级
源码分析开始,可以很明显看到对于message已经做了在ReflectedXSS中对于用户输入的转义,即我们已经无法对Message模块进行XSS攻击的操作了,但是对Name仅仅限制了script的标签,因此我们依旧可以在Name中使用大写、双写、使用其他标签等方法来进行注入。
在这里插入图片描述

所以我们通过low等级中更改Name的maxlenth的值来突破前端页面对于Name输入的限制我们就可以实现它的XSS注入
在这里插入图片描述
③high等级
可以看到high等级中,对于Name的限制从str_replace函数简单限制script标签变成了通过正则表达式尝试从 $_GET[‘name’] 中移除包含 script 的任何字符串。但是它只是对script标签进行判别并没有对ima、svg等标签进行判别,所以我们就可以在修改Name输入值的基础上在Reflected的high等级中的方式对其进行XSS注入就可以实现辣。
在这里插入图片描述
④impossible等级
不用看都可以知道impossible等级应该是对Name和Message输入进行了转义处理使其不能被JavaScript识别(因为htmlspecialchars函数是对于现在主流的XSS注入攻击防御行之有效的方式之一)
在这里插入图片描述

标签: xss 前端 安全

本文转载自: https://blog.csdn.net/qq_62056583/article/details/140407481
版权归原作者 霞日 所有, 如有侵权,请联系我们删除。

“DVWA——XSS注入复现”的评论:

还没有评论