Iriton's log

[Dreamhack] Beginner: phpreg 본문

WebHacking/WarGame

[Dreamhack] Beginner: phpreg

Iriton 2024. 11. 14. 17:13
 

phpreg

Description php로 작성된 페이지입니다. 알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다. Step 2에서 system() 함수를 이용하여 플래그를 획득하세요. 플래그는 ../dream/flag.txt에 위치합니

dreamhack.io

 

Description


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

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

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

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

 

 

풀이


 

step1에서는 닉네임과 패스워드를 입력해야 한다.

알맞은 닉네임과 패스워드가 뭔지 확인하기 위해 코드를 살펴 봤다.

 

정규식 필터링을 진행한다.

name의 경우에는 nyang 문자열이 있으면 지우는 필터링

pw는 특정 정규 표현식이 있는데 이를 설명하자면,

 

  • \d*: 숫자가 0개 이상
  • \@: @ 문자
  • \d{2,3}: 숫자가 2~3자리
  • (31)+: "31"이 한 번 이상 반복
  • [^0-8\"]: 숫자 0부터 8, 그리고 " 문자를 제외한 다른 문자가 하나
  • \!: ! 문자

 

에 해당한다.

근데 여기에 해당하면 패스워드 중 일부인 문자열로 치환된다.

패스워드에는 문자열을 입력하지 못하는데 치환해 주면 당연히 정규 표현식을 해석하고 충족하란 뜻이겠지

따라서 내가 작성한 정규식은 다음과 같다.

 

name에서 필터링 되고 결과적으로 dnyang0310가 나오려면 이 문자를 그대로 사용할 순 없고 필터링되는 걸 감안해서

nyang사이에 nyang을 한 번 더 입력한다. 그럼 사이에 끼인 완전한 문자 dnyang이 필터링되어 사라지고

앞뒤로 이어지면서 우리가 원하는 name이 나올 것이다.

 

비밀번호는 아까 작성한 정규식 뒤에 +1+13을 붙여서 완전히 일치하는 패스워드가 되도록 한다.

 

1단계는 통과

아까 본 코드 마지막을 보면 cmd 명령어를 사용할 수 있게 되었다.

flag 루트를 아니까 cat 명령어를 사용해 보자.

 

에러를 출력하길래 코드를 확인해 보니 flag 문자열을 필터링 한다.

 

flag만 우회하면 되니 모든 파일을 출력하는 명령어를 사용하여 플래그를 획득

'WebHacking > WarGame' 카테고리의 다른 글

[Dreamhack] Lv.3 chocoshop  (3) 2024.11.08
[Dreamhack] Lv.3 CSP Bypass Advanced  (3) 2024.11.06
[Dreamhack] Lv.3 XSS Filtering Bypass Advanced  (1) 2024.10.30
[Dreamhack] Lv.2 blind-command  (1) 2024.09.30
[Dreamhack] Lv.2 web-ssrf  (0) 2024.09.25
Comments