DVWA靶场实战(十)

五、XSS(DOM):

1.漏洞原理:

  XSS全称为Cross Site Scripting,由于和层叠样式表(Cascading Style Sheets,CSS)重名,所以为了区别别叫做XSS。主要基于JavaScript语言进行恶意攻击,因为JS非常灵活操作html、css、浏览器。

2.漏洞分类:

(1)反射型:

  非持久型XSS,最容易出现的XSS漏洞。在用户请求某个URL地址的时候,会携带一部分数据。当客户端进行访问某个链接时,攻击者可以将恶意代码注入到URL,如果服务器未对URL携带的参数做判断和过滤,直接返回响应页面,那么XSS攻击代码就会被一起传输到用户的浏览器,触发反射型XSS。

(2)存储型:

  被保存到服务器上,显示到HTML页面中,经常出现在用户评论的页面,攻击者将XSS代码保存到数据库中,当用户在此访问这个页面时,就会触发并执行XSS代码,窃取用户的敏感信息。

(3)DOM型:

  DOM全称为Document Object Model即文档对象模型,是W3C制定的标准接口规范,是一种处理HTML和XML文件的标准API。DOM提供了对整个文档的访问模型,将文档作为一个树形结构。

  而DOM型的XSS是一种基于文档对象模型(DOM)的一种漏洞。这种XSS与反射型XSS、存储型XSS有着本质的区别,它的攻击代码不需要服务器解析响应,触发XSS依靠浏览器的DOM解析,客户端的JavaScript脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器获取数据并执行。

3.漏洞危害:

(1)窃取cookie:

  大部分人喜欢将密码存储到浏览器中,所以当黑客一般渗透的时候就会先来浏览器查看已保存的cookie来盗取各种用户账号。

(2)未授权操作:

  JS特性很强大,黑客会直接代替用户在html进行各类操作。比如劫持会话、刷广告,执行弹窗广告,还能记录用户的键盘输入。

(3)传播蠕虫病毒

4.利用方式:

  利用网页开发时web应用程序对用户输入过滤不足导致将恶意代码注入到网页中,使用户浏览器加载并执行恶意代码,通常是JavaScript解析器,浏览器不会判断代码是否恶意,只要符合语法规则就可以直接解析。

5.防御措施:

(1)输入过滤:

  有时候需要多次过滤,比如黑客使用双写的时候就需要多次过滤,需要注意多个过滤器的先后次序,当多个过滤器一起生效的时,有可能后进行的过滤导致前面的过滤失效。

(2)纯前端渲染:

  在纯前端渲染中,我们会明确告诉浏览器,下面要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等等。浏览器不会被轻易的被欺骗,执行预期外的代码。

(3)转义HTML:

  如果拼接HTML是必要的,就需要采用合适的转义库,对HTML模板各处插入点进行充分的转义。

(4)标签和属性基于白名单过滤:

  对于副文件编辑器来说,其产物本身就是HTML代码,所以没办法简单粗暴使用转义来处理,应该要对内容中的标签和属性,基于白名单进行过滤。

6.实战:

(1)Low:

  代码分析:

<?php

# No protections, anything goes

?>

  我们这里看见完全没设防,所以我们可以随意尝试一些基本的攻击语句。

  我们开始攻击,利用弹窗输出语句alert(),来进行尝试。

  首先点击发现URL中只有English这里可以进行攻击,我们尝试语句“http://192.168.1.22:81/dvwa/vulnerabilities/xss_d/?default=<script>alert(“test”)</script>”弹出发现成功。

(2)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;
}
} ?>

  这次代码将“<script”过滤了,当匹配到<script字符串的时候就会将URL后面的参数修正为?Default=English,在这里可以通过oneerror事件装载文档或图像的过程中如果发生了错误就会触发。

  所以我们使用另外一个方式“/?default=English</option></select><img src=x onerror=alert(1)>”,可以发现成功。

(3)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进行检查,可以使用&连接另一个自定义变量来绕过。

  我们同样开始攻击,利用语句“/?default=English&<script>alert(“test”)</script>”进行攻击,得到以下界面,我们可以发现攻击成功。

