본문 바로가기

Study/WebHacking

Dreamhack wargame : phpreq write-up

728x90

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를 분석하였다.

step1은 알맞은 닉네임과 비밀번호를 입력하게 되면 step2로 넘어가는 방식이다.

step2.php

 

이 부분에서 알 수 있듯이 정규표현식을 이용아혀 필터링을 사용하고 있다. 

문제를 풀기 위해 필터링을 우회해야만 한다.

내가 생각하기엔 dnyang0310이 닉네임이다. 하지만 쥐피티가 알려줬는데 nyang이라는 문자열이 필터링에 의해 제거가 된다. 그래서 우회하기 위해 dnynyangang0310을 입력해준다.

 

이제 비밀번호만 알면 된다.이거 또한 쥐피티한테 물어본 결과

이런 규칙이 있다고 한다.

또한 코드에서 보듯이 비밀번호 +1+13의 형태인 것으로 확인할 수 있다.

형태에 맞춰서 임의로 12@456319!+1+13을 입력하였다.

짜잔!!!!!!!

step2로 넘어감~~~~

system()를 사용하랜다

잠깐 system()가 뭔지 살펴보자


system()

Def. 입력받은 command의 문자열을 실제로 실행시켜주는 함수이다.

  • system 함수를 사용하기 위해서는 C언어에서 stdlib.h 헤더파일을 include해야함
  • system 함수를 NULL을 전달하게 되면 명령처리기가 존재한다면 0을 반환
  • system 함수는 fork, exec, waitpid으로 이루어진 함수

그래서 나는 리눅스 명령어를 통해 플래그를 얻었다.

ls -l ../dream

flag.txt 존재확인

하지만 코드에 보면

flag라는 필터링이 또 있다

그래서 나는 cat ../dream/flflagag.txt를 해봤지만,, 안나왔다

그래서 와일드 카드 문자로 해봤다.

플래그를 얻을 수 있었다.