$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") {
name과 pw를 모두 맞게 입력해야 step2로 넘어갈 수 있다.
name부터 보면 최종적으로 dnyang0310이 되어야 하는데 preg_replace로 nyang을 공백으로 치환해 버린다.
그냥 dnynyangang0310 이런식으로 중간에 nyang을 넣어주면 공백으로 바뀌면서 dnyang0310이 된다.
pw는 우선 알파벳을 전부 필터링한다.
그리고 preg_replace로 치환을 하는데
1. \d : 0개 이상의 숫자를 매치
2. \@ : "@" 문자를 매치
3. \d{2,3} : 2개 또는 3개의 숫자를 매치
4. (31)+ : "31"문자열이 한번 이상 반복
5. [^0-8] : 0부터 8사이의 숫자를 제외한 문자 매치
6. \! : "!" 문자를 매치
이 규칙을 전부 만족하는 문자열을 치환한다.
1@43319!+1+13 이렇게 입력을 하면 1@43319! 이 부분이 치환되면서 pw가 d4y0r50ng+1+13 이렇게 맞게 된다.
else if (preg_match("/flag/i", $cmd)) {
echo "<pre>Error!</pre>";
}
else{
echo "<pre>--Output--\n";
system($cmd);
echo "</pre>";
}
step2에서는 이렇게 cmd를 이용할 수 있는데 flag 문자를 필터링한다.
flag.txt 파일의 위치는 알고 있으니 해당 디렉토리로 이동해서 .txt 파일을 전부 읽어오는 식으로 flag 문자 없이 우회할 수 있다.
이렇게 하면 flag가 나온다.
'웹해킹' 카테고리의 다른 글
드림핵 ex-reg-ex 롸업 (0) | 2023.12.20 |
---|---|
드림핵 Flying Chars 롸업 (0) | 2023.12.20 |
드림핵 File Vulnerability Advanced for linux 롸업 (0) | 2023.12.03 |
드림핵 Apache htaccess 롸업 (0) | 2023.12.03 |
File Vulnerability Advanced (0) | 2023.12.03 |