[wordpress] 원데이 취약점 분석 스터디 - 5주차

sani·2022년 11월 4일
0
post-thumbnail

2022.11.05
원데이 취약점 분석 스터디 5주차

분석 목표 :

CVE-2022-34154

취약점 분석 :

<?php
class (plugin name){

    /*This allows to upload webp files */
    function webp_file_ext( $types, $file, $filename, $mimes ) {
        if ( false !== strpos( $filename, '.webp' ) )
        //.webp 이 존재하는지 확인
        //.webp 이 파일명에 존재만 하면 되기 때문에 이 부분에서 취약점이 발생함.
        {
            $types['ext'] = 'webp';
            $types['type'] = 'image/webp';
        }
        return $types;
    }

    function webp_file_upload( $mimes ) {
        $mimes['webp'] = 'image/webp';
      return $mimes;
    }

    /*Preview Webp files */
    function preview_webp_thumnail($result, $path) {
        if ($result === false) {
            $displayable_image_types = array( IMAGETYPE_WEBP );
            $info = @getimagesize( $path );

            if (empty($info)) {
                $result = false;
            } elseif (!in_array($info[2], $displayable_image_types)) {
                $result = false;
            } else {
                $result = true;
            }
        }

        return $result;
    }
}

위의 php 부분에서 취약점이 발생하였는데,
파일을 업로드 할때, 파일의 확장자를 검색하는 부분에서 strpos 함수를 사용하여
검사를 하게 된다.

function webp_file_ext( $types, $file, $filename, $mimes ) {
        if ( false !== strpos( $filename, '.webp' ) )
        //.webp 이 파일명에 존재하는지 확인
        //.webp 이 파일명에 존재만 하면 되기 때문에 이 부분에서 취약점이 발생함.
        {
            $types['ext'] = 'webp';
            $types['type'] = 'image/webp';
        }
        return $types;
    }

이때 strpos는 문자열이 포함 되어있는지의 여부만 판단하기 때문에,
test.webp.php 의 형태라도 .webp가 포함 되어 있기때문에 strpos는 true 값을 반환한다는 취약점이 발생한다.

poc :

처음부터 .php 확장자를 업로드를 시도하게 되면, 당연히 업로드가 막히기 때문에
webshell.php.webp 이름의 형태로 업로드를 시도해야 한다.

webshell.php.webp 파일을 업로드를 할 때, 아래와 같은 패킷이 잡히게 된다.

filename의 확장자 검사가 느슨하다는 것을 위의 취약점 분석때 알았기 때문에,
webshell.php.webp을 webshell.webp.php 로 바꾸어 패킷을 전송한다.

패킷 전송후, webshell.php.webp 이 webshell.webp.php 의 이름으로 서버에 업로드 된 것을 확인 할 수 있었고, 업로드 주소로 이동한다면 웹셸이 실행된 것을 확인 할 수 있다.

배운점

확장자 검사는 항상 꼼꼼하게 !

profile
창원대학교 보안동아리 CASPER

0개의 댓글