You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL注入查询中CHAR()拼接含义及完整字符编码对照表获取方法

SQL注入场景下CHAR()函数拼接用法答疑

常见的CHAR()拼接注入Payload示例如下:

UNION ALL SELECT CHAR(113)+CHAR(106)+CHAR(122)+CHAR(106)+CHAR(113)+CHAR(110)+CHAR(106)+CHAR(99)+CHAR(73)+CHAR(66)+CHAR(109)+CHAR(119)+CHAR(81)+CHAR(108)+CHAR(88)+CHAR(113)+CHAR(112)+CHAR(106)+CHAR(107)+CHAR(113),NULL--

问题1:多CHAR()函数加号拼接写法的作用,单个CHAR()参数是否对应单个字符

  • 首先明确基础规则:所有主流数据库的CHAR()函数实现中,传入的单个整数参数就对应一个字符,整数值是该字符在当前数据库字符集下的编码值。以最常用的ASCII字符集为例,CHAR(107)对应小写字母k,CHAR(113)对应小写字母q,因此CHAR(107)+CHAR(113)拼接后得到的就是字符串kq;提到的CHAR(113)+CHAR(106)+CHAR(122)+CHAR(106)解码后为qzjq。
  • 这种拆分拼接写法是SQL注入里非常经典的绕过技巧:绝大多数WAF、输入过滤逻辑都是基于明文关键字、单引号特征做拦截,用CHAR()拼接构造字符串全程不需要使用单引号,也不会出现连续的明文字符串,可以轻松绕过基于正则、关键字匹配的防护规则。
  • 补充说明:不同数据库的CHAR()语法有细微区别,比如MySQL支持给CHAR()传入多个参数直接返回拼接完成的字符串,CHAR(113,106,122,106)和四个单参数CHAR()用加号拼接效果完全一致;但MSSQL、Access等数据库不支持CHAR()多参数传值,必须用+逐个拼接单参数CHAR()的返回结果,也就是示例Payload里的写法。

问题2:获取CHAR编码值与对应字符映射列表的渠道

  • 基础ASCII编码(编码值0-127)是通用公开标准,覆盖英文大小写、数字、常用英文标点,直接查询通用ASCII码表即可拿到完整映射关系。
  • 最准确的方式是直接在目标数据库中用内置函数查询:MySQL环境下用ORD('待查询字符')就能拿到对应字符的整数编码,MSSQL环境下用ASCII('待查询字符')可以拿到对应值,这种方式拿到的编码和目标数据库的CHAR()函数完全匹配,不会出现字符集不兼容的问题。
  • 本地工具也可以直接查询全量映射:Windows系统自带的「字符映射表」程序、各类代码编辑器自带的字符编码查看功能,都可以查询不同字符集下字符和编码值的对应关系,无需依赖外部站点。

内容的提问来源于stack exchange,提问作者savio ferrao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 16:33:25