pass-11
这里本关中,对后缀名有一个黑名单,若后缀出现黑名单中的字符,则将它替换为空。下面是源码。我们就可以利用这一点了。它只替换其中的一次,那构造一个复写的可能可以饶过它。
连一下试试
pass-12
看源码,发现是白名单的,就只能上传jpq,gif,png。提示文件路径可控。源码中$file_arr 的目的是 将.后的文件后缀名取出来
$img_path 以 post 方式传入文件保存路径 ,这里是采用拼接的方式,有机可乘。
抓包看看有什么信息。
url中我们可以看到save_php字段,请求头中有Content-Disposition中作为下载文件的标识字段。在这里是作为校验,并且拼接文件上传路径。
了解到这些后,我们要先饶过上传,改Content-Disposition字段中filename文件后缀名,饶过检查。此外,我们还要保证上传的是php文件,那就要利用到路径的拼接和截断字符,把我们改了的文件后缀名失效掉
bug.php%00bug.gif 上传后 php后面就没有了
放包后上传成功。
连接时我们拖拽那个图片文件得到的url要将php后面的多余的字符删除掉。这样就连接成功了。这是因为我们上传到文件路径中的文件就是php文件。
pass-13
源码和12关一样,抓包看看有啥区别。
他的save_path不在url中,我们还是一样的思路,只是截断字符不一样了。
在save_path写入的php后面写上一个占位符。
在点入hex(16进制编码)中找到它,
找到我们要改的地方。改了为00截断字符
上传成功
pass 14
图片马。先看源码
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType =