본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 11번 문제풀이

by Hevton 2020. 9. 14.
반응형

11번을 들어가면

다짜고짜 틀렸댄다.

이런창이 뜬다. 여지없이 view-source 창을 열어주자

<?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로 넘겨준 파라미터의 값이 $pat의 정규표현식 기반의 패턴과 일치하면 성공한다는 뜻이다.

preg_match는 정규표현식 기반으로 문자열의 패턴을 검색하는 함수고, 그 위에 $pat을 해석하면 되겠다.

 

맨앞부터 차례대로 해보면

1. [1-3] -> 1부터 3까지의 수 아무거나

2. [a-f]{5} -> {5}는 바로앞의 나온 식을 5번 반복함을 의미한다. 즉 a부터 f까지의 아무거나 5번 반복

3. _ -> 그냥 언더바

4. . -> 점은 아무 문자 하나를 뜻한다.

5. * -> *은 바로 앞에 나온 문자를 0번 이상 반복을 말한다.

6. $_SERVER[REMOTE_ADDR] 이 페이지에 접속한 내 아이피주소를 말함.

7. 마찬가지로 .과 *

8. \t : 탭을 뜻함. p a s s는 걍 문자.

 

저 패턴에 맞도록 문자열을 입력해주면 된다. 순서대로 완성시켜보겠다

1. 1

2. 1aaaaa

3. 1aaaaa_

4. 1aaaaa_a

5. 1aaaaa_

-> (*은 바로앞 문자 0번 이상 반복이므로 걍 a를 없애버림(=0번)

6. 1aaaaa_215.24.32.152

-> 본인 공인 IP를 적어야함

7. 1aaaaa_215.24.32.152

-> 마찬가지로 걍 아무것도 안해줌

8. 1aaaaa_215.24.32.152(탭)p(탭)a(탭)s(탭)s

-> 일단 탭 부분을을 (탭)으로 표현했음. 이렇게 넘겨주면 안됌. 아래에서 다시 설명할 것임.

 

결과로

1aaaaa_215.24.32.152(탭)p(탭)a(탭)s(탭)s 형식이 나온다. 넘겨줘야 하는 방식이 GET 방식이고, GET 방식은 url을 통해 데이터를 넘겨주는 방식이라 URL encoding을 해줘서 넘겨주면 됌.

탭(=\t)은 인코딩 시 %09 다.

 

따라서 완성된 값은

1aaaaa_215.24.32.152%09p%09a%09s%09s

 

웹페이지 뒷부분에 이런식으로 붙여주면 됀다.

challenge/code-2/?val=1aaaaa_215.24.32.152%09p%09a%09s%09s

정규표현식에 대해 잘 알고만 있다면 손쉽게 풀 수 있을 것이다.

반응형