반응형

<html>
<head>
<title>Challenge 23</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; color:black; font-size:9pt; }
</style>
</head>
<body>
<form method=get action=index.php>
<table border=0 cellpadding=10>
<tr><td><input name=code></td><td><input type=submit></td></tr>
</table>
</form><br><br>
Your mission is to inject &lt;script>alert(1);&lt;/script>
<br><br>
</body>
</html>

 


 

Your mission is to inject &lt;script>alert(1);&lt;/script>

 

<script>alert(1);</script>을 inject 하면 된다.

 

근데 <가 필터링되는 것 같다.

 

 

위와 같이 입력하니 no hack이라고 뜬다.

 

 

"<"만 입력하면 위와 같이 화면에 출력된다.

 

 

"sc" 라고 입력하면 no hack이 뜨고, url을 보면 code 파라미터에 sc가 담긴다.

 

 

">"를 입력하면 화면에 ">"가 출력된다.

 

즉, '<', '>', '(', ')' 그리고 'a', 'b' 와 같은 단일 문자는 출력된다.

 

하지만 'sc', 'script' 와 같은 2개 이상의 문자가 합쳐지면 no hack이 출력된다.

 


풀이

 

그렇다면 '<', '>', '(', ')'는 필터링 되지 않기 때문에 그대로 입력하고

'script'와 같은 문자열은 필터링 되므로 우회해야 한다.

 

 

이는 URL 인코딩을 통해 우회할 수 있는데, 각 문자들 앞에 %00(null byte)을 붙여 우회할 수 있다.

 

 하지만 위와 같이 "s%00c"를 입력했을 때 s%00c가 그대로 출력된다.

 

그리고 url을 보면 s%2500c라고 되어 있다.

 

url 인코딩에서 25는 %를 의미하는 것으로, %00에 있는 %를 인코딩한 것이다.

 

즉, 입력 창에는 URL 인코딩을 한 번 한 값을 입력했지만, 실제 code 파라미터에 담길 때에는 %도 URL 인코딩 되어 URL 인코딩이 2번 한 값이 들어가게 된다.

 

 

그렇다면, URL 입력창에서 code 파라미터의 값을 직접 수정하면 된다.

 

위의 내용을 바탕으로 아래의 내용을 code 파라미터의 값으로 직접 입력하면 된다.

 

<%00s%00c%00r%00i%00p%00t>%00a%00l%00e%00r%00t(1)%00;<%00/%00s%00c%00r%00i%00p%00t>

 

 

반응형

'전쟁 > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-18  (0) 2022.07.13
[webhacking.kr] old-34  (0) 2022.07.13
[Webhacking.kr] old-20  (0) 2022.07.13
[Webhacking.kr] old-54  (0) 2022.07.13
[Webhacking.kr] old-17  (0) 2022.07.13

+ Recent posts