Author: handt

site     :upload/2011/3/201103240211173836.jpg” border=”0″ small=”0″ alt=”" />

0×01 exploit 使用演示

在 /phpweb 目录下建立文件vuln.php ,将 [1] 中给出的exploit代码复制进去,保存。

确保你的php.exe在环境变量中,在/phpweb目录shift+右键,打开命令行,输入:

php vuln.php

出现使用提示:

对FCKEditor <= 2.6.4 通杀 exploit 的分析_Fckeditor

本地的fckeditor路径为 /htdocs/js/fckeditor/editor……

所以输入命令为:

php vuln.php 127.0.0.1 /js/fckeditor/

对FCKEditor <= 2.6.4 通杀 exploit 的分析_Fckeditor_02

是config.php文件中没有开启上传功能,ok,修改config.php第30行:$Config['Enabled'] = false;

再次输入 php vuln.php 127.0.0.1 /js/fckeditor/

对FCKEditor <= 2.6.4 通杀 exploit 的分析_Fckeditor_03

看来是遇到死循环了,没办法,自己打印一些中间信息进行查看,在connector.php文件中对传入的三个参数进行简单处理后调用了

FileUpload( $sResourceType, $sCurrentFolder, $sCommand ) ;

这里三个参数值分别为:Image,/fuck.php .gif/,FileUpload 。

FileUpload()在commands.php中定义:

function FileUpload( $resourceType, $currentFolder, $sCommand )
{
if (!isset($_FILES)) {
global $_FILES;
}
$sErrorNumber = ’0′ ;
$sFileName = ” ;
echo ‘#4#’;
if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) )
{
echo ‘#5#’;
global $Config ;

$oFile = $_FILES['NewFile'] ;
echo ‘#10#’;
// Map the virtual path to the local server path.
$sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;

通过打印 #x# 的提示信息,可以判断出问题出在ServerMapFolder()函数上,该函数在io.php中定义:

function ServerMapFolder( $resourceType, $folderPath, $sCommand )
{

// Get the resource type directory.
$sResourceTypePath = GetResourceTypeDirectory( $resourceType, $sCommand ) ;

再看GetResourceTypeDirectory()的代码:

function GetResourceTypeDirectory( $resourceType, $sCommand )
{
global $Config ;
if ( $sCommand == “QuickUpload”)
{
if ( strlen( $Config['QuickUploadAbsolutePath'][$resourceType] ) > 0 )
return $Config['QuickUploadAbsolutePath'][$resourceType] ;

// Map the “UserFiles” path to a local directory.
return Server_MapPath( $Config['QuickUploadPath'][$resourceType] ) ;
}
else
{
if ( strlen( $Config['FileTypesAbsolutePath'][$resourceType] ) > 0 )
return $Config['FileTypesAbsolutePath'][$resourceType] ;

// Map the “UserFiles” path to a local directory.
return Server_MapPath( $Config['FileTypesPath'][$resourceType] ) ;
}
}

最后,路径信息落到了Server_MapPath()里面,这里$Config['FileTypesPath'][$resourceType] 值在config.php中设置,此处为

$Config['FileTypesPath']['Image']的值,看看Server_MapPath()的内容:

function Server_MapPath( $path )
{
// This function is available only for Apache
if ( function_exists( ‘apache_lookup_uri’ ) )
{
echo ‘func exist!!’;

echo $path;  // 注意,这里打印的信息
$info = apache_lookup_uri( $path ) ;
return $info->filename . $info->path_info ;
}

// This isn’t correct but for the moment there’s no other solution
// If this script is under a virtual directory or symlink it will detect the problem and stop
return GetRootPath() . $path ;
}

函数中$path打印的值为:/userfiles/p_w_picpath/ 很正常,而最后返回的值为/index.php/userfiles/p_w_picpath/,显然是因为function_exists( ‘apache_lookup_uri’ )为true,导致$info->filename执行,导致结果错误。

注释掉 return $info->filename . $info->path_info

再次执行:

php  vuln.php 127.0.0.1 /js/fckeditor/

对FCKEditor <= 2.6.4 通杀 exploit 的分析_职场_04

ok,让人欣喜的结果出来了,看看/htdocs/userfiles/p_w_picpath目录吧:

对FCKEditor <= 2.6.4 通杀 exploit 的分析_休闲_05

现在小马已经写入服务器,接下来就是用客户端连接了。这里,推荐大家使用”中国菜刀“这款工具,可以直接对php、asp、aspx的一句话木马进行连接:

对FCKEditor <= 2.6.4 通杀 exploit 的分析_Fckeditor_06

看到效果了吧:

对FCKEditor <= 2.6.4 通杀 exploit 的分析_休闲_07

 

0×02 实战

这个因为比较危险,所以具体的过程和方式就不详细叙述了。

总之,通过自己的实战证明,这个exploit绝对可以拿到webshell,只是概率并不高,需要耐心和良好的google关键字。

0×03 成因分析

0×01中只是演示了利用过程,下面对背后的原理进行分析。水平有限,错误的地方还请指出。

待有时间了补充

0×04 小结

在使用中自己想深入了解的地方有:

1.“一句话木马客户端”的原理,以及如何编写木马客户端。

2.漏洞的发掘过程,目前企业界好像很流行fuzzing测试,但是这种具体的程序怎么进行测试我还是不了解,有知道的朋友还请不吝赐教: mail2gw@qq.com