사전 지식
XSS(Cross Site Scripting)
취약한 웹 사이트(게시판, 웹 메일 등)에 악성 스크립트 코드를 삽입하여 개발자가 고려하지 않은 기능을 작동하게 하는 공격을 말한다. OWASP TOP 10에 올라가 있는 공격으로 큰 위험요소 중 하나이다.
웹 언어 중 하나인 CSS와 약자가 같아 XSS라고 되었다.
Dom based XSS
피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 것을 공격 방법을 말한다. 페이지 자체는 변하지 않지만, 페이지에 포함된 브라우저 측 코드가 DOM 환경에서 악성 코드로 실행된다. 즉, DOM Based XSS는 서버까지 가지 않고 브라우저에서만 발생한다.
실습
소스 코드에서 파란 박스 부분을 보면 stripos 함수로 ‘<script’ 문구를 필터링 해주어 거짓이 아니면 영어로 값을 설정해주게 되어있다. 필터링 문구를 적게 되면 0이 나올 수 없기때문에 스크립트 태그를 우회해서 사용할 수 없다.
< stripos 함수 >
대상 문자열을 앞에서 부터 검색하여 찾고자 하는 문자열이 몇 번째 위치에 있는지를
리턴하는 함수로 대소문자를 구별하지 않는다.
즉, <script의 문자열이 들어있으면 위치를 리턴해주기 때문에 숫자가 들어가므로 true가 된다. 거짓이 아니기 때문에 if문 두 번째 줄이 실행되어 디폴트값으로 <script가 들어간 문자열이 아닌 default로 English가 들어간 URL로 변경이 된다.
👇
stripos 필터링 함수는 <script> 태그만 필터링 해주었기 때문에 다른 태그를 이용해 공격이 가능하다.
</select><img src=“” onerror=alert(document.cookie)>
하여 img 태그를 통해 공격을 시도하면 된다.
공격을 시도했더니 값이 성공적으로 뜨는 것을 볼 수 있다.
이미지 태그 앞에 </select>를 써주는 이유는 select 문을 닫고 빠져나와야 해당 태그 밖에서 이미지 태그를 성공적으로 실행할 수 있기 때문이다. 실행 후 코드를 보니 select 태그가 닫히고 그 뒤에 이미지 태그가 쓰여있는 것을 볼 수 있다.
공격 성공!
보안 방안
- 외부 입력값이나 출력값에 스트립트가 삽입되지 못하도록 문자열 치환 함수를 사용하여 스크립트에 자주 사용하는 특수문자나 태그를 치환해준다.
- 크로스 사이트 스크립트 방지 라이브러리를 활용한다.
- HTML 태그를 허용하는 게시판에서는 허용되는 HTML 태크 리스트를 만들어 해당 태그만 지원하도록 한다.
'Web > DVWA' 카테고리의 다른 글
DVWA Reflected Cross Site Scripting (XSS) high/impossible level (0) | 2021.07.28 |
---|---|
DVWA Reflected Cross Site Scripting (XSS) medium level (0) | 2021.07.28 |
DVWA Reflected Cross Site Scripting (XSS) low level (0) | 2021.07.28 |
DVWA Dom based Cross Site Scripting (XSS) high/impossible level (0) | 2021.07.28 |
DVWA Dom based Cross Site Scripting (XSS) low level (0) | 2021.07.28 |