1. SQL注入攻防实战:从基础到高级技巧全解析
作为一名长期从事Web安全研究的从业者,我经常在各种CTF比赛和实际渗透测试中遇到SQL注入漏洞。今天我将分享几个典型场景下的SQL注入实战案例,包含宽字节注入、Base64编码参数注入、联合查询注入、报错注入以及文件读取等高级技巧。这些案例都来自真实的靶场环境,每个技巧都经过我多次实战验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 宽字节注入原理与实战
2.1 GBK编码环境下的注入突破
在GBK编码的网站中,当开发者使用addslashes或类似函数对单引号进行转义时(将'变为'),我们可以利用宽字节特性绕过过滤。原理是GBK编码中两个字节代表一个汉字,当%df遇到转义符\(编码为%5c)时,会组合成%df%5c,这恰好是一个合法的GBK字符"運"。
sql复制admin %df%27 or 1=1#
这条payload中:
- %df%27会被解析为一个整体字符
- 单引号因此未被转义
- 后续的or 1=1实现永真条件
关键点:这种注入方式仅在使用GBK/GB2312编码且未正确设置mysql_set_charset的PHP环境中有效。现代框架通常已修复此问题。
2.2 防御方案
开发者应做到:
- 统一使用UTF-8编码
- 使用PDO预处理语句
- 设置正确的连接字符集:
php复制$db->set_charset('gbk');
3. Base64编码参数注入
3.1 绕过编码层过滤
某些系统会对输入参数进行Base64编码后存储,这看似增加了注入难度,实则可能引入新的漏洞。关键是要构造能够被正确解码的payload。
python复制def encode_base64(payload):
payload_bytes = payload.encode('utf-8')
base64_bytes = base64.b64encode(payload_bytes)
return base64_bytes.decode('utf-8')
3.2 布尔盲注实战
当系统不返回详细错误信息时,布尔盲注是有效手段。通过条件判断逐个字符爆破数据:
sql复制zhangsan' a
