BUUCTF——强网杯 `随便注`

buuctf 随便注

不经一番寒彻骨,怎得梅花扑鼻香。

近期打算开始写博客;收到学长的影响,觉得写博客是个好习惯;今天就开始buuctf上边的题目;并进行一些总结;

打开题目看到如下的界面

3HJXBd.png

我们输入1进行提交,观察url可以看到是进行get方式提交,我们经过简单的fuzz测试之后发现存在注入漏洞。(堆叠注入)

我们很清楚的知道在mysql中,主要是在命令行之中,每一条语句结尾加;表示语句的结束。我们便考虑考虑是否我们inject这样带有;的语句从而打到我们的效果呢?有了想法就可以做这个题,当我们加上;终结了前一条语句的执行之后再来输入我们的语句,服务器就会将我们的语句进行相应的执行,就可以返回我们理想的结果。

【这里着重先介绍一下union语句和我们堆叠注入造成的结果有什么不同】:union只是可以执行我们熟知的查询,达到查询信息返回的结果,然而我们的堆叠注入是可以执行任意的sql语句,比如DELETE FROM products.我们注入了这个语句之后就会有如下的效果:Select * from products where productid=1;DELETE FROM products;这个代码会造成我们查询完数据之后顺带将整个表进行删除,所以说堆叠注入的影响可想而知;

转入正题;

我们经过fuzz发现这个题目是堆叠注入,并且是字符型的注入;所以我们嵌入语句。1';show databases;我们会发现

3HYPgS.png

即时触发了我们的语句,列出了数据库;毋庸置疑,可以注入,继续读表;

3HYQvF.png

ok现在我们可以看到第一个表是1919810931114514 另一个为words ;好办,现在继续读列;

3HYLGV.png

可以看到我们读到列,里面有flag。之后我们应该如何读取flag呢?当然,作为“强网杯”的题目如果这么轻易就可以让你读到flag;那么他们的设计人员也该辞职了,这里要想读到flag,需要来一点骚姿势,这里有三种方法,(1)预处理;(2)修改列名和位置从而方便读取,(3)非标准的handler语句,这里我自己的方法是第三种,我也着重介绍第三种;

handler命令其实一直以来就是mysql中的一个神秘的命令。这种命令的一个好处就是,因为它是非标准的sql命令,所以可以极大的减低优化器的解析和优化开销,从而使速度提高不少,印象里记得大概是(%40多吧)【神级别优化】,但是也是有缺点的,就是handler虽然可以通过指定的索引去访问数据,但是不支持DML的操作;【很无语】{也或许是它不火的原因吧};

我们现在就使用handler命令来查询;

3HtudA.png

得到flag;这里解释一下命令,第一句handler xxxxxx open;顾名思义打开什么表,handler xxxxxx read first;读取第一条内容;

至于其他两种方法,不能说不是好办法,但是他们需要的时间实在是太长,

(2)这个是第二种方法;因为我们从它的报错之中看出过滤了很多的字符,但是没有过滤rename和alert,所以我们就可以使用相应的语句将19198******4514的表改为words;将words的表名改为word1;因为经过简单的fuzz测试,我发先用一般的语句它都不会返回任何的信息,所以断定后台的语句为Select id data from words where id =...也就是说它已经默认了我们只能从words里面读取数据,所以我们就修改表名就ok;(脑洞)

1’;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#

也得到flag;3HJrt0.png

猜你喜欢

转载自www.cnblogs.com/Wanghaoran-s1mple/p/12422744.html