본문 바로가기

웹해킹

드림핵 phpreg 롸업

$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