攻防世界-web高手进阶篇-warmup

打开题目链接后只有一个滑稽??(那就看看它里面有啥吧)

想啥呢,是审查源码啦

可以看到有注释source.php,访问后可以看到其源码

又发现一个hint.php文件,先访问再说

提示我们flag在ffffllllaaaagggg里面,此时题目已经完成一半啦

接着看回source.php源码

可以看到最后的include 是可以动态构造参数的,那应该就是解题关键了

不过要经过三个判断

第一个:检查一个变量是否为空

第二个:是否为字符串

第三个:通过函数来检查

我们要构造的payload本身就满足前两点所以无视

重要是第三点的这个函数

函数作用是分三步检查传进来的参数是否满足白名单:

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

第一步:

只要我们传的参数是source.php或者hint.php则返回真

如果不满足继续往下判断

第二步:

取传进参数首次出现?前的部分

再进行白名单判断

如果还不满足继续往下判断

第三步:

先把传进的参数做urldecode

接着就和第二步一样

都不满足就输出"you can't see it"并且返回假

要想满足这些条件那我们传的参数就只能是这种形式

($_REQUEST 是通过 GET,POST 和 COOKIE 输入机制来传递参数,下面偷懒就用get方式传值)

http://111.198.29.45:48818/source.php?file=source.php?(payload)

http://111.198.29.45:48818/source.php?file=hint.php?(payload)

上面这种形式就符合函数的第二个判断

如果闲着无聊也可以满足第三种,就是双重url编码,传过去的时候会自动解码一次,再加上函数的一次就会满足条件

http://111.198.29.45:48818/source.php?file=source.php%253f(%253f就是?的两次url编码)

http://111.198.29.45:48818/source.php?file=hint.php%253f

符合条件后include得到得值就变成:

include source.php?(payload)

因为source.php?(或hint.php?)是固定不能改的,那么我们能利用的漏洞只有本地文件包含了

(本人技术比较菜也只能想出这种了,如果还有别的方法还望大佬们赐教)

flag文件名也知道了就差路径不知道,一个一个试可以得到

source.php(或hint.php)?/../../../../../../ffffllllaaaagggg

ok!flag get√

可能会有疑问为啥include source.php(或hint.php)?/../../../../../../ffffllllaaaagggg能执行成功

看官方对include的定义

因为我们的参数是有/../../../../../../这样的路径所以符合最后一段话如果定义了路径,就会忽略/前的字符串而去找/../../../../../../ffffllllaaaagggg这个文件

-----------------------------------------------------------------我是分割线--------------------------------------------------------------

 

看完了觉得不错就点个赞或者评论下吧,感谢!!!

如果本文哪里有误随时可以提出了,收到会尽快更正的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章