2024. 9. 16. 05:37ㆍWeb Security/웹 해킹
xss는 자바스크립트의 코드를 사용해 웹 사이트의 정보를 탈취하는 취약점입니다. 물론, 자바스크립트 이외의 VB 스크립트, ActiveX 등 클라이언트에서 실행되는 동적 데이터를 생성하는 모든 언어에서 발생이 가능합니다. xss의 종류는 아래와 같습니다. 만약 근본적으로 HTML 키워드를 받지 않는다면 취약점은 발생되지 않는다.
Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS
Reflected XSS | XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS |
DOM-based XSS | XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS |
• Fragment는 서버 요청/응답 에 포함되지 않습니다. | |
Universal XSS | 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS |
XSS의 가장 중요한 점은 필터링을 우회하며, 보안 정책을 우회하는 것입니다. 오늘은 필터링을 우회하여 XSS를 발생시키는 방법을 설명하도록 하겠습니다.
일단 자바스크립트 코드는 이벤트 핸들러로 실행된다. 이벤트 핸들러란 특정 요소에서 발생하는 이벤트를 처리하기 위해 존재하는 콜백 형태의 핸들러 함수입니다. 따라서 이벤트 핸들러 내에 XSS 공격 코드를 삽입해두면 해당 이벤트가 발생했을 때 우리의 XSS 공격 코드가 실행되게 됩니다.
자바 이벤트 핸들러는 다음과 같은 것이 있습니다.
- onload
- onerror
- onfoucs
간단한 사용법 예시입니다.
<img src= # onerror="alert(hello)>
활성 하이퍼링크를 통해서도 자바스크립트 코드가 실행가능합니다. javascript: 스키마는 URL 로드 시 자바스크립트 코드를 실행할 수 있도록 합니다.
간단한 예시입니다.
<iframe src="javascript:alert(1)">
위의 자바스크립트 코드를 막아 XSS 방어할려는 잘못된 필터링 예시입니다.
- 대문자 혹은 소문자만 인식
- 잘못된 정규 표현식
- 특정 태그 및 속성 필터링
- 자바 함수 필터링
이를 우회하는 방식들 입니다.
- 대문자 혹은 소문자 사용하여 필터링 html에서 대문자와 소문자가 같습니다.
- 정규표현식 우회
- 필터링 이외의 태그 사용
- URL의 정규표현식 사용
- HTML Entity 인코딩 사용
- srcdoc 사용
- 줄 바꿈 사용
- 자바 함수 우회(https://jsfuck.com/)
간단한 예시입니다.
URL 정규 표현식 이용
<iframe src="\\1\\4jAVasC\\triPT:alert(document.domain)">
HTML Entity 인코딩 사용
<iframe src="\\1JavasCr\\tip&tab;:alert(document.domain);">
srcdoc 사용
<iframe srcdoc='<img src=about: onerror=parent.alert(document.domain)>'></iframe>
줄바꿈 사용
<img src=""\\nonerror="alert(document.cookie)"/>
이외에도 필터링을 우회하기 위한 방법은 엄청 많습니다.
이러한 방법을 일일이 입력해보면서 취약점을 찾기에는 서버단이 어떠한 방식으로 필터링을 하는지 알 수 없습니다. 그렇기 때문에 XSS를 발생시킬 수 있는 코드를 묶음(xss cheat sheet)으로 제공받아 입력해보고 결과값을 보고 필터링을 예측한 뒤, XSS 페이로드를 다듬는 것도 방법이 될 수 있습니다. 또한, XSS 툴을 사용하는 것도 방법이 될 수 있겠습니다. XSS의 대표적 툴로는 Dalfox, XSpear,beef-xss,XSSer 등등 많이 존재합니다. 참고로 해킹툴을 통해서 실제 서버를 스캔하는 것도 불법입니다.
xss Cheat sheet : https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
'Web Security > 웹 해킹' 카테고리의 다른 글
CSP : Content-Security-Policy (1) | 2024.09.19 |
---|---|
CSRF - CSRF token, SameSite Cookie (1) | 2024.09.19 |
SOP와 CORS (2) | 2024.09.18 |
Document Object Model?? (4) | 2024.09.01 |
Is unicode safe? (4) | 2024.08.28 |