网站关键词描述,做微站比较好的网站,wordpress启用旧的编辑器,南京市高淳区城乡建设局网站文章目录 [HarekazeCTF2019]Easy Notes-代码审计 [HarekazeCTF2019]Easy Notes-代码审计
登录之后有几个功能点#xff0c;可以添加节点#xff0c;然后使用Export导出 我们查看源码#xff0c;
我们发现想要拿到flag的条件时$_SESSION[admin]true 如果我们能够控制sessio… 文章目录 [HarekazeCTF2019]Easy Notes-代码审计 [HarekazeCTF2019]Easy Notes-代码审计
登录之后有几个功能点可以添加节点然后使用Export导出 我们查看源码
我们发现想要拿到flag的条件时$_SESSION[admin]true 如果我们能够控制session文件就可以拿到flag了 我们发现session存储的文件改为了/var/www/tmp
重点看export.php
?php
require_once(init.php);if (!is_logged_in()) {redirect(/?pagehome);
}$notes get_notes();if (!isset($_GET[type]) || empty($_GET[type])) {$type zip;
} else {$type $_GET[type];
}$filename get_user() . - . bin2hex(random_bytes(8)) . . . $type;
$filename str_replace(.., , $filename); // avoid path traversal
$path TEMP_DIR . / . $filename;if ($type tar) {$archive new PharData($path);$archive-startBuffering();
} else {// use zip as default$archive new ZipArchive();$archive-open($path, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);
}for ($index 0; $index count($notes); $index) {$note $notes[$index];$title $note[title];$title preg_replace(/[^!-~]/, -, $title);$title preg_replace(#[/\\?*.]#, -, $title); // delete suspicious characters$archive-addFromString({$index}_{$title}.json, json_encode($note));
}if ($type tar) {$archive-stopBuffering();
} else {$archive-close();
}header(Content-Disposition: attachment; filename . $filename . ;);
header(Content-Length: . filesize($path));
header(Content-Type: application/zip);
readfile($path);这里可以看到导出的文件也是写到/var/www/tmp目录下面所以我们可以尝试session伪造一下伪造一个session文件
$filename get_user() . - . bin2hex(random_bytes(8)) . . . $type;
$filename str_replace(.., , $filename); // avoid path traversal
$path TEMP_DIR . / . $filename;get_user()会获取用户名bin2hex(random_bytes(8))会生成16进制字符串
如果我们用户名为sess_并且$type.那么两个.会被替换为空所以最终文件名就符合session文件的格式了session文件名可控
那么看一下session内容可控吗
$archive-addFromString({$index}_{$title}.json, json_encode($note));可控的
由于默认session_serialize_handlerphp那么序列化规则为
处理器对应的存储格式php键名 竖线 经过 serialize() 函数反序列处理的值
所以$_SESSION[admin]true需要满足
admin|b:1;但是由于我们导出的文件中有一些内容防止被污染我们需要这么写
|N;admin|b:1;添加之后导出
/export.php?type.最后替换一下PHPSESSID为文件名