|
| 1 | +# Webhacking 커리쿨럼 |
| 2 | + |
| 3 | +## Basic Information |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | +### Member |
| 8 | +- 강민범 |
| 9 | +- 윤석찬 |
| 10 | +- 이주창 (팀장 : 010-6478-0124 ) |
| 11 | +- 한종원 |
| 12 | + |
| 13 | +### Objectives |
| 14 | +- 보안에 대해서 관심과 흥미를 가지도록 함. |
| 15 | +- 자기 주도적 학습과 문제해결능력 함양. |
| 16 | +- 물어보는 것을 부끄러워하지 않게 함. |
| 17 | +- 코딩과 해킹을 같이 배움으로써 코딩 실력도 기르며 해킹도 경험. |
| 18 | +- 해커를 지망하는 학생들에게 꿈을 향해 한 걸음 다가갈 수 있도록 도움. |
| 19 | + |
| 20 | + |
| 21 | +### Etc |
| 22 | + | |
| 23 | +------ | ------ |
| 24 | +타겟 | 중2 ~ 고3 |
| 25 | +난이도 | ★★★★★ |
| 26 | +차시 | 12차시 |
| 27 | +소요시간 | 3시간 |
| 28 | +장소 | 안양 |
| 29 | +교육기자재 | 노트북 또는 PC |
| 30 | + |
| 31 | +## Lesson plan |
| 32 | + |
| 33 | +### Overview |
| 34 | +차시 | 한줄소개 |
| 35 | +------ | ------ |
| 36 | +1 | 아이스 브레이킹 시간 |
| 37 | +2 | HTTP 통신 소개 |
| 38 | +3 | HTML 태그 익히기 |
| 39 | +4 | DB란? |
| 40 | +5 | Mysql 구문, 원리 익히기 |
| 41 | +6 | 서버란? |
| 42 | +7 | PHP 쿠키 로그인 |
| 43 | +8 | JS란? |
| 44 | +9 | JS로 웹페이지 만들기 |
| 45 | +10 | XSS |
| 46 | +11 | SQL Injection |
| 47 | +12 | 자체 CTF 진행 |
| 48 | + |
| 49 | +### Detail |
| 50 | + |
| 51 | +#### 1차시 |
| 52 | +- 강사소개 (윤석찬 , 한종원 , 이주창 , 강민범) |
| 53 | +- 해킹 분야 소개(리버싱 , 포너블 , 포렌식 , 웹해킹)및 시연 |
| 54 | +- 학생들 자기소개 |
| 55 | +- 간단한 퀴즈 및 게임 진행(아이스 브레이킹) |
| 56 | + |
| 57 | +##### 조편성 |
| 58 | +- 강사 한 명 당 2~3 명의 학생을 담당 |
| 59 | + |
| 60 | +##### 수업 계획 소개 |
| 61 | +- 해킹 관련 이슈 (빗썸 해킹 사건 , intel AMT 관련 보안 문제 등) |
| 62 | +- 악성코드 , 바이러스 , 랜섬웨어 등에 관한 뉴스 설명 |
| 63 | +- 어나니머스, 조지 호츠 등 해킹 관련 단체 및 인물, 일화 소개 |
| 64 | + |
| 65 | +#### 2차시 |
| 66 | + |
| 67 | +##### 웹페이지의 동작 원리 |
| 68 | +- 프론트 엔드, 백엔드 |
| 69 | +- 서버와 클라이언트 |
| 70 | + |
| 71 | +##### HTML 이란? |
| 72 | +- 실제 사이트(네이버 & 페이스북 등)를 예로 들어 설명 |
| 73 | + |
| 74 | +##### HTML 의 기본적인 내용 |
| 75 | +- 실제 사이트에 주로 사용되는 줄바꿈 태그, 이미지 삽입 태그, 링크 삽입 태그 등을 설명 |
| 76 | + |
| 77 | +##### HTML 과 친해지기 |
| 78 | +- 기존 사이트(네이버 & 페이스북 등)의 HTML 코드를 수정하여 자신의 것으로 만들어보고, 실시간 검색어 바꿔보기 |
| 79 | + |
| 80 | +#### 3차시 |
| 81 | + |
| 82 | +##### HTML 태그 몇 가지 익히기 |
| 83 | +- 2차시에 배웠던 태그 및 수평선 태그, 표 삽입 태그, 배경사진 첨부 태그 |
| 84 | + |
| 85 | +##### CSS 배워보기 |
| 86 | +- 배경색 지정해주기, transition 태그및 동적 사이트 제작에 필요한 태그 배워보기 |
| 87 | + |
| 88 | +##### HTML 로 간단히 자신의 사이트 만들기 |
| 89 | +- 단 우리가 제시한 조건(표 삽입, 배경화면 삽입, 메뉴바 생성, 사진 삽입 등)에 부합하는 사이트 만들기 |
| 90 | + |
| 91 | +#### 4차시 - DB란? |
| 92 | +- DB에 대한 기본적인 개념과 사용 예 |
| 93 | + - 데이터에 대한 설명을 하고, 데이터의 집합이 데이터베이스라는 것을 알려줌 |
| 94 | + - 데이터베이스의 특징(실시간 접근, 중복 X 등) 지루하니까 짧고 간단하게 |
| 95 | + - 데이터베이스의 사용 예시(전화번호부, 기업), 인식은 못하지만 엄청나게 많이 사용되고 있음(필요성) |
| 96 | + - DBMS의 개념 - 데이터베이스를 관리하는 시스템 |
| 97 | + |
| 98 | +- MySQL 소개(설치는 되어 있음) |
| 99 | + - 우리가 사용할 DBMS라는 것을 알려주고, 간단한 MySQL 설명 |
| 100 | + - Bitnami 실행 |
| 101 | + |
| 102 | +- MySQL DB, TABLE 만들기 |
| 103 | + - DB, TABLE 개념을 그림(행과 열로 이루어진 표)으로 설명하고 강사가 새로운 DB 하나 그려보기(이런 DB에는 어떤 내용이 들어가야 될까요? 물어보는 형식으로 진행) |
| 104 | + - 강사가 한대로 각자 만들고 싶은 DB 생각하고, 그 DB에 들어갈 속성 떠올리기(이 때 INT, CHAR, DATE 등 속성 설명하기) |
| 105 | + - 각자 설계한 DB를 그림으로 그리고, 명령어를 사용하여 만들고 보기(CREATE, SHOW, DESC) |
| 106 | + - 명령어는 대소문자 구분없음 |
| 107 | + |
| 108 | +#### 5차시 - Mysql 구문, 원리 익히기 |
| 109 | +- 이전 시간에 배운 DB, TABLE 만들기 간단하게 복습 |
| 110 | + |
| 111 | +- 이전 시간에 만든 DB에 데이터 삽입하고 확인하기(INSERT, SELECT) |
| 112 | + - ; 찍기 전까지는 명령어 안끝나니 너무 길어지면 보기 편하게 enter 누르세요 |
| 113 | + - 한 두번 같이해보고 각자 데이터 쭉쭉 넣어보기(많으면 좋음, 뒤에서 농락할 생각) |
| 114 | + |
| 115 | +- 이번에는 데이터 삭제해보기(DELETE) |
| 116 | + - 문제가 발생! 삭제하니까 다 삭제됨 |
| 117 | + - WHERE의 필요성을 몸소 느낌 |
| 118 | + |
| 119 | +- WHERE 설명 |
| 120 | + - 필요성 설명하기(데이터를 잘못삽입한 경우, 데이터가 너무 많으면 원하는 데이터 보기 보기 힘들음) |
| 121 | + - =, <, >, 연산자 설명 |
| 122 | + - WHERE를 사용하여 조건을 만드는 문제를 몇개 내줌? ex.) 가격이 1000이상인 데이터만 뽑아보세요 |
| 123 | + - 조건이 '또는', '그리고'로 연결되어 있는 문제가 나옴 |
| 124 | + - 그리고 AND, OR, NOT 설명하기 |
| 125 | + - AND, OR, NOT 사용해보기 |
| 126 | + |
| 127 | +#### 6차시 - 서버란? |
| 128 | +- 서버와 클라이언트, 백엔드 개념 복습하기(2차시에 있음) |
| 129 | +- PHP와 필요성에 대한 설명 |
| 130 | + - 저번에 SELECT와 WHERE로 데이터 뽑아온것을 쉽게 웹페이지에 띄울 수 있음 |
| 131 | + - 웹문서 하나하나 찾아가면서 내용 수정 안해도 됨 |
| 132 | + - 반복문, 조건문이라는 것이 있음 |
| 133 | + |
| 134 | +- echo를 사용해서 아무거나 출력해보기 |
| 135 | + - 문자열은 따옴표로 감싸야됨 |
| 136 | + |
| 137 | +- PHP에 사용될 변수와 연산자 설명 |
| 138 | + - 변수는 앞에 &가 붙음 + 변수 생성 규칙(대소문자 구분 등) |
| 139 | + - 연산자 +, -, *, % 등 설명하기 |
| 140 | + |
| 141 | +- 변수끼리 사칙연산을 해서 출력해보기 |
| 142 | + |
| 143 | +#### 7차시 |
| 144 | +##### PHP 쿠키 로그인 |
| 145 | +- 쿠키의 개념을 알려줌 |
| 146 | +- 로그인 원리 알려줌 |
| 147 | +- 쿠키 로그인 구현 |
| 148 | +- 로그인을 구현하면서 대략적으로 알고 있을 조건문과 반복문에 대한 개념 확실히 함. |
| 149 | + |
| 150 | +##### PHP Session Login |
| 151 | +- HTTP 상에서의 세션의 개념 알려줌. |
| 152 | +- 세션 로그인 구현 |
| 153 | +- 세션 탈취를 이용한 계정 변경 시연을 이용해 세션의 중요성과 원리를 다시 배움. |
| 154 | + |
| 155 | +##### PHP MySQL Connection |
| 156 | + - 시간이 여유롭다면 진행할 예정. |
| 157 | + - mysqli* 함수를 이용해서 수업 (PDO, mysql 객체는 객체 지향의 개념이 들어가기 때문에 함수로 대체) |
| 158 | + - 위의 과정에서 만든 로그인 코드에 약간의 코드를 더하여 완성 |
| 159 | + |
| 160 | +#### 8차시 |
| 161 | +##### Javascript의 개념 및 배경 지식 |
| 162 | +- Javascript의 개념 및 사용되는 이유 |
| 163 | + - Naver, Facebook 등 유명한 사이트의 Javascript의 소스 코드를 보여주며, Browser 상에서(Client Side에서) 유용하기 때문에 많이 사용한다고 설명할 예정임 |
| 164 | +- Javascript의 기본 문법 |
| 165 | +- Chrome 등의 Browser 상에 내장된 Javascript Console로 수업 진행 (IE는 불편하기 때문에 수업에서 배제할 계획임) |
| 166 | + |
| 167 | +##### 필수적으로 가르쳐야할 내용 |
| 168 | +- DOM (Document Object Model)에 대해서 설명. |
| 169 | + - document.cookie |
| 170 | + - document.domain |
| 171 | + - document.getElementById() |
| 172 | + - etc. |
| 173 | +- Location 객체에 대해 설명 |
| 174 | + - location.href (이것을 통해 Cookie 및 Session 값을 빼앗기 때문임.) |
| 175 | + |
| 176 | +##### Javascript 함수 둘러보기 |
| 177 | +- 웹 페이지에서 많이 사용하는 함수 위주로 교육 에정 |
| 178 | +- alert, confirm, prompt 등 |
| 179 | + |
| 180 | + |
| 181 | +#### 10차시 |
| 182 | +##### XSS |
| 183 | +- XSS 란? (CSRF랑 비교해서 설명) |
| 184 | +- XSS 시연 ( https://xss-game.appspot.com/, naver xss 시연 영상 ) |
| 185 | +- XSS 취약점 찾기 (미리 만든 예제 사용, 예제 1-1) |
| 186 | + |
| 187 | + |
| 188 | +#### 11차시 |
| 189 | +##### SQLi 란? |
| 190 | +- SQLi 시연 ( https://los.eagle-jump.org/ ) |
| 191 | +- SQLi 직접 해보기 (미리 예제를 만들어 사용, 예제 1-2, https://los.eagle-jump.org/ ) |
| 192 | + |
| 193 | +##### 자체 CTF 안내 |
| 194 | +- 규칙, 시간 안내 |
| 195 | +- CTF 서버 오픈 |
| 196 | + |
| 197 | +#### 12차시 |
| 198 | +##### 자체 CTF 진행 |
| 199 | +- 팀으로 나누어서 진행 (멘토는 문제와 관련된 개념 또는 원리만 알려줌.) |
| 200 | +- 순위에 따라 보상 지급 |
| 201 | + |
| 202 | + |
| 203 | +## 예제 |
| 204 | + |
| 205 | +### 1-1 |
| 206 | +``` |
| 207 | +<?php |
| 208 | + $a = $_GET['a']; |
| 209 | + echo $a; |
| 210 | +?> |
| 211 | +
|
| 212 | +=> <script> alert(1); </script> |
| 213 | +``` |
| 214 | +``` |
| 215 | +<?php |
| 216 | + $a = $_GET['a']; |
| 217 | + if(preg_match('/script/i', $a)) exit("No Hack ~_~"); |
| 218 | + echo $a; |
| 219 | +?> |
| 220 | +
|
| 221 | +=> <img src=x onerror="alert(1)"> |
| 222 | +``` |
| 223 | + |
| 224 | +### 1-2 |
| 225 | + |
| 226 | +``` |
| 227 | +<?php |
| 228 | + include './db_config.php' |
| 229 | +
|
| 230 | + if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); |
| 231 | + if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); |
| 232 | + $query = "select id from prob where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; |
| 233 | + echo "<hr>query : <strong>{$query}</strong><hr><br>"; |
| 234 | + $result = @mysql_fetch_array(mysql_query($query)); |
| 235 | + if($result['id']) echo $flag; |
| 236 | + highlight_file(__FILE__); |
| 237 | +?> |
| 238 | +``` |
0 commit comments