CSRF(CrossSiteRequestForgery)
- 사용자의 의도와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 HTTP 요청을 하는 행위
CSRF 공격을 수행하기 위해 요구되는 조건 ▼
- 웹 사이트의 인증방식은 쿠키를 이용해야 한다 혹은 예측 가능한 토큰 사용
- 공격자가 알지 못하는 파라미터가 존재하면 안 된다 (공격은 전부 정상적인 경로로 수행된다)
Dreamhack의 CSRF-1 문제입니다.
제공된 사이트로 먼저 접속해보겠습니다.
4개의 링크가 존재합니다
/csrf
/memo
/notice flag
/flag
/csrf는 현 사이트에 존재하는 csrf 취약점에 대한 힌트를 제공합니다.
위 url창에 입력된 주소를 보면
<script>alert(1)</script> 가 입력되었으나
<*> alert(1)로 출력되었습니다.
즉 script라는 문자열이 filtering 됨을 알 수 있습니다.
※ <script>alert(1)</script> = 1을 안내 메시지로 발생시키는 JavaScript
/memo에서는 url에 입력한 값이 그대로 전달되어 출력되고 있습니다.
/notice_flag는 admin계정에 속해있으며
현재 접속이 거부된 상태입니다.
/flag에서는 csrf 취약점을 발생시키는 공격 코드를 넣으면 되는 듯싶습니다.
이제 코드를 한번 살펴봅시다.
42번째 줄에서는 xss_filter가 frame, script, on 과같은 문자열을 필터링하고 있습니다.
67번째 줄의 /admin/notice_flag 에서부터 살펴보면
접속 주소가 127.0.0.1(localhost)이 아니면 'Access denied' 메시지를 출력하며
userid 값이 admin이 아닐 경우에도 조건에 부합하지 않습니다.
즉 우리는 로컬 호스트에 admin 계정이 아닌 이상
notice_flag에 접속할 수 없다는 얘기입니다.
<img src="link">
<img src=1 onerror="fetch('/link');">
<link rel="stylesheet" href="link">
위 세줄의 코드는 dreamhack 강의에서 제공 혹은 제가 긁어모은
CSRF 공격 코드 예시입니다.
<img> 태그와 <link> 태그 두 가지 종류가 존재합니다.
이를 이용해 적절한 공격코드를 짜 보겠습니다.
<img src="/admin/notice_flag?userid=admin">
<img> 태그의 경로를 ' /admin/notice_flag? userid=admin'으로 지정했습니다.
위에도 적어뒀듯 CSRF 취약점은 사용자의 의도와 무관한
행위를 통해 HTTP 요청이 진행되는 취약점입니다.
즉 img 태그를 통해 userid가 admin이라는 요청을 했기에 위 코드를 통해
userid가 admin일 때만 접속 가능한 /admin/notice_flag에 접속할 수 있게 됩니다.
해당 코드를 그대로 /flag에 제출합니다.
그러면 /memo 항목에 flag가 출력됩니다.
이상 감사합니다.
'정보보안 > Web Hacking' 카테고리의 다른 글
웹 해킹을 위한 DB 별 기초 쿼리문 (0) | 2020.08.07 |
---|---|
SQL Injection을 위한 SQL기초 구문 모음 (0) | 2020.08.06 |
[SQL Injection] - 쿼리에서 반환되는 열의 개수 구하기 // PortSwigger 예제 (0) | 2020.07.31 |
[XSS] XSS(Cross Site Scripting)공격 실습 - (Dreamhack 실습예제) (5) | 2020.07.30 |
cookie를 통한 웹해킹 - DreamHack예제(cookie) (4) | 2020.07.25 |
댓글