minhui study

Webhacking.kr 23번 본문

Hacking/Webhacking.kr

Webhacking.kr 23번

minhui 2020. 2. 18. 20:53

Challenge 23 - 200Points :: XSS

 

23은 xss와 관련된 문제이므로 문제를 풀기 전에 xss에 대해 정리를 해보았다.

 

XSS(Cross Site Scripting) 이란?

 

- Injection 공격으로, 웹사이트보안이 취약한 부분에 HTML 또는 자바스크립트 코드를 삽입하여 피해자 PC의 정보를 빼간다.

 

- XSS를 방어하기 어려운 이유는 브라우저가 자바스크립트코드를 실행할 수 있고, 사용자들이 브라우저로 신뢰하고 있는 웹사이트를 돌아다닐 때 해당 페이지에서 악의적인 코드가 문제없이 실행될 수 있기 때문이다.

 

- XSS공격은 피해자PC의 브라우저에서 공격자에 의해 스크립트를 실행시켜 사용자 세션을 탈취할 수 있게 만들고, 웹사이트를 변조시켜 악성 사이트로 리다이렉션할 수 있도록 만든다.

 

- XSS 공격을 막기위해, 웹 페이지 입력폼에서 올바른 유효성 검사 또는 필터링 처리 기능을 추가하고, 신뢰할 수 없는 데이터를 포함하지 않아야한다.

 

문제 화면을 보니 <script>alert(1);</script>를 삽입하면 풀리는 문제 같다.

하지만 위의 문구를 그대로 입력해보면 다음과 no hack이라고 뜬다.

왜 안 먹히는지 자세하게 알기 위해 한글자씩 입력해보았다.

그 결과 일단 특수문자 < / ( 은 걸리지 않았다.

no hack이 뜨는 경우는 s, c같이 문자 한 개가 아닌 sc같이 문자 두개 이상의 문자들을 연속해서 붙어있는 문자열을 입력했을 때였다. 그리고 숫자나 특수문자, 한글은 필터링이 되고 있는 것 같지 않았다. 이를 통해 연속으로 나오는 문자열(영어)을 필터링해주는 것을 우회해주면 풀릴 것이라는 생각을 할 수 있었다.

 

*NULL byte injection이란?

 

널바이트 인젝션이란 널 문자열을 삽입하여 의도하지 않은 동작을 시키는 것이다.

C언어나 C++언어처럼 문자열을 저장할 때 마지막에 널(\0)문자를 삽입하고 출력할 때는 널문자열이 있는 곳까지만 출력하고 \0 문자를 만나면 문자가 끝난 것으로 간주한다.

널 바이트 인젝션이란 이 널 문자를 url 파라미터에 삽입하는 공격인데 url은 url 인코딩을 사용한다.

퍼센트 인코딩이라고도 하는데 이 인코딩 방법에서 \0 문자는 %00이 된다. 따라사 다음 섹션과 같이 파라미터 사이에 %00을 삽입하여 공격을 수행한다.

 

Null byte injection을 이용한다면 null 의 특성때문에 각각의 자리에서 문자열이 끊길 것이고 그렇기때문에 우회가 가능 할 것으로 보인다. 다음과 같이 입력하게 되면 1알림창이 뜨면서 문제가 해결된다.

 

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

 

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

[ Wargame.kr ] md5 password  (0) 2020.03.22
Webhacking.kr 6번  (0) 2020.03.02
Webhacking.kr 58번  (0) 2020.02.18
Webhacking.kr 47번  (0) 2020.02.16
Webhacking.kr 32번  (0) 2020.02.15
Comments