• XSS.stack #1 – первый литературный журнал от юзеров форума

Есть CVE, но под нее нет сплоита

Barash

floppy-диск
Пользователь
Регистрация
20.12.2024
Сообщения
2
Реакции
0
я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
 
я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
На примере уязвимостей в плагинах WordPress могу сказать, берешь и ставишь уязвимую версию плагина и рядом ставишь новую версию с фиксом, ищешь отличия в коде и пытаешься натыкать, понять, в чем собственно уязвимость. Касается это все размуеется не только WP и соответственно нужно понимать код, который ты разбираешь.
 
я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
на самом деле вопрос правильный. Тут очень важно понимать в каком софте cve. Если это опенсорс то все проще , там и версии можно сравнить и реверсить не надо. А если энтерпрайз то часто инфу приходится собирать по крупицам , реверсить , находить разные версии продукта , читать прошлые статьи о секурити аудитах прошивок и т.д. Ищи блоги секурити контор и читай все что приглянется , это может навести тебя на мысли о своих собственных проектах :)
 
На примере уязвимостей в плагинах WordPress могу сказать, берешь и ставишь уязвимую версию плагина и рядом ставишь новую версию с фиксом, ищешь отличия в коде и пытаешься натыкать, понять, в чем собственно уязвимость. Касается это все размуеется не только WP и соответственно нужно понимать код, который ты разбираешь.
спасибо, действительно полезный совет
 
я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
На примере того же вордпресс, где исходники легко достать:
Бага: https://nvd.nist.gov/vuln/detail/CVE-2023-26326
Страница плагина (Advanced view): https://wordpress.org/plugins/buddyforms/advanced/ тут ты можешь скачать любые версии.

делаем сравнение версии:

bb_buddy.png


Строка 1518, функция:

PHP:
function buddyforms_upload_image_from_url()
{
    $url = ( isset( $_REQUEST['url'] ) ? wp_kses_post( wp_unslash( $_REQUEST['url'] ) ) : '' );
    $file_id = ( isset( $_REQUEST['id'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['id'] ) ) : '' );
    $accepted_files = ( isset( $_REQUEST['accepted_files'] ) ? explode( ',', buddyforms_sanitize( '', wp_unslash( $_REQUEST['accepted_files'] ) ) ) : array( 'jpeg' ) );
    
    if ( !empty($url) && !empty($file_id) ) {
        $upload_dir = wp_upload_dir();
        $image_url = urldecode( $url );
        $image_data = file_get_contents( $image_url );
        // Get image data
        $image_data_information = getimagesize( $image_url );
        $image_mime_information = $image_data_information['mime'];
        
        if ( !in_array( $image_mime_information, $accepted_files ) ) {
            echo  wp_json_encode( array(
                'status'   => 'FAILED',
                'response' => __( 'File type ' . $image_mime_information . ' is not allowed.', 'budduforms' ),
            ) ) ;
            die;
        }
        
        
        if ( $image_data && $image_data_information ) {
            $file_name = $file_id . '.png';
            $full_path = wp_normalize_path( $upload_dir['path'] . DIRECTORY_SEPARATOR . $file_name );
            $upload_file = wp_upload_bits( $file_name, null, $image_data );
            
            if ( !$upload_file['error'] ) {
                $wp_filetype = wp_check_filetype( $file_name, null );
                $attachment = array(
                    'post_mime_type' => $wp_filetype['type'],
                    'post_title'     => preg_replace( '/\\.[^.]+$/', '', $file_name ),
                    'post_content'   => '',
                    'post_status'    => 'inherit',
                );
                $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'] );
                $url = wp_get_attachment_thumb_url( $attachment_id );
                echo  wp_json_encode( array(
                    'status'        => 'OK',
                    'response'      => $url,
                    'attachment_id' => $attachment_id,
                ) ) ;
                die;
            } else {
                echo  wp_json_encode( array(
                    'status'   => 'FAILED',
                    'response' => 'Error uploading image.',
                ) ) ;
                die;
            }
        
        } else {
            echo  wp_json_encode( array(
                'status'   => 'FAILED',
                'response' => 'The Url provided is not an image.',
            ) ) ;
            die;
        }
    
    } else {
        echo  wp_json_encode( array(
            'status'   => 'FAILED',
            'response' => 'Wrong Format or Empty Url.',
        ) ) ;
        die;
    }

}

