본문 바로가기

1. Web hacking (웹 해킹)/2) 개념 정리

[25.05.16] 웹 떠봐요 5주차 활동

XSS 정의

XSS는 Cross Site Scripting의 약자로, 웹 페이지 이용자를 대상으로 공격할 수 있는 취약점이다. 

공격자가 웹 페이지에 악성 스크립트를 삽입하여 이용자의 세션 정보 등을 탈취하고 임의의 기능을 수행할 수 있다.

 

XSS 종류

  • Stored XSS
    악성스크립트가 서버에 저장되고, 서버 응답에 담겨오는 XSS
  • Reflected XSS
    악성스크립트가 URL에 삽입되고, 서버 응답에 담겨오는 XSS
  • DOM-based XSS
    악성스크립트가 URL Fragment에 삽입되는 XSS
  • Universal XSS
    브라우저 안에 악성 스크립트를 실행하는 XSS. SOP 정책을 우회하기도 한다.  

XSS 공격 방법

자바스크립트는 웹 문서의 동작을 정의하며, 이용자와의 상호 작용 없이 이용자의 권한으로 정보를 조회하거나 변경하는 등의 행위가 가능하다.

이러한 행위가 가능한 이유는 이용자 식별을 위한 세션 및 쿠키가 웹 브라우저에 저장되어 있기 때문이다. 

이처럼 자바스크립트는 다양한 동작을 정의할 수 있기 때문에 XSS 공격에 주로 사용된다. 

 

XSS 문제 풀이

  • XSS-1

flag 페이지 속 input에 값을 입력하면 check_xss 함수에 input값과 flag값을 쿠키 형태로 넘긴다.

넘어온 값을 url형태로 만들어 쿠키값과 함께 read_url로 넘긴다.

여기서 발생하는 쿠키에 flag가 있기에 탈취하면 flag를 얻을 수 있다.

<script>location.href = "/memo?memo=" + document.cookie;</script> 코드를 input에 입력하면

vuln 페이지로 보내진 쿠키값을 파라미터에 담아 memo 페이지로 쿠키값이 넘어가고

결론적으로 쿠키값이 memo 페이지에 출력된다.

 

  • XSS-2

xss-1과 다르게 vuln페이지에 script가 동작하지 않는다. (스크립트 태그를 걸러냄)

즉, <script>가 아닌 이미지 등의 태그를 이용하여 우회할 수 있다.

<img src="xss" onerror="location.href='/memo?memo='+document.cookie">

 

 

CSRF 정의

Cross Site Request Forgery의 약자로 교차 사이트 요청 위조라고도 하며, 임의 이용자를 속여 의도치 않은 요청에 동의하게 하는 공격이다.

공격에 성공하려면, 공격자가 작성한 악성 스크립트(HTTP 요청을 보내는 코드)를 이용자가 실행해야 한다.

메일을 보내거나 게시판에 글을 작성해 조회하도록 유도하는 방법이 있다.

 

CSRF와 XSS

두 공격 모두 스크립트를 웹 페이지에 작성하여 공격한다는 공통점을 가지고 있다.

XSS는 세션 및 쿠키 탈취를 목적으로 하는 공격이며, CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내는 것을 목적으로 하는 공격이다. 

 

CSRF 문제 풀이 

  • CSRF-1 

 

if request.args.get("userid", "") != "admin":

    return "Access Denied 2"

memo_text += f"[Notice] flag is {FLAG}\n"

/admin/notice_flag에 접속하면 /memo페이지에 플래그를 적어준다. 

하지만 /admin/notice_flag에 접속하려면 아이피가 호스트여야 하며, userid의 값이 admin이어야 한다.

XSS-2와 같이 이미지 태그를 사용해 풀어보면 <img src="/admin/notice_flag?userid=admin"> 코드를 입력할 수 있다. 

  • CSRF-2

admin으로 로그인하여 flag를 얻는 문제이다. 

코드에 /change_password 부분이 있는 것으로 보아 비밀번호를 바꿔 로그인할 수 있다. 

똑같이 이미지 태그를 사용하면 <img src="/change_password?pw=admin"> 코드를 입력할 수 있다.