目录
详细说明:
漏洞证明:
首页 php教程 php手册 pkav之当php懈垢windows通用上传缺陷

pkav之当php懈垢windows通用上传缺陷

Jun 06, 2016 pm 07:48 PM
php windows 上传 通用

$pkav-publish{当php懈垢windows} 剑心@xsser抛弃了我,但我却不能抛弃乌云.. php懈垢windows,就像男人邂逅女人,早晚都会出问题的.. 感谢二哥@gainover Tips:本文讲述一种新型的文件上传方式(几个特性导致的漏洞),并给出相应的实例.. 详细说明: #1 实例

$pkav->publish{当php懈垢windows}
剑心@xsser抛弃了我,但我却不能抛弃乌云..
php懈垢windows,就像男人邂逅女人,早晚都会出问题的..
感谢二哥@gainover
Tips:本文讲述一种新型的文件上传方式(几个特性导致的漏洞),并给出相应的实例..

详细说明:

#1 实例介绍

本案例采用的实例是:U-Mail邮件系统。

U-Mail邮件系统文件上传的地方代码是这样的:

code 区域
<code><?php <br />
if(ACTION =="attach-upload"){<br>
	if($_FILES){<br>
		$file_name = $_FILES['Filedata']['name'];<br>
		$file_type = $_FILES['Filedata']['type'];<br>
        $file_size = $_FILES['Filedata']['size'];<br>
        $file_source = $_FILES['Filedata']['tmp_name'];<br>
        $file_suffix = getfilenamesuffix( $file_name );<br>
        $not_allow_ext = array( "php", "phps", "php3", "exe", "bat" );<br>
        if (in_array($file_suffix, $not_allow_ext )){<br>
            dump_json( array( "status" => 0, "message" => el( "不支持该扩展名文件上传", "" ) ) );<br>
        }<br>
        $path_target = getusercachepath( );<br>
        do{<br>
            $file_id = makerandomname( );<br>
            $file_target = $path_target.$file_id.".".$file_suffix;<br>
        } while ( file_exists( $file_target ) );<br>
        if ( move_uploaded_file( $file_source, $file_target )){<br>
            dump_json( array( "status" => 0, "message" => el( "写入文件出错,请与管理员联系!", "" ) ) );<br>
        }<br>
        $_SESSION[SESSION_ID]['attach_cache'][] = array( "id" => $file_id, "name" => $file_name, "type" => "1", "path" => $file_target, "size" => $file_size );<br>
        dump_json( array( "status" => "1", "filename" => $file_name, "filesize" => $file_size, "file_id" => $file_id ) );<br>
    }else{<br>
        dump_json( array( "status" => "0", "message" => el( "无法找到需要上传的文件!", "" ) ) );<br>
    }<br>
}</code>
登录后复制



我们注意到如下的代码

code 区域
<code>$not_allow_ext = array( "php", "phps", "php3", "exe", "bat" );<br>
if (in_array($file_suffix, $not_allow_ext )){<br>
	dump_json( array( "status" => 0, "message" => el( "不支持该扩展名文件上传", "" ) ) );<br>
}</code>
登录后复制



非常明显,采用的是黑名单验证,虽然我们可以采用类似这样的文件后缀绕过程序的检测,如:bypass.phpX(这里的X代表空格%20或其他特殊字符{%80-%99}),但这完全不是今天我想要讲的内容。

今天,通过这个实例给大家讲解一种新型的文件上传方式,且听我细细道来..

#2 代码poc实现

为了在本地测试方便,我们对上述代码进行简化,如下

