CTF 문제의 목표
본 CTF 문제는 파일 업로드뿐 아니라 파일 인클루드나 파일 다운로드 같은 파일 연관 취약점을 활용하여 flag를 획득하도록 하는 복합 실습 문제입니다.
실습 환경
본 문제는 아래와 같은 환경과 도구를 통해 테스트하였습니다.
- Windows 10
- Burp Suite
- Simple WebShell
풀이 단계
- 회원가입 및 로그인
- 사이트 분석 및 업로드 공격 포인트 확인
- 웹셸 업로드 시도
- 실패 시 필터링 기능을 분석 및 우회 공격 시도
- 파일 다운로드 취약점 식별
- 파일 다운로드 취약점 활용 (소스코드 획득, 파일 저장 위치 식별)
- 시행착오
- 수작업 돌입, 플래그 획득
상세한 문제풀이
1) 회원가입과 로그인은 ctfkill/3333으로 진행하였습니다.
2) 게시판과 마이페이지만 있는 것을 확인할 수 있습니다. 추측하건대 게시판에만 취약점이 있을 수 있습니다. 웹셸 업로드로 공격을 실행해 보겠습니다.
3) 게시판 업로드 중 인터셉트를 통해서 파일의 이름과 content-Type을 변경하였으나 기본적인 필터링으로 막힌 것을 확인하였습니다.
4) 우회기법을 통해서 업로드 공격을 실행합니다. htaccess파일을 업로드하였고 공격이 성공하였습니다. panda 확장자로 파일을 업로드하였고 다행히도 성공하였습니다.
5) 그러나 문제는 업로드한 위치를 알기가 어렵게 다운로드가 구현되어 있다는 것입니다. 다운로드 버튼을 누르면 download.php가 다운로드됩니다. 다운로드 요청 패킷을 보면 첫 줄에 'GET /download_1/download.php?filePath=/ctfkill/ws.png' 이렇게 되어있습니다. GET 방식으로 어떤 파라미터를 보내느냐에 따라 해당 파일의 값을 받아올 수 있습니다. 이걸 이용해서 중요한 파일을 다운로드할 수 있는지 아래와 같이 테스트하였습니다.
페이로드 : ../../../etc/passwd
6) download.php와 notice_write_process.php의 소스코드를 확보하였습니다. 소스코드를 획득한 것은 좋지만 이것으로는 파일들이 어디에 저장되어 있는지 바로 알기 어렵습니다. 중요한 것은 파일의 위치를 찾는 것입니다. download_1/download.php의 위치가 /../download.php와 같다면 filepath는 download_1/다운로드폴더/ctfkill/ws.panda에 파일이 있는 것으로 추측할 수 있습니다. 다운로드 폴더의 이름을 어떻게 알아낼 수 있을까요? 바로 download.php 소스코드를 통해서 볼 수 있습니다. 그렇다면 전체 디렉터리의 이름은 download_1/files/ctfkill/ws.panda가 되겠습니다.
7-1) 디렉터리 인덱싱을 통해서 웹셸이 업로드된 위치에 접근했습니다. ls 명령어를 치면 웹셸이 작동합니다.
7-2) find 명령어를 통해서 flag를 찾습니다. 문제에서 'flag 파일'을 찾으라고 했지, flag.txt를 찾으라고 하지 않았으니 flag가 들어간 모든 것을 찾아봐야 합니다.
그러나 모든 파일을 읽어보면 확실하게 알 수 있는 것은 없는 것 같아 보입니다.
8) 이제 전략을 바꿔서 ls 명령어로 최대한 웹루트 내에서 일일이 하나씩 찾아보기로 합니다. path traversal을 이용해서 두 번 정도 올라가면 이렇게 웹 관련 파일이 잔뜩 있는 것을 볼 수 있습니다. 여기에서 하나씩 cat 명령어로 읽어서 힌트가 있는지 보겠습니다.
8-1) index.php부터 읽어보려고 하니 친절하게도 주석에 플래그를 숨겨놨습니다.
'🚩CTF Write up' 카테고리의 다른 글
authorization 1 - SegFault Web Hacking CTF Write up (0) | 2024.02.24 |
---|---|
Get Flag File 2 - SegFault Web Hacking CTF Write up (1) | 2024.02.24 |
Web Shell 3 - SegFault Web Hacking CTF Write up (0) | 2024.02.18 |
Web Shell 2 - SegFault Web Hacking CTF Write up (0) | 2024.02.09 |
Web Shell 1 - SegFault Web Hacking CTF Write up (0) | 2024.02.09 |