클라이언트 사이드 취약점들은 본인을 식별하기 위한 사용자 정보,
즉 쿠키에 저장된 세션 아이디 탈취해 사용자 권한을 얻거나
사용자의 브라우저에서 자바스크립트를 실행하여 사용자가 보낸 것처럼
요청을 전송하는 것을 주 목적으로 합니다.
# Keyword
- Same Orgin Policy(SOP)
: scheme, host, port의 구성 요소를 가지며 모두 같은 값을 가지고 있다면 동일한 오리진(Origin)이라고 합니다.
# Content
1. Cross Site Scription (XSS)
: 공격자의 입력값이 크로스 사이트의 자바스크립트 일부로 웹 브라우저에서 실행되는 취약점
실행된 스크립트는 해당 사이트의 일부가 되어 SOP 제약 없이 사이트의 구조를 변경하거나
임의 HTTP 요청을 보낼 수 있습니다.
조건
- 입력한 데이터가 충분한 검증 과정이 이루어지지 않아 악성 스크립트가 삽입될 수 있어야 합니다.
- 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야 합니다.
- 응답 데이터 출력 시 악성 스크립트가 웹 브라우저의 렌더링 과정에 성공적으로 포함되어야 합니다.
분류
1) Stored XSS
: 공격 스크립트가 서버 내에 존재하는 데이터베이스 또는 파일 등의 형태로 저장되어 있다가 사용자가 저장된 공격 스크립트를 조회하는 순간 발생
주로 게시글에 스크립트를 작성해두고 다른 사용자가 게시글을 읽으면 실행
2) Reflected XSS
: 사용자의 요청 데이터가 서버의 응답에 포함되는 과정에서 HTML 등의 공격 스크립트가 그대로 출력되어 발생
아래는 방어 기술의 종류들입니다.
방어
1. Server-side Mitigations
2. HTTPOnly 플래그 사용
3. Content Security Policy 사용
4. X-XSS-Protection
2. Cross Site Request Forgery (CSRF)
: 비 정상적으로 사용자의 의도와 무관하게 HTTP 요청을 보내는 것.
Simple Request나 HTML 엘리먼트면 SOP의 제약을 받지 않는 다는 점을 이용합니다.
조건
- 해당 웹 사이트가 쿠키를 이용한 인증 방식을 사용해야 합니다.
( 모든 HTTP 전송엔 쿠키가 함께 전송되기 때문에 쿠키에 저장된 세션 아이디도 전송 )
- 공격자가 사전에 알 수 없는 파라미터가 존재해서는 안됩니다.
( 자동입력 방지 문자를 넣어야 하는 요청 )
( 패스워드 변경 기능에서 기존 패스워드를 입력 받는 요청 )
방어
- 세션 쿠키 대신 커스텀 헤더를 사용하여 사용자 인증
- 공격자가 예측할 수 없는 파라미터 추가 및 검증
( CSRF Token , CAPTCHA )
3. Open Redirect
: Redirect 기능을 악용해 피싱사이트로 접속을 유도하거나, 다른 취약점을 연계하여 사용자를 공격할 수 있습니다.
* Redirect(리다이렉트)는 사용자의 Location(위치)를 이동 시키기 위해 사용하는 기능 중 하나 입니다.
방어
- 리다이렉트 기능 구현 시 이동을 허용할 주소들에 대해서만 이동
- 서버에서 해당 링크에 대한 검증을 거친 후 사용자에게 배포
4. Click Hijacking
: 공격자가 생성한 버튼, 이미지와 같은 엘리먼트를 정상적인iframe위에 겹쳐 올려 UI를 스푸핑해 사용자 의도와는 다른 작업을 수행하게 하는 취약점입니다.
방어
부모 페이지의 URL을 제한하는 방식으로 클릭재킹을 방어
# Advanced
1. 대소문자 구분을 하지 않을 시 우회
<sCRipT>alert(document.cookie)</scriPT>
2. src 속성을 이용하여 데이터 입력
<sCrIpt src=data:,alert(document.cookie)></SCRipt>
3. base64 인코딩을 통해 우회
<sCrIpt src=data:;base64,YWxlcnQgKGRvY3VtZW50LmNvb2tpZSk7></SCRipt>
4. 멀티라인 미검증시 우회
<img src=""
onerror = alert(documentcookie) />
5. 다른 태그를 이용해 우회
<video><source onerror=alert(document.cookie) /></video>
6. on, script 필터링 우회
<iframe srcdoc='<img src=about: onerror=parent.alert(document.domain)>'></iframe>
7. 자바스크립트 기능 를 이용한 필터링 우회
this['al'+'ert'](this['docu'+'ment']['coo'+'kie']);
this['al'+'ert']((({'\u0063ookie':x})=>x)(self['\x64ocument']))
Boolean[atob('Y29uc3RydWN0b3I')](atob('YWxlcnQoZG9jdW1lbnQuY29va2llKQ'))();
=> alert(document.cookie);
'Web Hacking > Study Notes' 카테고리의 다른 글
[ Web ] SQL Injection (0) | 2020.08.03 |
---|---|
[ Web ] Server-side Basic (0) | 2020.08.01 |
[ Web ] Introduction of Webhacking (0) | 2020.07.30 |
[ CSS ] NOTEPAD (0) | 2019.09.17 |