본문으로 바로가기

phpreg 문제 풀이

category 모의해킹/Dreamhack Wargame 2025. 5. 19. 19:53
728x90

문제 설명

 

php로 작성된 페이지입니다.

알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다.

Step 2에서 system() 함수를 이용하여 플래그를 획득하세요.

플래그는 ../dream/flag.txt에 위치합니다.

플래그의 형식은 DH{...} 입니다.


문제 풀이

 

문제 코드를 먼저 살펴보면, index.php에는 중요한 코드가 없다.

그리고 step2.php에 이런 코드가 있다.

pw filtering 부분을 보면, 일단 pw에 알파벳을 집어넣으면 안된다.

그리고 전 문제에서 본 정규 표현식을 또 볼 수 있다.

  • /nyang/i: nyang 문자열을 대소문자 구분없이 제거한다.
  • 밑의 조건을 만족한 문자열을 d4y0r50ng로 치환한다.
    • \d*: 숫자가 0번 이상 반복된다.
    • \@: @가 있어야한다.
    • \d{2,3}: 숫자가 2개 이상 3개 이하 반복되야 한다.
    • (31)+: 31이 1번 이상 반복된다.
    • [^0-8\"]: 숫자 0-8과 "가 아닌 한 문자가 있어야한다.
    • \!: !가 있어야한다.

$name에 dnyang0310과 $pw에 d4y0r50ng+1+13이 입력되면 step2로 넘어갈 수 있다.

 

그냥 복붙 해봤는데

당연히 안된다. ㅎㅅㅎ

pw는 정규표현식 조건에 맞는 문자열과 뒤에 +1+13만 붙여주면 되니 꽤나 쉬운데,

문제는 nyang을 없애버리는 name부분이다.

해결 방법은, dnyang사이에 nyang을 한번 더 입력해준다!

dnydnyangang으로 입력하면, 가운데 nyang이 공백처리되고, dnyang이 입력되게 된다.

근데 이게 언어마다 차이가 있어서, 안되는 언어도 있다고 한다.

flag는 Error! 출력

Step2로 넘어와졌다. 

여기서는 System()함수를 이용하라 했으니, 플래그가 있는 파일을 cat하면 출력될 것이다.

당연히 cmd도 필터링한다.

flag를 지우는데, 우리는 이전 문제들 중에서 와일드카드라는 것을 배웠다.

?를 사용하여 flag를 직접 입력하지 않고 우회할 수 있도록 했다.

쨔잔!@


전 시간에 배웠던게 다시 한 번 나와주니, 반갑기도 하고 이걸 다시 사용할 줄 아는 내가 대견하구망

'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글

simple-web-request 문제 풀이  (0) 2025.05.21
Flying Chars 문제 풀이  (0) 2025.05.20
ex-reg-ex 문제 풀이  (0) 2025.05.19
pathtraversal 문제 풀이  (9) 2025.05.15
welcome 문제 풀이  (4) 2025.05.13