浏览器的安全机制\ XSS

目录

浏览器的安全机制\ XSS

同源策略 SOP(sam Origin Policy)

img 标签:

iframe框架

AJAX:

同源策略条件

跨资源共享:

HTTP头部声明

CSP(content security policy)

XSS 跨站脚本攻击 (Cross Site Scripting)。

XSS漏洞的危害

Xss 漏洞的验证

XXS漏洞的分类

XXS的构造

固定会话攻击与防御

*利用XSS漏洞如何获取数据?

XSS的变形:

XSS的防御


同源策略 SOP(sam Origin Policy)

同源策略就是浏览器对 JavaScript 进行跨域访问的安全策略,同时也是浏览器沙盒环境提供的一项制约。

浏览器可以同时处理多个网站内容,典型方法:

☺ <img src = ‘ ’>

☺  iframe 框架

☺  AJAX

 

img 标签:

定义和用法:

 img 元素向网页中嵌入一幅图像。 请注意,从技术上讲,<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 标签创建的是被引用图像的占位空间。 <img> 标签有两个必需的属性:src 属性 和 alt 属性。

浏览器的安全机制\ XSS

浏览器的安全机制\ XSS

浏览器的安全机制\ XSS

img> 标签的 src 属性是必需的。它的值是图像文件的 URL,也就是引用该图像的文件的的绝对路径或相对路径。

alt 属性是一个必需的属性,它规定在图像无法显示时的替代文本。

假设由于下列原因用户无法查看图像,alt 属性可以为图像提供替代的信息:

(网速太慢src 属性中的错误浏览器禁用图像用户使用的是屏幕阅读器)

<img> 标签的 alt 属性指定了替代文本,用于在图像无法显示或者用户禁用图像显示时,代替图像显示在浏览器中的内容。

浏览器的安全机制\ XSS

iframe框架

用于在网页内显示网页。

添加 iframe 的语法

<iframe src="URL"></iframe>

注:URL 指向隔离页面的位置。

 

AJAX:

AJAX = 异步 JavaScript 和 XML。

JAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

浏览器的安全机制\ XSS

同源策略条件

如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。

  1. URL的主机(FQDN:Fully Qualified Domain Name,全称域名)一致
  2. Schema 一致
  3. 端口号一致

 

跨资源共享:

解决JS跨域访问的问题

跨域资源共享,CORS (cross-orgin sharing standard)

 

 

HTTP头部声明

CORS 标准新增了一组HTTP头部字段,允许服务器声明哪些源站通过浏览器访问哪些资源。

CSP(content security policy)

内容安全策略

