| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 《CTF特训营》学习总结——跨站脚本攻击(XSS) -> 正文阅读 |
|
[网络协议]《CTF特训营》学习总结——跨站脚本攻击(XSS) |
一、基本介绍跨站脚本攻击简称XSS,是一种网站应用程序漏洞,是代码注入漏洞的一种,攻击者可以通过这个漏洞向网页中注入恶意代码,导致用户浏览器加载网页、渲染HTML文档时执行攻击者代码。 二、分类1.成因分类反射型XSS,存储型XSS,DOM型XSS 2.输出点分类输出在HTML属性中,输出在CSS代码中,输出在JavaScript中 三、介绍1.反射型XSS漏洞XSS代码作为客户端输入的内容提交给服务端,服务端解析后,在响应内容中返回输入的XSS代码,最终在浏览器解释器执行,原型如下:
客户端输入的input值未经过任何过滤便直接输出,所以攻击者可以提交 http://csdn.com/xss.php?input=<script>alter(/xss/)</script> 在服务端对客户端输入的内容进行解析后,echo语句会将客户端输入的代码完整地输出到HTTP响应中,浏览器解析并执行。 2.存储型XSS漏洞在于提交的XSS代码是否会存储在服务端,下次请求该网页时是否需要再次提交XSS代码。存储型XSS典型应用有留言板,在线聊天室,邮件服务等,攻击者提交包含XSS代码的留言后,服务端会将其存储与数据库中,其他用户访问网页查看留言时,服务端将从数据库中查询已有的留言并输出在HTTP响应中,原型如下:
攻击者提交留言<script>alter(/xss/)</script>后,服务端存储留言,其他用户访问网页时执行恶意代码。 3.DOM型XSS漏洞DOM XSS的XSS代码不需要在服务端解析响应的直接参与,触发XSS的是浏览器的DOM解析,原型如下:
代码中服务端未作任何操作,而客户端得javascript代码动态地将location.hash赋给:
导致了这个DOM XSS,使用方法如下: http://csdn.com/dom.html#<img src=x οnerrοr='alter(/xss/)'> 4.输出在HTML标签中原型如下:
XSS得payload输出在HTML属性中时,攻击者需要闭合相应得HTML属性后注入新的属性,或者在闭合标签后直接注入标签,如输入:
闭合前面得value属性,注入新的得onclick属性,则会输出:
或者输入
直接闭合input标签,注入新的script标签,则会输出:
5.输出在CSS代码中原型如下:
XSS攻击payload输出在CSS代码中时,攻击者需要闭合相应的CSS代码,如输入:
闭合前面的color属性,注入background-image属性,则会输出:
6.输出在Javascript代码中原型如下:
XSS攻击payload输出在javascript代码中时,攻击者需要闭合相应的javascript代码,如输入:
闭合前面的单引号,注入攻击代码,则会输出:
四、防护与绕过1.特定标签过滤部分开发者认为过滤掉危险标签:script、iframe等就会到时脚本无法执行,其实任何一种标签,无论是否合法,都可以构造处XSS代码,比如:
如果输出点HTML标签的属性中或在JavaScript代码中,那么攻击者可以简单地闭合,拼接属性或JavaScript代码而不需要引入任何新标签可以执行XSS代码。 同时,HTML5也带来了部分新的标签,容易被开发者忽略,比如video标签。
2.事件过滤很多时候,开发者会过滤掉许多HTML标签的事件属性,这时需要对所有可利用的时间属性进行遍历。 还有一些标签属性本身不属于事件属性,但是可以用于执行JavaScript代码,比如JavaScript伪协议。
HTML5也带来了一些新的属性,可以用于对时间过滤进行绕过操作,例如:
3.敏感关键字(字符)过滤关键字过滤大部分是针对敏感变量或者函数而进行的,如:cookie、eval等。这部分的过滤可以通过字符串的拼接、编码解码等方法绕过。 ①字符串拼接与混淆JavaScript中的对象方法可通过数组的方式进行调用,如调用alter函数,可以使用如下方式:
可以看到,数组下标是想调用函数名字的字符串,既然是字符串,那么自然就可以通过拼接方式进行混淆,代码如下:
还可以使用JavaScript自带的base64编码解码函数来实现字符串过滤的绕过,btoa函数可以将字符串编码base64字符串,atob函数可以将base64字符串还原,这时利用如下代码也可以实现alter(/xss/)相同的效果。
②编码解码基于字符串的代码混淆不仅可以通过字符拼接的方式来实现,还可以通过各种编码、解码来实现。XSS漏洞常用的编码方式如下: HTML进制编码:10,16进制 CSS进制编码:兼容HTML中的进制表现,10,16进制 JavaScript进制编码:8,16进制,unicode编码,ASCII URL编码 JSFuck编码 ③location.*、window.name既然开发者会对输入的敏感关键字进行过滤,那么可以将XSS代码放置于其他不被浏览器提交至服务端的部分,如:location.*、window.name等处。 location.*的构造如下:
Window.name构造如下:
利用location对象结合字符串编码可以绕过很多基于关键字的过滤,也有一部分关键字过滤是针对敏感符号的过滤,如括号、空格、小数点等。 ④过滤“.”在JavaScript中,可以使用with关键字设置变量的作用域,利用此特性可以绕过对“.”的过滤:
⑤过滤“()”在JavaScript中,可以通过绑定错误处理函数,使用throw关键字传递参数绕过对“()”的过滤:
⑥过滤空格在标签属性间可使用换行符0x09、0x10、0x12、0x13、0x0a等字符代替空格绕过过滤:
在标签名称和第一个属性间也可以使用“/”代替空格:
? ⑦svg标签svg内部的标签和语句遵循规则是直接继承自XML而不是HTML,区别在于svg内部的script标签中可以允许存在一部分进制或编码后的字符(比如实体编码):
4.字符集编码导致的绕过①古老的UTF-7与US-ASCII在没有通过Content-Type或者meta标签设置字符集时,如果IE的编码设置为自动检测,那么它会根据一些BOM字符来判断当前的字符集(现在已经不适用):
另外一种情况就是,虽然IE没有勾选自动检测字符集的设置,但可以通过制作一个字符集为UTF-7的页面,并使用iframe标签来调用目标页面,利用字符集继承漏洞来实现字符集的设定,如:
但是这种基于iframe的跨域字符集继承漏洞已被修复,当前的情况是:继承的大前提是必须同域。 如果输出点是在title标签之内,meta标签之前,且字符集是由meta标签所指定的,那么仍可通过如下方式注入meta标签指定字符集来利用XSS漏洞,原型如下:
在title标签中注入如下代码:
最终可以构造处:
基于US-ACSCII字符集合的XSS漏洞与基于UTF-7的XSS漏洞很相似,代码如下:
②宽字节考虑如下代码:
这段代码通过str_replace和addslashes对输入进行过滤,而这里可以使用宽字节进行绕过,payload如下:
5.长度限制部分输入点会限制输入字符的数量,这时就需要使XSS代码尽量短小 ①window.name和location.*window.name和location.*都可以通过将代码放置在别处以减小输入点代码量,如:
②第三方库工厂函数诸如jQuery等等三方JavaScript库大部分都会提供相应的工厂函数,如jQuery中的“$()”,它会自动构造标签,并且执行其中的代码:
③注释在一些环境下可以使用注释来绕过长度限制。具体操作是将XSS代码分为多个阶段,在每个阶段的代码前后添加注释符号,依次注入XSS代码,这样不同阶段的代码就可以组合到一起了,如下所示:
6.HttpOnly绕过这是一个cookie的一个安全属性,设置后则可以在XSS漏洞发生时避免JavaScript读取到cookie,但即使设置了httponly属性,也仍有方法获取到cookie值。 ①CVE-2012-0053Apache服务器2.2.0-2.2.21版本存在一个漏洞CVE-2012-0053:攻击者可以通过向网站植入超大的cookie,令其HTTP头超过Apache的最大请求长度(4192字节),使得Apache返回400错误,状态页中包含了HttpOnly保护的cookie。 ②PHPINFO页面无论是否设置HttpOnly属性,phpinfo()函数都会输出当前请求上下文的cookie信息。如果目标网站存在phpinfo页面,就可以通过XMLHttpRequest请求该页面获取cookie信息。 ③Flash/Java安全团队seckb在2012年提出,通过Flash、Java的一些API可以获取到HttpOnly cookie,这种情况可以归结为客户端信息泄露。 7.XSS Auditor绕过反射型XSS漏洞作为一种最容易发现和挖掘的XSS漏洞,但是由于XSS Auditor的出现,使反射型XSS漏洞的作用被逐步弱化,XSS Auditor通过检查输入的内容判断该内容是否在输出中出现,如果符合XSS Auditor的过滤条件,则会直接阻止脚本执行。 8.内容安全策略(CSP)绕过CSP是目前最主要的web安全保护机制之一,这个功能可以有效地帮助开发着降低网站遭受XSS漏洞攻击的可能性,开发者可以创建并强制部署一些安全管理规则,规定网站可以获取或者加载的内容。 CSP以白名单的机制来管理网站要加载或者执行的资源,在网页中,这样的策略是通过HTTP头信息或者meta标签来定义的,虽然这个策略可以防止攻击者从外部网站跨站加载恶意代码,但是CSP是不能防止数据泄露的。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 20:47:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |