[ctfshow web入门] web72
信息收集
下载index.php并查看,和上题差不多
error_reporting(0); ini_set('display_errors', 0); // 你们在炫技吗? if(isset($_POST['c'])){ $c= $_POST['c']; eval($c); $s = ob_get_contents(); ob_end_clean(); echo preg_replace("/[0-9]|[a-z]/i","?",$s); }else{ highlight_file(__FILE__); }
查根目录的时候失败了,不允许使用scandir进行目录穿透。关于open_basedir的博客:
open_basedir绕过
PHP之如何绕过open_basedir
open_basedir绕过
绕过 open_basedir
简单来说就是open_basedir是个白名单,如果设置,仅白名单可访问;如果不设置,白名单功能不启用,所有地址都能访问
解题
蚁剑连接,简单粗暴
上面那篇博客写入一句话木马,然后连蚁剑接。我这只是蚁剑直接连接就连上了,不亏是蚁剑,这用就连上了。我还在考虑用什么函数写入一句话木马呢
手工获取
当然,做题不是目的,是过程
所以我们应当学习怎么手工绕过
首要目标是获取flag所在目录的信息,因为这个flag肯定不可能是原名了
symlink、ini_set和file_put_contents被禁用了
仅有glob可用
使用glob协议读取目录
c=foreach(new DirectoryIterator("glob:///*") as $a){ echo($a->__toString().' '); } ob_flush();
不要在payload里写注释
//遍历输出,末尾加一个
标签,这能好看些
c=if ( $a = opendir("glob:///*") ) { while ( ($file = readdir($a)) !== false ) { echo $file."
"; } closedir($a); ob_flush(); }
glob路径解析顺序:
通配符展开:glob:// 会先展开通配符,生成实际路径列表。
路径检查:PHP 在展开后的路径上应用 open_basedir 检查。
如果 glob:// 的原始路径(如 glob:///*)本身在 open_basedir 允许的范围内(例如允许 /tmp),但展开后的路径(如 /etc/passwd)超出范围。php7.4+版本已修复7.0.x-7.3.x部分版本开始陆续修复
怎么读,找大佬的代码读
其中data=“”“payload”“”,python中的""" """不是表示多行注释,而是多行字符串
如果你要写到hackbar里的话,需要使用python的urllib.parse.quote(),或是找个在线网站转也行
payload我写下面了,太长了
payload
c=?>