code 区域
<code><?php <br />
//U-Mail demo ...<br>
if(isset($_POST['submit'])){<br>
	$filename = $_POST['filename'];<br>
	$filename = preg_replace("/[^\w]/i", "", $filename);<br>
	$upfile = $_FILES['file']['name'];<br>
        $upfile = str_replace(';',"",$upfile);<br>
	$upfile = preg_replace("/[^(\w|\:|\$|\.|\)]/i", "", $upfile);<br>
	$tempfile = $_FILES['file']['tmp_name'];<br>
<br>
	$ext = trim(get_extension($upfile)); // null<br>
<br>
	if(in_array($ext,array('php','php3','php5'))){<br>
		die('Warning ! File type error..');<br>
	}<br>
<br>
	if($ext == 'asp' or $ext == 'asa' or $ext == 'cer' or $ext == 'cdx' or $ext == 'aspx' or $ext == 'htaccess') $ext = 'file';<br>
<br>
        //$savefile = 'upload/'.$upfile;<br>
	$savefile = 'upload/'.$filename.".".$ext;<br>
<br>
	if(move_uploaded_file($tempfile,$savefile)){<br>
		die('Success upload..path :'.$savefile);<br>
	}else{<br>
		die('Upload failed..');<br>
	}<br>
}<br>
function get_extension($file){<br>
	return strtolower(substr($file, strrpos($file, '.')+1));<br>
}<br>
?><br>
<br>
 <br>
  <form method="post" action="upfile.php" enctype="multipart/form-data">
<br>
   <input type="file" name="file" value=""><br>
   <input type="hidden" name="filename" value="file"><br>
   <input type="submit" name="submit" value="upload"><br>
  </form>
<br>
 <br>
</code>
登录后复制



对于上述代码,虽然是通过黑名单进行文件名检测,但通过目前已知的上传方法,是没有办法成功上传php文件的(不考虑程序的Bug),因此可以说这段文件上传的代码是"安全"的,

可是,我蓦然回首,在那个灯火阑珊的地方,php邂逅了Windows,美丽的爱情故事便由此产生了..

#3 细说故事

某天,二哥在群里丢了一个url连接,我简单看了下,关于利用系统特性进行文件上传的,兴趣马上就来了,就细细研究了下,于是有了这篇文章..

pkav之当php懈垢windows通用上传缺陷



这几行英文的意思大致是,在php+window+iis环境下:

双引号(">") 点号(".")';

大于符号(">") 问号("?")';

小于符号(" 星号("*")';

有这么好玩的东西,那不就可以做太多的事了?但事实并不是这样,通过一系列的测试发现,该特性只能用于文件上传时覆盖已知的文件,于是这个特性便略显鸡肋..

原因有二:

1)上传文件的目录一般我们都不可控;

2)同时,一般文件上传的目录不可能存在我们想要的任何php文件,因此没办法覆盖;

后来,经过反反复复的思考,终于找到了可以完美利用的办法..

思路如下:

首先我们先利用特殊办法生成一个php文件,然后再利用这个特性将文件覆盖..

可问题又来了,怎样生成php文件呢?如果可以直接生成php文件的话,干嘛还要利用那什么特性?

别急,办法总是有的..

我们都知道在文件上传时,我们往往会考虑到文件名截断,如%00 等..

对!有的人可能还会用冒号(":")去截断,如:bypass.php:jpg

但是你知道吗?冒号截断产生的文件是空白的,里面并不会有任何的内容,呵呵 说到这里 明白了没有? 虽然生成的php文件里面没有内容,但是php文件总生成了吧,所以 我们可以结合上面所说的特性完美成功利用..

#4 冒号+特性成功利用

按照#3提供的思路,实现..

本地测试地址:http://www.secmap.cn/upfile.php 环境:Windows+IIS7.5

1)首先利用冒号生成我们将要覆盖的php文件,这里为:bypass.php,如图

pkav之当php懈垢windows通用上传缺陷



点击forward后,可以看见成功生成空白的bypass.php文件

pkav之当php懈垢windows通用上传缺陷



2)利用上面的系统特性覆盖该文件

从上面已经知道"
我们可以这样修改上传的文件名,如下:

code 区域
<code>------WebKitFormBoundaryaaRARrn2LBvpvcwK<br>
Content-Disposition: form-data; name="file"; filename="bypass.
Content-Type: image/jpeg<br>
//注意!文件名为:bypass.</code>
登录后复制



点击go..,即可成功覆盖bypass.php文件,如图

pkav之当php懈垢windows通用上传缺陷



对比上面的两个图,bypass.php被我们成功的写入了内容..

