[WARGAME] DVWA write-up/ DOM XSS/ medium

jckim22·2022년 10월 29일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
40/114

/*

웹서버 환경: Window 10

공격 클라이언트 환경: Kali linux (VMware 구동)

*/

low풀이
https://velog.io/@jckim22/%EB%B9%A1%EA%B3%B5%ED%8C%9F-5%EC%A3%BC%EC%B0%A8-%EA%B3%BC%EC%A0%9C-10-DVWA-write-up-WeakSessionIDs-row-qx4x69mm

DOM이 무엇인지 그것을 이용한 DOM XSS 취약점은 무엇지에 대한 설명은 low풀이에 있다.

이번 문제에서도 low와의 차이점을 알기 위해서 low 때 썼던 악성 url을 그대로 가져왔다.

http://192.168.11.1/dvwa/vulnerabilities/xss_d/?default=#%3Cscript%3Ealert(document.cookie)%3C/script%3E

바로 이 url인데 보면 #뒤에 스크립트 코드가 있다.

DOMXSS는 이런식으로 동작할 것이다.
1.#뒤에는 잘리기 때문에 브라우저는 #뒤에 부분까지 정상적으로 서버에 html 문서를 요청할 것이다.
2.서버는 정상적인 html 문서를 보내줄 것이다.
3.브라우저가 정상적인 html을 랜더링하는 와중에 url에 있는 악성 스크립트를 가져와 실행할 것이다.

이렇게 보면 달라진 서버 코드로는 이 url의 공격을 막을 수 없을 것 같다.
왜냐하면 애초에 서버에는 정상적인 요청과 응답만 왔다갔다 하기 때문이다.

그래서 url을 medium레벨에서 입력해보았다.


너무나도 잘 실행되었다.
서버 코드와 관련 없이 브라우저 내 html 코드에 수정이 있었어야 했을 것이라고 생각했는데 혹시 php코드만 바뀌었나 해서 코드를 보았다.
코드는 아래와 같다.

<?php
// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}
?>

보니까 서버 측에서 <script를 대소문자 상관없이 필터링하고 있었다.
하지만 나는 서버쪽에 정상적인 요청만 보냈으니 당연히 우회가 될 수 밖에 없었다.
아마 전에 low레벨에서는 #없이 그냥 url에 스크립트 코드만 삽입하여 공격하는 것을 생각했었나보다.

그래도 문제에서 원하는 <script는 사용하지 않고 다시 풀어보았다.
생각나는 것은 img태그의 onerror 속성이다.
onerror는 img태그에서 오류가 발생했을 때 자바 스크립트로 다른 이미지를 불러올 수 있는 속성이다.
이것을 악용하면 악성 스크립트 코드를 실행할 수 있다.

아래 소스코드를 보자.

소스코드를 보면 selcect문 안에 <script>와 </option> 이 있다.
우리는 default 값 바로 옆에 코드를 삽입할 것이기 때문에 default값이 English라고 하면 그 바로 오른쪽을 봐야한다.
option을 닫아주고 script도 닫아주고 select도 닫아 준뒤 img태그를 실행하면 성공적으로 실행될 것이다.

</option></script></select><\img src = "" onerror=악성스크립트>
대충 이렇게 하면 된다.

그리고 아래는 완성된 공격 url이다.

http://192.168.5.1/dvwa/vulnerabilities/xss_d/?default=English#%3C/option%3E%3C/script%3E%3C/select%3E%3Cimg%20src='x'%20onerror='alert%20(document.cookie)'%3E

img 불러오는 것을 실패했다면 alert로 document.cookie를 보여달라는 코드이다.

이제 이것을 사용자에게 메일로 보내보자.
칼리 리눅스에서 메일을 보냈다.

메일을 받은 윈도우 사용자는 Naver를 click하라는 말에 혹해 url을 클릭하게 된다.

그렇게 되면 아래처럼 스크립트가 실행되게 된다.

만약 이것이 그저 쿠키를 보여달라는 것이 아니라 쿠키를 탈취할 수 있는 코드였다면 바로 해킹을 당할 위험이 있는 것이다.

profile
개발/보안

0개의 댓글