InCTF 2018 WildCat

CTF/Writeup 2018. 10. 8. 10:36

해당 문제에 들어가보면 아래와 같은 소스코드를 볼 수 있다.


<?php
error_reporting
(0);
include(
'flag.php');
$message "<img src='cat.jpg' height=400><!-- is_debug -->";

if (isset(
$_GET['is_debug']))
    {
    
highlight_file(__FILE__) and die();
    }
  else
    {
    
$qs $_SERVER['QUERY_STRING'];
    if(!(
substr_count($qs'_') > 0) && !(substr_count($qs'%')> 1))
        {
            
$cmd $_GET['c_m_d'];
            if(!
preg_match('/[a-z0-9]/is'$cmd)){
                
system("/sandboxed_bin/".$cmd);
            }else{
                echo 
$message;
                die();
            }
        }
    echo 
$message;
        die();
    }
?>


php 샌드박스 류의 문제인데 내가 우회해야할 필터는 두가지가 존재했다.


먼저 c_m_d라는 파라미터를 통해 실행할 명령어 문자열 값을 전달해야하는데 QUERY_STRING으로 가져온 값에서 _값을 필터해버린다. 이는 c+m+d요런식으로 파라미터명을 넣어주면 우회가 된다. QUERY_STRING으로 가져왔을때는 c+m+d값이지만 php에서 파라미터명에 +값이 존재하면 이 값을 _로 인식하기때문에 실제로 c_m_d 파라미터로 값을 넣어줄 수 있다.


이제 두번째는 내가 입력한 명령어 값이 non-alphanumering 상태여야 한다. 특문밖에 쓸 수 없는 상황이었는데 일단 /sandboxed_bin/ 디렉토리 내에 존재하는 명령어가 뭔지 몰라 ?를 하나씩 늘려가면서 요청하다보니 ??? 일때만 응답이 엄청 늦게오는걸로 보아서 뭔진 모르지만 3글자 짜리 명령어가 하나이상 존재하는 것 같았다. 단순히 명령어만 들어갔을때는 응답만 엄청 오래걸릴 뿐 명령어실행결과를 따로 볼 수가 없어서 인자로로 ???%20*요런식으로 날려보니 파일 내용이 읽혔다. 그래서 cat 명령어가 먹히고 있구나 생각했꼬 아래와 같은 식으로 파일명을 하나씩 늘려가면서 찾아보니 플래그가 나왔다.



'CTF > Writeup' 카테고리의 다른 글

Hack.lu CTF 2018 BabyReverse  (0) 2018.10.25
InCTF 2018 TorPy  (0) 2018.10.08
InCTF 2018 S3cur3 Bank  (0) 2018.10.08
InCTF 2018 The Most Secure File Uploader  (0) 2018.10.08
D-CTF Quals 2018 secops  (0) 2018.09.26
블로그 이미지

JeonYoungSin

메모 기록용 공간

,