0%

DVWA通关指南-DOM-XSS-DOM型跨站脚本攻击

详解

XSS

  • XSS(跨站脚本攻击),是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
  • XSS存在的根本原因是,对URL中的参数和对用户输入提交给web server的内容,没有进行充分的过滤

分类

  • 持久化 XSS:恶意代码通常来自网站数据库。
  • 反射式 XSS:恶意代码通常来自用户请求。
  • 基于 DOM 的XSS:漏洞通常在客户端而非服务端,DOM XSS 是由于浏览器解析机制导致的漏洞,服务器不参与,而存储型与反射型都需要服务器响应参与

危害

从以下我们可以知道,存储型的XSS危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触, 只要被攻击者访问了该页面就会遭受攻击。而反射型和DOM型的XSS则需要我们去诱使用户点击我们构造的恶意的URL, 需要我们和用户有直接或者间接的接触,比如利用社会工程学或者利用在其他网页挂马的方式。

1
2
3
4
5
6
7
8
9
10
11
12
							|--->窃取cookie
|--->网络钓鱼
|------->针对用户-->|--->放马挖矿
| |--->广告刷流量
XSS----|
|
| |--->篡改页面
|----->针对web服务->|--->传播蠕虫
|--->内网扫描
|--->劫持后台


DOM型XSS

  • DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

  • 用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

什么是DOM

知道html的知识,应该都清楚什么是DOM,比如一个典型的html格式

1
2
3
4
5
6
7
<html>
<head></head>
<body>
<div id="wap">
<img src="1.jpg" />
</div>
</body>

常见注入代码

1
2
3
<script>alert(1)</script>
<img src=1 onerror=alert(1) hidden="true"/>
<iframe onload=alert(1) height="0" width="0" hidden="true"/>

安全等级为Low

服务器代码

image-20220214103755950

源码分析

服务器代码

  • 可以看到代码中没有做任何保护,而表单是让我们选择语言

  • 点击select,可以看到?default=English,所以可以在=号后插入xss payload

image-20220214104034792

前端代码

右键查看前端源码,发现有URI解码的函数,被前端执行

image-20220214151722967

POC、EXP、Payload与Shellcode

POC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。

EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。

Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令。

Shellcode,简单翻译“shell代码”,是Payload的一种,由于其建立正向/反向shell而得名。

开始攻击

直接把请求参数改为:default=<script>alert(document.cookie)</script>,就获取到了cookie

image-20220214110216672

安全等级为Medium

源码分析

主要过滤了script标签

image-20220214104951307

开始攻击

直接把参数改为:</option></select><img src=1 onerror=alert("xss")>,这里的是为了破坏选择框的结构。

image-20220214110140539

安全等级High

源码分析

default=只允许是French、English、German、Spanish、这几个通过。(采用了白名单过滤)

image-20220214111011079

开始攻击

用#号绕过提交到服务器,参数改为:default=English#</option></select><img src=1 onerror=alert(document.cookie)>

image-20220214111327747

安全等级为 Impossible

源代码分析

后台什么也不做

image-20220214112250124

前端去除了URI解码的函数,默认不解码,所以无法被前端执行。

image-20220214152239910

总结

  • 利用:任何URL带参页面,都可以尝试渗透

  • 预防:在页面跳转时,不要过分依赖URL数据,尽量通过POST重新获取数据

  • 本文操作步骤来自这里