티스토리 뷰

Security/웹 해킹

webhacking.kr 23번

on1ystar 2019. 1. 10. 18:07
728x90
반응형


일단 입력할 수 있는 칸이 있고, 입력한 문자열을 제출버튼을 눌러 서버에 전달하는 형식인 것 같습니다. 아래에 보면

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

이라는 문장이 있는데 script문을 실행시키는 것이 이 문제의 의도로 보여집니다.

javascript문은 <script>태그를 이용해서 html문서에 직접 작성해 동작시킬 수 있습니다.

그래서 일단 저 script문을 그대로 넣어봤습니다.


No hack 이라는 문구가 나옵니다. 위에 URL을 보면

?code=<script>alert%281%29%3B<%2Fscript>

를 통해 일단 code라는 변수에 GET방식으로 작성한 문자열이 전달되는 것을 알 수가 있습니다.

여기서 no hack이 나온 이유를 저번에 푼 18번 문제와 같이 문자나 문자열이 필터링되어 있지 않을까 라는 추측을 해봤습니다.

이 문제는 페이지 소스보기를 해도 php문서를 보여주지 않기 때문에(원래 웹 브라우저의 소스는 웹 컨테이너에서 html로 다 바꿔주기 때문에 php문을 보여주지 않긴 합니다…)문자열들을 넣어서 필터링 된 문자열들을 찾아내 봤습니다.

 




                      



보면 나머지 문자들은 그대로 출력이 되고, script alert같은 문자열들만 필터링 되어 있는 것 같습니다. 그러다가 생각한 점이, 위에서 보면 s하나는 필터링을 하지 않습니다. 즉 문자 하나는 필터링 하지 않고 연속으로 문자들이 나올 경우를 필터링해주는 거구나 였습니다.

sc도 필터링하는 걸 보면 배열이나 스트링에 문자열이 들어가 배열의 index 1번을 넘어가 거나 스트링에 문자가 연속으로 나오면 필터링을 해주는 것 같습니다. (참고로 한글을 넣으면 그대로 출력됩니다)

따라서 연속으로 나오는 문자열을 필터링해주는 것을 우회해주면 풀리겠구나 했습니다.

처음에 문자열 사이에 띄어쓰기를 해봤습니다.


a l e r t(1); 이 왜 나왔는지는 모르겠지만 당연히 이 방법은 아닌 것 같네요

URL+된 것을 보고 저번에 했던 것처럼 URL인코딩을 이용해 봤습니다. URL인코딩 표를 보고 문자를 다 인코딩했습니다.

<%73%63%72%69%70%74>%61%6C%65%72%74(1);</%73%63%72%69%70%74>


방식을 잘못 이해한 거 같네요 ;; %%25로 인코딩되어 버립니다.

이걸 URL넣어봤습니다.


스크립트 문이 그대로 들어가네요. 생각해보니까 디코딩되서 문자열로 만들어지면 다시 필터링이 되겠네요…..

다시 문자열 사이에 공백 같은 값을 넣어주는 쪽으로 전환해서 %0a를 이용해

<%00s%00c%00r%00i%00p%00t%00>%00a%00l%00e%00r%00t%00(1);<%00/%00s%00 c%00r%00i%00p%00t%00> 를 넣어봤습니다.


다 띄어쓰기가 되고 풀리지는 않습니다

띄어쓰기말고 문자열 우회하는 방법을 찾아보니까 NULL문자를 사이사이에 넣는 방법이 있습니다. 그걸 인코딩 해서  %00을 넣어봤습니다.

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

 


Congratulation! 해줍니다!


728x90
반응형

'Security > 웹 해킹' 카테고리의 다른 글

SQL 인젝션  (0) 2019.01.14
Webhacking.kr 18번  (0) 2019.01.10
XSS  (0) 2019.01.10
댓글