简介

宽字节跨站漏洞多发生在GB系统编码。 对于GBK编码,字符是由两个字节构成,在%df遇到%5c时,由于%df的ascii大于128,所以会自动拼接%5c,吃掉反斜线。而%27 %20小于ascii(128)的字符就会保留。通常都会用反斜线来转义恶意字符串,但是如果被吃掉后,转义失败,恶意的xss代码可以继续运行。

什么是宽字节

GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际为两字节。(英文字母占据一个字节,汉字占据两个字节)。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象。

宽字节SQL注入

先来复习下宽字节注入的形成原理:

防御方式:将 ' 转换为 \'

绕过方式:将 \消灭

常规编码

输入 处理 编码 带入SQL 结果
' \' %5c%27 id=1\' and 不能注入

GBK编码

MySQL在使用GBK编码时,会认为两个字符为一个汉字。

输入 处理 编码 带入SQL 结果
%df' %df\' %df%5c%27(運) id=運' and 能注入

两个字符组合,认为是一个汉字

注:前一个ASCII码大于128才能到汉字的范围。

宽字节XSS漏洞

宽字节XSS与宽字节SQL注入的不同在于宽字节注入主要是通过

吃掉转义符再正常注入SQL语句,而宽字节XSS主要使用吃掉转义符后注入恶意xss代码。

案例1:

一般情况下,当我们发现一个输入框,想要插入xss代码在里面:

<input type="text" id="name" value=""/>

通常做法是通过闭合前面的双引号和注释掉后面的双引号来触发

" /><script>alert(1)</script>//

但是开发人员一般为了防范我们在其中插入恶意代码,会在显示之前使用过滤器对我们的输入进行转义,我们闭合使用的"被转义为\",这样就导致我们没法闭合。

如果使用了GBK等编码,我们就可以利用宽字节xss。构造如下payload:

%c0%22 /><script>alert(1)</script>//

%c0和%df一样,也是超出了GBK的范围,此时在执行过滤操作时,源代码就变成了

<input type="text" id="name" value="%c0%5c%22 /><script>alert(1)</script>//">

当过滤器发现了%22,然后加入转义(%5c),但在解析的时候碰到%c0,于是%5c与%c0合并成一个特殊字符,我们的"得以保留。

<input type="text" id="name" value="%c0%5c%22 /><script>alert(1)</script>//">

案例二:

下面是一个PHP的例子,在magic_quotes_gpc=On的情况下,如何触发XSS?

<?php header("Content-Type: text/html;charset=GBK"); ?> 
<head>
<title>gb xss</title>
</head>
<script> a="<?php echo $_GET['x'];?>";
</script>

我们会想到,需要使用闭合双引号的方法:

gb.php?x=1";alert(1)//

在magic_quotes_gpc=Off 时源代码会变成:

<script> a="1";alert(1)//";</script>

由于magic_quotes_gpc=On,双引号被转义成\"导致闭合失败

<script> a="1\";alert(1)//";</script>

由于网页头部指定了GBK编码,GBK编码第一字节(高字节)的范围是0x81~0xFE,第二字节(低字节)的范围是0x40~0x7E与0x80~0xFE。

gb.php?x=1%81";alert(1)//

此时当双引号会继续被转义为\",最终代码如下:

<script> a="1[0x81]\";alert(1)//";</script>

[0x81]\ 组合成了一个合法字符,于是我们的"被保留下来就会产生闭合,我们就成功触发了xss。

GB2312是被GBK兼容的,它的高位范围是0xA1~0xF7,低位范围是0xA1~0xFE(0x5C不在该范围内),把上面的PHP代码的GBK改为GB2312,在浏览器中处理行为同GBK,也许是由于GBK兼容GB2312,浏览器都做了同样的兼容:把GB2312统一按GBK行为处理。

宽字节注入防御

1、使用utf-8,编码宽字节注入;

ps:不仅gbk,韩文、日文等都是宽字节,都有可能存在宽字节注入漏洞。

2、过滤客户端提交的危险字符。

参考链接:

https://blog.csdn.net/qq_29419013/article/details/81205291

https://www.uedbox.com/post/14488/

http://book.2cto.com/201301/14515.html

http://itindex.net/detail/47408-xss-%E5%AD%A6%E4%B9%A0-xss

