반응형
https://webhacking.kr/challenge/code-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>
php 코드를 보면, get 방식으로 입력받은 val 인자에 $pat의 내용이 있으면(preg_match) 솔브를 할 수 있다는 것을 알 수 있다.
$pat을 살펴보면, 아래와 같은 정규표현식으로 변수가 구현되어 있다.
/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/
정규표현식이 상당히 복잡한데, 몇몇개들은 알겠는데 모르겠는 것도 몇개 있어서 구글링 해보다가 완전 좋은 사이트를 찾아서 공유한다.
정규표현식을 작성하면, 그 정규표현식의 구조를 말해준다. javascript 용이라 인식이 이상하게 된 부분도 있기는 한데, 대체적으로 한눈에 이해하기 쉽게 나온다.
그래서 정규 표현식을 다시 살펴보면,
/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/
[1-3] : 1~3 중 하나
[a-f]{5} : a~f 중 하나의 값을 총 5번 선택
_ : '_'
.* : 다음 문자가 나올 때까지 어떤 문자가 나와도 상관 없음 (와일드 카드 느낌?)
$_SERVER[REMOTE_ADDR] : (php 변수) 서버에 접속한 사람의 주소
\t : '\t'
p : 'p'
\ta\ts\ts : 탭, a, 탭, s, 탭, s
내 상황에 맞게 정규표현식의 조건에 맞는 문자열을 작성해보면 아래와 같다.
1abcde_192.168.0.73%09p%09a%09s%09s
볼드 처리된 부분은 각자 자신의 IP를 넣으면 된다.
현재는 192.168의 공유기 내부에서 할당된 주소로 작성을 했는데, 서버에서는 이 IP가 아닌 공유기 주소로 할당이 되기 때문에 ipconfig 명령어로 나온 ip가 아닌, 네이버 ip 주소 확인에서 알려주는 ip를 작성해야 한다.
추가 자료
정규 표현식 분석 사이트
한눈에 보기 쉽게 나오는 것은 아닌데, 각 요소에 대한 설명이 잘 나와있어서 공부하기에 좋은 것 같다.
반응형
'해킹 > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] Challenge(Old) old-14 풀이 (0) | 2022.06.25 |
---|---|
[webhacking.kr] Challenge(Old) old-12 풀이 (0) | 2022.06.21 |
[webhacking.kr] Challenge(Old) old-10 풀이 (0) | 2022.06.20 |
[webhacking.kr] Challenge(Old) old-07 풀이 (0) | 2022.06.19 |
[webhacking.kr] Challenge(Old) old-06 풀이 (0) | 2022.06.18 |