【DVWA】--- 十一、DOM型XSS(XSS DOM)

XSS DOM


目录

一、low级别

二、Medium级别

三、High级别

四、Impossible级别


一、low级别

首先找可以提交XSS代码的地方
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第1张图片
看到了有一个default查询字符串, 将English替换为弹窗代码,弹窗成功
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第2张图片
代码审计
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第3张图片
这里没有做任何的保护措施可以随意输入


二、Medium级别

代码审计
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第4张图片
相关函数

  • stripos() 函数: 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
  • strpos() 函数: 查找字符串在另一字符串中第一次出现的位置(区分大小写)
  • strripos()函数: 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
  • strrpos()函数: 查找字符串在另一字符串中最后一次出现的位置(区分大小写)

这里无法使用script标签了,大小写转换也不可以,但是可以构造事件

  • ----产生一个输入框,输入任意内容之前产生弹窗
  • ----产生一个输入框,输入任意内容之后产生弹窗
  • ----产生一个输入框,当光标聚焦到输入框中产生弹窗
  • ----产生一个输入框,改变输入框中的内容产生弹窗
  • ----产生一个按钮,点击按钮,产生弹窗
  • ----一个图片标签,当它src中的路径不是一个图片时或不是一个路径时产生弹窗 (这里使用图片标签的话需要另做闭合,这里就不用图片标签了)
    【DVWA】--- 十一、DOM型XSS(XSS DOM)_第5张图片
    弹窗成功
    【DVWA】--- 十一、DOM型XSS(XSS DOM)_第6张图片

三、High级别

代码审计
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第7张图片
自己没有想到解决的办法,参考网上大佬的做法是在语言的后面加#,然后在它的后面写我们的JS代码. 因为注释部分的JS代码不会上传的到服务器,因此对注释不需要进行白名单检查, 命令:English #(English的后面要有空格)
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第8张图片
弹窗成功


四、Impossible级别

代码审计
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第9张图片
他说不需要做任何事情,保护就在客户端, 我们查看前端的代码
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第10张图片
它对从URL中的查询字符串?decode中取得的内容没有做decodeURL操作,之前的关卡都是有做的
【DVWA】--- 十一、DOM型XSS(XSS DOM)_第11张图片
这就导致了我们输入的任何参数都是经过URL编码的没有进行解码, 我们知道URL从path之后允许直接出现所有大小写字母; 数字; 半角减号; 下划句点和波浪号, 其余的符号都会被URL编码, 因此我们就无法构造JS代码了,这样就预防了XSS漏洞.

你可能感兴趣的:(dvwa)