本帖最后由 Poacher 于 2017-8-21 16:51 编辑
0x00 前言:
首页本地搭建环境,我所使用的是Windows PHPstudy集成环境。使用起来非常方便。特别是审计的时候。可以任意切换PHP版本。
0x01 CMS简介:
Niushop1.11 采用ThinkPHP5.0 + MySQL 开发语言,完全面向对象的技术架构设计开发。完全开源,适合企业及个人,包含 (B2B2C + 微信商城 + WAP + Android + IOS) 二次开发非常方便。
0x02 正文:
首先看看目录结构
目录结构
咱们开始审计的第一步一般都是寻找到入口文件。打开后看看有没有相关信息。
在Index.php。28行处,可看到程序目录为:Application。所以接下来我们只要在该目录内寻找指定模块以及控制器即可。
上图所示,在该目录内有三个入口,分别为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文件了。看下图: 修改为image/jpg 或者 png 或者gif 以及其他内容
上传成功之后直接返回了文件路径。使用菜刀连接一下。 PS:本着交流分享。如果有好的方法或者思路以及上文讲述不正确的地方欢迎指出。谢谢!
|