EXPLORE THE CURRICULUM
나의 학습지도
전체 흐름을 살펴보고, 지금 배울 수업을 찾아보세요.
44 개의 수업 · 웹 보안
선택 초기화L1웹의 기본 구조Step 71–766 수업
- 071 HTML/CSS 기초 — 웹페이지의 뼈대와 옷빈 파일에서 시작해 제목·문단·링크·이미지·목록·입력창이 있는 웹페이지를 손으로 만든다
- 072 JavaScript 기초 — 웹페이지를 살아 있게 하는 언어파이썬과 비교해 JS 기초 문법(let/const, function, console.log)을 쓴다
- 073 HTTP 완전 이해 — 웹의 대화 규칙python -m http.server로 내 컴퓨터에 실습용 웹서버를 띄운다
- 074 requests 라이브러리 — 파이썬으로 웹과 대화하기POST와 쿠키를 이해하는 연습용 서버(lab.py)를 파이썬으로 직접 만든다
- 075 BeautifulSoup 크롤링 — HTML에서 원하는 것만 뽑기BeautifulSoup(문자열, "html.parser")로 HTML 문자열을 탐색 가능한 구조로 바꾼다
- 076 크롤러와 자동화 — 매일 혼자 일하는 수집기python -m http.server로 로컬 연습 사이트를 띄울 수 있다
L2웹 보안 기초Step 131–15525 수업
- 131 웹 서버 직접 만들기 — 로그인과 세션sqlite3 DB에 계정을 만들고 로그인 검증을 구현할 수 있다
- 132 Burp Suite 1: 프록시 가로채기 — 브라우저와 서버 사이에 끼어들기프록시가 브라우저와 서버 사이에서 무엇을 하는지 설명할 수 있다
- 133 Burp Suite 2: Repeater와 Intruder — 반복 실험대와 자동 기관총잡은 요청을 Repeater로 보내 반복 실험할 수 있다
- 134 쿠키와 세션 공격 — 서버가 믿는 신분증을 흔들다쿠키와 세션이 로그인 상태를 유지하는 구조를 요청·응답 헤더 수준에서 설명한다
- 135 DVWA 세팅과 SQLi 기초 — Low와 Medium을 넘다DVWA를 Docker로 띄우고 보안 난이도를 조절할 수 있다
- 136 SQLi 심화 — UNION으로 데이터베이스 통째로 빼내기UNION SELECT가 두 결과를 합치는 규칙(컬럼 수 일치)을 설명한다
- 137 Blind SQLi와 sqlmap — 보이지 않아도 빼낸다Boolean-based Blind SQLi의 오라클(참/거짓 답변 장치) 원리를 설명한다
- 138 XSS 기초 — Reflected와 Stored, 브라우저 안의 배신자XSS가 SQL 인젝션과 다른 점(공격 대상이 브라우저)을 설명한다
- 139 XSS 심화: 쿠키 탈취와 필터 우회 — alert를 넘어 세션을 훔친다document.cookie를 공격자 서버로 보내는 실전형 XSS 페이로드를 작성한다
- 140 CSRF: 요청 위조 — 피해자의 브라우저가 대신 클릭한다브라우저의 쿠키 자동 전송 특성이 CSRF를 가능하게 하는 원리를 설명한다
- 141 파일 업로드 공격: 웹쉘 — 게시판에서 서버 장악까지웹쉘이 무엇이고 "업로드 1개가 서버 장악"으로 이어지는 체인을 설명한다
- 142 웹쉘 심화: 직접 작성과 원리 — 한 줄짜리 문을 직접 만든다웹쉘의 핵심 구조(입력 → 실행 → 출력)를 한 줄씩 설명한다
- 143 명령어 인젝션 — 검색창이 서버의 터미널이 되는 순간명령어 인젝션의 성립 조건(입력 결합 + 셸 실행)을 코드에서 찾아낸다
- 144 파일 포함: LFI/RFI — 서버가 "읽어 주는 파일"을 내가 고른다LFI와 RFI의 차이를 include의 동작 방식으로 설명한다
- 145 디렉토리 탐색과 정보 노출 — "주소를 모르면 안전하다"는 착각강제 브라우징(forced browsing)의 원리와 gobuster의 기본 사용법을 안다
- 146 인증 공격 종합 — 정문을 두드리는 네 가지 방법기본 자격증명 점검이 실전 침투의 "첫 5분"인 이유를 설명한다
- 147 ★ DVWA 전 난이도 + 3단 정리표 — 취약점 하나를 "완전히" 안다는 것DVWA 난이도가 올라갈 때 방어 코드가 어떻게 진화하는지 코드 수준에서 설명한다
- 148 OWASP Juice Shop 1: 현대적 웹앱 입문 — 공격 무대가 바뀌었다SPA(싱글 페이지 앱)와 전통 웹앱의 구조 차이를 설명한다
- 149 Juice Shop 2 — 접근 제어와 IDORIDOR이 생기는 조건("인증은 하되 인가를 안 한다")을 설명한다
- 150 Juice Shop 3 — JWT와 비즈니스 로직JWT의 세 덩어리(헤더.페이로드.서명)를 분해하고 내용을 읽는다
- 151 드림핵 웹 입문 — 첫 실전 문제드림핵 워게임의 문제 구성 요소(제목·설명·URL·플래그 제출)를 안다
- 152 드림핵 웹 (누적 16) — 기법의 변형 인식같은 취약점이 다른 기능(검색창, 다운로드, 장바구니)에 숨는 방식을 설명한다
- 153 드림핵 웹 (누적 24) — 리서치로 돌파하기문제에서 기술 스택(Flask, PHP 등)을 식별해 검색 키워드의 재료로 쓴다
- 154 드림핵 웹 (누적 32) — 약점 목록과 문제 선별 전략풀이 기록을 CSV 형식(날짜·문제명·유형·소요분·결과)으로 유지한다
- 155 ★ 프로젝트 — 취약 웹 타깃 독립 공략과 보고서미지의 웹 타깃에 대해 정찰 → 기능 매핑 → 가설 → 검증의 순서를 스스로 진행한다
L3웹 보안 심화Step 191–20212 수업
- 191 PortSwigger Academy: SQLi 고급 — Blind, time-based, OOBBlind SQLi의 세 가지 오라클(참/거짓, 시간, OOB)을 상황별로 구분한다
- 192 고급 XSS: CSP 우회, DOM 심화 — 방어막이 있는 환경의 공격CSP 헤더의 지시자(script-src, 'self' 등)를 읽고 의미를 해석한다
- 193 SSTI: 템플릿 인젝션 → RCE — 입력이 서버의 코드가 될 때SSTI가 SQL 인젝션·XSS와 같은 뿌리(입력이 코드가 됨)임을 설명한다
- 194 SSRF — 서버를 프록시로 부려 내부망을 읽다SSRF가 왜 "요청을 대신 보내는 기능"에서 생기는지 설명한다
- 195 XXE — XML 파서에 숨은 파일 읽기 명령XML의 DOCTYPE과 엔티티 선언 문법을 읽고, 외부 엔티티가 왜 위험한지 설명한다
- 196 역직렬화 취약점 — 데이터가 코드가 되는 순간직렬화와 역직렬화가 무엇인지, 왜 역직렬화가 코드 실행으로 이어지는지 설명한다
- 197 JWT 공격 심화 — alg 혼동과 약한 시크릿으로 관리자 되기HS256(대칭)과 RS256(비대칭)의 키 구조 차이를 설명한다
- 198 GraphQL/API 보안 — 하나의 문으로 들어가 스키마를 통째로 읽다GraphQL 쿼리의 구조를 읽고 REST와의 차이를 설명한다
- 199 Webhacking.kr 1~15 — 국내 워게임 종합 선물 세트Webhacking.kr의 문제 목록 구조(점수·풀이 수)를 읽고 난이도를 가늠한다
- 200 Webhacking.kr 16~30 — 기법의 창의적 조합문제의 "보이는 방어"를 목록화하고 우회 후보를 표로 만들어 소거한다
- 201 레이스 컨디션, HTTP 요청 스머글링 개념 — 찰나와 어긋남의 공격TOCTOU(확인-사용 시점 차이)의 구조를 그림으로 설명한다
- 202 ★ 중간 점검: 중급 웹 문제 독립 해결 3연속 — Write-up 금지 구간공정한 점검이 되도록 문제를 선정하는 기준(랜덤, 유형 사전 차단)을 적용한다