본문 바로가기
해킹/webhacking.kr

[webhacking.kr] Challenge(Old) old-11 풀이

by yenua 2022. 6. 21.
반응형

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/

정규표현식이 상당히 복잡한데, 몇몇개들은 알겠는데 모르겠는 것도 몇개 있어서 구글링 해보다가 완전 좋은 사이트를 찾아서 공유한다.

https://regexper.com/

정규표현식을 작성하면, 그 정규표현식의 구조를 말해준다. 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를 작성해야 한다.

https://search.naver.com/search.naver?where=nexearch&sm=top_sug.pre&fbm=1&acr=1&acq=ip+%EC%A3%BC&qdt=0&ie=utf8&query=ip+%EC%A3%BC%EC%86%8C+%ED%99%95%EC%9D%B8 

 

ip 주소 확인 : 네이버 통합검색

'ip 주소 확인'의 네이버 통합검색 결과입니다.

search.naver.com

 

추가 자료

정규 표현식 분석 사이트

https://regexr.com/

한눈에 보기 쉽게 나오는 것은 아닌데, 각 요소에 대한 설명이 잘 나와있어서 공부하기에 좋은 것 같다.

반응형