内容安全策略   (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。

为使CSP可用, 你需要配置你的网络服务器返回  Content-Security-Policy

详细见:

内容安全策略( CSP ) - HTTP | MDN 浏览器的安全机制\ XSS https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP

 

XSS 跨站脚本攻击 (Cross Site Scripting)。

注:

XSS通过将代码注入到网页中,并由浏览器解释运行这段js代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入过的网页,XSS脚本就会被提取出来,用户浏览器就会解释执行这段代码,也就是说用户被攻击了。

微博、留言板、聊天室等等手机用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险,只要用户输入的没有做严格的过滤,就会被XSS。

注:用户提交的数据,会作为网页的一部分出现。

♠ 服务器

♠ 攻击者

♠ 客户端浏览器用户

 

SRC 安全应急响应中心

 

XSS漏洞的危害

♠  XSS是利用JS代码实现攻击,有很多危害:

♠  盗取各种用户账号

♠  窃取用户资料,冒充用户身份

♠  劫持用户会话执行任意操作

♠  刷流量、执行弹窗广告

♠  传播蠕虫病毒

 

 

Xss 漏洞的验证

可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC。

alert(/xss/);

confirm('xss');

prompt('xss');

<script>alert(/xss/);</script>

<script>confirm(/xss/);</script>

<script>confirm('xss');</script>

<script>prompt('xss');</script>

<sCr<scrscRiptipt>ipt>OonN'"<>

<!--

<sCr<scrscRiptipt>ipt>OonN\'\"<> 【终极测试】

 

如果页面弹窗,浏览器把用户提交的字符串当做JS 来执⾏,并且执行成功。说明XXS漏洞存在。

Payload 和 poc区别:

Payload

攻击时存在的代码

Poc

验证和检测漏洞的存在的代码

 

 

XXS漏洞的分类

反射型xss,储存型xss ,DOM型 xss。

☺ 反射型:

非持久性、参数型的跨站脚本。

反射型XSS的代码在Web应用的参数中,例如搜索框的反射型XSS。

注意到,反射型XSS代码出现在keywords参数中。

 

☺ 存储型:

持久性跨站脚本。XSS代码不是在某个参数(变量中),而是写进数据库或文件永久保存数据的介质中。 通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。

*要知道反射性XSS与存储性XSS的区别

☺ DOM型XSS

DOM 型XSS 是⼀种XSS 攻击,其中攻击的代码是由于修改受害者浏览器⻚⾯的DOM 树⽽执⾏的。特殊的地⽅就是攻击代码(payload)在浏览器本地修改DOM 树⽽执⾏,并不会将payload上传到服务器,这也使得DOM 型XSS ⽐较难以检测。

浏览器的安全机制\ XSS

 

http://192.168.16.107/xssTest/DOM-XSS/

?message=%3Cscript%3Ealert(/xss/);%3C/script%3E

http://192.168.16.107/xssTest/DOM-XSS/

#message=%3Cscript%3Ealert(/xss/);%3C/script%3E

XXS的构造

利用<>构造HTML/JS:

<script>alert(/xss/)</script>

 

Javascript 伪协议:

可以通过URL 载⼊资源的标签。

<a herf = javascript:alert(/xss/) >click  me !</a>

<img src = “javascript :alert(/xss/)”>

注:XSS 攻击的是浏览器,受前端影响⽐较⼤。浏览器的类型,版本等因素都会影响XSS 的效果。

 

 

产生自己的事件

“事件驱动” 是⼀种⽐较典型的编程思想。

浏览器的安全机制\ XSS

浏览器的安全机制\ XSS

详见:

HTML 事件属性 https://www.w3school.com.cn/tags/html_ref_eventattributes.asp

 

固定会话攻击与防御

Cookie窃取和欺骗

XSS盲打

试验流程:

XSS平台建立一个项目(手机号可以不留)

Cookie窃取;

在WEB服务器中找到可能存在xss漏洞的地方  例 留言板  ,通过XSS平台建立项目 形成一个攻击语句 将它放在留言板地方 通过管理员进行触发。

会获得管理员的 Cookie信息。

  • 例:
  • cookie : username=admin;
  • userid=1;
  • PHPSESSID=rbpiipm5jfondm3720eanuemq1

我们获取三段信息

浏览器的安全机制\ XSS

Cookie欺骗:

在页面控制台

将获取的Cookie信息复制执行

在进行欺骗时 将获取内容进行加工在控制台写入:(如下)

document.cookie = "username=admin";

document.cookie = "userid=1";

document.cookie = "PHPSESSID=rbpiipm5jfondm3720eanuemq1";

注:标点符号是否规范。

 

 

 

*利用XSS漏洞如何获取数据?

1 .xss漏洞在留言板中

2.借助于XSS平台,用来接收数据

3.需要管理员查看留言触发XSS漏洞

4.设置Cookie,登陆网站后台。

 

XSS的变形:

可以将构造的XSS代码进行变形,以绕过XSS过滤器的检测。

例:

<img src = ‘#’οnerrοr=’alert(/xss/)’>

<a href = ‘javascript:alert(/xss/)’>click me!</a>

<script>alert(/xss/)</script>

 

大小写转换:

JS代码大小写敏感

<Img sRc = ‘#’onErRoR=’alert(/xss/)’>

<A hrEf =’JaVaScriPt:alert(/xss/)’>click  me!</A>

<ScRiPt>alert(/xss/)</sCrIpT>

引号的使用:

HTML语言对引导的使用要求不严格,某些过滤函数是“锱铢必较”。

☺ 没有引导

☺ 单引号

☺ 双引号

例:

<Img sRc=#  OnErRoR=alert(/xss/);>

<Img sRc=’#’  OnErRoR=’alert(/xss/)’>

<Img sRc=”# “  OnErRoR=”alert(/xss/)”>

/代替空格

<Img sRc=’#‘/ OnErRoR=‘alert(/xss/)’>

双写绕过

绕过一次过滤。

例:

Xss过滤器过滤了script关键字。

<scrscriptipt>alert(/xss/)</scrscriptipt>

<script>alert(/xss/)</script>

<scr<script>ipt>alert(/xss/);</script>

对伪协议进行转码

☺  HTML编码

对属性值进行转码,可以绕过过滤。

例:

<a herf =’javascript:alert(/xss/)’>click me!</a>

<a herf =’j&#97;vas&#99;ript:alert(/xss/)’>click me!</a>         #十进制

<a herf =’j&#x61;vas&#x63;ript:alert(/xss/)’>click me!</a>       #十六进制

浏览器的安全机制\ XSS

其他编码:

1. utf -8 编码

2. utf -7 编码

插入其他字符

浏览器的安全机制\ XSS

拆分跨站

将一段JS代码拆成多段。

<script>z='alert'</script>

<script>z+='(/xss/)'</script>

<script>eval(z)</script>

<script>eval(alert(/xss/))</script>

 

XSS的防御

XSS过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS攻击的效果。

输入过滤

永远不要相信用户的输入。

输入验证:

  1. 对用户提交的信息进行“有效性“验证。
  2. 仅接受指定长度
  3. 仅包含合法字符
  4. 仅接受指定范围
  5. 特殊的格式,例如,emali\ip地址。

数据消毒

过滤或净化掉有害的输入

$xsscode = str_replace(‘script’, ‘’,$xsscode);

输出编码:

HTML编码是HTML实体编制码。

$xsscode = htmlspecialchars($xsscode);

黑白名单策略

不管是采用输入、过滤、输出编码,都是针对用户提交的信息进行黑、白名单式的过滤。

黑名单:不允许的内容

白名单:允许的内容。

防御DOM型XSS

避免客户端文档重写,重定向或其他敏感操作。

相关文章: