본문 바로가기
정보보안/Web Hacking

[CSRF] - 무방비 상태의 사이트 공격 // CSRF attack, PortSwigger 예제

by 우동이 2020. 8. 23.
300x250

csrf-1

PortSwigger의 Academy - CSRF 문제입니다.

https://portswigger.net/

 

Web Application Security, Testing, & Scanning - PortSwigger

PortSwigger offers tools for web application security, testing, & scanning. Choose from a range of security tools, & identify the very latest vulnerabilities.

portswigger.net

 


CSRF Attack

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를

 특정 웹사이트에 요청하게 하는 공격을 말한다.

사용자가 신뢰하는 사이트에서 발생하는 공격 기법이라는 점에서

XSS(Cross Site Scripts)기법과는 대조적인

공격이라고 할 수 있다.


간략하게 CSRF에 대해 알아봤으니 문제 예제를 이용해

더 자세히 알아보자

아까 위 문제의 사진을 해석하면

 

번역본

본 사이트의 이메일 변경 기능의 취약점이 CSRF 라는 사실을 알 수 있으며

우리는 이메일 변경 기능에 HTML코드를 작성해 삽입해야만

해킹을 완료할 수 있다

 

먼저 취약점을 분석하기 위해 사이트로 직접 들어가보자

 

Exploit은 웹 해킹쪽에서는 취약점을 뜻한다고 보면 된다

즉 Exploit server는 취약점 서버고 

그곳으로 공격 코드를 삽입해야한다

먼저 문제에서 얻은 계정 carlos/montoya 로 로그인 해서

Email를 변경할 수 있는 기능을 사용해보도록 하자.

 

아니나 다를까 지급받은 사용자 계정으로 로그인 하자

Change email 항목이 활성화 되었다 이를 이용하여 Email

변경하기 위해 Burp Suite를 사용하자

프록시 설정을 해준다음 Burp Suite 에서 프록시를 잡아보자

 


Burp Suite에서 잡고 확인해보면 Change Email 항목에서

Email정보를 'email' 값으로 전송하며

제일 중요한 'POST' 방식으로 전송한다는 것을 알 수 있다.

여기서 POST란?

웹상 헤더를 받음에 있어 GET/POST의 두가지 방식이 존재하는데

URL 상에 데이터가 그대로 전송되는 GET방식

https://example.com/?value=1234
#example 사이트에 value에 1234를 담아 전송 (GET방식)

 

데이터 형식으로 Html 헤더의 <body> 태그에 담아서 전송하는 방식이

POST 방식이다.

위 사이트에서 POST 방식으로 데이터를 전송했다는 건 

우리가 <body>태그에 데이터 값을 담아 전송해줘야 한다는 것이고

email 이라는 value를 이용해 코드를 짜면 된다

 

가자 취약점 서버로

 

취약점 서버로 들어오니 Head 에는 Request 헤더가 존재하고

Body에는 "Hello, world!"라는 메시지가 있다

자 이제 Body에 공격 코드를 작성해보자

 

사진을 급하게 캡쳐했더니 코드가 좀 다르다 아래 코드를 참고해 입력하도록 하자

<form method="POST" action="URL">
	<input type="hidden" name="VALUE_NAME" value="hakersID@attack.com">
</form>
<script>
	document.forms[0].submit();
</script>

Form 태그의 method 속성을 "Post" 로 설정해주고

action에는 Url 값을 넣어준다 사이트/email/change-email 형식이 되어야 한다

name에는 변경할 값의 이름을 넣어주는데 아까 

Burp Suite에서 얻은 email이라는 값을 넣어주고 value 에는

변경할 email을 넣어주면 된다.

 

그리고 Store 해주면 문제가 해결되었다는 메시지가 뜨며 

풀이가 완료된다.

 

300x250

댓글