宽字节注入详解

一、背景:

在以前的网站的,有部分网站的编码方式为gbk,而数据库的编码为utf-8。其中最重要的特定是gbk为两个字节表示一个汉字 ,而utf-为三个字节表示一个汉字 ,这种差异性就能创造注入的可能。 同时Web 应用为了防御 SQL 注入,会对用户输入中的特殊字符(如 ')进行**转义,**如'则转义成 " \' ",它们在十六进制下为%5c%27,而这在gbk编码环境下,如果我们再在前面加一个字节,如%df这就会与%5c又重新构成一个汉字,这就把%27也就是那个 " ' "逃逸出来了吗?

不过当今环境很难实现这种情况了,毕竟只要全部统一为同一种编码方式就能防御了,但也不妨我们研究研究。

二、靶场测试

这里我门就sqli靶场的Less32关来举例。

我们只加了一个 ' 观察一下,发现经过了转义,那么我们在在前面加一个字节试一试,毕竟在gbk环境下两个字节就能使其构成汉字。

结果是出现了报错,如何才能出现报错?说明语法出了问题,这也就意味着我们成功实现把 ' 逃逸出来无法正常实现闭合。%df%5c 他们在gbk编码中表示繁体的"运",那么这个%27的单引号就成功逃逸。

在原程序中就类似于图中情况。

当成功实现逃逸之后的注入步骤就相当的基础了,至此就实现了宽字节注入。

相关推荐
今天AI了吗1 小时前
Agent & AI 名词大扫盲
数据库·人工智能·python·sql·rust
浅念-1 天前
MySQL 索引底层完整详解|磁盘Page|B+树推导|聚簇非聚簇索引|索引SQL操作
大数据·数据库·b树·sql·mysql·面试·职场和发展
sbjdhjd1 天前
企业站 SQL 注入实战:PCRE 正则回溯绕过关键词 WAF 完整实战 | 进阶02
sql·安全·web安全·网络安全·ai·开源·php
茶本无香1 天前
通用报表自动化框架:Java调用Shell传参执行PostgreSQL SQL模板
java·sql·postgresql·shell
bransyin2 天前
一个 SQL 字段到底是怎么算出来的?我做了一个能给出“证据”的血缘工具
大数据·sql·ai·血缘
weixin_431600442 天前
NestJS 入门(9):连上数据库,SQL 写在哪?
数据库·后端·sql·学习·nest.js
roman_日积跬步-终至千里2 天前
【Spark与SQL网关(1)】Spark 提交模式与 Spark Thrift Server:到底在“提交”什么
大数据·sql·spark
01_ice2 天前
MySQL表的约束
数据库·sql·mysql
AlfredZhao2 天前
SQL JOIN 写法:把多表关联条件写清楚
sql
Full Stack Developme3 天前
SQL 注入 的历史及设计工作原理
数据库·sql