[强网杯]easy_sql

Posted F1ght!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[强网杯]easy_sql相关的知识,希望对你有一定的参考价值。

提交1和2会回显一个数组:

相当于1对应的值为“hahahah”

是key-value形式的输出。
在这里插入图片描述
尝试输入1’.返回报错,有注入漏洞

尝试1’or 1=1#,并用#截断,输出了三个数组:
在这里插入图片描述
尝试堆叠注入,即注入多组sql语句,其中有;隔开,
在这里插入图片描述
输入show databases返回了所有的数据表,

尝试查询表名:show tables;
在这里插入图片描述
显示了表的名字,在使用sql语句,show columns from xx,来查询其中列的名称:
在这里插入图片描述
上图是word的列名,

下图,再查出1919…中的列名:
在这里插入图片描述
用sql语句注入的方式查询到了两个表’1919810931114514’和’words’,之后又查出表words有id和data两个属性,而1919…中只有’flag’一个属性,暗示flag在表’1919…'中的属性之下。

尝试利用select * from ‘1919819931114514’,直接搜索出flag,但明显被后端的preg_match过滤掉了:(如下图)
在这里插入图片描述
其表中的存储结构类似于:
在这里插入图片描述
刚开始输入’1’,'2’时的查询,是从该两个数据表中的一个进行的查询,
在这里插入图片描述
实际上,在’show tables‘那个环节中已经看出整个数据库只有两个数据表,因此结构如下:
在这里插入图片描述
查询输入的1和2还有114514明显是整型,因此只能在id里,因为id的类型为int,可以猜出hahah和miaomiaomiao,ys等是存储在data中,因为data的类型是char.

推测存储在flag中的varchar(100)类型十分像flag.

但是其对select,drop,insert,where等函数进行了正则过滤,限制了对数据库的增删改,只能通过id,即输入数字进行对表word的查询来得到数据。

那么,就有一个问题,其没有对rename以及alter等函数进行过滤,

就有如下方案:

(1)将表words的名称改为其他的,

(2)将1919810931114514改为words.

(3)将flag改为id,

(4)在输入栏中输入1’ or 1=1,将其中的数据全部输出,即为flag.

总结:

本来其查询方法是通过输入的值,在表words查找符合条件的id,输出其id-value,将’1919…'改名为words,flag改为id,则可合法输出flag.

构造sql语句:

1' ; rename tables `words` to `word1` ;
 rename tables `1919810931114514` to `words` ; 
 alter table `words` change `flag` `id` varchar(100);# 

输入上述语句后,数据库的表被改变,

((alter table 表名)意为对该表进行改变)

在输入万能密码:1’or 1 = 1#

在这里插入图片描述
则输出flag

以上是关于[强网杯]easy_sql的主要内容,如果未能解决你的问题,请参考以下文章

2022强网杯web(部分)

2018 强网杯raisepig解题过程

2021强网杯全国网络安全挑战赛Writeup

2021强网杯[强网先锋]赌徒

强网杯2019—UPLOAD

刷题记录:[强网杯 2019]Upload