[ 문제 확인 ]
Step 1을 풀어야 Step 2로 넘어갈 수 있음
Nickname과 Password 를 제출하여 문을 열어야 함
[ 코드 확인 ]
- index.php 코드에는 단순하게 step1에 대한 내용만 적혀있음
- step2.php 코드를 확인하여 닉네임과 패스워드를 입력해야 함
- Step1에서 폼을 제출해야 Step2로 넘어가니 비밀번호 필터링 내용부터 바로 확인
- pw filtering
- 비밀번호에 알파벳이 포함되어 있으면 "alphabet in the pw :(" 문구를 띄우고, 알파벳이 포함되어 있지 않으면 다음 단계로 넘어감
- preg_replace( )는 PHP 정규표현식을 사용하여 문자열 일부를 다른 문자열로 대체하는 함수
- 닉네임에서 "nyang" 문자열을 발견하면 " " 공백, 빈 문자열로 대체하여 제거함
- 비밀번호도 특정 패턴을 정규 표현식으로 대체함 (\d*\@\d{2,3}(31)+[^0-8\"]\!)
- 아래 if 문으로 닉네임이 dnyang0310"이고 비밀번호가 d4y0r50ng+1+13이면 Step2 : Almost done... 메시지가 출력되며 사용자가 추가로 입력할 명령어 cmd를 입력 받기 위한 필드를 포함하는 폼을 출력함
[ 문제 풀이 ]
- 문자열 필터링
\d* : 0개 이상의 문자
\@ : 문자 @
\d{2,3} : 2~3개의 숫자
(31)+ : 1개 이상의 31
[^0-8\"] : 0~8까지의 숫자와 문자 " 를 제외한 나머지
\! : 문자!
- 필터링 조건은 총 3가지
1. 패스워드 파라미터에 알파벳이 존재하면 안됨
2. 아이디 파라미터에 nyang 문자열이 존재하면 안됨
3. 패스워드 파라미터에 /\d*@\d{2,3}(31)+[^0-8"]!/ 패턴이 존재하면 d4y0r50ng 문자열로 치환함
- 닉네임은 dnnyangyang0310 → 중간에 끼어넣은 부분을 공백으로 치환하여 nyang 문자열을 만들 수 있음
- 비밀번호는 123@45631~!+1+31 → 비밀번호는 특정한 패턴이 존재하면 특정 문자열로 치환하기 때문에 해당 조건에 부합하는 임의의 문자열이 필요한데 d4y0r50ng로 변환되면 +1+13 문자열이 같이 있어야 함
문제에서 나와있는 대로 system( ) 함수를 사용해서 풀어야하며, flag.txt 파일 경로를 알려줬음
하지만 주어진대로 파일 경로를 입력했을 때 오류가 뜨는 것을 확인
주어진 소스코드를 다시 확인해봤을 때 flag 단어가 들어가면 Error 표시되는 것을 확인
그래서 와일드카드를 사용하여 필터링 시도 후 플래그 획득
'정보보안 > Wargame' 카테고리의 다른 글
[Dreamhack] Write-up, ex-reg-ex 풀이 (0) | 2024.11.08 |
---|---|
[Dreamhack] Write-up, Flying Chars 풀이 (0) | 2024.11.07 |
[Dreamhack] Write-up, php7cmp4re 풀이 (0) | 2024.10.25 |
[ Webhacking.kr ] old-16 문제 (0) | 2024.10.25 |
[ Webhacking.kr ] old-26 문제 (0) | 2024.10.24 |