【Pass-12】
分析源码
白名单,最终文件的存放位置是以拼接的方式,可以使用%00截断
![](https://i-blog.csdnimg.cn/blog_migrate/75b75c3363349563185dbb937e1bc02d.png)
抓包上传:
![](https://i-blog.csdnimg.cn/blog_migrate/05b3cecf2b2d5c509fb3a6a810a20fdb.png)
上传成功
![](https://i-blog.csdnimg.cn/blog_migrate/abd81345cdc34cea94a2aab1461e88ea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f91b8a53eac93ee3e6f08a36d8a02623.png)
【Pass-13】
白名单,文件上传路径拼接生成,而且使用了post发送的数据进行拼接,我们可以控制post数据进行0x00截断绕过白名单
抓包上传:
![](https://i-blog.csdnimg.cn/blog_migrate/1a9fb67cfa8f42e9cf6e51de33ea9d90.png)
在hex中找到1.php的末尾,改为00
![](https://i-blog.csdnimg.cn/blog_migrate/9bb1111ab9fc629957d074d37da41967.png)
上传成功
![](https://i-blog.csdnimg.cn/blog_migrate/76187ec43d29d64984efd0e5da2a82a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e227827dad3318802c8dc4e4b3f7f0c2.png)
【Pass-14】
图片马绕过:
制作图片马(在图片的后面加一行php代码)
![](https://i-blog.csdnimg.cn/blog_migrate/e68f6e3ca6c57f4fe8b3999b6b4df56b.png)
上传图片:
![](https://i-blog.csdnimg.cn/blog_migrate/adc410b90efeeef42b558c17c0281f5a.png)
利用文件包含漏洞访问
upload/include.php?file=upload/图片名称
![](https://i-blog.csdnimg.cn/blog_migrate/570d6d4c089b8c56568c6dbfc2ca42ee.png)
【Pass-15】
查看源码:
这一关通过getimagesize函数来获取图片信息,同样可以使用14关的图片码绕过。
function isImage($filename){
$types = '.jpeg|.png|.gif';
if(file_exists($filename)){
$info = getimagesize($filename);
$ext = image_type_to_extension($info[2]);
if(stripos($types,$ext)>=0){
return $ext;
}else{
return false;
}
}else{
return false;
}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$res = isImage($temp_file);
if(!$res){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/b8b10c9408495f95b13e6ab6112a40af.png)
同样利用文件包含漏洞访问
upload/include.php?file=upload/图片名称
![](https://i-blog.csdnimg.cn/blog_migrate/3e188e2376f23626f95597d52113cb6a.png)
【Pass-16】
查看源码
function isImage($filename){
//需要开启php_exif模块
$image_type = exif_imagetype($filename);
switch ($image_type) {
case IMAGETYPE_GIF:
return "gif";
break;
case IMAGETYPE_JPEG:
return "jpg";
break;
case IMAGETYPE_PNG:
return "png";
break;
default:
return false;
break;
}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$res = isImage($temp_file);
if(!$res){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
exif_imagetype()读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块
![](https://i-blog.csdnimg.cn/blog_migrate/e31151de4147a874e394e6998eb16ddb.png)
还是可以使用14关的图片马进行绕过:
![](https://i-blog.csdnimg.cn/blog_migrate/08336a27ad96e3a6cd3d412578b234f2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/41c9c2f3b9e559f6fa32c7d97c453434.png)
【Pass-17】
这一关对上传图片进行了判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,添加一句话,通过文件包含漏洞执行一句话。
上传正常的gif图片马:
![](https://i-blog.csdnimg.cn/blog_migrate/d549ca271a1e5f0ce8c9b83dc4fa2749.png)
下载被渲染后的图片。
使用Fairdell HexCmp进行比对。红色部分为不同内容,白色部分为相同内容。在白色靠下部分插入PHP一句话,上传。
![](https://i-blog.csdnimg.cn/blog_migrate/64f065239a27c6a9d36a7102f3ccb8c0.png)
成功上传:
![](https://i-blog.csdnimg.cn/blog_migrate/6b310e2170650622e9ecb3e393b87d18.png)
使用文件包含漏洞构造url访问
![](https://i-blog.csdnimg.cn/blog_migrate/d2b0bdb6a58180c4c45c5f135d76d1df.png)