宽字节注入

概念


单字节字符集: 所有的字符都使用一个字节来表示,比如 ASCII 编码。

多字节字符集: 在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示。 两位的多字节字符有一个前导字节和尾字节。 在某个多字节字符集内,前导字节位于某个特定范围内,尾字节也一样。

UTF-8 编码: 是一种编码的编码方式(多字节编码),它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

前提条件要有宽字节注入漏洞


1、首先要满足目标程序使用双/多字节字符集进行解析

2、其次不同字符集范围不一样,可能低位不包含单字节字符集的字符,这样就没办法了,所以要保证在该种字符集范围中包含低字节位,比如 0x5C(01011100) 的字符,即转义符\。 宽字节带来的安全问题主要是吃ascll字符(一个字节)的现象

magic_quotes_gpc(魔术引号开关)

magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。为了绕过magic_quotes_gpc的\,于是乎我们开始导入宽字节的概念。

我们发现\ 的编码是%5c,然后有一个‘運’字印入我们的眼帘,根据gbk的编码,‘運’字是%df%5c。

例如:

SELECT * FROM users WHERE id='1\'' LIMIT 0,1

这条语句因为\使我们无法去注入,那么我们是不是可以用%df吃到%5c,因为如果用GBK编码的话这个就是運,然后成功的让闭合单引号逃逸了转义字符。

例如:

SELECT * FROM users WHERE id='1�\'#' LIMIT 0,1

�\ 实际上就是那个運字。

宽字节注入的基本原理就是找用一个16进制的字符与魔术引号产生的反斜杠合成一个汉字,从而逃逸出去,使SQL语句代码可以成功闭合执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在PHPMySql语句中存在着宽字节注入漏洞,MySQL宽字节注入漏洞是SQL注入漏洞攻防技术相互促进的一个典型例...
    BerL1n阅读 2,840评论 1 4
  • 01 背景知识 字符集 在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二...
    Ackerzy阅读 2,979评论 0 7
  • 概述 首先要先了解一个宽字节注入,宽字节注入主要是源于程序员设置数据库编码与php编码设置为不同的两个编码,这样就...
    二潘阅读 2,697评论 0 1
  • 转自一个不知名大佬的笔记--------------------------------less-32------...
    Yix1a阅读 694评论 0 0
  • CTF入门到放弃 为什么说是从入门到放弃呢?(开个玩笑)如果说大家对CTF有了解的话,其实应该知道CTF是一个什么...
    安全牛课堂牛油果阅读 947评论 0 3

友情链接更多精彩内容