一、简介
概念
XSS又叫CSS(Cross Site Script)跨站脚本攻击是指 攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的
一般的攻击过程:
- 攻击者将恶意代码注入到服务器中(如论坛、留言板、邮件等);
- 用户在没有防备的情况下访问了被注入了恶意代码的服务器;
- 服务器将含有恶意代码的网页响应给客户端;
- 在客户端浏览器中触发JS恶意代码。
危害
- 挂马
- 盗取用户Cookie。
- 刷广告、刷浏量、破坏网上数据
- 劫持用户会话,执行任意操作;是指操作用户浏览器
- DOS(拒绝服务)客户端浏览器。
- 钓鱼攻击,高级的钓鱼技巧。
- 劫持用户Web行为,甚至进一步渗透内网。
- 爆发Web2.0蠕虫。
- 蠕虫式的DDoS攻击。
二、三种类型
1.反射型
概念
(非持久化)XXS代码常常出现在URL请求中,当用户访问带有XXS代码的URL时,服务器端接收处理,然后将带有XSS代码的数据返回给浏览器,浏览器解析带有XSS代码的数据并执行XSS代码,整个过程就像一次反射。
2.储存型
概念
攻击者提交一段XSS代码后,服务器接收并储存,当其他用户访问包含该XSS代码的页面时,XSS代码被浏览器解析并执行。
3.DOM型
概念
DOM (Document Objet Model)指文档对象模型。该类攻击是反射型XSS的变种。
攻击者构造URL类似:
http://example.com/page.html#<script>alert('DOM型XSS攻击!')</script>
该URL原本页面是:
<!DOCTYPE html>
<html>
<head>
<title>DOM型XSS示例</title>
</head>
<body>
<h1>欢迎访问我们的网站!</h1>
<div id="output"></div>
<script>
// 假设这里是从URL参数中获取的数据
var userInput = window.location.hash.substring(1);
// 在页面中插入用户输入的内容
document.getElementById('output').innerHTML = '您的输入是:' + userInput;
</script>
</body>
</html>
用户点击该URL,页面最终的DOM结构会变成
<div id="output"><script>alert('DOM型XSS攻击!')</script></div>
与反射型区别
反射型:用户点击URL向服务器发送请求,服务器处理了带有XSS代码的URL但没有解析运行该XSS代码,而是原封不动的返回用户浏览器,由用户浏览器解析运行XSS代码。反射型XSS经过了后端服务器的交互。
DOM型:没有经过后端服务器交互,直接提交给html页面,没有传递给后端服务器,服务器返回给用户浏览器的数据也不会包含xss代码,浏览器加载数据时会执行该代码。
判断三种类型
发送一次带XSS代码的请求,若只能在当前返回的数据包里发现XSS代码,则是反射型;若以后这个页面的返回包里都会有XSS代码,则是存储型;若在返回包里找不到XSS代码,则是DOM型。
三、漏洞验证
1 漏洞验证相关概念
POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞验证的代码。
EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的工具,即从漏洞检测验证到利用的工具。
Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。
Shellcode:简单翻译 ’ shell代码 ',利用漏洞时所执行的代码,是Payload的一种。Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。
2 漏洞验证相关概念之间的区别
(1)POC与EXP对比
POC是用来验证漏洞存在的,EXP是用来完整利用漏洞(包括从验证到利用全过程)的,两者通常不是一类,或者说,PoC通常是无害的,Exp通常是有害的,有了POC,才有EXP。
(2)Payload与Shellcode
Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。
(3)Payload与EXP
同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的EXP,也就是说不存在通用的EXP。
(4)Payload模块
在Metasploit Framework 6大模块中有一个Payload模块,在该模块下有Single、Stager、Stages这三种类型,Single是一个all-in-one的Payload,不依赖其他的文件,所以它的体积会比较大,Stager主要用于当目标计算机的内存有限时,可以先传输一个较小的Stager用于建立连接,Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型,适用于不同场景。
四、利用流程
1.找注入点
找到数据输入的地方
2.判断回显位置---输入的数据在什么地方输出
如果输入的数据能够在前端进行输出,则可以证明输入的前段恶意代码在没有安全性处理的情 况下能够输出前端,从而造成风险
3.构造基础的payload
4.进行提交payload
5.分析响应状况
1. 如果成功解析则XSS存在
2. 反之考虑绕过
6.确认漏洞
如果响应达到了预期,则说明漏洞存在,反之不存在。