если внимательно почитать то можно увидеть несколько багов:
1522: $accepted_files - можно подсунуть свои расширения, обойти фильтр.
1529: getimagesize - тоже легко обходиться, это даже не фильтр.
1527: file_get_contents - открывает файл, тем самым активирует мета-данные в файле если это PHAR. Уязвимы версии PHP до 8.0.
 
На примере того же вордпресс, где исходники легко достать:
Бага: https://nvd.nist.gov/vuln/detail/CVE-2023-26326
Страница плагина (Advanced view): https://wordpress.org/plugins/buddyforms/advanced/ тут ты можешь скачать любые версии.

делаем сравнение версии:

Посмотреть вложение 103374

Строка 1518, функция:

PHP:
function buddyforms_upload_image_from_url()
{
    $url = ( isset( $_REQUEST['url'] ) ? wp_kses_post( wp_unslash( $_REQUEST['url'] ) ) : '' );
    $file_id = ( isset( $_REQUEST['id'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['id'] ) ) : '' );
    $accepted_files = ( isset( $_REQUEST['accepted_files'] ) ? explode( ',', buddyforms_sanitize( '', wp_unslash( $_REQUEST['accepted_files'] ) ) ) : array( 'jpeg' ) );
   
    if ( !empty($url) && !empty($file_id) ) {
        $upload_dir = wp_upload_dir();
        $image_url = urldecode( $url );
        $image_data = file_get_contents( $image_url );
        // Get image data
        $image_data_information = getimagesize( $image_url );
        $image_mime_information = $image_data_information['mime'];
       
        if ( !in_array( $image_mime_information, $accepted_files ) ) {
            echo  wp_json_encode( array(
                'status'   => 'FAILED',
                'response' => __( 'File type ' . $image_mime_information . ' is not allowed.', 'budduforms' ),
            ) ) ;
            die;
        }
       
       
        if ( $image_data && $image_data_information ) {
            $file_name = $file_id . '.png';
            $full_path = wp_normalize_path( $upload_dir['path'] . DIRECTORY_SEPARATOR . $file_name );
            $upload_file = wp_upload_bits( $file_name, null, $image_data );
           
            if ( !$upload_file['error'] ) {
                $wp_filetype = wp_check_filetype( $file_name, null );
                $attachment = array(
                    'post_mime_type' => $wp_filetype['type'],
                    'post_title'     => preg_replace( '/\\.[^.]+$/', '', $file_name ),
                    'post_content'   => '',
                    'post_status'    => 'inherit',
                );
                $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'] );
                $url = wp_get_attachment_thumb_url( $attachment_id );
                echo  wp_json_encode( array(
                    'status'        => 'OK',
                    'response'      => $url,
                    'attachment_id' => $attachment_id,
                ) ) ;
                die;
            } else {
                echo  wp_json_encode( array(
                    'status'   => 'FAILED',
                    'response' => 'Error uploading image.',
                ) ) ;
                die;
            }
       
        } else {
            echo  wp_json_encode( array(
                'status'   => 'FAILED',
                'response' => 'The Url provided is not an image.',
            ) ) ;
            die;
        }
   
    } else {
        echo  wp_json_encode( array(
            'status'   => 'FAILED',
            'response' => 'Wrong Format or Empty Url.',
        ) ) ;
        die;
    }

}

если внимательно почитать то можно увидеть несколько багов:
1522: $accepted_files - можно подсунуть свои расширения, обойти фильтр.
1529: getimagesize - тоже легко обходиться, это даже не фильтр.
1527: file_get_contents - открывает файл, тем самым активирует мета-данные в файле если это PHAR. Уязвимы версии PHP до 8.0.
$file_name = $file_id . '.png'
Можно передать определенное значение в $_REQUEST['id'] условно .php
Встречал серверы которые могут выполнять PHP-код даже с двойным расширением, х#йня конечно, но любая мелочь или песчинка может привести к миллиардным потерям)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх