实训课上我们进行了SQLi-Labs 第32关的挑战,在这一关中,我们将面对一个通过反斜杠转义来防御SQL注入的系统。我们需要利用编码差异绕过这种防御机制。具体来说,通过宽字节注入技术,利用数据库和页面编码不同的特点,我们可以成功逃逸出被转义的单引号,从而进行SQL注入。
第32关
判断是否存在注入:and 1=2,发现没有生效
闭合以后,发现页面多出反斜杠
改成双引号,结果同样
注入单引号闭合时被反斜杠转义,查看源码发现简单过滤。通过检查编码设置,尝试利用宽字节绕过。原理是利用数据库和页面编码不同:PHP请求MySQL时经过GBK编码,并进行魔术引号处理。由于GBK是双字节编码,提交的%df字符和反斜杠组成新汉字,数据库按GBK处理后,单引号逃逸。
在第32关的挑战中,我们通过以下步骤成功利用宽字节注入技术绕过了转义防御机制:
首先,尝试常见注入语句 `and 1=2`,发现没有生效。然后,尝试闭合单引号和双引号,发现都被反斜杠转义。接着,利用GBK编码和特定字符 `%df` 逃逸转义。最后,确认注入点并执行SQL注入,成功获取数据库信息。这一关让我们深入理解了宽字节注入技术的原理和应用场景,学会了在复杂防御机制下进行SQL注入,提升了漏洞发现和利用能力。