掌控安全学院SQL注入靶场宽字节注入
在php中,magic_quotes_gpc这个函数为on时,就开启了转义功能,另外addslashes和mysql_real_escape_string也可以实现转义功能。可转移的的内容包括:单双引号、反斜杠、NULL字符。
宽字节注入过滤原理:
php发送请求到mysql时经过一次gbk编码,php会获取到数据进行魔术引号的处理。因为gbk时双字节编码,所以我们提交的"%df"这个字符和转义的反斜杠组成了新的汉字,然后数据库处理时是根据GBK去处理的,这个时候单引号就逃逸了出来。
宽字节注入绕过原理:
我们提交的数据会被加入"\","\"的编码是"%5c",我们在前面加上"%df"就变成了”%df%5c“,这个时候就变成了繁体字"運",变成了一个多个字节的字符。
为什么最后的查询语句表名要用16进制编码?
因为要用到单引号,会对查询产生影响,单引号会被加上反斜杠。
宽字节注入不是报错注入,且宽字节注入适合所有场景。
'admin'处除了16进制绕过外还有什么方法?
还可以通过子查询的方式绕过,将原来查询的'admin'换成
(select table_schema from information_schema.tables where table_schema=database() limit 0,1)
解决思路
1.判断是否转义 2.使用字符让其与\形成一个汉字 3.判断是否存在SQL注入 4.判断有几个字段 5.爆破库名 6.爆破表名 7.爆破字段名 8.爆破字段值宽字节注入(一)
第一关:
输入单引号,发现被转义了
尝试闭合掉转义字符
判断是否存在SQL注入
http://inject2.lab.aqlab.cn/Pass-15/index.php?id=1%df' and 1=1-- qwe http://inject2.lab.aqlab.cn/Pass-15/index.php?id=1%df' and 1=2-- qwe
判断字段数
将china_flag要转成十六进制
第二关
判断是否有注入
在利用布尔盲注就可以了,或者是联合查询
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?