宽字节 GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象。...重点:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。 PHP测试代码: Default <!...同理可得 由上文可得宽字节注入是由于转编码而形成的,那具有转编码功能的函数也成了漏洞的成因。...sql=root%e9%8c%a6¶=%20or%201=1%23 总结: 宽字节注入跟HTML页面编码无关。...转编码函数同样会引起宽字节注入,即使使用了安全的设置函数。
在一个CTF练习的网站,看到了一个宽字节注入的题目,我是一个web萌新,没什么经验,一开始也没有想到是宽字节,还是一位朋友给我提到的,让我猛然大悟,咳咳。。。做一些总结。...一、了解一下宽字节注入原理 前提: 1、我们都知道,在防御SQL注入的时候,大多说都是使用的过滤特殊字符,或者使用函数将特殊字符转化为实体,就是说在字符转义,添加‘\’。这里第一条就是有这个机制。...2、设置宽字节字符集,这里为GBK字符集,GBK字符集占用两个字节。关键就在于这个设置字符集。...对应的编码是%df%5c’.这时候网站字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为%df\是一个汉“運’”,这样的话,单引号前面的\就不起作用了,从而转义失败,题目就会出现报错信息。...我们就以网站的题目测试一下: 1、查看网页源码 出现字符集gb2312,这时候就应该想到宽字节注入 2、报错测试可注入 出现了报错信息,因为构成的语句中会多出一个单引号。
昨晚折腾了一晚上,把大致的一些东西整理了下,为团队纳新选了几首音乐素材..然后团队的一个表弟来问我宽字节注入的事情了...然后就就才抽空写了一点作为上一篇mysql注入的补充。...使用addslashes来防御(addslashes函数会把' " %00 \ 这些字符前面加上一个\来转义他们) 设置数据库字符为gbk导致宽字节注入 ? 这样是失败的 ?...用get请求提交~ 这样url编码就会被解码,然后%df和%5c被还原成宽字节,運。...宽字节的问题我就不多说了,这边再提了一下是因为团队的一个表弟问的… 传送门: 面试中碰到的坑之宽字节(二) 要补充的是,錦”这个字,它的utf-8编码是0xe98ca6,它的gbk编码是0xe55c。...关于绕过: 一:字符编码问题导致绕过 · 2.1、设置数据库字符为gbk导致宽字节注入 · 2.2、使用icon,mb_convert_encoding转换字符编码函数导致宽字节注入 二:编码解码导致的绕过
—- 网易云热评 一、原理 1、单字节字符集: 所有的字符都使用一个字节来表示,比如 ASCII 编码(0-127) 2、多字节字符集: 在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有...)用单个字节来表示。...3、宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字 二、addslashes()函数 1、addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。...2、预定义字符是:单引号(’),双引号(”),反斜杠(\),NULL 3、实例 <?php $ss=addslashes('aiyou"bu"cuoo'); echo($ss); ?...我不配/彩虹”); 5、中文编码问题,修改my.ini文件 [mysql] default-character-set=gbk [mysqld] character-set-server=gbk 四、宽字节注入
1.多字节字符串与宽字符串 说到多字节字符串与宽字符串,不得不说一下多字节字符与宽字符。...宽字符指的是由统一码联盟制定的Unicode编码方案收录的字符,使用4个字节来表示一个字符。关于字符编码可参见博文精述字符编码。...2.多字节与宽字符串的相互转化 使用C/C++实现多字节字符串与宽字符串的相互转换,需要使用函数C标准库函数mbstowcs和wcstombs。...Unicode *@pram:cpMbs:多字节字符串;wcpWcs:宽字符串;wcsBuffLen:宽字符串缓冲区大小(单位宽字符);dEncodeType:多字节字符串编码类型,0:GBK,1:UTF8...:wcpWcs:宽字符串;cpMbs:多字节字符串缓冲区;dBuffLen:多字节字符串缓冲区大小(单位字节);dEncodeType:多字节字符串编码类型,0:GBK,1:UTF8 *@ret:-1:
文章源自【字节脉搏社区】-字节脉搏实验室 作者-墨子辰 宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象。...宽字节注入是利用msql的一个特性,mysql在使用GBK编码的时候,会认为俩个字符是一个汉字GBK编码,它的编码范围是0×8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223))...>ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。...通常导致编码转换的注入问题,尤其是使用php连接mysql数据库的时候,一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254)当设置gbk编码后,遇到连续两个字节...gbk 两个字节 gb2312两个字节 utg-8 三个字节 https://the-x.cn/UrlDecode.aspx 在线解码编码(百度就能找到) \' 编码为:%5C%27 ?
什么是宽字节?...如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节 像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节...英文默认占一个字节,中文占两个字节 什么是宽字节注入?...原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。...GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围) GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE
2内容速览 什么是宽字节?...如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节 像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节...英文默认占一个字节,中文占两个字节 什么是宽字节注入?...原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。...GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围) GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE
宽字节注入 西欧字母符号,通过1个字节来表示。东亚字符通过至少两个字节来表示。GBK编码就是用两个字节来表示中文区字符的一个编码标准。...GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE(高字节从81到FE,低字节从40到FE),剔除xx7F码位,共23940个码位。...条件 后台使用GBK编码的时候,存在着看不见的ascii码转换为GBK编码的转换过程,可以使用宽字节注入。 原理 编码转换存在着单字符被合并的情形 反斜杠对应url编码%5c,是单字节的。...在%5c前再加入一个单字节字符%dd(范围可以是81到FE之间),就成了%dd%5c 而当后端使用GBK编码的时候,会将合理的两个单字节ANSCII字符解析成一个双字节的GBK编码字符。
代码编译运行环境:Windows 64bits+VS2017+Debug+Win32 ---- 1.多字节字符与宽字符 说到多字节字符串与宽字符串,不得不说一下多字节字符与宽字符。...2.多字节与宽字符串的相互转化 使用C/C++实现多字节字符串与宽字符串的相互转换,需要使用C标准库函数mbstowcs和wcstombs。...下面给出多字节与宽字符串相互转化的实现。...Unicode *@pram:cpMbs:多字节字符串;wcpWcs:宽字符串;wcsBuffLen:宽字符串缓冲区大小(单位宽字符);dEncodeType:多字节字符串编码类型,0:GBK,1:UTF8...同样,函数调用bufSize=MultiByteToWideChar(CP_ACP,0,ss,-1,NULL,0);是用来获取多字节字符串转换成宽字节字符串后所占用空间的大小(单位宽字符个数),这是将第
0x01 开篇 本题用到考点是宽字节注入,遇到这种注入类型学习记录。...推荐两篇链接:浅析白盒审计中的字符编码及SQL注入 | 离别歌 Von的博客 | Von Blog 为方便自我下次忘记,总结一下: 1.宽字节涉及到编码问题,便于理解需要看一看 2.宽字节注入现在已经很少见...url编码: 空格 –%20 ‘ –%27 # –%23 \ –%5c 0x02 原理 我们注入时都会简单输入一个 ‘ 或者 ” ,进行测试,如果数据库过滤不严格就会产生报错,宽字节注入会在...GBK编码认为一个汉字占两个字节,%5c 是 / 的url编码,加上 %df ,前面两个字符就会拼接为 %df%5c被识别为一个汉字。这样,/ 自动消失,转义作用在此失效。...为证明上述字符编码都可以实现,下面混淆使用,但效果是相同的。
//头文件#include wstring_convert> cv; s5 = cv.to_bytes(ws5);// 宽字节转多字节...printf("test3 ws to s:%s\n", s5.c_str()); string s6("helloworld"); wstring ws6 = cv.from_bytes(s6);// 多字节转宽字节
GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节,但是这比起ASCII编码方式只用一个字节来说,是多了一倍啦!...宽字节带来的安全问题主要是是ASCII字符(一字节)的现象,即将两个ASCII字符误认为是一个宽字节字符。 4 addslashes函数: ?...由于ASCII编码使用一个字节,GBK编码使用两个字节。PHP语言编码为GBK,MYSQL编码也使用GBK编码。那么GBK这样占用字节较多的就叫宽字节编码。...由于宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围,所以使用的字符不一定只有 %df’),示例如下图:...PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。
注入原理 在magic_quotes_gpc=On的情况下,提交的参数中如果带有单引号’,就会被自动转义\’,使很多注入攻击无效, GBK双字节编码:一个汉字用两个字节表示,首字节对应0×81-0xFE...,尾字节对应0×40-0xFE(除0×7F),刚好涵盖了转义符号对应的编码0×5C。...0xD50×5C 对应了汉字“诚”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“诚”。 下面分析攻击过程: /test.php?...username=test%d5%27%20or%201=1%23 经过php的url解码 username=test 0xd5 0×27 0×20 or 0×20 1=1 0×23 (为了便于阅读,在字符串与...补充: 0xD50×5C不是唯一可以绕过单引号转义的字符,0×81-0xFE开头+0×5C的字符应该都可以。
为什么用宽字节 Windows中所有的底层函数都是Unicode编码 C++语言中“_T”是什么意思? 一. 多字节字符 二....C语言中的宽字符的使用 今天这个问题困扰了我好久,其实对于一个初学者来说,不必专研的太深,大致理解如下就可以了: 窄字符就是用一个字节表示一个字符,宽字符就是用≥2个字节表示一个字符。...A的意思为ASCII 在Windows.h中有一个UNICODE宏 底层调用宽字节版本 窄字节版本仅作编码转换 下面是2个字符串转换的函数: C++语言中“_T”是什么意思?...C语言中的宽字符的使用 1. 在C语言中使用wchar_t表示宽字符,使用L告知编译器使用Unicode表。wchar_t x1 = L’中’; 2....C语言宽字符操作函数 在使用函数时也是有区别的。
而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE. ******************************** 第一个就是宽字符到多字节字符转换函数,函数原型如下: int...CP_ACP 当前系统ANSI代码页(即多字节),在第二个函数里是宽字节,或者用0表示 CP_MACCP 当前系统Macintosh代码页 CP_OEMCP 当前系统OEM代码页,一种原始设备制造商硬件扫描码...第三个参数: lpWideCharStr: 待转换的宽字符串。 第四个参数: cchWideChar: 待转换宽字符串的长度,-1表示转换到字符串结尾。...***************************************************** 第二个是多字节字符到宽字符转换函数,函数原型如下: int MultiByteToWideChar...dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar ); 此函数把多字节字符串转换成宽字符串
1、函数过滤输入的函数:addslashesmysql_real_escape_string mysql_escape_string当字符的大小为一个字节时,称之为窄字节 例如ascii编码当字符的大小为两个字节时...,称之为宽字节 例如GB2312、GBK、GB8030mysql使用GBK编码时,默认的会认为两个字符为一个汉字,前一个字符的ascii值大于128,达到汉字范围2、宽字节注入原理: 当我们的mysql...使用GBK编码后,同时两个字符的前一个字符ASCII码大于128时,会将两个字符认成一个汉字。 ...当注入点使用转义函数对输入的特殊字符进行转义时,考虑宽字节注入。'...----->\'ascii 单字节GBK 宽字节(1)判断闭合方式http://124.222.124.9:8888/Less-32/?
日本约定了JIS编码规则,他们约定0x80-0xFF范围内的某两个字节来表示某个日文字符。 中国台湾约定了BIG5编码规则,约定0x80-0xFF范围内的某两个字节表示某个繁体中文字符。...所以我们拿到了一个ANSI字节串的时候,我们还必须知道这个字节串的编码,才能将这个字节串转换成相应国家的字符串。...3.UNICODE编码:宽字节编码 (一)“字节”的定义 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。...不同编码里,字符和字节的对应关系不同: ①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。...④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。 ⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
字符字节与编码 字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。...日本约定了JIS编码规则,他们约定0x80-0xFF范围内的某两个字节来表示某个日文字符。 中国台湾约定了BIG5编码规则,约定0x80-0xFF范围内的某两个字节表示某个繁体中文字符。...所以我们拿到了一个ANSI字节串的时候,我们还必须知道这个字节串的编码,才能将这个字节串转换成相应国家的字符串。...3.UNICODE编码:宽字节编码 (一)“字节”的定义 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。...④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。 ⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
++ wcstok() wcsstr函数原型:wchar_t *wcsstr( const wchar_t *string, const wchar_t *strCharSet ); 函数功能:在一个宽字符串...string中搜索另一个宽字符串strCharSet,若成功则返回一个指向后者第一次出现的位置,否则返回NULL 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。 ..._Str中寻找字符串_Control中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内 说明:返回指向_Str中第一个相匹配的字符的指针,如果没有匹配字符则返回空指针NULL wcsrchr...说明:wcsspn()从参数_Str字符串的开头计算连续的字符,而这些字符都完全是_Control所指字符串中的字符。...size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count ) 该函数将宽字符串转化为窄字符串。
领取专属 10元无门槛券
手把手带您无忧上云