Phpreg

chwrld·2024년 4월 1일
0

dreamhack

목록 보기
15/19

Phpreg

해당 문제는 Dreamhack CTF Season 3 Round #6 (🌱Div2)에 출제된 문제입니다.
Description
php로 작성된 페이지입니다.
알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다.
Step 2에서 system() 함수를 이용하여 플래그를 획득하세요.
플래그는 ../dream/flag.txt에 위치합니다.
플래그의 형식은 DH{…} 입니다.

이번 문제는 php reget 정규화 필터링을 우회해야 하는 문제이다.

else문을 보면 name 에는 조건이 /nyang/i 이고 replace 문자는 없다
즉 nyang, NYANG (옵션 i로 인해 소문자/대문자) 문자열이 오면 nyang는 대체되는 것이다. 하지만 그 밑에 if문을 보면 dnyang0310이 와야지 step2로 넘어갈 수 있음을 알 수 있다. 따라서 다음 값을 입력해주면 필터를 우회할 수 있다.
nyannyangg.
Pw는 복잡하지만 풀어보자.
\d* : 0개 이상의 숫자를 의미.
\@ : ‘@’ 기호.
\d{2,3} : 2개 이상 3개 이하 숫자.
(31)+ : '31’을 1번 이상 반복한 것.
[^0-8] : '0’에서 ‘8’ 사이의 숫자가 아닌 문자.
! : ‘!’ 기호를 나타냄.

조건에 충족하면 어떻게 하든 상관없다 나는 이렇게 했다.
Pw: 2@22319!+1+13

Step2는 문제에 적혀있듯 system()함수를 사용하면 된다.

여기도 필터링이 걸려있는데
Flag 파일명을 직접 입력하지 못하게 해놨다.
나는 입력창에서 리눅스 명령어를 쓸 수 있는 것을 이번 문제를 통해
알게 되었다.

친절히 알려주는 지피티 씨..
그래서 ls, cd ../ ls해가면서 진짜 flag 파일이 있는지 확인하고 풀었다.
밑에 명령어는 문제를 푸는 가장 간결한 명령어다.
Cat ../dream/*

암호화가 되어있는 것 같지만 그대로 입력하면 된다.

profile
BoB 13th 최강포린이👮

0개의 댓글