

Step2로 넘어가기 위해서는 알맞는 Nickname과 Password가 뭔지 알아내서 제출해야 한다.
// POST request
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$input_name = $_POST["input1"] ? $_POST["input1"] : "";
$input_pw = $_POST["input2"] ? $_POST["input2"] : "";
// 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") {
// step2.php 실행 //
}
else{
echo "Wrong nickname or pw";
}
제공된 step2.php 코드를 해석해보면 다음과 같은 내용을 알 수 있다.
1. input_pw에 알파벳[a-zA-z]이 들어가면 안된다.
2. input_name에 "nyang" 문자열은 대소문자를 가리지않고 ""(공백)으로 치환된다.
3. input_pw에 정규표현식 "/\d*\@\d{2,3}(31)+[^0-8\"]\!/"와 매치되면 "d4y0r50ng" 문자열로 치환된다.
4. name에 "dnyang0310"가 입력되고 pw에 "d4y0r50ng+1+13" 가 입력되면 Step2로 넘어간다.
name에 "dnyang0310" 가 입력돼야하는데 그대로 입력하면 "nyang" 문자열이 공백으로 치환되기 때문에 "d0310"로 입력된다.
"nyangdnyang0310"을 입력하면 앞에 있는 "nyang"뿐 아니라 뒤에 있는 "nyang"도 공백으로 치환되기 때문에 똑같이 "d0310"로 입력된다.
따라서 "nyang" 문자열을 "nyang" 사이에 넣어서 "dnynyangang0310"을 입력하면 된다.
pw에는 "d4y0r50ng+1+13"가 입력돼야하는데 정규표현식을 아래와 같이 해석하면
- \d*: 0 또는 1개 이상의 숫자. // 아무것도 안적어도 되고 아무 숫자나 여러개 적으면 된다.
- @: '@' 기호.
- \d{2,3}: 2에서 3개의 숫자. // 아무 숫자나 2개 또는 3개를 적으면 된다.
- (31)+: '31'이라는 숫자의 반복. 최소 한 번 이상이어야 합니다.
- [^0-8\"]\!: 0부터 8까지의 숫자와 큰따옴표(")를 제외한 어떠한 문자, 그리고 느낌표(!)를 찾습니다.
"2@23319!"를 입력했을때 정규표현식에 매치되어 "d4y0r50ng" 문자열로 치환된다.
따라서 "2@23319!+1+13"와 같이 입력하면 Step2로 넘어갈 수 있다.
"@23319!+1+13" //
"@111319!+1+13"
"@11131319!+1+13"
"@1113131'!+1+13"
등등 정규표현식만 만족하면 입력가능한 pw는 다양하다.

// cmd filtering
else if (preg_match("/flag/i", $cmd)) {
echo "<pre>Error!</pre>";
}
else{
echo "<pre>--Output--\n";
system($cmd);
echo "</pre>";
}
위 코드를 보면 대소문자 구분없이 "flag" 문자열이 입력되면 "Error!" 메시지가 출력된다.
그렇지 않으면 명령어를 실행시킨다.
플래그는 ../dream/flag.txt에 위치해있다고 문제에 적혀있었지만 문제를 풀다보니 그런 힌트가 있는 줄도 까먹고 풀었다.
막연히 flag라는 파일이 있을 것이라 생각하고 find / -name "*fla*" 라고 검색했고
/var/www/dream/flag.txt
위 경로에 있는 파일을 cat /var/www/dream/fla?.txt 명령어를 입력하여 flag를 얻을 수 있었다.
'dreamhack' 카테고리의 다른 글
| [Dreamhack] Mango (0) | 2024.01.10 |
|---|---|
| [Dreamhack] simple_sqli (1) | 2024.01.09 |
| [Dreamhack] CSRF-1 / 2 (0) | 2024.01.01 |
| [Dreamhack] xss-2 (0) | 2023.12.31 |
| [Dreamhack] xss-1 (0) | 2023.12.31 |