※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다. (Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)
※ CTF - Capture The Flag ※ 문제 푸는 방법이 다양할 수도 있습니다.
SegFault CTF - Get Flag File
1. 목표 : Flag 파일을 얻어내라!!!
2. 접근 방법
웹 쉘을 업로드하여 파일을 받거나 열어보자
3. 실행
이 문제는 파일 다운로드 할 때는 경로가 따로 설정되어서, 웹 쉘을 실행하고자 하면 웹 쉘이 저장된 경로를 알아내야 하는 문제가 있었다.
우선, 정상적인 파일을 다운로드 해보고 Burp Suite로 경로를 추적해본다. 다운로드 요청 시 경로가 ??? / ID / 파일이름 순서로 되어있다. 이렇게 알고 있는 php 파일 이름을, 경로에 몇 번 넣어보고 구조를 파악한다. 여기서 파악된 것은 download.php파일은 t1234폴더 기준에서 2칸 상위에 있다는 것을 알게되었다.
이렇게 위치와 php 소스 코드를 확보했다. download.php 파일은 ???/t1234 디렉터리(폴더)의 입장에서보면 2칸 상위에 존재 하는 것을 알 수 있었고, download.php 파일은 Request 쪽 첫 번째 줄 GET 메서드를 보면 download_1 디렉터리 안에 있음을 알 수 있다. 그리고, 우측 Response에 php소스 코드를 자세히 보면 (15번째 줄), 중간 경로에 files라는 디렉터리가 있음을 알 수 있다.
즉 조합해보면 /download_1/files/t1234/내가 업로드한 파일 과 같은 구조를 파악할 수 있었다. 이것을 기반으로 웹 주소를 입력해보면 http://ctf.segfaulthub.com:3184/download_1/files/t1234 이렇게 될 것이고, 접속해 보니 아래와 같이 경로 리스팅 취약점도 있어서 업로드한 파일들이 보였다. 해당 취약점이 없어도 추측으로 경로를 확보해서 상관 없지만, 해당 취약점이 있으면 파일이 정말 업로드 되었는지 확인이 쉬워지고, 힘들게 경로를 입력할 필요가 없어서 편해진다. (다만 숨김파일은 보이지 않는다.)
이제 웹 쉘을 올려서 서버를 장악하면 된다.
Segfault CTF - (15주 차) Web Shell 3과 같은 방법으로 웹 쉘을 업로드하고 실행하는 데 성공 했다. (burpsuite로 웹 쉘 코드가 있는 png 파일을 업로드 후 .htaccess 에서 png확장자를 php로 작동하도록 설정 후 업로드)
리눅스 find 명령어로 flag파일들을 찾았지만, 내용이 없거나 이상한 파일들만 나왔다 여기서 한참 헤맸다. # find / -name flag* 어떤 php 파일의 코드에 플래그가 숨어있었다.