XSS漏洞原理及防护

xss 注入。

起因是网站对上传内容过滤不严格。导致上传内容,脚本或其他执行的情况。
分类:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:

  输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
  输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

基本测试方法
1.寻找输出点,可上传的位置。 web抓包工具brupsuite 抓包寻找输出点
2.测试输出位置,正常测试,盲打后台的类型(让管理员运行)。
3.测试基本跨站代码。弹窗 测试,测试如下:
在这里插入图片描述
对于基本的测试就是上面这种,说明存在xss漏洞,很多网站有许多的手段使代码失效,下面介绍基本的几种测试方式。
1. 存在闭合标签,


构造来使闭合标签失效,如:<textarea>"输入内容"</textarea>,使其失
效,构造,</textarea><script>alert(/xss/)</script>,最前面的</textarea>
用于闭合前面的<textarea>富文本标签。

2.大小写混合测试

如黑名单过滤( if('ontouchstart' in document.documentElement) document.write("<script src='../../assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");),
过滤掉了<script>,可以通过script不区分大小写来绕过黑名单。
这种防护办法很简单:直接转换为统一大写或小写就行了。
strtower() 将字符串转换为小写形式
strtoper () 将字符串转换为大写形式

3. 多重嵌套测试,

因为存在大小写转换后过滤,忽略关键字<script>,可以想办法构造被删除关键字以后重新构造出关键字,如:
<scr<script>ipt>alert(/xss/)</script>,:由于 <script>标签会被自动删除 ,因 此构造攻击代码为<scr<script>ipt 这样<script>
会被自动删除,留下的<script>会自动构成<scr pt>,这样的手段即为多重嵌套测试,  
对于循环嵌套测试的防护可以采用多重过滤:
if(preg_match (’ I (<script> I </script>)+ /, $string)){ return false;},只要过滤以后还存在关键字就会一直过滤。

4.宽字节绕过测试

如果目标服务器采取了黑名单+强制转换格式十 多重嵌套过滤手段, 那么仅通过对脚本中的关键词做基本变形已无法绕过防护机制。
常见的中文编码格式 GB2312 GBK GB18030,BIGS , Shift JIS 等都是常用的宽字节编码,这类编码方案在针对字符进行编码时利用两字节进行编码宽字节带来的安全问题主要是吃 ASCII 字符(一字节)的现象。
如出现“或者'进行过滤,可以采用“’; alert(/xss/) ; //”,采用闭合单引号,扩展 JavaScript 语句等进行处理,如果出现转义的情况,
如果网站采用的是中文编码格式如:网页返回的编码方式为 gbk (http-equiv= “Content-Type”) GBK 编码存在宽字节的问题,
主要表现为 GBK 编码第一字节(高字节)的范围是 0x81~0xFE 第二字节(低字节) 的范围是 0x40~0x7E 0x80~OxFE GBK 就是以这样的十六进制来针对字符进行编码 GBK 编码中,
“ \”符号的十六进制表示为0x5C ,正好在 GBK 的低字节中,因此,如果在后面添加一个高字节编码,那么添加的高字节编码会与原有编码组合成一个合法字符,于是重新构造跨站代码如下:%bf'; 
<script>alert(/x ss /)</script>;//
由于%bf在GBK编码高字节范围,与后台转义单引号()生成的斜杠(\) 结合,正好组成了汉字“雄”的 GBK 编码,
这个时候斜杠对单引号的转义效果便失效 ,成功触发了 xss,
 宽字节利用环境较为苛刻,PHP 版本、当前页面编码均有严格的限制 。现在都采用”utf-8“进行编码,很少出现这种情况。

5.多标签测试

能够触发弹窗效果的远不止<script>一种标签,在不同的流览器、不同的场景、不同的环境下 ,
能够触发攻击效果的跨站代码也不尽相同,下面根据来自互联网的公开资料 ,整理了一份常见的跨站代码列表( XSS Sheet ),
在测试的过程中可以使用其中的一些来检测弹窗效果 ,从而判断标签是否可用于跨站攻击,
需要注意的是,很多己公开的 XSS Sheet 中存在大量目前无法再使用的语句,
这主要与xss 触发时,用户的浏览器版本,xss 漏洞环境及防护方式、输出点所在的位置等有直接关系,
以下语句主要供学习参考,可观察各类语句的写法,更好地了解xss方式及构造原理,当然在实际中,可利用的方式远不止于此。

在这里插入图片描述
在这里插入图片描述
xss 语句的基本特点是利用各类 JS 脚本特性来设计触发点,攻击代码则可利用各类型编码或者外部引用方式进行加载,以上仅给出了其中的一小部分,在实践中千变万化,利用方式也各不相同。

目前存在 xss 攻击漏洞的业务系统非常多,这主要与 Web 系统与用户的交互功能逐渐完善有着直接的关系,很多钓鱼功能都会利用反射型跨站。

IE Chrome\Firefox 浏览器中的 XSS Filter (针对 xss 攻击的过滤器) 包含语句非常全面,以上的测试语句在反射型跨站时已基本无法使用。需要注意的是,存储型跨站由于攻击代码由 Web 站点在其数据库中读取,因此不会进入浏览器的 XSS Filter 中,只要符合html 格式,那么都可执行 浏览器的过滤机制在于会提前识别 post get 方法传递参数过滤中是否存在跨站代码,再根据服务器的响应包内容进行判断,如果存在则禁止显示。

xss使用小记:

<script>alert(/xss/)</script>
url直接输入测试
登录后输入测试
直接提交测试
存储型提交后刷新测试
DOM型检查元素,根据输入结果进行构造。'onclick = "alert(/xss/)">  onclick事件会在对象被点击时发生。
盲打,尽可能多的输入测试语句,管理员登录就会出现。
大小写过滤,测试语句改为大小写混合。大小写混合可以使用多种混合方式,
	多重嵌套。
htmlspecialchars采用转义过滤。
多标签测试:herf 过滤,一种是url,可以考虑闭合,闭合失败,被过滤,可以用javascript:alert(/xss/)来执行js输出,检查元素的方式,进行闭合。

XSS攻击方式,上面讲述了如何检查是否存在漏洞,不足以说明漏洞的危害。
漏洞利用:
在这里插入图片描述
cookie欺骗,如:如果受害用户是管理员,那么攻击者甚至可以轻 获取 Web 系统的管理权限,这类权限通常会有文件修改,上传,连接数据库等功能 ,再配合后续的攻击,会给当前 Web应用安全带来很大的威胁。
网站钓鱼
窃取客户端信息
解决 xss 漏洞的基本思路是过滤+实体化编码,无论哪种方法都可以使恶意代码无法执行

©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页