PHP文件系统攻击向量第二部分.

释放双眼,带上耳机,听听看~!

PHP Filesystem Attack Vectors – Part Two,PHP文件系统攻击向量-第二部分,

白皮书讨论了大量PHP文件系统攻击向量。拿两个。

,PHP文件系统攻击向量-取两个名称PHP文件系统攻击向量-取两个受系统影响的PHP和PHP+Suhosin供应商http://www.PHP.net/Advisory http://www.ush.it/team/ush/hack-phpfs/phpfs_mad_2.txt作者Giovanni“evilliv3”Pellerano(evilliv3 AT ush DOT it)Antonio“s4tan”Parata(s4tan AT ush DOT it)Francesco“ascii”Ongaro(ascii AT ush DOT it)Alessandro“jekil”Tanasi(Alessandro AT Tanasi DOT it)日期20090725 I)简介II)PHP任意本地文件包含测试III)PHP任意本地文件包含结果I V)PHP任意文件打开测试V)PHP任意文件打开结果VI)PHP任意远程文件上载测试VII)PHP任意远程文件上传结果VIII)结论IX)参考文献I)简介这是我们之前“PHP文件系统攻击向量”研究的第二部分和延续[1]。在“SugarCRM 5.2.0e远程代码执行”咨询[2]中使用s4tan和ascii时,我们注意到Windows操作系统上有一个奇怪的行为:试图上传一个名为“a.php”的文件,结果只得到“a.php”。分析这一点时,我们注意到,每当应用程序或手动尝试打开或保存一个结尾有一个或多个点的文件时,Windows并没有拒绝该操作,而是以透明的方式删除这些点。细心的读者可能已经发现了这个问题。我们想花点时间深入调查可用的规范化问题以及如何利用这些问题来利用任意的本地文件包含/处理和上载功能(不仅在Windows操作系统上,而且在GNU/Linux和*BSD上)。下面你可以找到两个简单的“学术”模糊的来源,稍后讨论结果,最后提出POCs和结论。二) PHP任意本地文件包含测试这个测试包括(),include_once(),require(),require_once()和类似的函数。–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--?php error_reporting(0);$InterestingFile=“test_alfi.php”;$fh=@fopen($InterestingFile,'w+');fwrite($fh,<?php?>.$chr j;否则$FuzzyFile=$InterestingFile.$chri.$chrj.$chrk;if(include($FuzzyFile)){print($i.“.$j.”.$k.“[”$FuzzyFile.’]\n“);fclose($fh);}if($j==0)break;}}}取消链接($InterestingFile)?>–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--。一个更好的绒毛包括UTF-8。在测试中,我们也不考虑\x00,因为这个向量已经知道了[3,4]。三) <--8<--8<--8<--8<--8<--PHP 5.2.10-pl0-Gentoo+Suhosin补丁0.9.27PHPFS_-phphphpfs phphphp alfiu fuzzzer.php[无结果]--8<--8<--8<--8<--8 8<--8<--8--8--8<--8<--8<--8--8<--8<--8—8--phphp 5.2.10-FreeBSD 8 frfiufuzzzer.phphp Alfiu fuzzzer.phphphphphpfsAlfiu fuzzzer.php[无结果]--8--8<--8<--8<--8<--8<--8<--8--8<--8--8--8--8<--8<--8<--8<--8<--8<--8<--php5.3.0windowsxp(wampserver2.0i安装)C:\PHPFS_MAD2>phpalfi_fuzzer.php!有效的字符是:\ x20(),\ x22(“),\ x2E(.),\ x3C(<),\ x3E(>)!有效字符串是以上字符的所有组合。–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--PHP5.3.0Windows Server 2008(WampServer 2.0i install)C:\ PHPFS_MAD2>PHP alfi_fuzzer.PHP!有效的字符是:\ x20(),\ x22(“),\ x2E(.),\ x3C(<),\ x3E(>)!有效字符串是以上字符的所有组合。–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--IV)PHP任意文件打开测试此函数测试fopen()和类似函数。--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--afo_fuzzer.php:<?ciousfile.$chr i.$chr j.chr($k);$fh=@fopen($FuzzyFile,'w+');如果($fh!如果(Fiely存在($MyLICHORE文件)){($J==0)打印($i“”);否则($k=0)打印($i)“$j”);否则$FuffyFix=打印($i)“$j”“$k”);打印(“.FielyGETX内容($MaliouFILE)”“\n”);unLink($MaliCuy文件);}否则unLink($FuffyFILE);}($J= 0)中断;}}?= false({ffDead)($fh,$FuffyFILE);fCox($)>.PHP/]47 47 46[测试–.10-FreeBSD 7.3+Suhosin补丁0.9.7 PHPFS_MAD2$PHP afo_fuzzer.PHP 47 46[test_afo.PHP/]47 47 46[测试_afo.php//.]–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-PHP5.3.0 Windows XP(WampServer 2.0i install)C:\ PHPFS_MAD2>php afoòfuzzer.php!有效的字符是:\ x2E(.),\ x2F(/),\ x5C(\)!有效字符串是以上字符的所有组合。–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--PHP5.3.0Windows Server 2008(WampServer 2.0i安装)C:\ PHPFS_MAD2>PHP afo_fuzzer.PHP!有效的字符是:\ x2E(.),\ x2F(/),\ x5C(\)!有效字符串是以上字符的所有组合。–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--VI)PHP任意远程文件上载测试此测试移动上载的文件()和类似的函数。--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--upload.php:<?PHP Error OrthRead(0);$MalICIOFILE=“Word.php”;如果(ISTSET($yGET [ Fuff])){$FuffyList= $MalixField.$MyGET(‘Fuffic’);MyWixPoaldDyFrm($yFrase[UsFrase])[$tMPyNoNe],$FuffyTestObjest];PrimTf($FuffyTestObjest.);如果(FiLeIe存在($MyCuffFILE)){Enter“成功”);unLink($MICICUAY文件);EXIT();}否则{unlink($FuzzyDestination);}}echo“失败”?>阿福·弗泽尔·什:#!/bin/bash touch“uploadtest.txt”url=“http://127.0.0.1/uploads/upload.php?tk %02x$j’在k为{ 0…255 };xk=“%`Prtf%%02x$K”“Ext= $XJ $ xk”[$k-eq 0 ]&Ext=“$XI$XJ”[($J-EQ 0)&&Ext= = $XI“响应= ‘CURL -KIS-F”UsFrase= @上载测试.txt;“$URL $ Ext*GRIP成功WC-L’如果[ [ $Realsiv]=“1”);Fuzzy=“i在{ 1…255 }中,Xi=%` Prtff%02x $ i’,对于{ 0…255 }中的j;pl0-Gentoo PHPFS_MAD2$sh test_arfu.sh找到:47 0 0->(/)找到:47–8<--8<--8<--8<--8<--8<-PH是的。]--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--PHP 5.3.0windows Server 2008(WampServer 2.0i install)PHPFS_MAD2$sh test_arfu.sh[所有(空格),/,\的组合都是有效的。]--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--VIII)我们发现可以利用文件名规范化例程来绕过常见的web应用程序安全例程的结论,详细如下:-在GNU/Linux上两者(包括| require)(一次)?函数将“foo.php”后跟一个或多个\x2F(/)和\x2E(.)序列转换回“foo.php”。如果应用了Suhosin修补程序,则此操作不起作用。-在GNU/Linux上,fopen函数将把“foo.php”和一个或多个序列的\x2F(/)和\x2E(.)转换回“foo.php”。如果应用了Suhosin修补程序,则此操作不起作用。-在GNU/Linux上,move_uploaded_file函数将“foo.php”转换为“foo.php”,然后是一个或多个序列的\x2F(/)和\x2E(.)返回到“foo.php”。不管怎样,如果使用了Suhosin补丁,它也可以工作。-在FreeBSD上,fopen函数将“foo.php”后跟一个或多个\x2F(/)和\x2E(.)序列转换回“foo.php”。不管怎样,如果使用了Suhosin补丁,它也可以工作。Suhosin在默认安装中提供。-在FreeBSD上,move_uploaded_file函数将“foo.php”转换为“foo.php”,然后是一个或多个序列的\x2F(/)和\x2E(.)转换回“foo.php”。不管怎样,如果使用了Suhosin补丁,它也可以工作。Suhosin在默认安装中提供。-在Windows操作系统上都有(包括要求)(一次)?函数将“foo.php”后跟一个或多个字符\x20()、\x22(“)、\x2E(.)、\x3C(<)、\x3E(>)转换回“foo.php”。-在Windows操作系统上,fopen函数将“foo.php”后跟一个或多个字符\x2E(.)、\x2F(/)、\x5C(\)转换回“foo.php”。-在Windows操作系统上,move_uploaded撸file函数将把“foo.php”后跟一个或多个字符\x2E(.),\x2F(/),\x5C(\)转换回“foo.php”。我们观察到一些特殊的字符串,如“foo.php./”或“foo.php.\”迫使Windows创建一个名为“foo.php”的文件。Windows函数似乎不考虑文件末尾存在点(也许Windows黑客可以更好地对此进行评论)。该文件上的所有函数都将失败,因此无法轻松删除或重命名该文件(必须执行del*或similiar)。九) 参考文献[1]http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/http://www.ush.it/team/ush/hack-phpfs/phpfs_mad.txt[2]http://www.ush.it/team/ush/hack-sugarcrm_520e/adv.txt[3]http://www.securiteam.com/securitynews/5fp0ckjpq.html[4]http://ha.ckers.org/blog/20060914/php-ulnerable-to-null-byte-injection/–8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--Credits(带外)这篇文章是ush.it团队购买给您的。乔瓦尼“邪恶3”佩莱拉诺,安东尼奥“s4tan”帕拉塔和弗朗西斯科“ascii”翁加罗是谁花了大部分时间在它宝贵的帮助下,亚历山德罗“杰基尔”塔纳西,弗洛林“滑溜”伊曼迪和许多其他朋友。Giovanni“evilliv3”Pellerano网站:http://www.ush.it/,http://www.evilliv3.org/邮件:evilliv3 AT ush DOT it Antonio“s4tan”Parata网站:http://www.ush.it/邮件:s4tan AT ush DOT it Francesco“ascii”Ongaro网站:http://www.ush.it/邮件:ascii AT ush DOT it alesandro“jekil”Tanasi网站:http://www.Tanasi.it/邮件:alesandro在tanasi DOT--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--Legal Notices版权所有(c)2009 Francesco“ascii”Ongaro允许以电子方式重新发布此警报。未经我方明确书面同意,不得以任何方式编辑。如果你想代表请将此警报的全部或任何部分打印在除电子版以外的任何其他媒体上,并通过电子邮件发送给我以获取许可。免责声明:根据目前可获得的信息,文章中的信息在发表时被认为是准确的。信息的使用构成接受按原样使用。本信息不作任何保证。对于因使用或依赖本信息而造成的任何直接、间接或后果性损失或损害,作者和出版商均不承担任何责任,网络安全教程PHP Filesystem Attack Vectors – Part Two,

