본문 바로가기

Web/DVWA

DVWA Reflected Cross Site Scripting (XSS) low level

사전 지식 

XSS(Cross Site Scripting)


취약한 웹 사이트(게시판, 웹 메일 등)에 악성 스크립트 코드를 삽입하여 개발자가 고려하지 않은 기능을 작동하게 하는 공격을 말한다. OWASP TOP 10에 올라가 있는 공격으로 큰 위험요소 중 하나이다.
웹 언어 중 하나인 CSS와 약자가 같아 XSS라고 되었다.

Reflected XSS


웹 애플리케이션의 지정된 변수를 이용할 때 발생하는 취약점을 이용한 것이다. 검색 결과, 에러 메시지 등 서버가 외부에서 입력받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입력되는 변수의 위험한 문자를 사용자에게 그대로 돌려주면서 발생하는 공격이다. 공격 과정은 다음과 같다.

 

➀ XSS 공격에 취약한 웹 사이트인 것을 확인하고, 정보를 획득할 수 있는 악성 URL을 생성한다.
➁ 공격용 악성 URL을 생성하고 해당 URL을 사용자에게 노출 시키거나 이메일에 포함해 보낸다.
➂ 피해자가 URL을 클릭하면 웹 사이트 서버에 스크립트가 포함된 URL 요청을 보낸다.
➃ 웹서버가 해당 스크립트를 포함하여 응답을 전송해 피해자에게 공격 스크립트가 반사되어 중요한 정보가 공격자에게 전송된다.

 

실습 


정상적으로 제출을 한 번 해보면 사진과 같은 형식으로 쿼리가 써지는 것을 알 수 있다.

 

alert(document.cookie)
해당 문구는 쿠키를 보여주는 경고창으로 스크립트를 이용해 출력되게 하면 된다.

name 뒷 부분에 해당 문장을 써주면 세션 값이 출력된다

 

view sorce로 코드를 보면 입력창에 name을 입력해주면 echo로 Hello [입력값] 으로 출력된다는 것을 알 수 있다. name 부분에 세션 값을 출력하는 스크립트를 썼는데 Hello가 화면에 출력된다. 해당 코드는 공격자가 비정상적인 값을 입력해도 값을 돌려준다는 것을 알 수 있다.

 

공격 성공!


 보안 방안 

  • 외부 입력값이나 출력값에 스트립트가 삽입되지 못하도록 문자열 치환 함수를 사용하여 스크립트에 자주 사용하는 특수문자나 태그를 치환해준다.
  • 크로스 사이트 스크립트 방지 라이브러리를 활용한다.
  • HTML 태그를 허용하는 게시판에서는 허용되는 HTML 태크 리스트를 만들어 해당 태그만 지원하도록 한다.