当前位置: 首页 > article >正文

xss的过滤和绕过(2)

             xss的过滤和绕过

 

分类

 

过滤主要有两层,分别为WAF层和代码层,WAF(web应用防火墙)通常是在外部,在主机或者网络硬件上,对HTTP请求进行过滤拦截,而代码层是在编写web应用的过程中,直接实现或者音乐第三方库,对用户输入进行过滤,但是JavaScript语法非常灵活,所以对于普通的正则匹配,字符串比较,很难拦截xss。

 

 1.富文本过滤

 

在发送邮件或者博客的情景下,用户有需求实现富文本的编辑,比如插入超链接,图片,视频等资源。为了实现这种富文本编辑,大多数编辑器都允许用户直接编辑HTML,插入比如video标签,根据我们之前提到的xss的基本原理,这就引入了xss漏洞。常见的过滤方式是用户输入的标签进行限制,如果采用黑名单的方式,我们可以寻找黑名单中遗漏的标签,在https://portswigger.net/web-security/cross-site-scripting/cheat-sheet这个表中列举了大量的可以用于执行JavaScript的标签和属性,并给出了适用于哪些浏览器

 

如果过滤器本身存在缺陷,比如将黑名单内容替换为空,我们可以采用喜闻乐见的双写绕过(只适用于非常简单的一种情况)

 

```php

<?php

    function filter($payload){

    $data=str_replace("script","",$payload);

 return $data;

}

$name=filter($_GET['name']);

echo "hello $name";

```

 

这段代码试图通过str_replace函数移除"script"字符串,输入name=name=<scriscriptpt>alert('xss')</scricriptpt>

 

2.注入点在标签属性中

 

如果没有过滤"<"和">",可以直接引入新的标签,如果尖括号被过滤,可以插入新的事件属性,比如onload,onmousemove等。而且标签的属性字段支持HTML编码,可以通过这个来绕过一些过滤。

 

比如

 

```

< img src=x οnerrοr="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">

```

 

这里onerror的内容就是对alert(1)进行HTML编码之后的结果,最后仍然可以成功触发弹窗。

 

src=x表示一个不存在路径,然后onerror,需要用一些工具对这个字符串进行HTML编码,通过HTML编码绕过过滤

 

 3.注入点在script标签中

 

如果注入点被引号包裹,可以像绕过sql注入一样,先闭合引号再用分号结束语句之后插入代码

 

如果引号也被过滤,且一行存在两个注入点的情况下

 

var url = 'http://xxxx/?name=<?=$name?>'+'<?=$address?>'

可以用反斜杠使得第一个引号被转义,从第二个引号开始插入我们的代码

 

var url = 'http://xxxx/?name=\'+';alert(1);\\'

 

如果存在单词黑名单,比如不允许出现eval等字符,可以使用unicode编码绕过

 

4.CSP过滤及其绕过

 

1.CSP(Content Security Policy,内容安全策略)是一个额外的安全层,用于检测并缓解某些特定类型的注入,包括XSS和数据注入等。

CSP被设计成完全向后兼容。不支持CSP的浏览器会忽略相关策略,并正常运行,采用默认的同源策略。

为了使CSP可用,需要配置HTTP头部配置Content-Security-Policy字段,除此之外还可以使用Meta标签来配置该策略。

从前面的例子可以看出,XSS防御绝非易事,CSP应运而生。CSP可以看作是为了防备XSS,额外添加的一些页面渲染和javascript执行的规则。

具体的策略文档可以在https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy这里找到

 

2.如果我们配置下面的请求头

 

```php

<?php

    header("Content-Security-Policy;script-src'self'");

?>

```

 

这表示CSP策略要求,网站的script来源只能是当前域名下的资源,内联和外链的script将禁止执行。

 

3.Content-Security-Policy: <policy-directive>;<policy-directive>

 

指令:获取指令、文档指令、导航指令

connect-src 定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源

 

font-src 设置允许通过@font-face加载的字体源地址

 

frame-src 设置允许通过类似<frame>和<iframe>标签加载的内嵌内容的源地址 

 

img-src 限制图片和图标的源代码

 

child-src 定义了web workers以及嵌套的浏览上下文(如<frame>和<iframe>)的源

 

media-src 限制通过<audio> <video> 或<track>标签加载的媒体文件的源代码

 

object-src 限制<object> <embed> <applet>标签的源地址

 

script-src 限制JavaScript的源地址

 

default-src 默认的加载策略

 

4.绕过script-src'self',self"意味着只允许加载同域名目录下的脚本。所以我们可以寻找文件上传(可以绕过cell或者使用jsonp接口)或jsonp接口(跨域用的)

 

需要注意的是,如果图片上传接口,即访问资源时Content-Type为image/png,浏览器会拒绝将其作为脚本来执行。

而JSONP接口通常采用?callback=xxxx的方式传递参数

 

如:xxx({"result":"success"})

当使用类似alert(1); // alert(1) ((“result”:”success”) )这样的代码进行传参时,会产生特定的返回结果。

 


http://www.kler.cn/a/388784.html

相关文章:

  • 每日一练:二分查找-搜索插入位置
  • CommandLineParser 使用
  • BERT配置详解1:构建强大的自然语言处理模型
  • 矩阵的各种计算:乘法、逆矩阵、转置、行列式等——基于Excel实现
  • 后端接口返回二进制文件,前端 window.opent预览展示
  • 【韩老师零基础30天学会Java 】07章 面向对象编程(基础)
  • 船舶AIS轨迹聚类算法(附python源码)
  • unity下添加c#脚本
  • Seldon Core大模型部署详解
  • 如何在vscode中安装git详细新手教程
  • 快速上手 muduo
  • 【iOS】知乎日报第三周总结
  • 金融市场中的量化分析:正大科技如何赋能投资者决策
  • 期权懂|你知道期权策略有哪些核心策略吗?
  • 保护Kubernetes免受威胁:容器安全的有效实践
  • 力扣力扣力:动态规划入门(1)
  • solo博客使用非docker方式进行https部署
  • Android 文件带进度的下载功能实现与封装
  • 2024年11月6日Github流行趋势
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(2)
  • 蓝桥杯:编程爱好者的试炼场
  • 运维的目标管理:以业务为核心,驱动运维价值最大化
  • 实时高效,全面测评快递100API的物流查询功能
  • 基于单片机洗衣机控制器的设计(论文+源码)
  • BMC运维管理:IPMI实现服务器远控制
  • 笔记整理—linux驱动开发部分(10)input子系统与相关框架