Whitepaper discussing a large amount of PHP filesystem attack vectors. Take Two.

,PHP filesystem attack vectors - Take Two

Name PHP filesystem attack vectors - Take Two
Systems Affected PHP and PHP+Suhosin
Vendor http://www.php.net/
Advisory http://www.ush.it/team/ush/hack-phpfs/phpfs_mad_2.txt
Authors Giovanni "evilaliv3" Pellerano (evilaliv3 AT ush DOT it)
Antonio "s4tan" Parata (s4tan AT ush DOT it)
Francesco "ascii" Ongaro (ascii AT ush DOT it)
Alessandro "jekil" Tanasi (alessandro AT tanasi DOT it)
Date 20090725

I) Introduction
II) PHP arbitrary Local File Inclusion testing
III) PHP arbitrary Local File Inclusion results
IV) PHP arbitrary File Open testing
V) PHP arbitrary File Open results
VI) PHP arbitrary Remote File Upload testing
VII) PHP arbitrary Remote File Upload results
VIII) Conclusions
IX) References

I) Introduction

This is the second part and continuation of our previous "PHP filesystem
attack vectors" [1] research.

Working with s4tan and ascii on the "SugarCRM 5.2.0e Remote Code
Execution" advisory [2] we noticed a strange behaviour on Windows OS:
trying to upload a file named "a.php." results in just "a.php".

