[어설픈] webhacking.kr 23번 문제풀이

2019. 1. 7. 23:06Web Hacking/Webhacking.kr



안녕하세요!


오늘은 100점 보단 좀 더

어려운 200점짜리의

23번 문제풀이를 

하겠습니다!!


먼저 23번 문제를 클릭해서 들어가니 

아래와 같이 뜨는군요!


직관적으로 문제풀이에 대한

힌트를 잘 제시해주네요!


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

= 너의 미션은 <script> alert(1);</script>을 주입하는 것이다!


<script></script> 이거는 xss 공격이죠!

정식명칭은

 cross-site scripting이라고 부릅니다!




자 그래서 일단 무식하게 

저기 적힌 그대로 

 입력하고 

제출을 해봤습니다!


그랬더니 no hack! 이라고

뜨네요!


분명히 어디를 필터링 한건데....

흠... 어디를 한거지???


그래서 하나씩 입력해봤습니다!

<script>에서 

< 부터 입력해봤습니다


어? 그대로 입력됩니다

필터링 안된거죠



솔직히 <가 필터링 안됐으면

눈치가 빠르면 >를 입력 안해보고도

>이 필터링 안됐다는 걸

알 수 있습니다!


하지만 혹시 몰라서 

>도 입력해봤습니다!


역시 예상대로 필터링 안됐네요!



자 그래서 이제 script 단어가 

필터링 됐나 확인해 봤습니다!

제출을 해보니


필터링이 됐네요...


나머지  ( , ) , ; 3 가지 문자는

그냥 한꺼번에 입력해 봤습니다!


그랬더니 저 3 문자들은 모두 필터링이 안됐네요!


그래서 마지막으로

alert을 입력해봤습니다!


그랬는데 alert역시 

필터링이 됐군요!






이로써 저희가 알 수 있는 것은

필터링 된 것이 

script와 alert

이라는 것입니다!


그러면 이를 어떻게 우회할 것이냐?


솔루션을 생각해야겠죠!


인터넷에서 

검색해보면 xss를 우회하는

방법은 여러가지가 

나옵니다!


그중에서 제가 제일 먼저했던게,

script 단어자체가 검출되면

script이 없어지는줄 알고


scscriptript를 입력해 보았습니다!

이렇게 되면 script이 공백으로 사라지고

script이 남아서 혹시나 우회가 되나 해서요!


근데 이것도 막혔더라구요!


그래서 생각을 한게...

음 그러면 제가 배웠던 

그리고 공부했던 기술중에


필터링을 우회 할 수 있는 건

필터링 함수가 못알아보도록

같은 값을 인코딩(암호화)밖에 없는데....


근데 이런 생각을 하다가!

제가 지난번 password.php 문제 풀때도

php가 GET방식으로 받았었는데?


여기도 보니 GET방식으로 받는 걸 보고

똑같이 NULLBYTE 인젝션 하면 되겠구나!

라고 생각을 했습니다! 


근데 여기서는 널바이트를 좀 다르게 

적용해야 합니다!


여기서는 script자체를 제대로 인식못하게

script의 모든 문자 사이에 %00를 입력하면

됩니다!


그렇게 되면 php에서 필터링 함수가 script로 제대로 인식을

못하겠죠?

NullByte가 각각 문자 사이마다 있으니 

말이죠!


즉 <s%00c%00r%00i%00p%00t>

이렇게 입력을 한다는 뜻인데요!


사실 이렇게 널바이트 많이 안써도 되긴해요!

저는 혹시 몰라서 모든 문자 사이에 넣은거구요!


<s%00cript>이렇게 입력해도 똑같이 인식을

제대로 못해요!


근데 저는 그냥 하는김에 모든 것을 

url인코딩을 하였습니다!


그래서 아래와 같이 적었습니다!







그래서 위의 주소창에 입력을 하니 저렇게 뜨네요!

url 인코딩한 것들이 널바이트 말고

모두 디코드 됐네요!


그리고 바로 문제가 풀렸습니다!


생각보다 간단한 문제였습니다!


이렇게 xss의 경우 

우회 할 수 있는 트릭중에

무엇을 적용할지 잘 고민해보면

풀리는 문제였습니다.


고생하셨습니다!