🗂️ INDEX

글 작성자: Universe7202

🚪 Intro

취약점 및 CVE 획득을 위해 분석하고 있는 프로젝트가 있습니다.

file upload를 통한 webshell 획득 과정을 정리하고자 합니다.

 

💡 Analysis

분석하려는 웹 사이트에는 업로드 기능이 존재 합니다. 다만 ico, webp, svg 확장자만 업로드 할 수 있습니다.

그런데 아래 코드를 보면서 의문점이 생기더라구요.

 

보통 파일 업로드 관련 기능을 만들 때, 확장자 검증은 .(dot) 을 기준으로 문자열을 나누어 맨 마지막 값을 확장자로 판단 합니다. 이렇게 추출된 확장자로 업로드 할 파일을 필터링 하게 되죠.

 

하지만, 위 코드는 `strpos()` 함수를 사용하여 업로드 파일의 확장자를 검사하고 있습니다.

이 함수는 문자열의 위치를 int 로 리턴합니다. 예를 들면, 아래와 같습니다.

 

다시 돌아와서 문제의 코드를 보면, if문으로 `strpos()` 함수의 리턴 값이 `false` 가 아니라면 업로드 할 수 있습니다.

즉, `$filename` 변수에 `simple.svg` 가 아니라 `simple.svg.php` 라고 업로드 하면, if 문을 bypass 할 수 있겠네요.

 

최종적으로 아래 사진처럼 webshell 을 업로드 하여, 시스템 명령어를 실행할 수 있게 되었습니다.