Analyzing this we noticed that every time an application, or manually,
was trying to open or save a file with one ore more dots at the end,
Windows was not denying the operation, but it was removing the dots in a
transparent way.

Mindful readers probably have already spotted the issue.

We wanted to take our time for a deeper investigation about what
normalization issues were available and how to take advantage of them
in order to exploit arbitrary local file inclusion/handling and uploads
functionalities (not only on Windows OS but also on GNU/Linux and *BSD).

Below you can find the sources of two simple "academic" fuzzers, later
results are discussed and finally POCs and conclusions are proposed.

II) PHP arbitrary Local File Inclusion testing

This tests include(), include_once(), require(), require_once() and
similiar functions.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

alfi_fuzzer.php:

<?php

error_reporting(0);

$InterestingFile = "test_alfi.php";
$fh = @fopen($InterestingFile, 'w+');
fwrite($fh, "<?php ?>");
fclose($fh);

for ($i = 1; $i < 256; $i++) {
$chri = chr($i);
for ($j = 0; $j < 256; $j++) {
$chrj = chr($j);
for ($k = 0; $k < 256; $k++) {
$chrk = chr($k);
if($chri.$chrj.$chrk == '://') continue;
if ($j == 0) $FuzzyFile = $InterestingFile.$chri;
else if ($k == 0) $FuzzyFile = $InterestingFile.$chri.$chrj;
else $FuzzyFile = $InterestingFile.$chri.$chrj.$chrk;
if(include($FuzzyFile)) {
print($i." ".$j." ".$k." [".$FuzzyFile."]\n");
fclose($fh);
}
if($j == 0) break;
}
}
}

