Bugku SQL注入实战:绕过黑名单的5种骚操作(附完整Payload)
Bugku SQL注入高阶技巧突破黑名单的实战艺术在网络安全攻防演练中SQL注入始终占据着OWASP Top 10的重要位置。而真实环境中的防御机制往往比CTF题目更加复杂其中黑名单过滤是最常见的防护手段之一。本文将深入剖析五种突破黑名单限制的创造性方法每种技巧都附带可直接复现的Payload示例。1. 黑名单过滤机制深度解析现代Web应用通常采用多层防御策略来阻止SQL注入攻击。以Bugku平台这道题为例其防护逻辑主要体现在is_trying_to_hak_me()函数中function is_trying_to_hak_me($str) { $blacklist [select, union, and, or, where, from]; if (preg_match(/[^0-9a-zA-Z][^0-9a-zA-Z]/, $str)) { return true; } foreach ($blacklist as $keyword) { if (stripos($str, $keyword) ! false) { return true; } } return false; }这个过滤机制有三个关键特征关键词黑名单包括SELECT、UNION等常见SQL关键字单引号检测通过正则表达式检查单引号的使用方式大小写不敏感使用stripos而非strpos进行匹配注意黑名单过滤的最大弱点在于已知的未知——它只能防范已知的攻击模式对未知变体无能为力。2. 字符编码与变形技术2.1 十六进制编码绕过将SQL关键词转换为十六进制表示是最基础的绕过方式SELECT * FROM users → 0x53454c454354202a2046524f4d207573657273实际Payload示例1 UNION SELECT 1,2-- → 1 0x554e494f4e 0x53454c45435420312c322d2d2.2 URL编码与多重编码利用URL编码可以拆分关键词union → %75%6e%69%6f%6e更高级的多重编码select → %2573%2565%256c%2565%2563%25742.3 Unicode规范化攻击利用Unicode等价性制造混淆SELECT → (全角字符)3. 注释符的创造性应用3.1 内联注释拆分MySQL特有的/**/注释可以拆分关键词SEL/*任意内容*/ECT实际案例1 UNI/**/ON SEL/**/ECT 1,4fc82b...$1--3.2 注释符替代空格当空格被过滤时可用注释替代SELECT*FROM[users] → SELECT/**/FROM/**/[users]3.3 版本特异性注释利用数据库版本特性/*!50000select*/ → 仅MySQL 5.0.0以上版本执行4. 字符串拼接与非常规语法4.1 字符串拼接绕过利用CONCAT函数构建关键词CONCAT(sel,ect) → 等效于select4.2 算术运算替代逻辑运算当AND/OR被过滤时1 AND 11 → 1-014.3 位运算替代布尔逻辑OR 11 → |15. 上下文感知型注入技巧5.1 二次注入利用即使当前输入被过滤可能被存储后再次使用时生效注册用户名admin-- 后续查询时生效5.2 参数污染攻击利用参数重复覆盖?useradminuseradmin--5.3 JSON/XML注入现代API常用格式中的注入点{user:admin--,pass:123}6. 实战Payload库下表总结了可直接复用的Payload模板过滤类型绕过方法示例Payload关键词过滤注释拆分SEL/*xxx*/ECT空格过滤内联注释UNION/**/SELECT引号过滤十六进制0x61646d696eAND/OR过滤位运算1函数过滤字符串拼接CONCAT(sel,ect)7. 防御建议与最佳实践虽然本文重点在攻击技巧但负责任的安全研究必须包含防御方案白名单优于黑名单采用严格的输入验证参数化查询使用预处理语句最小权限原则数据库账户限制权限深度防御结合WAF、输入过滤、输出编码在最近的一次渗透测试中我们发现某系统虽然过滤了UNION SELECT但允许UNION ALL SELECT这种变体。这种防御缺口正是由于黑名单的不完整性导致的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2435606.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!