https://dreamhack.io/wargame/challenges/873
phpreg
Description php로 작성된 페이지입니다. 알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다. Step 2에서 system() 함수를 이용하여 플래그를 획득하세요. 플래그는 ../dream/flag.txt에 위치합니
dreamhack.io
결론 먼저 얘기하자면, 정규표현식 문제이다.
step1의 이름(input_name)에서는 정규표현식을 우회해야 하고, 비밀번호(input_pw)에서는 정규식에 부합하는 문자열을 써넣어야 한다.
step2에서는 " flag"문자열을 탐지하는 정규 표현식을 우회해야 한다.
우선 step1 부터 살펴보자.
1) "//pw filtering"이라고 쓰인 곳에서는 사용자가 입력한 비밀번호에 대/소문자 알파벳이 하나라도 들어있는 지 체크하고, 만약 있다면 "alphabet in the pw :(" 라는 문자열을 표시한다.
이를 통해, 비밀번호에는 알파벳이 하나도 없어야 한다는 점을 알 수 있다.
2) "$name" : 사용자가 입력한 name에서 "nyang" 라는 문자열을 빈 문자열("")로 대체한다. 하지만 밑에 보면 name이 "dnyang0310"이어야 한다.
그말인 즉슨 "nyang"를 제거한 다음에도, "nyang"이 들어있어야 한다는 얘기이다.
이를 위해 "nyang"를 2번 넣되, "nyang" 사이에 한번 더 "nyang"을 넣어주면 된다.
예를 들어 name이 "dnnyangyang0310"을 살펴보자.
가운데에 "nyang"이 들어있는 것을 알 수 있고, 이는 정규표현식으로 필터링하는 부분인 preg_replace에서 제거된다.
하지만 그 다음의 name은 "dnyang0310"이 되어, 정규표현식으로 점검하는 부분을 우회할 수 있다.
3) "$pw": 정규표현식에 맞는 문자열을 "d4y0r50ng"로 변경한다.
이를 위해, 우리는 정규 표현식을 충족시키는 문자열을 찾아야 한다.
주어진 정규 표현식을 부분 별로 살펴보자
(사용한 툴: regex101)
\d* | \@ | \d{2, 3} | (31)+ | [^0-8] | \! |
0~9사이의 숫자를 1회 이상 반복 |
문자 @ | 0~9사이의 숫자를 2회 이상, 3회 이하 반복 |
문자 31이 1회 이상 반복 |
0~8 사이의 숫자가 없음 |
문자 ! |
위의 조건에 맞춰서 문자열을 만들어보면, "1@34531319!" 처럼 만들 수 있다.
하지만 pw의 뒤쪽에 "+1+13"이 붙어있는 지도 체크하므로, 위에서 만든 문자열의 맨 뒤에 "+1+13"를 붙여주면 된다.
실제로 "1@34531319!+1+13"를 입력한 경우, 어떻게 진행되는 지 살펴보자.
주어진 pw에서 정규 표현식을 만족시키는 부분인 "1@34531319!"는 "d4y0r50ng"로 변경된다.
궁극적으로 pw는 "d4y0r50ng+1+13"으로 변하게 된다.
마지막으로 step2를 살펴보자.
Command창에 ls를 써넣으면 아래와 같이 명령이 실행되는 것을 알 수 있다.
"../dream/flag.txt"라는 명령어를 써넣으면 flag를 출력해줄 것 같은데, 정규표현식으로 "flag"라는 단어를 필터링한다.
그렇다면, "flag"라는 문자열을 전달할 때 2개의 변수에 나눠담은 후 전달해보자.
이 방식이면 "flag"가 있는 지 검사하는 코드에 안걸리고도, "flag"를 보낼 수 있을 것이다.
a = "f";
b = "lag";
cat "../dream/$a$b.txt"
// 가독성을 위해 3줄에 나눠썼습니다
위의 코드를 한줄로 만들어서 써넣어보면, flag를 얻을 수 있다!
이번엔 정규식을 이용하는 문제라 php에 대한 이해 없이도 풀 수 있었다.
하지만 php를 이용해서 문제를 풀어야 할 경우를 위해, php를 공부해야 할 것 같다
'DreamHack' 카테고리의 다른 글
XSS-1 (0) | 2024.02.05 |
---|---|
cookie (0) | 2024.01.30 |
Switching Command (1) | 2024.01.25 |
simple_sqli_chatgpt (0) | 2023.09.19 |
DreamHack) ex-reg-ex (0) | 2023.09.14 |