详解
XSS
- XSS(跨站脚本攻击),是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
- XSS存在的根本原因是,对URL中的参数和对用户输入提交给web server的内容,没有进行充分的过滤
分类
- 持久化 XSS:恶意代码通常来自网站数据库。
- 反射式 XSS:恶意代码通常来自用户请求。
- 基于 DOM 的XSS:漏洞通常在客户端而非服务端,DOM XSS 是由于浏览器解析机制导致的漏洞,服务器不参与,而存储型与反射型都需要服务器响应参与
危害
从以下我们可以知道,存储型的XSS危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触, 只要被攻击者访问了该页面就会遭受攻击。而反射型和DOM型的XSS则需要我们去诱使用户点击我们构造的恶意的URL, 需要我们和用户有直接或者间接的接触,比如利用社会工程学或者利用在其他网页挂马的方式。
1 | |--->窃取cookie |
DOM型XSS
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
什么是DOM
知道html的知识,应该都清楚什么是DOM,比如一个典型的html格式
1 | <html> |
常见注入代码
1 | <script>alert(1)</script> |
安全等级为Low
服务器代码
源码分析
服务器代码
可以看到代码中没有做任何保护,而表单是让我们选择语言
点击select,可以看到?default=English,所以可以在=号后插入xss payload
前端代码
右键查看前端源码,发现有URI解码的函数,被前端执行
POC、EXP、Payload与Shellcode
POC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。
EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。
Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令。
Shellcode,简单翻译“shell代码”,是Payload的一种,由于其建立正向/反向shell而得名。
开始攻击
直接把请求参数改为:default=<script>alert(document.cookie)</script>
,就获取到了cookie
安全等级为Medium
源码分析
主要过滤了script标签
开始攻击
直接把参数改为:</option></select><img src=1 onerror=alert("xss")>
,这里的是为了破坏选择框的结构。
安全等级High
源码分析
default=只允许是French、English、German、Spanish、这几个通过。(采用了白名单过滤)
开始攻击
用#号绕过提交到服务器,参数改为:default=English#</option></select><img src=1 onerror=alert(document.cookie)>
安全等级为 Impossible
源代码分析
后台什么也不做
前端去除了URI解码的函数,默认不解码,所以无法被前端执行。
总结
利用:任何URL带参页面,都可以尝试渗透
预防:在页面跳转时,不要过分依赖URL数据,尽量通过POST重新获取数据
本文操作步骤来自这里