크로스 스 크 립 트 공격 XSS(Cross Site Script)의 원리 와 흔 한 장면 분석

머리말
얼마 전에 인터넷 에서 봤 어 요인터넷 주소궁금 해서 들 어가 봤 어 요.승리 의 조건 은 프롬프트(1)를 호출 할 수 있 도록 문자열 을 입력 하 는 것 입 니 다.안에 생각 지도 못 한 것들 이 많이 들 어 있 는 것 을 발견 하고 오늘 드디어 여 유 롭 게 이곳 에 와 서 XSS 에 대해 이야기 합 니 다.
XSS 원리
크로스 스 크 립 트 공격(Cross Site Scripting)은 레이 어드 스타일 시트(Cascading Style Sheets,CSS)의 줄 임 말 과 혼동 되 지 않 기 때문에 크로스 스 크 립 트 공격 의 줄 임 말 을 XSS 로 사용 합 니 다.악성 공격 자 는 웹 페이지 에 악성 스 크 립 트 코드 를 삽입 합 니 다.사용자 가 이 페이지 를 탐색 할 때 웹 에 포 함 된 스 크 립 트 코드 가 실행 되 어 악의 적 으로 사용 자 를 공격 하 는 목적 을 달성 합 니 다.
XSS 흔 한 장면
일부 개인 블 로그,공격 자 들 이 악의 적 으로 논평 하고 alert 가 튀 어 나 오 는 것 은 고작 농담 이다.하지만 쿠키 를 훔 쳐 요청 을 이상 하 게 제출 하 는 것 은 어 려 운 일이 다.
prompt(1)
chrome 버 전 62.0.3202.75(정식 버 전)(64 비트)

function escape(input) {
 // warm up
 // script should be executed without user interaction
 return '<input type="text" value="' + input + '">';
} 
첫 번 째
이것 은 식욕 을 돋 우 는 요리 로 어떤 검사 도 하지 않 았 는데,이런 무방 비 한 것 은 현재 이미 매우 적다.그 는 값 을 문자열 에 직접 맞 춰 DOM input 탭 을 만 들 었 다.그러면 우 리 는 탭 을 정확하게 닫 으 면 호출 할 수 있다.
4.567914.맞 춘 문자열 은 4.567914 입 니 다.그러면 우리 의 코드 를 삽입 한 것 과 같 습 니 다.

function escape(input) {
 // tags stripping mechanism from ExtJS library
 // Ext.util.Format.stripTags
 var stripTagsRE = /<\/?[^>]+>/gi;
 input = input.replace(stripTagsRE, '');
 return '<article>' + input + '</article>'; 
}
두 번 째
이것 은 이미 난이 도 를 올 렸 습 니 다./<\/?[^>]+>/gi 는<>탭 에 있 는 모든 것 과 일치 합 니 다.입력"><script>prompt(1)</script>변환 하면 prompt(1)가 나타 나 고 내용 에 있 는 탭 이 바 뀌 었 습 니 다.그래서 이 탭 을 닫 지 않 고 브 라 우 저 스스로 잘못 사용 하도록 시도 합 니 다.<input type="text" value=""><script>prompt(1)</script>"> 이 방법 은 img 을 통 해 src 를 불 러 오 는 데 실 패 했 을 때 onerror 의 생각 을 호출 합 니 다.

