[【通过】] [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

[复制链接]
Poacher 发表于 2017-8-21 11:45:25 | 显示全部楼层 |阅读模式

正式成员|主题 |帖子 |积分 165

本帖最后由 Poacher 于 2017-8-21 16:51 编辑

0x00 前言:
  首页本地搭建环境,我所使用的是Windows PHPstudy集成环境。使用起来非常方便。特别是审计的时候。可以任意切换PHP版本。

0x01 CMS简介:
  Niushop1.11 采用ThinkPHP5.0 + MySQL 开发语言,完全面向对象的技术架构设计开发。完全开源,适合企业及个人,包含 (B2B2C + 微信商城 + WAP + Android + IOS) 二次开发非常方便。

0x02 正文:

   首先看看目录结构

目录结构

目录结构

  咱们开始审计的第一步一般都是寻找到入口文件。打开后看看有没有相关信息。

2.png
Index.php。28行处,可看到程序目录为:Application。所以接下来我们只要在该目录内寻找指定模块以及控制器即可。
3.png

上图所示,在该目录内有三个入口,分别为PC版前台以及WAP手机版还有一个是后台。
漏洞所在文件:/niushop/application/shop/controller/Components.php(PC版)漏洞所在行数:163-193行(即为以下代码)
<?php
    /**
     * 上传图片
     *
     * @return boolean
     */
    public function imgUpload()
    {
        $upFilePath = 'upload/evaluate/';
        $guid = time();
        $extend = explode(".", $_FILES["imgPhoto"]["name"]);
        $key = count($extend) - 1;
        $ext = "." . $extend[$key];
        $newfile = $guid . $ext;
        $size = $_FILES["imgPhoto"]["size"];
        $ext = $_FILES["imgPhoto"]["type"];
        if (substr($ext, - 3) == 'php') {
            echo "非法操作";
            return false;
        }
        if (! file_exists($upFilePath)) {
            $mode = intval('0777',8);
            mkdir($upFilePath,$mode,true);
        }
        $ok = move_uploaded_file($_FILES["imgPhoto"]["tmp_name"], $upFilePath . $newfile);
        /**
         * 存库并返回图片id
         */
        $img_path = $upFilePath . $newfile;
        @unlink($_FILES['imgPhoto']);
        return $img_path;
    }
根据上述代码。16行$ext 获取到的内容是Content-type里面的内容。如果上传文件为php文件。那么$ext就为:text/php。在17行处可看见程序会获取$ext然后取最后三位是否为php。如果为php那么就进去真区间。则直接echo "非法操作"之后return false。由此可见在上述的17行已经出现了问题。如果我们抓包上传图片。在包内将Content-type内容改为 image/jpg 或者 其他不包含php的参数。那么就能上传成功PHP文件了。看下图:
4.png
修改为image/jpg 或者 png 或者gif 以及其他内容
5.png

上传成功之后直接返回了文件路径。使用菜刀连接一下。
6.png
7.png
    PS:本着交流分享。如果有好的方法或者思路以及上文讲述不正确的地方欢迎指出。谢谢!



评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

chock 发表于 2017-8-21 11:54:45 | 显示全部楼层

正式成员|主题 |帖子 |积分 6

可以,挺细心的,没想到$ext = $_FILES["imgPhoto"]["type"]; 取的竟是content-type
 楼主 Poacher 发表于 2017-8-21 12:13:36 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

chock 发表于 2017-8-21 11:54
可以,挺细心的,没想到$ext = $_FILES["imgPhoto"]["type"]; 取的竟是content-type

哈哈!
郭斯特 发表于 2017-8-21 13:12:58 | 显示全部楼层

正式成员|主题 |帖子 |积分 27

松哥。给力~
 楼主 Poacher 发表于 2017-8-21 13:47:09 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell



第一次,好羞涩!
路人  发表于 2017-8-21 14:36:53

正式成员|主题 |帖子 |积分 228

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

基友你好,如何判断$ext = $_FILES["imgPhoto"]["type"]取得是content-type?
 楼主 Poacher 发表于 2017-8-21 15:37:49 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

本帖最后由 Poacher 于 2017-8-21 15:40 编辑
匿名者 发表于 2017-8-21 14:36
基友你好,如何判断$ext = $_FILES["imgPhoto"]["type"]取得是content-type?

这个怎么解释呢!其实简单来说。PHP $_FILES 获取表单传过来的文件数组里面的"type"默认获取的就是Content-type。
基友如果感觉还是有点不理解的话,可以去尝试一下。写一个表单。然后用php接收表单传过来的的文件信息。然后抓包去修改Content-type。然后你会发现无论你将Content-type内容修改成啥。$_FILES所接收的type都是你修改的Content-type的内容。

郭斯特 发表于 2017-8-21 16:44:08 | 显示全部楼层

正式成员|主题 |帖子 |积分 27

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

前台注入走一走
图片1.png
路人  发表于 2017-8-21 16:44:11

正式成员|主题 |帖子 |积分 228

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

Poacher 发表于 2017-8-21 15:37
这个怎么解释呢!其实简单来说。PHP $_FILES 获取表单传过来的文件数组里面的"type"默认获取的就是Conten ...

谢了基友
 楼主 Poacher 发表于 2017-8-21 16:59:53 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell


哈哈,可以可以!!
 楼主 Poacher 发表于 2017-8-21 17:00:04 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell


不客气滴
blues 发表于 2017-8-21 21:32:04 | 显示全部楼层

正式成员|主题 |帖子 |积分 80

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

匿名者 发表于 2017-8-21 14:36
基友你好,如何判断$ext = $_FILES["imgPhoto"]["type"]取得是content-type?

你是问content-type哪里的还是?
http://www.w3school.com.cn/php/php_file_upload.asp

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。


Iksaa 发表于 2017-8-22 15:29:56 | 显示全部楼层

正式成员|主题 |帖子 |积分 25

本帖最后由 Iksaa 于 2017-8-22 16:16 编辑

这个CMS也是厉害了,直接getshell!!!
习大大 发表于 2017-8-22 15:44:36 | 显示全部楼层

九零元老|主题 |帖子 |积分 175

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

snipaste_20170822_154235.png

头像上传出,shell.php.jpg 文件名判断不严谨 也是直接get 这CMS也是醉了
 楼主 Poacher 发表于 2017-8-22 16:55:42 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

本帖最后由 Poacher 于 2017-8-22 16:56 编辑
习大大 发表于 2017-8-22 15:44
头像上传出,shell.php.jpg 文件名判断不严谨 也是直接get 这CMS也是醉了

嗯呐,是啊。也是直接修改content-type就直接ok了。这套程序漏洞的确非常多,并且很多都只是基本的安全问题!
 楼主 Poacher 发表于 2017-8-22 16:56:33 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

Iksaa 发表于 2017-8-22 15:29
这个CMS也是厉害了,直接getshell!!!

哈,还有其它高风险的捏。
大饭刚 发表于 2017-8-24 01:44:14 | 显示全部楼层

正式成员|主题 |帖子 |积分 41

这个和微擎属于同一个模板吗
 楼主 Poacher 发表于 2017-8-24 13:52:49 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

渗透圈 发表于 2017-8-24 01:44
这个和微擎属于同一个模板吗

这个我就不太清楚了。不过好像不是!!

[email protected] 发表于 2017-9-1 10:19:10 | 显示全部楼层

正式成员|主题 |帖子 |积分 163

第一次见这么傻的上传判断。简直没有判断
 楼主 Poacher 发表于 2017-9-1 11:54:56 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

[email protected] 发表于 2017-9-1 10:19
第一次见这么傻的上传判断。简直没有判断

哈哈。这种类型的肯定还有很多滴!
wind_飘 发表于 2017-9-7 20:07:03 | 显示全部楼层

正式成员|主题 |帖子 |积分 103

居然被你先挖了
 楼主 Poacher 发表于 2017-9-7 20:10:34 | 显示全部楼层

正式成员|主题 |帖子 |积分 165

RE: [代码审计]NIUSHOP v1.11开源商城前台无条件Getshell

wind_飘 发表于 2017-9-7 20:07
居然被你先挖了

哈哈哈哈。早点关注就是你的了
快速回复 返回顶部 返回列表