https://webhacking.kr/challenge/code-2/
Challenge 11
webhacking.kr
문제 화면을 보면, 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를 작성해야 한다.
ip 주소 확인 : 네이버 통합검색
'ip 주소 확인'의 네이버 통합검색 결과입니다.
search.naver.com
추가 자료
정규 표현식 분석 사이트
한눈에 보기 쉽게 나오는 것은 아닌데, 각 요소에 대한 설명이 잘 나와있어서 공부하기에 좋은 것 같다.
'해킹 > 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 |