Как по хитрому залить шелл в WP?

Discussion in 'Уязвимости CMS/форумов' started by Muracha, 19 Feb 2017.

  1. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    Есть WP версии 3.3.1. Есть стандартные плагины, темы.
    Доступа к WP нет. Ни к файлам, ни к базе.

    Есть доступ к phpmyadmin базе сайта.
    Я планирую создать через него html форму(а это получилось) и отправив данные файлы WP загрузить файл.
    Можно ли это, если вначале в WP файлах идет проверка на авторизацию админа(в папке wp-admin)
    Или это проще сделать через шаблоны?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,759
    Likes Received:
    816
    Reputations:
    230
    Если есть доступ к базе, то почему нельзя вытащить хэш админа (заменить на время), подобрать пароль, и под ним зайти в админку, а там уже отредактировать шаблон?
     
    _________________________
    Gorev likes this.
  3. nick_sale

    nick_sale Member

    Joined:
    15 Jun 2012
    Messages:
    9
    Likes Received:
    9
    Reputations:
    0
  4. Gorev

    Gorev Level 8

    Joined:
    31 Mar 2006
    Messages:
    2,547
    Likes Received:
    1,242
    Reputations:
    273
    на кой ему сбрасывать пасс? типо совсем не палевно для админа . ТС надо зайти в тему расшифровки , найти wp хеш расшифрованный, заменить его в пыхе, сделать дела и вернуть старый хеш на место.профит.
     
  5. nick_sale

    nick_sale Member

    Joined:
    15 Jun 2012
    Messages:
    9
    Likes Received:
    9
    Reputations:
    0
    А в чем различие этого метода,от того что ты предложил?)
    Различе только в том,что не надо идти в "тему" и искать там хеш,если можно и обычным md5 обойтись, а потом вернуть так же все на место.
     
  6. Gorev

    Gorev Level 8

    Joined:
    31 Mar 2006
    Messages:
    2,547
    Likes Received:
    1,242
    Reputations:
    273
    уважаемый, вы значение слов "сбросить и поменять на время" знаете? если да , то увидите и разницу, если нет, то гугл поможет.
     
  7. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    На сервере есть сайт и cms.
    У меня есть доступ к сайту но нет доступа к cms.

    Я с помощью базы сайта могу встроить html код, вывести его на страницу и попытаться загрузить шелл.
    Но мне нужен обработчик php, которого я не могу найти. Знаю, что такая возможность есть у WP но разобраться не могу. Либо это в темы, либо в wp-admin/upload.php, index.php копать.

    Если бы был доступ к базе я бы не парился, залил бы через админку. Но доступа к ней нет
     
  8. racheev

    racheev New Member

    Joined:
    28 Dec 2016
    Messages:
    33
    Likes Received:
    2
    Reputations:
    0
    А это тогда о чем?
     
  9. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    А мне необходим шелл на сайт, который я хочу залить при помощи скриптов wordpress передавая данные на скрипты
     
  10. racheev

    racheev New Member

    Joined:
    28 Dec 2016
    Messages:
    33
    Likes Received:
    2
    Reputations:
    0
    Вы уже всех запутали. Я уже например ничего не понимаю к чему есть доступ к мену нет а к чему надо получить. Такое впечателение что речь о трех разных вещах.
     
    crlf likes this.
  11. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    551
    Likes Received:
    1,038
    Reputations:
    352
    По моему он про CSRF.
     
  12. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    На VPS(виртуальном выделенном сервере) крутиться сайт и wordpress.
    У сайта и wordpress - разные базы данных и разные пользователи mysql.
    У меня есть доступ к базе данных сайта но нет доступа к вордпрессу. Ни к файлам, ни к базе данных.

    Цель: загрузить шелл на сервер.
    Задача: Используя phpmyadmin и загрузив через сайт html форму указать правильный обрабатываемый файл, который я не могу найти.
    Code:
    <html> <head> <title>Загрузка</title> </head> <body> <h1>Загрузка файла</h1> <form action="[b]upload.php[/b]" method="post" enctype="multipart/form-data" target="_blank"> <input name="MAX_FILE_SIZE" type="hidden" value="1000000"> Загрузить файл <input name="userfile" type="file"> <input name="" type="submit" value="Послать файл"> </form> </body> </html> 
    
    То есть вместо upload.php может быть /wp-admin/index.php, /wp-content/themes/default/index.php - или вообще не админка, и не тема.
    Вообщем, какой файл отвечает в wordpress за загрузку файла, которому можно передать параметр и загрузить файл?
     
  13. Gorev

    Gorev Level 8

    Joined:
    31 Mar 2006
    Messages:
    2,547
    Likes Received:
    1,242
    Reputations:
    273
    так поставь у себя вордпресс и смотри какой файл тебе нужен
     
  14. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    За загрузку отвечает /wp-admin/media-new.php
    Он проверяет авторизацию, и если норм, позволяет загружать файлы с помощью media-upload

    media-new.php
    Code:
    <?php
    /**
    * Upload new media Administration Screen.
    *
    * @package WordPress
    * @subpackage Administration
    */
    
    global $is_iphone;
    
    if ( $is_iphone ) // cannot upload files from iPhone/iPad
        return;
    
    $_GET['inline'] = 'true';
    /** Administration bootstrap */
    require_once('./admin.php');
    require_once('./media-upload.php');
    
    ?>
    
    media-upload.php

    Code:
    <?php
    /**
    * Manage media uploaded file.
    *
    * There are many filters in here for media. Plugins can extend functionality
    * by hooking into the filters.
    *
    * @package WordPress
    * @subpackage Administration
    */
    
    if ( ! isset( $_GET['inline'] ) )
        define( 'IFRAME_REQUEST' , true );
    
    /** Load WordPress Administration Bootstrap */
    require_once('./admin.php');
    
    if (!current_user_can('upload_files'))
        wp_die(__('You do not have permission to upload files.'));
    
    wp_enqueue_script('plupload-handlers');
    wp_enqueue_script('image-edit');
    wp_enqueue_script('set-post-thumbnail' );
    wp_enqueue_style('imgareaselect');
    
    @header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset'));
    
    // IDs should be integers
    $ID = isset($ID) ? (int) $ID : 0;
    $post_id = isset($post_id)? (int) $post_id : 0;
    
    // Require an ID for the edit screen
    if ( isset($action) && $action == 'edit' && !$ID )
        wp_die(__("You are not allowed to be here"));
    
    if ( isset($_GET['inline']) ) {
        $errors = array();
    
        if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
            check_admin_referer('media-form');
            // Upload File button was clicked
            $id = media_handle_upload('async-upload', $_REQUEST['post_id']);
            unset($_FILES);
            if ( is_wp_error($id) ) {
                $errors['upload_error'] = $id;
                $id = false;
            }
        }
    
        if ( isset($_GET['upload-page-form']) ) {
            $errors = array_merge($errors, (array) media_upload_form_handler());
    
            $location = 'upload.php';
            if ( $errors )
                $location .= '?message=3';
    
            wp_redirect( admin_url($location) );
            exit;
        }
    
        $title = __('Upload New Media');
        $parent_file = 'upload.php';
        get_current_screen()->add_help_tab( array(
        'id'        => 'overview',
        'title'        => __('Overview'),
        'content'    =>
            '<p>' . __('You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:') . '</p>' .
            '<ul>' .
                '<li>' . __('<strong>Drag and drop</strong> your files into the area below. Multiple files are allowed.') . '</li>' .
                '<li>' . __('<strong>Select Files</strong> will open the multi-file uploader, or you can use the <strong>Browser Uploader</strong>.') . '</li>' .
                '<li>' . __('Clicking <strong>Select Files</strong> opens a navigation window showing you files in your operating system. Selecting <strong>Open</strong> after clicking on the file you want activates a progress bar on the uploader screen.') . '</li>' .
            '</ul>' .
            '<p>' . __('Basic image editing is available after upload is complete. Make sure you click Save before leaving this screen.') . '</p>'
        ) );
        get_current_screen()->set_help_sidebar(
            '<p><strong>' . __('For more information:') . '</strong></p>' .
            '<p>' . __('<a href="http://codex.wordpress.org/Media_Add_New_Screen" target="_blank">Documentation on Uploading Media Files</a>') . '</p>' .
            '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
        );
    
        require_once('./admin-header.php');
    
        $form_class = 'media-upload-form type-form validate';
    
        if ( get_user_setting('uploader') )
            $form_class .= ' html-uploader';
        ?>
        <div class="wrap">
        <?php screen_icon(); ?>
        <h2><?php echo esc_html( $title ); ?></h2>
    
        <form enctype="multipart/form-data" method="post" action="<?php echo admin_url('media-upload.php?inline=&amp;upload-page-form='); ?>" class="<?php echo $form_class; ?>" id="file-form">
    
        <?php media_upload_form(); ?>
    
        <script type="text/javascript">
        jQuery(function($){
            var preloaded = $(".media-item.preloaded");
            if ( preloaded.length > 0 ) {
                preloaded.each(function(){prepareMediaItem({id:this.id.replace(/[^0-9]/g, '')},'');});
            }
            updateMediaForm();
            post_id = 0;
            shortform = 1;
        });
        </script>
        <input type="hidden" name="post_id" id="post_id" value="0" />
        <?php wp_nonce_field('media-form'); ?>
        <div id="media-items" class="hide-if-no-js"></div>
        <?php submit_button( __( 'Save all changes' ), 'button savebutton hidden', 'save' ); ?>
        </form>
        </div>
    
    <?php
        include('./admin-footer.php');
    
    } else {
    
        // upload type: image, video, file, ..?
        if ( isset($_GET['type']) )
            $type = strval($_GET['type']);
        else
            $type = apply_filters('media_upload_default_type', 'file');
    
        // tab: gallery, library, or type-specific
        if ( isset($_GET['tab']) )
            $tab = strval($_GET['tab']);
        else
            $tab = apply_filters('media_upload_default_tab', 'type');
    
        $body_id = 'media-upload';
    
        // let the action code decide how to handle the request
        if ( $tab == 'type' || $tab == 'type_url' || ! array_key_exists( $tab , media_upload_tabs() ) )
            do_action("media_upload_$type");
        else
            do_action("media_upload_$tab");
    }
    ?>
    
    Но сообразить как правильно сделать в обход авторизации я не могу.

    upload.php
    Code:
    <?php
    /**
     * Media Library administration panel.
     *
     * @package WordPress
     * @subpackage Administration
     */
    
    /** WordPress Administration Bootstrap */
    require_once( './admin.php' );
    
    if ( !current_user_can('upload_files') )
        wp_die( __( 'You do not have permission to upload files.' ) );
    
    $wp_list_table = _get_list_table('WP_Media_List_Table');
    $pagenum = $wp_list_table->get_pagenum();
    
    // Handle bulk actions
    $doaction = $wp_list_table->current_action();
    
    if ( $doaction ) {
        check_admin_referer('bulk-media');
    
        if ( 'delete_all' == $doaction ) {
            $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" );
            $doaction = 'delete';
        } elseif ( isset( $_REQUEST['media'] ) ) {
            $post_ids = $_REQUEST['media'];
        } elseif ( isset( $_REQUEST['ids'] ) ) {
            $post_ids = explode( ',', $_REQUEST['ids'] );
        }
    
        $location = 'upload.php';
        if ( $referer = wp_get_referer() ) {
            if ( false !== strpos( $referer, 'upload.php' ) )
                $location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer );
        }
    
        switch ( $doaction ) {
            case 'find_detached':
                if ( !current_user_can('edit_posts') )
                    wp_die( __('You are not allowed to scan for lost attachments.') );
    
                $lost = $wpdb->get_col( "
                    SELECT ID FROM $wpdb->posts
                    WHERE post_type = 'attachment' AND post_parent > '0'
                    AND post_parent NOT IN (
                        SELECT ID FROM $wpdb->posts
                        WHERE post_type NOT IN ( 'attachment', '" . join( "', '", get_post_types( array( 'public' => false ) ) ) . "' )
                    )
                " );
    
                $_REQUEST['detached'] = 1;
                break;
            case 'attach':
                $parent_id = (int) $_REQUEST['found_post_id'];
                if ( !$parent_id )
                    return;
    
                $parent = &get_post( $parent_id );
                if ( !current_user_can( 'edit_post', $parent_id ) )
                    wp_die( __( 'You are not allowed to edit this post.' ) );
    
                $attach = array();
                foreach ( (array) $_REQUEST['media'] as $att_id ) {
                    $att_id = (int) $att_id;
    
                    if ( !current_user_can( 'edit_post', $att_id ) )
                        continue;
    
                    $attach[] = $att_id;
                    clean_attachment_cache( $att_id );
                }
    
                if ( ! empty( $attach ) ) {
                    $attach = implode( ',', $attach );
                    $attached = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $attach )", $parent_id ) );
                }
    
                if ( isset( $attached ) ) {
                    $location = 'upload.php';
                    if ( $referer = wp_get_referer() ) {
                        if ( false !== strpos( $referer, 'upload.php' ) )
                            $location = $referer;
                    }
    
                    $location = add_query_arg( array( 'attached' => $attached ) , $location );
                    wp_redirect( $location );
                    exit;
                }
                break;
            case 'trash':
                if ( !isset( $post_ids ) )
                    break;
                foreach ( (array) $post_ids as $post_id ) {
                    if ( !current_user_can( 'delete_post', $post_id ) )
                        wp_die( __( 'You are not allowed to move this post to the trash.' ) );
    
                    if ( !wp_trash_post( $post_id ) )
                        wp_die( __( 'Error in moving to trash...' ) );
                }
                $location = add_query_arg( array( 'trashed' => count( $post_ids ), 'ids' => join( ',', $post_ids ) ), $location );
                break;
            case 'untrash':
                if ( !isset( $post_ids ) )
                    break;
                foreach ( (array) $post_ids as $post_id ) {
                    if ( !current_user_can( 'delete_post', $post_id ) )
                        wp_die( __( 'You are not allowed to move this post out of the trash.' ) );
    
                    if ( !wp_untrash_post( $post_id ) )
                        wp_die( __( 'Error in restoring from trash...' ) );
                }
                $location = add_query_arg( 'untrashed', count( $post_ids ), $location );
                break;
            case 'delete':
                if ( !isset( $post_ids ) )
                    break;
                foreach ( (array) $post_ids as $post_id_del ) {
                    if ( !current_user_can( 'delete_post', $post_id_del ) )
                        wp_die( __( 'You are not allowed to delete this post.' ) );
    
                    if ( !wp_delete_attachment( $post_id_del ) )
                        wp_die( __( 'Error in deleting...' ) );
                }
                $location = add_query_arg( 'deleted', count( $post_ids ), $location );
                break;
        }
    
        wp_redirect( $location );
        exit;
    } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) {
        wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), stripslashes( $_SERVER['REQUEST_URI'] ) ) );
        exit;
    }
    
    $wp_list_table->prepare_items();
    
    $title = __('Media Library');
    $parent_file = 'upload.php';
    
    wp_enqueue_script( 'wp-ajax-response' );
    wp_enqueue_script( 'jquery-ui-draggable' );
    wp_enqueue_script( 'media' );
    
    add_screen_option( 'per_page', array('label' => _x( 'Media items', 'items per page (screen options)' )) );
    
    get_current_screen()->add_help_tab( array(
    'id'        => 'overview',
    'title'        => __('Overview'),
    'content'    =>
        '<p>' . __( 'All the files you&#8217;ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen.' ) . '</p>' .
        '<p>' . __( 'You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table.' ) . '</p>'
    ) );
    get_current_screen()->add_help_tab( array(
    'id'        => 'actions-links',
    'title'        => __('Available Actions'),
    'content'    =>
        '<p>' . __( 'Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file&#8217;s name displays a simple screen to edit that individual file&#8217;s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file.' ) . '</p>'
    ) );
    get_current_screen()->add_help_tab( array(
    'id'        => 'attaching-files',
    'title'        => __('Attaching Files'),
    'content'    =>
        '<p>' . __( 'If a media file has not been attached to any post, you will see that in the Attached To column, and can click on Attach File to launch a small popup that will allow you to search for a post and attach the file.' ) . '</p>'
    ) );
    
    get_current_screen()->set_help_sidebar(
        '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
        '<p>' . __( '<a href="http://codex.wordpress.org/Media_Library_Screen" target="_blank">Documentation on Media Library</a>' ) . '</p>' .
        '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
    );
    
    require_once('./admin-header.php');
    ?>
    
    <div class="wrap">
    <?php screen_icon(); ?>
    <h2><?php echo esc_html( $title ); ?> <a href="media-new.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'file'); ?></a> <?php
    if ( ! empty( $_REQUEST['s'] ) )
        printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', get_search_query() ); ?>
    </h2>
    
    <?php
    $message = '';
    if ( ! empty( $_GET['posted'] ) ) {
        $message = __('Media attachment updated.');
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
    }
    
    if ( ! empty( $_GET['attached'] ) && $attached = absint( $_GET['attached'] ) ) {
        $message = sprintf( _n('Reattached %d attachment.', 'Reattached %d attachments.', $attached), $attached );
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('attached'), $_SERVER['REQUEST_URI']);
    }
    
    if ( ! empty( $_GET['deleted'] ) && $deleted = absint( $_GET['deleted'] ) ) {
        $message = sprintf( _n( 'Media attachment permanently deleted.', '%d media attachments permanently deleted.', $deleted ), number_format_i18n( $_GET['deleted'] ) );
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('deleted'), $_SERVER['REQUEST_URI']);
    }
    
    if ( ! empty( $_GET['trashed'] ) && $trashed = absint( $_GET['trashed'] ) ) {
        $message = sprintf( _n( 'Media attachment moved to the trash.', '%d media attachments moved to the trash.', $trashed ), number_format_i18n( $_GET['trashed'] ) );
        $message .= ' <a href="' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" ) ) . '">' . __('Undo') . '</a>';
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']);
    }
    
    if ( ! empty( $_GET['untrashed'] ) && $untrashed = absint( $_GET['untrashed'] ) ) {
        $message = sprintf( _n( 'Media attachment restored from the trash.', '%d media attachments restored from the trash.', $untrashed ), number_format_i18n( $_GET['untrashed'] ) );
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']);
    }
    
    $messages[1] = __('Media attachment updated.');
    $messages[2] = __('Media permanently deleted.');
    $messages[3] = __('Error saving media attachment.');
    $messages[4] = __('Media moved to the trash.') . ' <a href="' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" ) ) . '">' . __('Undo') . '</a>';
    $messages[5] = __('Media restored from the trash.');
    
    if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) {
        $message = $messages[ $_GET['message'] ];
        $_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']);
    }
    
    if ( !empty($message) ) { ?>
    <div id="message" class="updated"><p><?php echo $message; ?></p></div>
    <?php } ?>
    
    <?php $wp_list_table->views(); ?>
    
    <form id="posts-filter" action="" method="get">
    
    <?php $wp_list_table->search_box( __( 'Search Media' ), 'media' ); ?>
    
    <?php $wp_list_table->display(); ?>
    
    <div id="ajax-response"></div>
    <?php find_posts_div(); ?>
    <br class="clear" />
    
    </form>
    </div>
    
    <?php
    include('./admin-footer.php');
    
     
  15. racheev

    racheev New Member

    Joined:
    28 Dec 2016
    Messages:
    33
    Likes Received:
    2
    Reputations:
    0
    Вы все в кучу смешали. Зачем вообще говорить о сайте если не собираетесь его использовать. Надо было написать есть сайт на вордпрессе хочу ему залить шелл.

    Исходники это небось файлы от установщика? Не факт что там на сервере все то же самое. И искать через что там льют на сервер как иголку в стоге сена. Если админ более менее нормальный там затычки стоят.
     
  16. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    150
    Likes Received:
    10
    Reputations:
    0
    сканировал wpscan. приблизил аналогично к cms с одной лишь целью, возможно ли используя файлы WP - загрузить локально шелл?
     
  17. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    551
    Likes Received:
    1,038
    Reputations:
    352
    Если ты обойдёшь авторизацию, то зачем что-то куда-то встраивать? Всё что можно было раскопать в этой версии, скорее всего уже раскопано, смотри баг трекеры.

    CSRF-ить имеет смысл если WP лежит с той стороны или нет доступа к админке. В твоём случае проще угнать куки, если я правильно помню, то в старых версиях логин с чужими куками возможен.

    Для CSRF, встрой свой JS код в основной сайт и проверяй всех посетителей сайта на админа в WP. Если ответ положительный, запускается заливка файла или редактирование шаблона (лучше заложить и то и другое). Для ускорения, можно скинуть пасс админу, возможно это побудит его залогиниться, в целях проверки.


    http://securitytracker.com/id/1032555
     
    RedHazard and Gorev like this.
Loading...