upload-labs靶场Pass-02

upload-labs靶场Pass-02

分析源码

复制代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

源码中

if (( F I L E S ′ u p l o a d f i l e ′ ′ t y p e ′ = = ′ i m a g e / j p e g ′ ) ∣ ∣ ( _FILES'upload_file''type' == 'image/jpeg') || ( FILES′uploadfile′′type′==′image/jpeg′)∣∣(_FILES'upload_file''type' == 'image/png') || ($_FILES'upload_file''type' == 'image/gif'))

可以看出验证方式是文件类型,使用白名单验证
选择上传文件并抓包,修改文件类型可以绕过

上传php文件,本来是不容许的

抓包

修改Content-Typr字段为源码中提到的任意一种,放包

查看服务端,有了我们上传的php文件,由此绕过成功

OVER!

相关推荐
Nicander27 分钟前
我给 Excalidraw 做了一个本地工作区:DrawSpace
前端·开源
linux_cfan2 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
计算机魔术师3 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
IT_陈寒3 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
BoomHe4 小时前
Android Framework 文件应用移植到 AndroidStudio
android
卡布鲁4 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
碳基修炼4 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
步行cgn4 小时前
Spring p 命名空间注入详解
java·前端·spring
何何____4 小时前
Vue 生命周期详解
前端·javascript
江米小枣tonylua4 小时前
TypeScript 全面の拥抱 !Prisma 8 + Electron 升级实战
前端