[웹모의해킹] 7. XSS(Relected,Stored)
1. Reflected XSS
1. 정의
- 일회성의 HTTP Request와 Response로 이루어진 공격
- 공격자가 악의적인 스크립트를 작성 하고 작성 후 웹 서버 측에 요청시 웹 응용 프로그램에서 피해자의 브라우저로 반사될 때 발생
일회성이며, 지속적이지 않음.
이메일 또는 웹사이트 등을 통해 공격자가 미리 준비한 링크를 사용자가 클릭하게끔 유도하는 방식
2. 실습
what's your name? 뒤에 dvwa를 넣게 되면 주소창에 dvwa가 그대로 출력됩니다.
what's your name? 뒤에 alert 스크립트를 작성하여 alert창이 뜨게 할 수 있습니다.
alert창이 나옵니다.
a태그를 활용하여 페이지 내에 링크를 사용할 수 있습니다.
하단의 링크를 클릭하면 잘 나옵니다.
cookie값을 나오게 합니다.
document.location을 이용하여 지정한 위치로 리다이렉트시키는 스크립트입니다.
실제 상황에서 공격자는 더 정교한 자바스크립트를 사용하여 사용자가 눈치채지 못하도록 진짜같은 웹페이지를 만듦니다
- 로그 파일 모니터링 명령어 - tail -f /var/log/apache2/access.log 로 접근로그의 쿠키를 확인합니다.
2.XSS(Stored)
1. 정의
스크립트 코드가 서버에 저장된 다음에 실행됩니다.
방문할 때마다 지속적으로 실행됩니다.
2.Stored vs Reflected XSS
신뢰하지 못하는 데이터가 사용되는 곳
Stored vs Reflected의 성공적인 공격에만 영향을 미칩니다.
취약성이나 방어에는 영향을 미치지 않습니다.
(출처 : https://owasp.org/www-community/Types_of_Cross-Site_Scripting)
3. 실습
alert을 이용하여 쿠키값을 출력할 수 있습니다.
이번에는 다른 스크립트를 삽입하겠습니다.
그러나 여기에 스크립트 삽입을 방지하려고 dvwa에서 maxlength를 50으로 설정해 두었습니다.[개발자도구 F12활용]
50을 100으로 변경하고 저장하고 스크립트를 삽입했습니다.
새로고침하면 이 화면이 실행됩니다.
4. XSS 대응방안
1. 중요한 정보를 쿠키에 저장하지 않는다. 관리자는 사용자를 식별해야 하기에 쿠키에 사용자의 정보를 저장하는데 이를 쿠키에 넣지 않아야 한다.
2. 두번째로 스크립트 코드에 사용되는 특수문자에 대해 정확히 필터링을 해야한다. 사용자가 입력할 수 있는 문자만 빼고 필터링을 한다.
3. 게시판에서 HTML 포맷의 입력을 할 수 없도록 한다.
4. 관리자나 개발자가 주기적으로 점검을 해야한다.
5. 콘텐츠 보안 정책 : CSP(콘텐츠 보안 정책)을 사용하여 발생하는 XSS 취약성의 심각도를 줄일 수 있습니다.
6. 적절한 응답 헤더를 사용 : HTML 또는 JavaScript를 포함하지 않는 HTTP 응답에서 XSS 를 방지하려면, Content-Type 및 X-content-Type-options 헤더를 사용하여 브라우저 브라우저가 원하는 방식으로 응답을 해석하도록 할 수 있음.
더많은 방법 참고
https://portswigger.net/web-security/cross-site-scripting/preventing