본문 바로가기
🚩CTF Write up

Web Shell 2 - SegFault Web Hacking CTF Write up

by Prof. Panda 2024. 2. 9.

CTF 문제의 목표

본 CTF 문제는 기본 업로드 공격에서 간단한 우회 기술을 실습해보기 위한 문제입니다. 업로드 공격을 통해서 flag.txt 파일의 값을 찾아 읽음으로 플래그를 획득하면 성공입니다.

실습 환경

본 문제는 아래와 같은 환경과 도구를 통해 테스트하였습니다.

  • Mac OS
  • Burp Suite
  • Simple WebShell

풀이 단계

  1. 회원가입 및 로그인
  2. 사이트 분석 및 업로드 공격 포인트 확인
  3. 웹셸 업로드 시도
  4. 실패시 필터링 기능을 분석 및 우회 공격 시도
  5. 공격 성공시 페이로드 입력을 통한 플래그 획득
    1. ls
    2. find
    3. cat

상세한 문제풀이

1) 회원가입/로그인을 통해 사이트에 접근합니다. 본 실습에서는 (id : ctfkill / pw : 3333)을 사용하였습니다.

2) 사이트를 분석하고, 게시판의 글을 쓰는 공간에서 업로드 공격이 가능할 것으로 추측할 수 있습니다.

3) 업로드를 시도할 시에 이미지 파일만 업로드하도록 되어있어 웹셸의 확장자를 이미지 확장자인 png로 바꾸어 업로드 공격을 시도합니다. png로 업로드가 될 시에 웹에서 실행이 되지 않으므로, 프록시툴을 이용해서 php로 확장자와 content-type을 인터셉트하여 변경하여 업로드합니다. 변경내용은 확장자, content-type 그리고 업로드 되는 파일 내용입니다.

 

4) 공격이 실패합니다. 이유는 확장자를 읽고 png가 아니라면 필터링하는 기능이 있는 것으로 추측됩니다. 확장자에 대소문자를 섞어서 필터링 우회를 시도합니다.

확장자에 대소문자를 섞으면 필터링되지 않는 것을 확인

4) 업로드가 성공하였고 업로드된 위치를 파악합니다. "/webshell_2/files/ctfkill/ws.pHp"에 웹셸이 업로드 된것을 확인했습니다. 하지만 사용하기 위해서는 ws.php로 접근하여야 합니다. 페이지를 보면 ws.php로 업로드가 되어있습니다. 리피터로 다른 파일을 업로드해보니 필터링이 되는 것처럼 되어있지만, 사실상 업로드가 되어 있는 것을 볼 수 있습니다. 따라서 업로드 된 위치를 들어가보면 업로드된 웹셸에 접근할 수 있습니다.

필터링 된 것 같지만 업로드가 성공한 것을 확인

5-1) ls 명령어로 실행여부를 확인합니다.

5-2) find 명령어로 flag.txt 파일을 찾습니다.

5-3) cat 명령어로 플래그를 획득합니다.