취약점 시연 실습장 ← 다른 실습장

클릭으로 보는 웹 취약점 4종

모든 공격은 이 페이지 안에서만 흉내냅니다. 실제 서버로 나가는 요청은 없습니다. 외부 사이트에 공격을 시도하는 것은 명백한 불법이라는 점, 다시 한 번 강조해 둡니다.

1. SQL 인젝션

로그인 창에 SQL 한 조각을 끼워 비밀번호 없이 들어가는 공격

가짜 쇼핑몰 로그인 화면입니다. 보통은 ID와 비밀번호가 둘 다 맞아야 들어갈 수 있죠. 아래 버튼을 차례로 눌러보세요. ID 칸에 SQL 한 조각을 끼워 넣으면 비밀번호 검사를 통째로 건너뛸 수 있습니다.

취약한 쇼핑몰 입력을 SQL 문장 안에 글자로 끼워 붙임
서버가 만든 쿼리
SELECT * FROM users WHERE id = 'admin' AND pw = '1234'
안전한 쇼핑몰 파라미터 바인딩으로 ID/비번을 값으로만 넘김
서버가 만든 쿼리
SELECT * FROM users WHERE id = ? AND pw = ?
-- 값: ['admin', '1234']

2. XSS

댓글 한 줄로 모든 방문자의 쿠키를 가져가는 공격

가짜 게시판 댓글창입니다. 다른 사람이 단 댓글이 모두에게 그대로 보이죠. 그런데 사이트가 댓글을 HTML 로 해석해버리면, 누군가 <script>를 댓글로 적었을 때 모든 방문자의 브라우저에서 그 코드가 진짜로 실행됩니다.

취약한 게시판 댓글을 HTML 로 박음 (.innerHTML)
안전한 게시판 글자로만 박음 (.textContent)
정상. 이 자리에는 아무 일도 일어나지 않습니다.

3. CSRF

공격자가 보낸 링크를 한 번 눌렀을 뿐인데 내 비밀번호가 바뀌는 공격

가장 헷갈리는 공격이지만 원리는 한 줄입니다. "내가 어떤 사이트에 로그인되어 있으면, 다른 사이트가 그 사이트로 요청을 대신 보낼 때 내 쿠키가 자동으로 같이 따라간다." 아래 1 → 2 → 3 버튼을 차례로 누르세요.

0 / 3 다음을 눌러 시작하세요
취약한 쇼핑몰 (보호 없음) 쿠키에 SameSite 없음, CSRF 토큰 없음
https://shop.example.com/me
로그인 전 상태입니다.
안전한 쇼핑몰 (SameSite + 토큰) 쿠키 SameSite=Lax, 폼마다 CSRF 토큰 검증
https://safe-shop.example.com/me
로그인 전 상태입니다.

4. 남의 데이터를 자기 것처럼 조작

로그인만 확인하고 "본인 것"인지는 확인 안 하는 흔한 실수 (IDOR)

가짜 게시판입니다. 여러분은 글 3번을 쓴 사람으로 로그인되어 있습니다. 글 수정 페이지 주소는 /posts/3/edit 입니다. 주소창의 숫자를 1, 2 로 바꿔보세요.

https://board.example.com/posts/ /edit
취약한 사이트 로그인만 확인, 본인 글인지 검사 없음
https://board.example.com/posts/3/edit
안전한 사이트 로그인 + 본인 글인지 한 번 더 검사
https://safe-board.example.com/posts/3/edit

5. AI 에게 시킬 종합 점검 프롬프트

위 네 가지를 한 번에 훑어주는 한 덩어리. 그대로 복사해 쓰세요.

Cursor, Claude Code, Copilot 같은 도구에 프로젝트를 열어둔 상태에서 이 한 덩어리를 그대로 붙여 넣으면 됩니다. 코드를 한 줄 한 줄 읽지 않아도 점검 보고서가 돌아옵니다.