я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
помогите пж
На примере уязвимостей в плагинах WordPress могу сказать, берешь и ставишь уязвимую версию плагина и рядом ставишь новую версию с фиксом, ищешь отличия в коде и пытаешься натыкать, понять, в чем собственно уязвимость. Касается это все размуеется не только WP и соответственно нужно понимать код, который ты разбираешь.я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
на самом деле вопрос правильный. Тут очень важно понимать в каком софте cve. Если это опенсорс то все проще , там и версии можно сравнить и реверсить не надо. А если энтерпрайз то часто инфу приходится собирать по крупицам , реверсить , находить разные версии продукта , читать прошлые статьи о секурити аудитах прошивок и т.д. Ищи блоги секурити контор и читай все что приглянется , это может навести тебя на мысли о своих собственных проектахя часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
спасибо, действительно полезный советНа примере уязвимостей в плагинах WordPress могу сказать, берешь и ставишь уязвимую версию плагина и рядом ставишь новую версию с фиксом, ищешь отличия в коде и пытаешься натыкать, понять, в чем собственно уязвимость. Касается это все размуеется не только WP и соответственно нужно понимать код, который ты разбираешь.
На примере того же вордпресс, где исходники легко достать:я часто сталкиваюсь с CVE которые незнаю как эксплуатировать, то есть нашел я CVE, но под нее нет сплоита что бы посмотреть код и понять как она работает. и что тогда? как понимать как работает уязвимость?
помогите пж
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;
}
}
$file_name = $file_id . '.png'На примере того же вордпресс, где исходники легко достать:
Бага: 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.