반응형
정의
사이트 간 스크립팅 (Cross-site scripting)
- 웹 상에서 가장 기초적인 취약점 공격 방법중 하나
- 권한이 없는 사용자가 악의적인 용도로 웹 사이트에 스크립트를 삽입하는 공격 기법입니다. 대표적인 클라이언트 측 코드를 삽입하는 공격이기도 합니다.
취약점 발생 지점 리스트
- Stored XSS: 게시글 작성공간, 제목, 내용, 작성자 등
- Reflected XSS: 피라미터를 입력받는 get방식 요청(post방식을 get방식으로 바꿔도 아무 문제없는곳)
- DOM XSS: 프레그먼트를 사용해서 데이터를 받는 모든 페이지
취약점 검증 방법
- Stored XSS - 게시글에 자바 스크립트 작성: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
- Form URL: 게시글작성 페이지
- Process URL: 게시글 작성을 확인하는 페이지(피라미터)
- View URL: 게시글을 보는 페이지
<script>alert(document.cookie)</script>
<script>리다이렉트</script>
<span id="date"><?php echo date("Y-m-d"); ?></span>
- Reflected XSS - 링크의 피라미터에 스크립트를 담아서 실행: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
<http://example.com/search?query=>alert(1)
- DOM XSS - 프레그먼트를 사용하는 웹페이지에 스크립트를 추가: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
<http://example.com/#>alert(1)
사회공학기법
상대방의 쿠키, 아이디, 비밀번호등을 보내주는 링크나 게시글에 입력하도록 유도하여 그 정보를 탈취하는 사회공학기법입니다.
SQLi Vs. XSS
SQL Injection은 서버를 공격하는 기법이고, XSS는 사용자를 공격하는 기법이라는 차이가 있습니다.
종류
- Stored XSS (저장형 XSS): 악성 스크립트가 서버에 저장되어, 해당 페이지를 방문하는 모든 사용자에게 전달되는 형태입니다.
- Reflected XSS (반사형 XSS): 악성 스크립트가 사용자로부터 입력받은 값에 포함되어, 해당 페이지를 요청한 사용자에게만 전달되는 형태입니다.
- DOM-based XSS (DOM 기반 XSS): 악성 스크립트가 웹 페이지의 동적인 DOM(Document Object Model) 구조를 조작하여 실행되는 형태입니다.
공격법
공격 시나리오
- http 메서드가 post오는 요청을 확인합니다.
- response된 결과에 post에 넣은 데이터(피라미터)가 똑같이 들어가 있는지 확인합니다.
- post요청을 get요청으로 변경해도 요청이 제대로 처리되는지 확인합니다.
- get방식이므로, 피라미터를 변경해서 스크립트가 들어갈수 있는지 확인합니다.
- 확인하는 스크립트는. <>’”<script> document.cookie 등등 입니다.
- 모두 잘 되는것을 확인한후에 이를 이용해서 XSS공격용 링크를 작성한뒤, 이를 사회공학기법을 사용해서 사용자가 클릭하도록 합니다.
XSS 발생 과정
- 사용자는 악의적인 공격자가 만든 링크를 클릭하여 게시글을 요청합니다.
- 링크는 이미 악성 스크립트를 포함한 게시글 데이터를 웹 서버로 반환합니다.
- 웹 서버는 요청을 받고 웹 컨테이너로 전달합니다.
- 웹 컨테이너는 게시글 데이터를 웹 서버에 반환하고, 웹 서버는 사용자에게 게시글 데이터를 반환합니다.
- 사용자는 게시글 내용을 확인합니다.
- 웹 서버는 악성 스크립트를 실행하기 위해 웹 컨테이너에 악성 스크립트 요청을 보냅니다.
- 웹 컨테이너는 악성 스크립트를 실행한 후, 웹 서버에 악성 스크립트 응답을 전송합니다.
- 웹 서버는 악성 스크립트 응답을 공격자에게 반환하며, 이 응답에는 사용자 정보가 포함될 수 있습니다.
공격 예제
대응 방법
HTML entity
이는 근본적인 XSS 문제를 해결합니다.
HTML entity는 HTML 문서에서 특수 문자나 기호를 나타내는 데 사용되는 특별한 문자열입니다. HTML은 일부 문자를 텍스트로 직접 표현할 수 없기 때문에 이러한 특수 문자를 대체하기 위해 HTML entity를 사용합니다. HTML entity는 **&**로 시작하고 **;**로 끝나는 특정 문자열입니다.
HTML entity는 텍스트에서 특정 문자의 기능을 바꾸지 않으면서 그 문자를 나타냅니다. 가장 일반적인 HTML entity는 다음과 같습니다:
- & (&): ampersand 기호
- < (<): 작은 부등호 기호 (less than)
- > (>): 큰 부등호 기호 (greater than)
- " ("): 쌍따옴표 (double quotation mark)
- ' ('): 따옴표 (single quotation mark)
HTML editor의 경우
HTML entity로 변경 할수 없습니다. 대부분의 html태그를 사용할수 없게 되기 때문입니다.
이런경우,
- html→ html entity로 치환한다
- 화이트리스트 기반으로 살려줄 태그를 살려준다
- 블랙리스트기반으로 event handler를 필터링한다. (속성필터)
반응형
'old > Cyber Security' 카테고리의 다른 글
CSRF 공격기법 리스트 (0) | 2023.06.20 |
---|---|
CSRF (Client Side Request Forgery) 란 (0) | 2023.06.03 |
웹해킹: SQL injection (0) | 2023.05.11 |
아스키 코드 표 (0) | 2023.04.30 |
16진수 아스키 코드 표 (0) | 2023.04.30 |