N12 DVWA DOM型XSS

一、概念

DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用的document.baby.innerHtml等函数动态生成的Html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储性,也可能是反射型。

二、Low级别

1.代码审计
在这里插入图片描述
可以看见,在后端并没有做任何处理。

2.尝试测试
前端只有选择四个选项块进行选择,我们点击select,发现上面的链接多了?default=English字段。
这里对default字段没有做任何限制,所以我们可以试一下直接在default后面构建payload

default=<script>alert(123);</script>

在这里插入图片描述
我们发现,这里直接可以进行反射型XSS攻击。
这样,Low级别的DOM型XSS就完成了。

三、Medium级别

1.代码审计
在这里插入图片描述
这里我们可以看见,新添加了一个stripos(str1,str2)函数,该函数的功能在str1中查找str2,并返回str2第一次出现的位置。
如果有<script的出现,就将链接的参数修改为English。
所以,我们不能使用script标签来闭合js语句。我们用HTML DOM事件可以绕过该函数。

2.尝试测试
下面我们查看一下我们输入的内容拼接的位置。
首先,点击select。在返回的链接里,修改default的参数。
在这里插入图片描述
点击F12,点击左侧的小箭头,点击Ensssss。
在这里插入图片描述
我们发现了我们输入的这句话,拼接到了语句当中。
下面我们要构建标签闭合,构建payload:

default=Ensssss</option></select><img src="1" onerror="alert(123)"/>

在这里插入图片描述
我们发现,成功的返回了弹窗。这样,medium级别的DOM型XSS就完成了。

四、High级别

1.代码审计
在这里插入图片描述
这里,我们发现后端将输入的参数进行了switch筛查,如果不是这四个参数,就默认将参数设置为default=English。
这样我们就没有办法通过正常的输入语句绕过了。
但这里,我们可以通过前端和后台php对注释的理解差别,来进行绕过。
在后台php语言中,#注释是单行注释。所以,我们提交English# XXX,这段话起作用的是English。通过English绕过了switch的筛选,但php会将English# XXX这一整句全部输出到前端。而在前端,我们可以看见如下效果:
在这里插入图片描述
#注释和js语句两个分开独立成行,这样就绕过了后台switch筛选的过程。

2.尝试测试
构建payload:

default=English# <script>alert(123);</script>

在这里插入图片描述
我们发现成功返回了弹窗。这样,我们的High级别的DOM型XSS就完成了。

五、impossible级别

1.代码审计
在这里插入图片描述
我们看见,后端没有做任何处理。这是因为客户端默认过滤xss。
打开internet选项,安全,自定义级别,启用xss筛选器。浏览器大多默认启动了XSS Filter防护。这样,我们就没有办法进行XSS攻击了。

六、防御

1.过滤用户输入
2.使用htmlspecialchar()过滤
3.客户端浏览器自身启动xss Filter的xss过滤器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尐猴子君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值