도카이트

[DVWA] DOM-Based XSS (Medium) 본문

Web/DVWA

[DVWA] DOM-Based XSS (Medium)

dodoh4t 2022. 5. 26. 23:37
728x90
반응형

XSS (Cross Site Scripting)

악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면

사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나

쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

 

 

DOM-based XSS

악성 스크립트가 URL Fragment에 삽입되는 XSS

Fragment는 서버 요청 / 응답에 포함되지 않는다.

 

페이지 화면

[DVWA - XSS(DOM)]

- 바로 소스코드를 살펴보러 가자!

 

 

소스코드

[DVWA - XSS(DOM)]

- stripos 함수를 통해서 <script 문자열에 대한 검증을 하고 있다.

- default 파라미터 값으로 <script 를 포함하여 XSS를 시도할 경우 header 함수를 이용하여

  default의 파라미터 값을 English로 Redirection 시키는 듯하다.

- stripos 함수를 우회하여 JavaScript 구문을 실행시켜 XSS 공격을 성공시키면 되는 문제인듯 하다.

 

 

<script> 태그를 이용한 alert() 실행 시도

[<script> 태그 필터링으로 인한 XSS 실패]

- 진짜 어림도 없이 바로 default=English 로 막혀버렸다..

- 이를 우회할 수 있는 여러 가지 방법을 시도해보아야겠다..

 

 

사실 stripos 함수를 우회하기 위해서 …

 

  1. 대문자를 섞어서 <ScRiPt> 와 같은 식으로 스크립트 삽입
  2. %20 을 혼용한 스크립트 삽입
  3. str_replace 함수 우회 방법과 동일하게 <scr<scriptipt> 와 같은 식으로 스크립트 삽입

 

등의 방법들로 공격을 시도해보았지만 모조리 막혀버렸다 .. !

stripos 함수의 경우 문자열을 검색하여 찾고하는 문자열의 위치를 리턴하는 함수이다.

또한, 영문자의 대소문자를 구별하지 않으므로 <ScRiPt>와 같은 스크립트 마저도 방어가 된다.

 

따라서.. 생각해보다가 문득 생각난 방법이 있는데 …

JavaScript는 <script> 태그를 통해서 보통 선언하고 실행할 수 있지만, <script> 태그 이외에도

JavaScript를 실행시킬 수 있는 방법은 다양하다 !! 그 중 내가 즐겨 사용하는 ..

 

<img src=#>를 작성하고, 그 뒤 이벤트로 onerror 속성을 작성해주는 것이다 !!

onerror에 alert() 을 삽입하여 스크립트를 작성해주면 이 전 XSS 실습과 동일하게 경고창을

출력할 수 있을 것이다 !! 그럼 바로 시도해보자 !!

 

 

 

img 태그를 이용한 XSS 시도

[<img> 태그를 이용한 XSS]

- default=English로 Redirection 되는 것은 피했으나… 아무 반응이 없다..?

- 어찌된 영문인지 한참 고민하면서 문제 화면을 계속 쳐다보고 멍때렸다…

- 그러다가.. 현재 페이지에 언어를 선택할 수 있도록 <option> 태그를 사용한 것을 깨달았고..

- <option> 태그에서 선택 값으로 지정하는 <select> 태그에는 텍스트만 삽입이 가능하다.

- 따라서 파라미터를 변조하여 <img> 태그를 구현시키기 위해서는 …

- </option>과 </select>로 해당 태그들을 강제로 닫은 후, <img> 태그를 넣어줘야 한다.

 

 

진짜 가슴이 웅장해지는 순간이다…. 당장 시도해보러 달려가보자 !!!

 

 

닫는 태그 삽입 후 <img> 태그와 onerror 이벤트를 이용한 XSS

[XSS 공격 성공 후 화면]

- 공격에 사용한 스크립트는 다음과 같다.

- </option></select><img src=# onerror=”alert(’XSS’)”>

- 강제로 태그를 닫은 후 <img> 태그 뒤의 onerror 이벤트가 정상적으로 실행되었다 !

- alert 출력 후 화면을 살펴보면 select 박스를 빠져나와 image가 삽입된 것을 확인할 수 있다.

728x90

'Web > DVWA' 카테고리의 다른 글

[DVWA] Stored XSS (Medium)  (0) 2022.05.27
[DVWA] Reflected XSS (Medium)  (0) 2022.05.27
[DVWA] Weak Session IDs (Medium)  (0) 2022.05.26
[DVWA] Blind SQL Injection (Medium)  (0) 2022.05.26
[DVWA] SQL Injection (Medium)  (0) 2022.05.26
Comments