
1. 문제 정보
- 문제 번호 : old -11
- 문제 점수 : 30점
2. 문제 분석
문제에 들어가면 wrong이라고 뜨고 아무것도 안뜬다

소스코드를 봐보자
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 11</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<center>
<br><br>
<?php
$pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/";
if(preg_match($pat,$_GET['val'])){
solve(11);
}
else echo("<h2>Wrong</h2>");
echo("<br><br>");
?>
<a href=./?view_source=1>view-source</a>
</center>
</body>
</html>
소스코드에서는 val을 입력받아 preg_match즉 정규식을 받아서 처리하고 있다. 알맞은 정규식을 val로 보내 통과해보자
3. 풀이
$pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/"; 을 통과하려면
- [1-3] 문자열의 시작은 숫자 1, 2, 3 중 하나여야 한다.
- [a-f]{5} a부터 f 사이의 소문자 알파벳이 정확히 5개 이어져야 한다.
- _ 밑줄(_) 문자가 하나 있어야 한다.
- .* 줄바꿈을 제외한 임의의 문자가 0개 이상 올 수 있다. 즉, 밑줄과 IP 주소 사이에 아무 내용이 없어도 되고, 쓰레기 값이 들어가도 된다.
- $_SERVER[REMOTE_ADDR] 앞서 설명했듯 접속자의 IP 주소가 정확하게 일치해야 한다.
- \tp\ta\ts\ts 이 부분은 탭(Tab) 문자와 알파벳 p, a, s, s가 번갈아 나오는 구조다. (URL인코딩에서 %09이다)
따라서 값을 입력하면

4. 요약
- PHP의 큰따옴표 문자열 처리 특성상 정규식 내부의 서버 변수가 실제 접속자의 IP로 치환되어 검사된다.
- 정해진 숫자 범위와 문자 반복 횟수 등 정규표현식의 제약 조건을 정확히 분석하여 오타 없는 문자열을 구성해야 한다.
- 탭과 같은 제어 문자는 브라우저 입력 시 URL 인코딩된 형태인 %09로 변환하여 전송해야 정상적으로 인식된다.
'워게임 > webhacking.kr' 카테고리의 다른 글
| [webhacking.kr] old-3 문제 (0) | 2026.02.05 |
|---|---|
| [webhacking.kr] old-7문제 (0) | 2026.02.03 |
| [webhacking.kr] old-4 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-56 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-59 문제 (0) | 2026.02.02 |