BUUCTF学习笔记-WarmUp

BUUCTF学习笔记-WarmUp

时间:2020/03/04
考点:代码审计
BUUCTF学习笔记-WarmUp
文章图片

先看看题目的描述,写着PHP和代码审计,估计是那种直接给一段PHP源代码,然后构造请求来获得flag。
BUUCTF学习笔记-WarmUp
文章图片

打开题目链接只有一个表情包的图片,右键查看源代码提示我们访问source.php,访问source.php能发现到题目的源代码。
"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; }if (in_array($page, $whitelist)) { return true; }$_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; }$_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; } }if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) { include $_REQUEST['file']; exit; } else { echo "
BUUCTF学习笔记-WarmUp"; } ?>

代码审计下来能看到是要我们输入一个file的参数,只要这个参数不是非空、为字符串类型和能通过自定义的checkFile函数就能直接包含这个文件。
仔细看一下checkFile这个函数,是一个类似白名单的判断的函数。一开始设立了一个白名单,包括两个文件名source.php和hint.php。然后会进行3次白名单的判断,只要成功一次算通过白名单。
第一次判断,没有进行任何操作,直接拿输入的值来进行白名单判断。
第二次判断,是取输入的值第一个?号前面的字符串来进行白名单判断。
第三次判断,是取输入的值进行URL编码的解码,然后和第二次判断你的操作一样,取解码后的字符串的第一个?号前面的内容来进行白名单判断。
那正式开始尝试,首先看第一次判断,因为没有对值进行任何操作,所以也不能存在任何绕过的可能性,只能输入默认的两个白名单参数。
输入?file=source.php,能看到页面上又加载了一次source.php的代码。
输入?file=hint.php,能看到页面上加载了hint.php的内容flag not here, and flag in ffffllllaaaagggg。能看出来我们的目标是绕过白名单,使页面能加载ffffllllaaaagggg文件。
尝试在第二次判断中绕过,因为是取第一个?号前面的字符串来进行白名单判断。所以前面肯定是?file=source.php或者?file=hint.php。不然根本通不过白名单,但是我们可以在后面加上任何东西,应为他只取?前面的来进行判断。这时就能想到用../来跳出目录,找到对应的ffffllllaaaagggg文件。
输入?file=hint.php?/../ffffllllaaaagggg,没有加载出来。
输入?file=hint.php?/../../ffffllllaaaagggg,没有加载出来。
输入?file=hint.php?/../../../ffffllllaaaagggg,没有加载出来。
输入?file=hint.php?/../../../../ffffllllaaaagggg,成功加载到页面,并看到flag。
尝试在第三次判断中绕过,因为和第二次判断相比,第三次判断前面的操作只是多了一次URL编码的解码,又因为本身浏览器解析的时候会进行URL的解码。所以我们需要对参数进行两次的URL编码。需要编码的其实也只有?这个字符。
【BUUCTF学习笔记-WarmUp】?第一从URL编码为%3f,将%再编码一次为%25。所以合起来?两次URL编码为%253f
在上面的payload中将?替换成%253f等到新的payload。file=hint.php%253f/../../../../ffffllllaaaagggg输入后也能加载到文件,等到flag。

    推荐阅读