본문 바로가기
CTF/Dreamhack

[Dreamhack] phpreg

by 8희 2023. 9. 13.

https://dreamhack.io/wargame/challenges/873

 

phpreg

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

dreamhack.io

 

php로 작성된 페이지로 2단계에 걸쳐서 푸는 문제다.

플래그는 ../dream/flag.txt에 있다고 한다.

 

 

가상머신에 접속하면 이름과 패스워드를 제출하는 입력 란이 있다. 

혹시나 해서 admin/admin을 입력해봤는데 아니라고 했다. :(

 

 

주어진 문제 파일 중 index.php에는 얻을 수 있는 정보가 없었다.

그래서 step2.php의 내용을 확인했더니

이름과 패스워드가 아예 노출되어 있어서 어떤 값을 입력하면 step 2로 넘어갈 수 있는지 확인할 수 있었으며,

입력 란에 들어오는 문자를 필터링하고 있기 때문에 step 2로 넘어가려면 필터링을 우회해야 한다는 사실을 알게 되었다.

 

1. name 필터링 우회

- name은 preg_replace 함수를 이용하여 nyang 문자열이 필터링 되어 있다. 

-원래 name인 dnyang0310의 nyang 사이에 nyang을 삽입하면 이를 우회할 수 있다.- 따라서 name 입력 란에 dnynyang0310을 입력하면 된다.

 

2. pw 필터링 우회

- pw는 "/\d*\@\d{2,3}(31)+[^0-8]\!/"이 문자열 "d4y0r50ng"로 치환된다.- pw 정규표현식을 통해 "/\d*\@\d{2,3}(31)+[^0-8]\!/"를 치환시켜야 한다.

  \d*: 0개 이상의 숫자를 의미

  \@: "@" 문자를 의미

  \d{2,3}: 2개 또는 3개의 숫자를 의미

  (31)+: 31이 1회 이상 반복을 의미

  [^0-8]: 0과 8 사이의 숫자를 제외한 문자를 의미

  \!: "!" 문자를 의미

- 따라서 pw 입력 란에 1@123319!+1+13을 입력하면 된다.

* 참고: https://devhacks.tistory.com/118

 

 

필터링을 우회한 값을 입력했더니 step 2로 넘어갈 수 있었다.

 

 

 

플래그가 ./dream/flag.txt 에 있다고 했으므로 해당 파일의 내용을 읽기 위해

cat ../dream/flag.txt를 입력했더니 에러라고 떴다. 필터링이 있는 것으로 추측된다.

 

 

다시 step2.php 파일의 내용을 확인해봤더니

flag라는 단어를 필터링하는 것을 알 수 있었다.

 

 

필터링을 우회하기 위해서 cat ../dream/?lag.txt을 입력했다.

 

 

플래그를 획득할 수 있었다!

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

[Dreamhack] command-injection-chatgpt  (0) 2023.09.20
[Dreamhack] simple-web-request  (0) 2023.09.16
[Dreamhack] shell_basic  (0) 2023.05.30
[Dreamhack] RSA-wiener  (1) 2023.05.30
[Dreamhack] proxy-1  (0) 2023.05.24