文件上传漏洞进阶教程/白名单绕过/图片马制作/图片马执行

一、白名单绕过

相对于前面的黑名单绕过,白名单更加难以绕过,使用白名单验证相对比较安全,但如果存在可控参数目录,也存在被绕过的风险

目录可控%00截断绕过上传

upload-lab pass11 源码分析

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        }
        else{
            $msg = '上传失败!';
        }
    }
    else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

deny_arr变成ext_arr,白名单,下面判断后缀名是否在白名单中,代码相较于黑名单也简单不少

但是这里使用了$_GET['save_path']获取客户端的值,这个值可以被客户端修改,从而遗留安全隐患

截断文件名

%00截断需要gpc关闭 php版本要小于5.3.4版本

我这里版本是5.4.45先选择一个低版本

 关闭gpc

 

这种攻击手法其实与sql注入中的注释差不多,%00的意思是忽略后面的内容进行上传,如果我们上传test.png再给服务器传递的save_path改为/upload/test.php%00那么最终上传到服务器的内容为test.php,操作一下,看起来就直观了

尝试上传

看到这里save_path其实就是本地的upload文件夹的路径,在后端中与检测后的文件名拼接,将文件上传,我们通过截断,忽略检测后的内容,直接上传到我们写入的文件中

因为已知是get型,所以直接写%00就ok,get型需要进行编码

 清空前面上传的内容

放包

上传成功

POST型截断

pass-12

只是将GET改成POST了

尝试上传

一样的套路,上传test.php抓包

直接在抓包里进行解码再放包就ok了

二、文件头检测绕过

有的文件上传,上传时会检测文件头,不同的文件,文件头也不一样,常见的文件上传图片头检测 它检测图片两个字节长度,如果不是图片格式,会禁止上传文件

常见的文件头

PNG:89504E47

JPEG:FFD8FF

GIF:47494638

....

对隐写术有些了解的同学应该对这个很熟悉啦

pass-13

代码分析

nction 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 = 'unknown';
        }    
        return $fileType;
}

这时提取文件头的函数

对文件进行解包

 

转成整型,然后白名单判断

下面就是获取上传文件,调用这个函数,返回如果不是unknown就上传,代码就不展示了

图片一句话木马

为了绕过上述的检测,我们可以制作图片马,即将图片信息与木马组合到一起上传

制作

准备一张正常的图片,与恶意脚本php,放到一个目录下

 

 目录下运行CMD,执行

copy 1.png/b+test.php test.png

 

生成了一个新的png,我们直接给它上传到服务器

 

右键图片打开链接(获取图片地址),复制url

upload/3520221023175627.png

 这里需要利用文件包含漏洞,才能执行我们的图片马

我看大佬们这一关直接有个提示,有个链接,就是存在文件包含漏洞网页,但我这个靶场可能抽风了,我找了半天也没找到,所以我就自己写了一个,如果你们也没有可以直接再upload-labs文件夹下新建一个include.php

<?php
header("Content-Type:text/html;charset=utf-8");
$file=$_GET['file'];
if(isset($file))
{
	include $file;
}
else{
	show_source(__FILE__);
}
?>

复制保存就ok了

下面进入文件包含漏洞页面

将图片地址给传进去

 看到一堆乱码,这就是前面图片的内容,往下翻,就可以看到phpinfo()的结果啦

上传成功!

三、图片检测函数绕过

pass-14

 getimagesize是获取图片的大小,如果头文件不是图片会报错,直接可以利用图片马

上传

一样的上传我们做好的图片马,通过包含漏洞,进行执行

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Vulhub漏洞靶场是一个面向大众的开源漏洞靶场,旨在让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。搭建Vulhub漏洞靶场可以按照以下步骤进行操作: 1. 下载Vulhub压缩包,并上传到虚拟机的任意目录。可以使用离线安装或者Git安装两种方法中的任意一种。离线安装可以通过下载Vulhub压缩包并解压来完成,Git安装可以使用以下命令进行安装: ``` $ git clone https://github.com/vulhub/vulhub.git ``` 如果没有安装Git,需要先安装Git: ``` $ yum install -y git ``` 2. 安装Docker和Docker-Compose。可以使用以下命令进行安装: ``` $ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun $ curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose ``` 3. 运行Vulhub漏洞靶场镜像。在Vulhub目录下执行以下命令: ``` $ cd vulhub/ $ docker-compose up -d ``` 这样就完成了Vulhub漏洞靶场的搭建。你可以通过访问相应的地址和端口来进行漏洞复现和实操。请注意,搭建漏洞靶场需要一定的安全意识和技术知识,建议在合适的环境中进行操作。 #### 引用[.reference_title] - *1* [开源漏洞靶场 Vulhub环境搭建](https://blog.csdn.net/tianlang2013/article/details/123621374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Vulhub漏洞靶场搭建](https://blog.csdn.net/m0_61869253/article/details/129649232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白帽Chen_D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值