Almon Dev

ctf 풀이 (WebShell 3) 본문

모의해킹/모의해킹

ctf 풀이 (WebShell 3)

Almon 2025. 2. 17. 02:25

 WebShell 3

파일 업로드 취약점을 찾아서 웹쉘을 업로드하여 flag 파일을 찾는 문제입니다.

 

 풀이

 

1. 파일 업로드 취약점 찾기

웹쉘을 업로드하기 위해서 파일 업로드 취약점을 찾아야 합니다.

 

 1.1 로그인

게시판에 접근하기 위해서 로그인을 합니다. (tester112 / 1234 계정 생성)

 

 1.2 게시판 접근

게시판에 접근하여 글쓰기 기능에 접근이 가능한지 확인합니다.

 

 1.3 파일 업로드 기능 확인

글쓰기에 파일 업로드 기능이 있는지 확인합니다.

 

 1.4 파일이 업로드해 보기

정상적인 jpg 파일을 업로드하여 서버에 업로드가 정상적으로 되는지 확인합니다.

 

 1.5 게시글 확인

게시글에 업로드한 파일의 다운로드 링크가 있는지 확인합니다.

=> 다운로드 기능을 이용해 파일의 경로 확인이 가능합니다.

 

 1.6 php 파일 업로드해 보기 (실패)

input 태그의 accept 속성을 이용해 이미지만 선택이 가능하도록 해두었지만 사용자가 쉽게 바꿀 수 있습니다.

input 태그 확인
설정된 확장자
모든 파일로 변경
업로드 실패

 

 1.7 업로드 실패 원인 파악

업로드 실패 메시지가 새로고침이 되지 않고 그 경로에서 발생합니다.=> 서버에서 검사를 한 것이 아니라 JS로 클라이언트에서 검사한 것으로 추측됩니다.

 

HTML을 확인해 보면 form 태그가 submit 할 때 checkFileExtension이라는 함수가 실행됩니다.

 

정의된 checkFileExtension 함수의 내용을 확인해 보면 이미지 파일이 맞는지 확장자 검사를 하는 것을 확인할 수 있습니다.

if(!allowedExtensions.exec(fileName)) {
    alert('업로드할 수 없는 확장자의 파일입니다.');
    writeFrm.upload_file.value = '';
    return false;

이미지 파일의 확장자가 아닌 경우 alert를 이용해 메시지를 출력하고, input 태그의 value를 빈칸으로 만듭니다.

<input type='file'> 태그의 value에는 파일의 가짜 경로와 파일 이름이 담겨있습니다. ex) C:\fakepath\파일이름
이것을 ''으로 만드는 것은 파일 선택을 취소한다는 의미입니다.

가짜 경로를 쓰는 이유
사용자의 계정 이름, 운영체제, 폴더 구조가 노출될 수 있기 때문입니다.

ex) test 계정명을 사용하는 window 사용자 => C:\Users\test\desktop\file.jpg

 

 1.8 JS 확장자 검사 우회하기

JS로 확장자 검사를 한다는 것을 파악했으니 우회를 할 수 있습니다.

 

Burp를 이용해서 글쓰기 페이지 요청을 가로챕니다.

요청

응답을 가로채서 JS를 수정 한 뒤에 브라우저로 전송합니다.

JS 수정 전
JS 수정 후
JS 수정 된 페이지

 

 1.9 php 파일 업로드해 보기 (실패)

다시 test.php 업로드를 시도했습니다.

 

 1.10 실패 원인 파악

실패 메시지가 출력될 때 경로가 변경되었습니다. 서버에 요청은 정상적으로 보내졌는데 서버에서도 확장자 검사를 하고 있는 것 같습니다.

 

Burp의 Repeater 기능을 이용해서 우회 확장자 찾기 (실패)

Repeater : 요청을 수정하며 재전송할 수 있는 기능

 

 1.11 서버 측 확장자 검사 우회하기

서버에서 php나 phtml과 같이 php코드로 실행될만한 확장자를 모두 차단하고 있습니다.그래서 .htaccess 파일을 업로드하여 phP 확장자를 가진 파일 역시 php 코드로 실행하도록 서버 설정을 덮어씌우기로 했습니다.

.htaccess를 이용하면 아파치의 설정을 해당 폴더와 하위 폴더에 적용시킬 수 있습니다.
ex) phP, jpg와 같은 본래 php로 실행하지 않는 파일도 php로 해석하도록 변경

 

 1.12 업로드된 파일 경로 찾기

업로드된 파일의 다운로드 링크를 이용해서 파일의 경로를 확인합니다.

test.phP 파일에 접근하여 php 코드가 정상적으로 실행되는 것을 확인했습니다.

다운로드 링크 복사
링크 접근
php 실행 확인

 

2. WebShell 업로드

파일 업로드 취약점을 찾고 php 코드를 실행까지 했다면 이제는 끝입니다.flag.txt 파일을 찾는 웹쉘을 업로드하고 실행합니다.

 

3. 플래그 확인

find 명령어로 확인한 flag.txt 파일의 경로를 이용해 cat 명령어로 플래그를 확인합니다.

 

'모의해킹 > 모의해킹' 카테고리의 다른 글

ctf 풀이 (Get Flag File 2)  (0) 2025.02.17
ctf 풀이 (Get Flag File)  (0) 2025.02.17
파일 업로드 / 다운로드 취약점 (feat. LFI)  (2) 2025.02.15
CSRF 정리 (feat. SOP/CORS)  (0) 2025.01.16
ctf 풀이 (GET Admin 3)  (0) 2025.01.13