unlink($InterestingFile);

?>

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

Note: This code and the one that will be presented in section IV only
makes use of chars from the ASCII extended table (256 chars) to limit the
combinations because our intent was to test not only a malicious ending
char but a whole ending "extension" of 3 bytes.

A better fuzzer would include UTF-8. In the test we also do not
consider \x00, because this vector is already known [3, 4].

III) PHP arbitrary Local File Inclusion results

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo

PHPFS_MAD2 $ php alfi_fuzzer.php
47 46 46 [test_alfi.php/.]
47 47 47 [test_alfi.php//.]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo + Suhosin-Patch 0.9.27

PHPFS_MAD2 $ php alfi_fuzzer.php

[ NO RESULTS ]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-FreeBSD 7.3 + Suhosin-Patch 0.9.7

PHPFS_MAD2 $ php alfi_fuzzer.php

[ NO RESULTS ]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-

PHP 5.3.0 Windows XP (WampServer 2.0i install)

C:\PHPFS_MAD2> php alfi_fuzzer.php
! Valid chars are: \x20 ( ), \x22 ("), \x2E (.), \x3C (<), \x3E (>)
! Valid strings are all combinations of the above chars.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.3.0 Windows Server 2008 (WampServer 2.0i install)

C:\PHPFS_MAD2> php alfi_fuzzer.php
! Valid chars are: \x20 ( ), \x22 ("), \x2E (.), \x3C (<), \x3E (>)
! Valid strings are all combinations of the above chars.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

IV) PHP arbitrary File Open testing

This tests fopen() and similiar functions.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

afo_fuzzer.php:

<?php

error_reporting(0);

$MaliciousFile = "test_afo.php";

for ($i = 1; $i < 256; $i++) {
$chri = chr($i);
for ($j = 0; $j < 256; $j++) {
$chrj = chr($j);
for ($k = 0; $k < 256; $k++) {
if ($j == 0) $FuzzyFile = $MaliciousFile.$chri;
else if ($k == 0) $FuzzyFile = $MaliciousFile.$chri.$chrj;
else $FuzzyFile = $MaliciousFile.$chri.$chrj.chr($k);
$fh = @fopen($FuzzyFile, 'w+');
if ($fh != FALSE) {
fwrite($fh, $FuzzyFile);
fclose($fh);
if (file_exists($MaliciousFile)) {
if ($j == 0) print($i." ");
else if ($k == 0) print($i." ".$j." ");
else $FuzzyFile = print($i." ".$j." ".$k." ");
print("[".file_get_contents($MaliciousFile)."]\n");
unlink($MaliciousFile);
} else
unlink($FuzzyFile);
}
if($j == 0)
break;
}
}
}

?>

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

V) PHP arbitrary File Open Fuzzer results

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo

PHPFS_MAD2 $ php afo_fuzzer.php
47 46 [test_afo.php/.]
47 47 46 [test_afo.php//.]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo + Suhosin-Patch 0.9.27

PHPFS_MAD2 $ php afo_fuzzer.php

[ NO RESULTS ]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-

PHP 5.2.10-FreeBSD 7.3 + Suhosin-Patch 0.9.7

PHPFS_MAD2 $ php afo_fuzzer.php

47 46 [test_afo.php/.]
47 47 46 [test_afo.php//.]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-

PHP 5.3.0 Windows XP (WampServer 2.0i install)

C:\PHPFS_MAD2> php afo_fuzzer.php

! Valid chars are: \x2E (.), \x2F (/), \x5C (\)
! Valid strings are all combinations of the above chars.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.3.0 Windows Server 2008 (WampServer 2.0i install)

C:\PHPFS_MAD2> php afo_fuzzer.php

! Valid chars are: \x2E (.), \x2F (/), \x5C (\)
! Valid strings are all combinations of the above chars.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

VI) PHP arbitrary Remote File Upload testing

This tests move_uploaded_file() and similiar functions.

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

upload.php:

<?php

error_reporting(0);

$MaliciousFile = "evil.php";

if (isset($_GET['fuzzy'])) {
$FuzzyDestination = $MaliciousFile.$_GET['fuzzy'];
move_uploaded_file($_FILES['userfile']['tmp_name'], $FuzzyDestination);
printf($FuzzyDestination);
if (file_exists($MaliciousFile)) {
echo "SUCCESS";
unlink($MaliciousFile);
exit();
} else {
unlink($FuzzyDestination);
}
}

echo "FAIL";

?>

arfu_fuzzer.sh:

#!/bin/bash

touch "uploadtest.txt"
url="http://127.0.0.1/uploads/upload.php?fuzzy="

for i in {1..255}; do
xi="%`printf %02x $i`"
for j in {0..255}; do
xj="%`printf %02x $j`"
for k in {0..255}; do
xk="%`printf %02x $k`"

ext="$xi$xj$xk"
[ $k -eq 0 ] && ext="$xi$xj"
[ $k -eq 0 ] && [ $j -eq 0 ] && ext="$xi"

response=`curl -kis -F "userfile=@uploadtest.txt;" $url$ext | grep
SUCCESS | wc -l`

if [ "$response" == "1" ]; then
echo "Found: $i $j $k -> ($ext)";
fi

[ $j -eq 0 ] && break

done
done
done

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

VII) PHP arbitrary Remote File Upload results

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo

PHPFS_MAD2 $ sh test_arfu.sh

FOUND: 47 0 0 -> (/)
FOUND: 47 46 0 -> (/.)

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.2.10-pl0-Gentoo + Suhosin-Patch 0.9.27

PHPFS_MAD2 $ sh test_arfu.sh

FOUND: 47 0 0 -> (/)
FOUND: 47 46 0 -> (/.)

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-

PHP 5.2.10-FreeBSD 7.3 + Suhosin-Patch 0.9.7

PHPFS_MAD2 $ sh test_arfu.sh

FOUND: 47 46 0 -> (/.)

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-

PHP 5.3.0 Windows XP (WampServer 2.0i install)

PHPFS_MAD2 $ sh test_arfu.sh

[ All the combinations of (space), ., /, \ are valid ones. ]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

PHP 5.3.0 Windows Server 2008 (WampServer 2.0i install)

PHPFS_MAD2 $ sh test_arfu.sh

[ All the combinations of (space), ., /, \ are valid ones. ]

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

VIII) Conclusions

