sqli-labs靶场通关笔记:第32-33关 宽字节注入

第32关 宽字节注入

查看一下本关的源代码:

复制代码
function check_addslashes($string)  
// 定义一个用于过滤特殊字符的函数,目的是转义可能用于注入的特殊符号
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);           
// 转义反斜杠:将单个反斜杠替换为两个反斜杠(防止反斜杠被误用为转义符)
    $string = preg_replace('/\'/i', '\\\'', $string);                                
// 转义单引号:将单引号替换为"反斜杠+单引号"(防止单引号闭合SQL字符串)
    $string = preg_replace('/\"/', "\\\"", $string);                                 
// 转义双引号:将双引号替换为"反斜杠+双引号"(防止双引号闭合SQL字符串)     
    return $string; 
 // 返回处理后的字符串
}

自定义了一个函数,过滤了单引号,双引号和反斜杠。这里输入的单引号被转义成反斜杠加单引号。

但是在源代码中写到本关使用GBK编码,GBK为双字节编码,一个汉字由两个字节组成。利用多字节字符编码特性,构造特殊字符,使原本被转义的字符在编码转换过程中逃逸出来,从而产生了宽字节注入攻击。

举例,%27 是单引号 ' 的URL编码。%bf 是一个特定的字节(十六进制为0xBF),它属于GBK编码的第一个字节范围,所以当它后面跟着一个字节(比如0x5C,即反斜杠)时,它们会组合成一个GBK字符。

漏洞触发过程:

  1. 用户输入:%bf%27 (即0xBF 0x27)。

  2. PHP的转义函数检测到单引号(0x27),于是在它前面加上反斜杠(0x5C)。所以进一步变成为:0xBF, 0x5C, 0x27。

  3. 然后这个字符串被拼接到SQL语句中,SQL语句在数据库里执行时,数据库使用的是GBK编码,它会将两个字节看作一个汉字。其中0xBF和0x5C(反斜杠)组合在一起,被当作一个GBK字符(这个字符是"縗",读cuī)。这样,0x27(单引号)就独立出来了,导致转义失效。

测试:

这里只输入一个单引号会被过滤,利用宽字节注入使单引号不被转义,则union查询成功。

第33关 使用内置函数的宽字节注入

本关使用的是PHP内置的addslashes函数,它的作用是添加反斜杠进行转义。区别在于上一关是自定义函数,这一关是用内置函数,但都是宽字节注入,解法相同。

相关推荐
黄俊懿18 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第八节:网关-注入攻击与预防
sql·网络安全·架构·系统架构·架构师·架构设计
黄俊懿18 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第七节:网关-XSS攻击与预防
网关·网络安全·架构·系统架构·架构师·xss·架构设计
数据知道18 小时前
.NET 反序列化漏洞——ViewState 与 BinaryFormatter 实战深度剖析
网络·网络安全·.net
HackTwoHub21 小时前
Butter_Cookie 黄油曲奇|浏览器渗透插件,云存储检测、XSS、SQL 注入一站式 Web 安全测试工具
前端·sql·安全·web安全·网络安全·自动化·xss
AI备忘录1 天前
(十六)GRE/IPSec 隧道配置命令五厂商对照:华为 华三 锐捷 迈普 思科
运维·服务器·网络·网络协议·网络安全·华为
Eason_LYC2 天前
【GetShell】DataEase H2 JDBC远程命令执行漏洞(CVE-2025-32966+CVE-2025-49001)
网络安全·漏洞复现·dataease·白帽子·cve-2025-32966·cve-2025-49001·远程命令执行
白猫不黑2 天前
运维如何转安全(个人经验篇)
运维·学习·安全·web安全·网络安全·信息安全
Demons_kirit2 天前
PortSwigger网络缓存欺骗(4)
网络安全·缓存
白猫不黑2 天前
网络空间安全/信息安全专业学习规划(超级详细版)
运维·学习·安全·web安全·网络安全·信息安全
2601_966377132 天前
2026年教育数据安全研修班举办,数达安全发布密评工具箱与行业商用密码安全解决方案
网络安全·数据安全·2026年教育数据安全研修班