(4)Impossible:

  代码分析:

<?php

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

?>

  交由客户端处理即可。

DVWA靶场实战(十)——XSS(DOM)的更多相关文章

  1. XSS DOM 测试

    dvwa DOM XSS DOM Based XSS:是基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM节点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的 ...

  2. 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)

    在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...

  3. DVWA XSS (DOM) 通关教程

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

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

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

  5. DVWA靶场之XSS(Stored)通关

    Low: <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxMessage ...

  6. DVWA靶场之XSS(Reflected)通关

    反射型xss Low: <?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_ ...

  7. 从DVWA靶场学代码审计

    DVWA是较为经典的一个传统漏洞的靶场 内置了low,medium,hight,impossible四个安全级别供安全人员去研究相关漏洞.今天就来对impossible这个级别进行代码审计,从中学习一 ...

  8. DVWA靶场之Brute Force(暴破)通关

    DVWA最经典PHP/MySQL老靶场,简单回顾一下通关流程吧 DVWA十大金刚,也是最常见的十种漏洞利用:Brute Force(暴破).Command Injection(命令行注入).CSRF( ...

  9. Pikachu靶场通关之XSS(跨站脚本)

    一.XSS(跨站脚本)概述 Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以 ...

  10. DVWA-全等级XSS(反射型、存储型)

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

随机推荐

  1. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-KG4SL:用于人类癌症综合致死率预测的知识图神经网络

    5.(2021.7.12)Bioinformatics-KG4SL:用于人类癌症综合致死率预测的知识图神经网络 论文标题:KG4SL: knowledge graph neural network f ...

  2. 【JavaWeb】学习笔记——Tomcat集成

    简介 Tomcat是基于Java的一个开放源代码.运行servlet和JSP Web应用的Web应用软件容器,又称servlet容器 安装 官方网站:https://tomcat.apache.org ...

  3. JavaScript Array对象的splice方法 数组的添加和删除

    Splice方法  :拼接 splice() 方法用于添加或删除数组中的元素. var index = Array.indexOf(value);    //可以匹配value在Array中的索引,匹 ...

  4. 题解 CF803A Maximal Binary Matrix

    Luogu codeforces 前言 模拟赛原题.. 好好一道送分被我硬打成爆蛋.. \(\sf{Solution}\) 看了一波数据范围,感觉能 dfs 骗分. 骗成正解了. 大概就是将这个 \( ...

  5. 题解 P6745 『MdOI R3』Number

    前言 不知道是不是正解但是觉得挺好理解. 科学计数法 将一个数表示为\(a\times 10^x\) 的形式.其中\(a\leq10\),\(x\) 为整数. \(\sf Solution\) 其实这 ...

  6. .NET性能优化-是时候换个序列化协议了

    计算机单机性能一直受到摩尔定律的约束,随着移动互联网的兴趣,单机性能不足的瓶颈越来越明显,制约着整个行业的发展.不过我们虽然不能无止境的纵向扩容系统,但是我们可以分布式.横向的扩容系统,这听起来非常的 ...

  7. I-图的分割(二分+并查集)

    图的分割 题目大意: 给你n个点,m条边的图,没有重环和自环,所有的点都联通 可以通过删除几条边使得整个图变成两个联通子图 求删除的边中最大边权的最小值 解题思路: 看到"最大边权的最小值& ...

  8. python 类相关 下划线相关 __init__

    类 1.静态方法 class C(object): @staticmethod def f(): print('runoob'); C.f(); # 静态方法无需实例化 cobj = C() cobj ...

  9. iview table json数据里的num排序问题

    title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...

  10. 版本控制工具Git介绍-01

    使用版本控制工具是为了方便团队开发,比如多人共同维护一个项目的时候,用版本控制工具可以很方便的维护项目代码,如果哪天你改了一个版本,出问题了,我们也可以很快的找到你改了什么,这里介绍使用比较多的版本控 ...