pkav之当php懈垢windows通用上传缺陷



#5 特性二

首先来看看微软MSDN上面的一段话,如图

pkav之当php懈垢windows通用上传缺陷



注意红色圈起来的英文

code 区域
<code>The default data stream has no name. That is, the fully qualified name for the default stream for a file called "sample.txt" is "sample.txt::$DATA" since "sample.txt" is the name of the file and "$DATA" is the stream type.</code>
登录后复制



看不去不错哟,试试吧..

同样,我们可以这样修改上传的文件名,如下:

code 区域
<code>------WebKitFormBoundaryaaRARrn2LBvpvcwK<br>
Content-Disposition: form-data; name="file"; filename='DataStreamTest.php::$DATA'<br>
Content-Type: image/jpeg<br>
//注意!文件名为:DataStreamTest.php::$DATA</code>
登录后复制



点击GO,奇迹出现了..

pkav之当php懈垢windows通用上传缺陷



访问之...

pkav之当php懈垢windows通用上传缺陷

 

漏洞证明:

#6 漏洞证明

U-Mail,具体利用方法,同上述的方法一样,为了简单快捷的话,可直接抓包修改文件名为:

shell.php::$DATA 即可成功上传,这里不再演示,附shell

pkav之当php懈垢windows通用上传缺陷

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

deepseek网页版入口 deepseek官网入口 deepseek网页版入口 deepseek官网入口 Feb 19, 2025 pm 04:54 PM

DeepSeek 是一款强大的智能搜索与分析工具,提供网页版和官网两种访问方式。网页版便捷高效,免安装即可使用;官网则提供全面产品信息、下载资源和支持服务。无论个人还是企业用户,都可以通过 DeepSeek 轻松获取和分析海量数据,提升工作效率、辅助决策和促进创新。

Bybit交易所最新版本怎么更新?不更新会有影响吗? Bybit交易所最新版本怎么更新?不更新会有影响吗? Feb 21, 2025 pm 10:54 PM

更新ByBit交易所的方式因平台和设备而异:移动设备:在应用商店中检查更新并安装。桌面客户端:在“帮助”菜单中检查更新并自动安装。网页端:需要手动访问官网进行更新。不更新交易所可能导致安全漏洞、功能限制、兼容性问题和交易执行效率降低。

Pi Node教学:什么是Pi节点?如何安装和设定Pi Node? Pi Node教学:什么是Pi节点?如何安装和设定Pi Node? Mar 05, 2025 pm 05:57 PM

PiNetwork节点详解及安装指南本文将详细介绍PiNetwork生态系统中的关键角色——Pi节点,并提供安装和配置的完整步骤。Pi节点在PiNetwork区块链测试网推出后,成为众多先锋积极参与测试的重要环节,为即将到来的主网发布做准备。如果您还不了解PiNetwork,请参考Pi币是什么?上市价格多少?Pi用途、挖矿及安全性分析。什么是PiNetwork?PiNetwork项目始于2019年,拥有其专属加密货币Pi币。该项目旨在创建一个人人可参与

deepseek怎么安装 deepseek怎么安装 Feb 19, 2025 pm 05:48 PM

DeepSeek的安装方法有多种,包括:从源码编译(适用于经验丰富的开发者)使用预编译包(适用于Windows用户)使用Docker容器(最便捷,无需担心兼容性)无论选择哪种方法,请仔细阅读官方文档并充分准备,避免不必要的麻烦。

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

Coinsuper交易所软件渠道官网入口 Coinsuper交易所软件渠道官网入口 Feb 21, 2025 pm 10:39 PM

Coinsuper交易所的官网入口:https://www.coinsuper.com。客户端下载渠道依次为:Windows客户端、macOS客户端、移动端(iOS/Android)。注册需提供电子邮件、手机号和密码,需完成实名认证后才能交易。平台提供多种数字资产交易,包括比特币、以太坊等,交易费率对下单者和接单者均为0.1%。安全保障措施包括冷钱包存储、双重验证、反洗钱和反恐融资措施,并与安全公

See all articles