문제풀이

[Dreamhack] phpreg 문제풀이

suuuullloc 2024. 1. 30. 12:10

# 문제링크 : https://dreamhack.io/wargame/challenges/873

 

phpreg

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

dreamhack.io


 

문제 파일

 

웹페이지

 

닉네임과 패스워드를 획득하려면 소스코드를 봐야할 듯?

 

index.php 파일을 메모장으로 열어보았다.

 

음... 모르겠다. 닉네임과 비번 관련한 부분이 없다. step2.php를 보자.

 

 

step2.php에는 관련 부분이 있는 것 같다.

 

이 부분을 살펴보면 name이 dnyang0310이고 pw가 d4y0r50ng+1+13면 스텝 2로 넘어간다.

 

근데 이 부분을 또 보면 pw에는 알파벳이 들어가면 안되고 name에는 nyang이라는 문자열이 들어가면 안된다. nyang이 필터링된다는 의미이다. 또한 pw 부분은 /\d*\@\d{2,3}(31)+[^0-8\"]\!/ 이 정규표현식을 충족하면 d4y0r50ng로 치환된다고 한다.

 

정리하자면,

닉네임은 dnyang0310이지만 nyang을 필터링한다. 따라서, nyang 필터링을 우회해줘야 한다.

패스워드는 d4y0r50ng+1+13이지만 알파벳이 들어가면 안된다. 따라서, /\d*\@\d{2,3}(31)+[^0-8\"]\!/ 이 정규표현식을 충족하는 새로운 숫자열을 만들어서 d4y0r50ng을 치환해줘야 한다.

 

정규표현식 /\d*\@\d{2,3}(31)+[^0-8\"]\!/은

  • \d*: 0개 이상의 숫자
  • \@: @ 기호
  • \d{2,3}: 2자리 또는 3자리의 숫자
  • (31)+: "31"이라는 문자열이 하나 이상 반복
  • [^0-8\"]\!: 0부터 8까지의 숫자와 쌍따옴표(")를 제외한 다른 문자, 그리고 느낌표(!)

라는 의미이다.

이를 충족하는 숫자열을 하나 만들어보자면, 2@12319!가 될 수 있다.

 

닉네임에는 dnnyangyang0310, 패스워드에는 2@12319!+1+13을 넣어보자.

 

스텝 2로 넘어갔다. system() 함수를 이용하라는데 코드를 살펴보자.

 

이 부분을 살펴보면 Command창은 flag를 필터링하고 있다. flag를 제외한 명령어를 입력하면 그 명령어를 system 함수를 통해 그대로 실행시키는 걸 알 수 있다.

 

플래그는 ../dream/flag.txt에 있으니 원래라면 Command창에 cat ../dream/flag.txt를 입력해야 하지만 flag가 필터링되므로 cat ../dream/f*.txt로 대체해서 입력해준다.

 

플래그가 출력된 걸 볼 수 있다.

 

문제 해결!

 

+) 새싹 치고 어려운 문제였다.... 휴

'문제풀이' 카테고리의 다른 글

[Dreamhack] baby-linux 문제풀이  (0) 2024.02.20
[Dreamhack] xss-1 문제풀이  (0) 2024.02.06
[Dreamhack] 64se64 문제풀이  (1) 2024.01.30
[Dreamhack] ROT128 문제풀이  (0) 2024.01.23
[Dreamhack] dreamhack-tools-cyberchef 문제풀이  (0) 2024.01.23