phpreg

minii_
|2023. 11. 9. 02:47
반응형
 // 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")

소스코드의 일부분

정규표현식을 알아야 함

  • \d* : 0개 이상의 숫자
  • \@ : @
  • \d{2,3} : 2자리나 3자리 숫자
  • (31) : 31이라는 문자열
  • [^0-8\"] : 0부터 8까지의 숫자 및 인용 부호를 제외한 다른 문자
  • \! : 느낌표

 

preg_replace와 정규표현식을 사용하여

nickname=dnyang0310

pw=d4y0r50ng+1+13을 만들어야 한다.

 

nyang은 공백으로 교체되기 때문에 nyang을 한 번 더 넣어주었다.

pw도 위에 적어둔 정규표현식에 따라 임의의 숫자들로 만들어 입력한다.

 

step2에서는 command를 입력해야 한다.

리눅스 명령어를 떠올려 cat 명령어를 사용했다.

문제에서 flag값은 ../dream/flag.py라는 경로에 있다고 이미 알려주었다.

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

하지만 cmd에서 flag를 필터링하고 있다.

*을 사용하여 우회하면 문제를 해결할 수 있다.

반응형

'Dreamhack > Web' 카테고리의 다른 글

session-basic  (0) 2023.11.09
pathtraversal  (0) 2023.11.09
xss-1  (0) 2023.11.08
Carve Party  (0) 2023.11.03
file-download-1  (0) 2023.11.03