Webug4.0-文件上传 任意文件下载

0x01 文件上传(前端拦截)

Webug4.0-文件上传 任意文件下载_第1张图片
还没点上传,刚刚选择php文件就直接警告,前端无疑,改前端就行。


    function type_filter(files) {
        if (files[0].type.split("/")[0] == "image") {
            return true;
        } else {
            document.getElementById("file").value = "";
            alert("不允许上传该格式类型");
            return false;
        }
    }

似乎是检查文件内型mime??。。。但是没关系,改下面的内容就可以了。

    function type_filter(files) {
        if (files[0].type.split("/")[0] == "image") {
            return true;
        } else {
            alert("不允许上传该格式类型");
            return true;
        }
    }

Webug4.0-文件上传 任意文件下载_第2张图片
虽然还会弹框,但是已经不影响上传了。
Webug4.0-文件上传 任意文件下载_第3张图片


0x02 文件上传(解析漏洞)

直接上传还是有前端问题,继续改,改完去burpsuite里面去repeater。用上一关的padyloadphp还是会报错的。
Webug4.0-文件上传 任意文件下载_第4张图片
然后试过了.xxx,pHp,php3,phtml等均不行,只能上传jpg,gif等格式。。好像apahce的解析漏洞就用不了了,于是放弃就去看源码了。

$filter = array(".jpg", '.png', '.gif');

if ($_FILES['file']['error']) {
    die();
}
if ($_FILES['file']) {
    $arr = $_FILES['file'];
    $file_ext = trim(strtolower(strrchr($arr['name'], ".")));
    if (!in_array($file_ext, $filter)){
        echo "";
        die();
    }

先取最后一个.后面的字符串当后缀名,并且转换为小写,还去掉首尾的空格,然后做的还是白名单,基本没有办法绕过了,感觉我这里的apache似乎没有办法绕过,如果是nginxiis好像还可以,nginx可以使用test.jpg/xxx.php直接绕过,iis6也可以使用test.asp;1.jpg直接绕过,我这就不试了。。。


0x03 文件上传(畸形文件)

前端限制还在,走burpsuite。。。
Webug4.0-文件上传 任意文件下载_第5张图片
直接传上去后,发现随机了名字,后缀也没了。。。估计是后缀不合法吧,尝试了一下,php3,发现后缀名变成了3,原来是过滤了php,这里直接传了个pphphp就成功了。
Webug4.0-文件上传 任意文件下载_第6张图片


0x04 文件上传(截断上传)

先改前端。。
Webug4.0-文件上传 任意文件下载_第7张图片
这真的能截断吗,不太相信。。。于是各种尝试之后,发现,不可能!除非换到nginx里面去,不晓得是不是成品的Webug就是基于nginx的,晚点我单独再试试nginx,然后再做个总结吧。


0x05 文件上传(htaccess)

这关有问题吧,,不管传啥都直接跳转回来。。。。去看源码


if ($_FILES['file']['error']) {
    die();
}

之前好像没太注意这个,再去查下。

$_FILES['myFile']['name'] 客户端文件的原名称。 
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。 
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量) 
UPLOAD_ERR_OK 
值:0; 没有错误发生,文件上传成功。 
UPLOAD_ERR_INI_SIZE 
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
UPLOAD_ERR_FORM_SIZE 
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
UPLOAD_ERR_PARTIAL 
值:3; 文件只有部分被上传。 
UPLOAD_ERR_NO_FILE 
值:4; 没有文件被上传。 
值:5; 上传文件大小为0. 

传正常jpg都传不上去,改了下代码就行了(一边和我爸开视频,一边看,搞了半个小时,嗯,只用了一会。。。)Webug4.0-文件上传 任意文件下载_第8张图片
然后还是传不了
Webug4.0-文件上传 任意文件下载_第9张图片
去源码发现,.htaccess同样也在黑名单里面。。。服啦,这里就不改了,具体去看这个Upload-labs Pass-04 .htaccess文件上传


0x06 任意文件下载

在这里插入图片描述
burpsuite拦截一下
Webug4.0-文件上传 任意文件下载_第10张图片
没反应,再看看之前的,好像是相对路径
Webug4.0-文件上传 任意文件下载_第11张图片
然后再去改一下。
Webug4.0-文件上传 任意文件下载_第12张图片
好像可以下,文件名有点奇怪,看看文件内容,正常的。
Webug4.0-文件上传 任意文件下载_第13张图片
看下源码,为啥这么奇怪。。。$fileName = substr($filePath, -4);。。。原来是只取了5个字符!


0x07 mysql配置文件下载

在这里插入图片描述
和上关一样,直接构造语句先尝试下载/etc/passwd,失败。。。然后抓包看了下,发现真的和上关一样,于是成功了。。。
Webug4.0-文件上传 任意文件下载_第14张图片
下载mysql配置。。。
Webug4.0-文件上传 任意文件下载_第15张图片
看下源码有啥区别。。。尼玛的,一模一样,有毒。。。。。。。。。。。。。。。。。。。

你可能感兴趣的:(#,Webug4.0)