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
정규표현식에 대해 잘 알고만 있다면 손쉽게 풀 수 있을 것이다.
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 13번 문제풀이 ★★★★☆ -자바- (0) | 2020.09.25 |
---|---|
[Webhacking.kr] 12번 문제풀이 (0) | 2020.09.18 |
[Webhacking.kr] 10번 문제풀이 (0) | 2020.09.14 |
[Webhacking.kr] 9번 문제풀이 (자바로 문제풀기) (0) | 2020.09.11 |
[Webhacking.kr] 8번 문제풀이 (0) | 2020.09.10 |