1. XSS - DOM 이란?
1. XSS 란?
악의적인 사용자가 공격하려는 사이트에 악성 스크립트를 주입하는 행위이다. 공격에 성공하게 되면 사이트에 접속한 사용자는 악성 스크립트를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등 민감한 정보를 탈취할 수 있는 위험한 취약점에 해당한다.
2. DOM 기반
피해자의 브라우저에서 *DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS(Cross Site Scripting) 공격에 해당한다. 즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행되는 공격에 해당한다.
※ DOM 이란?
- DOM(문서객체모델 The Document Object Model) :HTML 및 XML 문서의 프로그래밍 인터페이스로, 웹 페이지에 대한 동적 조작과 상호작용을 가능케 하는 모델이다. 이를 통해 JavaScript와 같은 스크립트 언어를 사용하여 웹 페이지의 내용, 구조, 스타일을 다양하게 읽고 변경할 수 있다. DOM은 웹 페이지를 동적으로 조작하는 데에 주로 활용되며, 다양한 프로그램이 웹 콘텐츠를 프로그래밍적으로 다룰 수 있도록 하는 중요한 역할을 한다.
2. low 단계

- 해당 페이지의 SELECT 버튼을 누르면 선택한 파라미터 값이 전송되는 것을 확인가능하다.

- 해당 페이지의 소스코드를 확인해 본 결과 SELECT 버튼을 누르면 전송되는 파라미터 값이 script언어를 사용되는 것으로 DOM형식인 것으로 판단할 수 있다.

- 파라미터값 대신 Alert를 띄우는 임의의 스크립트문을 삽입한 결과 아무런 필터 없이 작동하는 것을 확인할 수 있다.
3. medium 단계
- 기존의 low 단계에서 사용한 방법으로 적용해 봤으나 필터가 있어서 그런지 작동되지 않았다.
- 아마 script라는 단어에 대한 필터가 있을것으로 확인이 된다.
- 그렇기에 img 태그를 사용후 onerror를 이용하여 띄우기로 하였다.

- 삽입한 결과 파라미터 값이 이렇게 삽입되는 것으로 확인이 되었다.
- 분석해본 결과 option 태그와 select 태그에서 나와서 img 태그를 이용하여야 된다고 판단이 되었다.

</option></select><img src="임의의 이미지" onerror="alert(123)">
- 위 코드를 삽입한다.

- xss가 먹히는 것을 확인할 수 있다.
4. high 단계
- high단계는 인터넷 참고하여 풀었기 때문에 소스코드부터 분석해 보겠다.

- 분석해 본 결과 switch - case 문을 사용하여 French, English, German, Spanish만 받고 없다면 default 값인 english로 설정한다는 것 같다.
- 아래 출처에 담긴 사이트를 참조한 결과 #을 사용하면 된다고 한다.
※ 파라미터의 #이란?
#은 fragment라고 불리며 웹브라우저에서만 실행되며 서버 측 언어에서는 #이후 부분에 직접적으로 접근할 수 없다.

- fragment인 #을 이용하여 삽입하였다.

- 삽입한 결과를 서버 측에 어떻게 넘어가는지 확인하고 싶어서 burp suite로 패킷을 잡아본 결과 #이후의 파라미터는 적용되지 않았다.

- xss가 사용되는 것을 알 수 있다.
- 이를 통해 #이라는 존재를 알 수 있게 되었다.
5. 대응방안
- 입력값 제한 : 입력값을 제한하여 스크립트를 삽입하지 못하도록 한다.
- 입력 값 치환 : 스크립트문 사용에 태그가 사용되기 때문에 태그문자 <>를 치환한다.
- HTML 태그 사용해야할 블랙리스트 방식으로 입력 값 검증 필터링 (태그 관련)
- 웹방화벽 사용 (WAF, Web Application Firewall)를 사용하여 비정상적인 데이터 전송 차단
출처
DOM
[공부] DOM (The Document Object Model) 및 관련 개념 정리
* 개인적인 공부 내용을 기록한 글입니다. 사담 뭔가를 '두루뭉술'하게 알고 있다는 사실 만큼 자신감을 깎는 것도 없을 것 같다. 들으면 대충 뭔지는 아는데... 일목요연하게 설명은 못하겠고...
www.cho-log.io
HIGH단계
https://seomj74.tistory.com/177
[DVWA] DOM Based XSS
DOM based XSS Low view source) Step 1) 아무 값이나 입력 url의 내용을 추출한 뒤 decode하여 html에 write Step 2) url에 스크립트 구문 삽입 Step 3) 스크립트 구문으로 인식된 것을 확인 Medium view source) stripos()를
seomj74.tistory.com
'DVWA' 카테고리의 다른 글
DVWA실습 (XSS-Stored) (0) | 2023.12.05 |
---|---|
DVWA실습(XSS-Reflected) (0) | 2023.12.05 |
DVWA실습 (File Inclusion) (0) | 2023.12.03 |
DVWA 실습(File Upload - Hard) (0) | 2023.12.01 |
DVWA 실습 (File Upload - Medium) (0) | 2023.12.01 |