function escape(input) {
 // v-- frowny face
 input = input.replace(/[=(]/g, '');
 // ok seriously, disallows equal signs and open parenthesis
 return input;
} 
세 번 째
이것 은 약간 구덩이 가 생 겼 다.사용 하 는 방법 은 템 플 릿 문자열 의 탭 템 플 릿 을 통 해 ES6 의 특성 입 니 다<script>prompt(1)</script>우 리 는 이렇게 쓰 면 될 것 같은 데 왜 효력 이 발생 하지 않 습 니까?아래 그림 에서 알 수 있 듯 이 이렇게 하면 문자열 이 들 어 오고 판단 이 통과 되 지 않 는 다.그래서 우 리 는 수정 해 야 한다<img src onerror="prompt(1);" 그러면 검증 을 뛰 어 넘 을 수 있다.(그런데 마크 다운 은 어떻게'안에'라 고 쓰 죠?

function escape(input) {
 // filter potential comment end delimiters
 input = input.replace(/->/g, '_');
 // comment the input to avoid script execution
 return '<!-- ' + input + ' -->';
} 
네 번 째
이것 은 당신 이 쓴 내용 을 html 주석 문 에 넣 고/->/g 로 바 꾼 것 처럼 보 입 니 다.내 가 생각 한 방안 은 조건 부 주석 이 있 지만 조건 부 주석 은 IE 의 것 이 므 로 우 리 는 먼저 테스트 하지 않 겠 다.
이것 괜찮아요?

function escape(input) {
 // make sure the script belongs to own site
 // sample script: http://prompt.ml/js/test.js
 if (/^(?:https?:)?\/\/prompt\.ml\//i
 .test(decodeURIComponent(input))) {
 var script = document.createElement('script');
 script.src = input;
 return script.outerHTML;
 } else {
 return 'Invalid resource.';
 }
} 
다섯 째
이것 은 url 위 조 를 통 해 사용자 이름,비밀번호 보호 가 있 는 URL 을 방문 하여 위 조 된 것 입 니 다.
4.567914.네트워크 주소 에 인 용 된 js 이 고 내용 은 prompt(1)입 니 다.해 보 려 고 했 는데 성공 하지 못 했 어 요.그리고<script>prompt`1`</script><script>prompt.call${1}</script>도 통과 하지 못 해서 서운 해 요.

function escape(input) {
 // apply strict filter rules of level 0
 // filter ">" and event handlers
 input = input.replace(/>|on.+?=|focus/gi, '_');
 return '<input value="' + input + '" type="text">';
} 
여섯 번 째--!><img src onerror="prompt(1);" 교체>,onxxxx=과 focus.input 를 통 해 특수 한 type 형식 입 니 다.http://prompt.ml%2f@urlurl data:text/html,<html><script>prompt(1)</script></html>xs 를 통 해서 할 수 있 는 일.
많은 것 이 있 습 니 다.절대 다수의 네트워크 공격 행 위 는 xs 를 구멍 체인 의 첫 번 째 고리 로 합 니 다.xss 를 통 해 해커 가 얻 을 수 있 는 가장 직접적인 이익 은 사용자 브 라 우 저(또는 일부 브 라 우 저 app)의 쿠키 를 얻 는 것 이다.현재 웹 시스템 에서 session 을 실현 하 는 방법 은 주로 쿠키 이기 때문에 해커 가 사용자 의 쿠키 를 받 으 면 사용자 의 session 을 납치 하여 사용자 계 정 을 훔 치 는 목적 을 달성 할 수 있다.
xss 도 해커 로 하여 금 피해 사용자 의 ip 주소 로 다른 사이트 에 웹 공격 을 할 수 있 게 한다.왜냐하면 모든 공격 스 크 립 트 는 피해 사용자 의 브 라 우 저 를 빌려 실행 할 수 있 기 때문이다.
이러한 방식 으로 xs 를 csrf,sql 주입 등 구멍 에 맞 춰 짧 은 시간 내 에 한 서버 에 대량의 공격 을 할 수 있 으 며,서버 에 서 는 공격 ip 을 봉쇄 할 수 없습니다.ip 은 수백 수천 명의 xs 피해자 의 ip 이기 때 문 입 니 다.
2015 년 github 이 당 한 대규모 DDOS 는 사실상 해커 가 어떤 방식 으로 스 크 립 트 를'곰 장'의 광고 연맹 iframe 에 심 어 github 의 일부 인 터 페 이 스 를 공격 하여 최종 적 으로 DDOS 의 효 과 를 거 두 었 다.
또한 지속 성 xss 의 전파 성 이 매우 강하 다.웹 의 특징 은 경량급,유연성 이 높 기 때문에 모든 사용자 가 매일 많은 웹 사 이 트 를 방문 할 수 있 고 모든 웹 사 이 트 는 매일 수천 명의 방문 이 있다.그래서 xss 공격 을 일부 시스템 커 널 급 의 구멍 에 맞 추 면 몇 시간 안에 수백 만 대의 스마트 장 비 를 무 너 뜨 릴 수 있 습 니 다.
지금의 xss
인터넷 의 많은 자료 에 비해 기술적 으로 큰 변화 가 생 겼 다.각 사이트 가 js 스 크 립 트,html 태그 등 관건 적 인 정보 에 대한 여과 을 강 화 했 기 때문에 단순히 자바 script 코드 를 삽입 하 는 것 으로 는 공격 하기 어렵다.
PC 엔 드 페이지,일부 동 영상 류,페이지 게임 사이트 에 대량의 플래시 가 존재 하 므 로 플래시 코드 를 간접 광 고 를 시도 할 수 있 고 사이트 의 안전 한 여과 을 피 할 수 있 습 니 다.모 바 일 페이지 에 네 이 티 브 코드(안 드 로 이 드 시스템 에 자바,ios 시스템 에 oc 를 삽입 할 수 있 습 니 다)를 삽입 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기