ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Wargame] - phpreg
    정보보안 2024. 10. 4. 01:19

    메인 화면

    step1에서는 위 input에 들어간 Nickname과 Password를 알아내야한다.

    이를 위해 문제에서 제공해준 step2.php 파일을 분석해보자.

    // pw filtering
    if (preg_match("/[a-zA-Z]/", $input_pw)) {
        echo "alphabet in the pw :(";
    }
    else{
    	$name = preg_replace("/nyang/i", "", $input_name);
    	$pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw); 
        
    	if ($name === "dnyang0310" && $pw === "d4y0r50ng+1+13") {

    위 php코드에서 name과 pw를 대놓고 알려주고 있었지만, preg_match()라는 정규표현식으로 이를 필터링을 해주고 있었다.

    이를 분석해보자.

    1. preg_replace("/nyang/i", "", $input_name);

    닉네임에 nyang가 들어온다면, 이를 모두 ""으로 공백처리가 되기 때문에 nyang을 한번 더 쓰면 되겠다 라는 걸 알 수 있다.

    따라서 해당 필터링을 피하기 위해 "dnyanyangng0310"을 작성하면 됨.

     

    2. preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);

    위 정규표현식에 맞게 값을 넣으면 정답인 pw를 반환한다고 한다.

    해당 정규표현식을 분석하면 아래와 같다.

    1. \d : 0개 이상의 숫자

    2. \@ : "@" 문자

    3. \d{2,3} : 2개 또는 3개의 숫자

    4. (31)+ : "31"문자열이 한번 이상 반복함

    5. [^0-8] : 0부터 8사이의 숫자를 제외한 문자

    6. \! : "!" 문자

     

    정규표현식에 맞는 값을 매칭해보면 1@23319!+1+13가 나온다!

    지금까지 구한 name, pw를 값으로 넣고 제출을 눌러보자.

    Step 2

    이 또한 php 코드를 분석해보자.

    // cmd filtering
    else if (preg_match("/flag/i", $cmd)) {
        echo "<pre>Error!</pre>";
    }
    else{
        echo "<pre>--Output--\n";
        system($cmd);
        echo "</pre>";
    }

    /flag라는 필터링을 설치해놓은 것을 볼 수 있다. 

    그럼 문제 설명에서 ../dream/flag.txt에 플래그 값이 있다고 했으니 이를 참고해서 문제를 풀면 될 것 같다.

    일단 .txt 파일 속 값을 가져와야하니 cat 명령어를 쓰도록 하고, 문제에서 정의해준 경로를 적어보면 아래와 같다.

    cat ../dream/flag.txt

    하지만 flag 문자에 필터링이 존재하기 때문에 이를 피하기 위해 *.txt로 파일명(flag)을 입력하지 않아도 출력되도록 처리하면 될 것 같다.

    cat ../dream/*.txt

     

    '정보보안' 카테고리의 다른 글

    Lab: DOM XSS in document.write sink using source location.search  (0) 2025.04.12
    [Wargame] - CSRF Advanced  (0) 2024.10.09
    [Wargame] - cookie  (0) 2024.10.08
    [Wargame] - what-is-my-ip  (0) 2024.10.07
    [Wargame] - xss-1  (0) 2024.10.07
Designed by Tistory.