宽字节XSS跨站攻击的更多相关文章

  1. XSS跨站攻击

    目录 1 XSS跨站攻击简介 1 1.1 什么是XSS 1 1.2 XSS的分类 1 1.3 XSS的危害 1 2 XSS的攻击原理 1 2.1 本地式漏洞攻击 1 2.2 存储式漏洞攻击 2 2.3 ...

  2. 云锁Linux服务器安全软件安装及防护webshell、CC、XSS跨站攻击设置

    无论我们在使用电脑,还是使用VPS/服务器的时候,最为担心的就是服务器是否有安全问题,尤其是网站服务器再遭受攻击的时候如何得到防护.对于大 部分站长用户来说,我们可能只会使用基础的环境,如果真遇到问题 ...

  3. Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...

  4. 用shell脚本批量进行xss跨站攻击请求

    由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...

  5. Cross-Site Scripting XSS 跨站攻击全攻略 分类: 系统架构 2015-07-08 12:25 21人阅读 评论(2) 收藏

    原文:http://a1pass.blog.163.com/blog/static/2971373220087295449497/ 题记:这是我在<黑客X档案>08年第5期发表的一篇文章, ...

  6. 应用安全-Web安全-XSS(跨站攻击)攻防整理

    分类 反射型 存储型 DOM型 XSF(Flash XSS) PDFXSS MHTML协议跨站(MHTML,data) 字符编码(UTF-7 XSS) 富文本编辑器测试 - 输入框 <img S ...

  7. web安全性测试——XSS跨站攻击

    1.跨站攻击含义 XSS:(Cross-site scripting)全称"跨站脚本",是注入攻击的一种.其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布 ...

  8. XSS跨站攻击靶场-通关笔记

    XSS攻击是Web攻击中最常见的攻击手法之一,XSS中文名跨站脚本攻击,该攻击是指攻击者在网页中嵌入恶意的客户端脚本,通常是使用JS编写的恶意代码,当正常用户访问被嵌入代码的页面时,恶意代码将会在用户 ...

  9. xss跨站攻击原理

    https://www.cnblogs.com/frankltf/p/8975010.html 跨站脚本攻击:通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,一旦攻击成功,它可以获取用户 ...

随机推荐

  1. vs 基础

    1     写入 读取: 1)  写入:Console.Write("hello china")                                      光标紧跟 ...

  2. Jmeter 使用正则表达式提取响应结果中的值

    正则表达式提取的界面如下图: apply to: Main sample and sub-samples:作用于父节点取样器及对应子节点取样器Main sample only:仅作用于父节点取样器Su ...

  3. Linux学习笔记(九)Vim文本编辑器的使用

    Vim文本编辑器的使用 Vim的工作模式 1.命令模式 2.输入模式 3.编辑模式 进入Vim 1.使用Vim打开文件 2.直接进入指定位置 Vim基本命令 1.插入命令 2.光标移动命令 3.使用V ...

  4. ADO.NET(一)

    最近在公司有用到了ADO.NET技术,由浅入深的复习一下. 如图所示,水源就像一个水库,进水龙头就像Connection,同理,抽水机:Command,输水管:DataAdapter 或 DataRe ...

  5. 使用docker安装codimd,搭建你自己的在线协作markdown编辑器

    目录 一.前言 二.codimd是什么? 2.1 源于hackmd的超好用markdown编辑器 2.2 codimd的作用 三.安装和使用 3.1 安装前需要知道的 3.2 安装步骤 3.2.1 创 ...

  6. 《剑指Offer》- 连续子数组的最大和或最小和

    前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...

  7. all_user_func()详解

    来源:https://blog.csdn.net/moliyiran/article/details/83514495 call_user_func — 把第一个参数作为回调函数调用 通过函数的方式回 ...

  8. Java演示设计模式中的写代码的代码

    下边代码内容是关于Java演示设计模式中的单件模式的代码,应该是对小伙伴们有所用处. public class SimpleSingleton { private static SimpleSingl ...

  9. java中文乱码解决之道(七)—–JSP页面编码过程

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...

  10. Hyperf基础教程

    前提说明 本教程适用于新手.老手,也适用于任何操作系统,包括Windows.linux.MacOS 介绍 Hyperf 是基于 Swoole 4.4+ 实现的高性能.高灵活性的 PHP 协程框架,内置 ...