您当前的位置: 首页 > 

葫芦娃42

暂无认证

  • 2浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

国光师傅文件上传靶场练习

葫芦娃42 发布时间:2022-04-23 22:01:04 ,浏览量:2

0x01 JS

(1)抓包绕过前端检测

因为存在前段验证的问题,所以我们将一句话木马文件shell.php 重命名为 shell.jpg 上传抓包的时候再将文件名修改为 shell.php 即可绕过前段限制,成功上传 webshell。蚁剑连接进入后台。

(2)禁用js

看文章题目可知,使用js来检测后缀。所以我们用js禁用插件禁用js。即可上传php木马文件。

0x02 .htaccess

上传.htaccess文件,写入 AddType application/x-httpd-php .jpg

这样我们上传到.jpg文件可以被当成php文件解析。

上传.jpg文件抓包写入php一句话木马,send即可。

0x03 MIME

提示了是MIME类型检验,所以抓取数据包之后更改Content-Type为符合条件的image/jpeg,即可上传我们的php木马文件。

也可以上串一个符合条件的.jpg文件,抓包后Content-Type就是符合条件的,更改文件为.php。写入一句话木马即可。

0x04 文件头绕过

 抓包,因为需要上传图片文件,所以修改Content-Type为image/jpeg,同时存在文件头检测。需要上传一个图片🐎,不过这个环境在文件内容里写入图片头GIF89a,就可上传我们的php木马文件。

0x05 有缺陷的代码 1

         审计题目代码可知,存在黑名单检测。同时因为str_ireplace() 执行对大小写不敏感的搜索。我们上传的文件名会过滤掉黑名单里的字符。大小写绕过不可行。不过可以双写绕过.

上传123.pphphp木马文件。蚁剑连接/upload/123.php即可(不可上传.phphpp,那样上传的文件是123.hpp)

0x06 有缺陷的代码2

 不同与有缺陷的代码1这道题是把黑名单里的内容转化为了“ ”空格。但是str_replace()对大小写敏感,可以构造大小写.pHp来绕过。

题目中提到;本地属于理论上漏洞,因为题目环境是 Docker 容器运行的 Linux 系统,所以本题人工修改成了 Windows 的特性

 经查询得知:因为 Windows 环境下不区分大小写,所以就可以让 .pHp 当做 .php 来解析了,但是 Linux 下这种大小写如果的话完全没作用,所以本题是国光师傅自己造的漏洞,用来伪造 Windows 环境下的大小写不区分的情况。

0x07 古老的漏洞?

Get型00截断

        这道题解释了php%00截断。burp抓包,因为是从 GET 方式传递给后端的,默认会进行一次 URL 解码,所以可以直接在url路径里用%00截断。写入123.php%00.这样我们上传的文件就是123.php。

/upload/123.php%001.jpg

 蚁剑连接/upload/123.php。

0x08 古老的漏洞2?

上传一个1.jpg文件,burp抓包。

发现./upload不在url里。post型00截断。

注意对%00进行urldecode。

 之后send。上传123.php。蚁剑连接即可。

0x09 黑名单缺陷

白名单是设置能通过的用户,白名单以外的用户都不能通过。 黑名单是设置不能通过的用户,黑名单以外的用户都能通过。 所以一般情况下白名单比黑名单限制的用户要更多一些

每个后缀都试试,发现php3上传成功。蚁剑连接即可。

0x10 条件竞争

之前没刷过这类的文件上传题目要。查看wp得知:

条件竞争的话稍微和正常的上传姿势不一样,首先上传123.php文件抓包,

写入:

send到intruder模块,选择null payloads,Continue indefinitely。

 之后抓取访问123.php的数据包,依然使用NULL值爆破。

xiao.php被上传到upload/处.

0x11 二次渲染

 二次渲染。。。没听说过,算是学会了一个新知识。查看别人题解可知:

url里存在一个文件包含,这样包含选手们逃避渲染上传后的图片的话就可以直接 getshell 了:

 下面是有关二次渲染的细节。

0x12 move_uploaded_file

 move_uploaded_file($temp_file, $img_path).

$img_path 可控的时候,还会忽略掉 $img_path 后面的 /. 既然知道 move_uploaded_file 的这个小缺陷的话,我们可以使用

 成功上传木🐎文件,蚁剑连接。

0x13 代码审计

 这是一个php代码审计与前面move_uploaded_file的小缺陷的结合。

首先第一个判断:MIME头检测。

 $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";

所以要保证我们上传的表单 MIME 类型一定要符合标准。

然后是:检查文件名

对提交的save_name检测,如果不是数组的话就以 .为分隔,打散为数组

   $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

是数组就无需打散。

打散后校验最后的后缀。

$ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!";

所以我们传入这样一个数组:

$file = [0=>'shell.php/', 2=>'png']

这样执行完最后的拼接语句之后:

$file_name = reset($file) . '.' . $file[count($file) - 1];
$file_name = 'shell.php/' . '.' . $file[2 - 1];  = 'shell.php/.'

构造成功 shell.php/.

而我们知到move_uploaded_file($temp_file, $img_path)函数的一个小缺陷:

$img_path 可控的时候,会忽略掉 $img_path 后面的 /.

所以最后一步为:

move_uploaded_file($temp_file, $img_path);
move_uploaded_file($temp_file, "shell.php/.")

上传了我们的shell.php🐎

关注
打赏
1658420143
查看更多评论
立即登录/注册

微信扫码登录

0.1053s