We found that it's possible to take advantage of filename normalization
routines in order to bypass common web application security routines,
detailed below:

- On GNU/Linux both (include|require)(_once)? functions will convert
"foo.php" followed by one or more sequences of \x2F (/) and \x2E (.)
back to "foo.php".
This does not work if Suhosin patch is applied.

- On GNU/Linux the fopen function will convert "foo.php" followed by one
or more sequences of \x2F (/) and \x2E (.) back to "foo.php".
This does not work if Suhosin patch is applied.

- On GNU/Linux move_uploaded_file function will convert "foo.php"
followed by one or more sequences of \x2F (/) and \x2E (.) back to
"foo.php".
This does work anyway *also* if Suhosin patch is applied.

- On FreeBSD the fopen function will convert "foo.php" followed by one
or more sequences of \x2F (/) and \x2E (.) back to "foo.php".
This does work anyway *also* if Suhosin patch is applied.
Suhosin is shipped in the the default install.

- On FreeBSD the move_uploaded_file function will convert "foo.php"
followed by one or more sequences of \x2F (/) and \x2E (.) back to
"foo.php".
This does work anyway *also* if Suhosin patch is applied.
Suhosin is shipped in the the default install.

- On Windows OS both (include|require)(_once)? functions will convert
"foo.php" followed by one or more of the chars \x20 ( ), \x22 ("),
\x2E (.), \x3C (<), \x3E (>) back to "foo.php".

- On Windows OS the fopen function will convert "foo.php" followed by
one or more of the chars \x2E (.), \x2F (/), \x5C (\) back to
"foo.php".

- On Windows OS move_uploaded_file function will convert "foo.php"
followed by one or more of the chars \x2E (.), \x2F (/), \x5C (\)
back to "foo.php".

We have observed that some particular strings like "foo.php./" or
"foo.php.\" force Windows to create a file called "foo.php.". It
seems that Windows' functions do not contemplate the existence of
a file with dots at the end (perhaps Windows hackers can better
comment on this).

All functions on that file will fail their attempt, so that it's not
possible to easily delete or rename that file (one has to do del *
or similiar).

IX) References

