Web - XSS(STORED), CSRF

Aquila·2024년 8월 19일

SecurityAcademy

목록 보기
3/9
post-thumbnail

저장된 XSS(Stored XSS)

  • 저장된 XSS는 사용자의 입력값이 웹 애플리케이션의 데이터베이스나 파일 등의 저장소에 저장되어 있다가 이 저장된 입력값이 응답에 안전하지 않은 방식으로 포함될 때 발생
  • 악성 스크립트 주입을 위한 "저장" 요청(공격자가 수행)과 실질적인 피해를 유발하는 행위의 "조회" 요청(피해자가 수행), 2개의 요청이 요구되므로 다른 말로 Second Order XSS 라고 하기도 함

저장된 XSS의 구동 원리

반사된 XSS 테스트 방법

1) 사용자 입력이 웹 서버에 저장되는 요청 식별
2) 테스트 문자열 보내기
3) 테스트 문자열이 응답 내에 표시되는 모든 Endpoint 식별
4) 테스트 문자열이 표시된 위치의 응답 소스코드 분석
5) 입력값으로 스크립트 전달 및 실행 여부 확인
6) 필터링으로 인한 실패시 우회 시도 (대소문자 구분, 재귀적 필터링 여부 등)

Stored XSS 실습

XSS_Stored(Blog)

흔한 게시판의 모습이다. 텍스트 박스에 문자열을 입력하면 입력한 정보를 하단에 리스트 형태로 표시해준다. 그렇다면 텍스트 박스에 자바스크립트 코드를 넣어도 실행이 되는지 확인해보자.

마찬가지로 쿠키 값을 뽑아내는 데에 성공했다.

XSS_Stored(Cookies)

해당 사이트의 URL 주소에 주목해보자.

영화 장르를 고르고 Like 를 누르면 해당 사이트의 URL이

http://192.168.184.132/bWAPP/xss_stored_2.php?genre=horror&form=like

값으로 바뀐다.

이 시점에서 URL에서 장르 부분에

<script>document.write(document.cookie)</script>

를 넣고 전송하기 전에 burp suite를 켜고 어떤 패킷 정보가 전송되는지 확인해보자

장르 부분에 사용자가 넣은 스크립트 코드가 들어간 채로 전송된 것을 확인한 후에 패킷을 놔주고
Session Management - Cookies(HttpOnly) 에 들어가서 cookie 값을 확인하면

movie_genre 부분에 쿠키 값이 노출되는 것을 확인할 수 있다.

크로스사이트요청위조(SCRF)

CSRF(Cross-Site Request Forgery)란?

  • CSRF는 사용자가 원하지 않는 행위, 정확히는 공격자가 의도한 행위를 웹 애플리케이션에 요청하는 취약점
  • 세션 라이딩(Sessiong Riding)이라고도 함.
  • HTTP 프로토콜의 무상태성(stateless), 비연결성(Connectionless) 특성을 이용한 취약점
  • 공격자가 이메일이나 SNS, 채팅 메시지 등 피싱공격을 통해 사용자의 웹 브라우저가 공격자에 의해 작성된 악의적인 URL로 방문하도록 유도하는 사회공학 기법

CSRF의 동작원리

  • CSRF 공격의 충족 조건
    1) 권한이 요구되는 민감한 기능 ex. 회원정보 변경, 게시글 등록/삭제 등 관리자 권한
    2) HTTP 쿠키만 사용해 사용자 세션 추적
    3) 요청에 사용되는 모든 매개변수 사전에 파악 완료

CSRF 취약점의 위험

  • 웹 애플리케이션에서 피해자에게 주어진 원한이나 사용할 수 있는 기능에 따라 Risk가 상이함.
  • 피해자가 관리자이거나 그와 유사한 권한을 보유하고 있다면 공격자는 민감한 데이터를 유출하거나 데이터베이스를 삭제하는 등 웹 애플리케이션 전체를 장악하고 손상시킬 수 있음

CSRF 취약점 보안예방

  • Referer 요청 헤더 검증

  • Anti-CSRF 토큰 : 사용자 세션을 추적하기 위해 기존의 세션 토큰 이외에 추가적인 임의의 토큰을 사용하는 방법. 사용자의 웹 브라우저와 서버만 알고 있으며 주로 사용자가 어떤 웹 페이지를 로딩할 때 숨겨진 폼 필드에 저장되었다가 폼이 제출될 때 서버로 다시 전송됨

CSRF 취약점 실습

흔한 비밀번호 변경 사이트다. 기존 비밀번호였던 bug 에서 1234로 바꾸고 패킷을 잡아보자.

우리는 여기서 ip와 GET 정보만을 활용해 Blog에 누르기만해도 사용자가 원하는 비밀번호로 바뀌는 하이퍼링크 버튼을 하나 만들 것이다. 마저 포워딩을 한 후

<a href = "http://192.168.184.132/bWAPP/csrf_1.php?password_new=1234&password_conf=1234&action=change">csrf</a>

코드를 블로그에 넣고 포스팅을 해보자.

이렇게 csrf라는 버튼이 생겼다. 비밀번호를 다시 bug로 바꾼 후 저 버튼을 눌렀을 때, 1234로 바뀌어 bug 라는 비밀번호로 로그인이 안되는 것을 확인할 수 있다.

0개의 댓글