[1] http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/
http://www.ush.it/team/ush/hack-phpfs/phpfs_mad.txt
[2] http://www.ush.it/team/ush/hack-sugarcrm_520e/adv.txt
[3] http://www.securiteam.com/securitynews/5FP0C0KJPQ.html
[4] http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

Credits (Out of band)

This article has been bought to you by the ush.it team. Giovanni
"evilaliv3" Pellerano, Antonio "s4tan" Parata and Francesco "ascii"
Ongaro are the ones who spent most hours on it with the precious help
of Alessandro "Jekil" Tanasi, Florin "Slippery" Iamandi and many other
friends.

Giovanni "evilaliv3" Pellerano
web site: http://www.ush.it/, http://www.evilaliv3.org/
mail: evilaliv3 AT ush DOT it

Antonio "s4tan" Parata
web site: http://www.ush.it/
mail: s4tan AT ush DOT it

Francesco "ascii" Ongaro
web site: http://www.ush.it/
mail: ascii AT ush DOT it

Alessandro "jekil" Tanasi
web site: http://www.tanasi.it/
mail: alessandro AT tanasi DOT it

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

Legal Notices

Copyright (c) 2009 Francesco "ascii" Ongaro

Permission is granted for the redistribution of this alert
electronically. It may not be edited in any way without mine express
written consent. If you wish to reprint the whole or any
part of this alert in any other medium other than electronically,
please email me for permission.

Disclaimer: The information in the article is believed to be accurate
at the time of publishing based on currently available information. Use
of the information constitutes acceptance for use in an AS IS condition.
There are no warranties with regard to this information. Neither the
author nor the publisher accepts any liability for any direct, indirect,
or consequential loss or damage arising from use of, or reliance on,
this information.

人已赞赏
安全工具

<p>关于避免SQL注入的论文.</p>

2020-2-6 3:42:21

安全工具

<p>白皮书-Linux强化和安全.</p>

2020-2-6 3:42:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索