홈서버를 운영하면서 가장 중요한 것은 보안이었다.
아무리 웹 사이트 기능을 마음에 들게 구축해도, 사방에서 들어오는 해킹에 한번 당하고 나니 무용지물이었다.
지난번에 해킹으로 3일 동안 털릴때는 정말 무서웠다.
그래서 해킹에 대해 공부해보기로 했다.
유튜브에서 해킹 맛보기라는 책이 바이블 같은 책이라고 해서 샀는데...
출판일이 2015년이라는 것을 미처 보지 못했다.

결국 책은 왔고, 책을 펴면서 익스플로러, 구형 크롬, http가 찍힌 주소를 보며 뭔가 잘못됐음을 깨달았다.
무어의 법칙에서 반도체 집약도가 2의 지수승으로 증가하므로, 10년 전이면 100~300년 전 책과 같다.
중력을 공부하겠다고 뉴턴의 저서인 프린키피아를 읽는것과 비슷하다.
하지만 이미 늦은 것.
일단 최대한 빨리 읽으며 흐름만을 파악하는 것으로 만족해야 할 것 같았다.

1. 내용 살펴보기
1장) 맛보기
1장의 맛보기 내용은 이제 너무 오래되서 거의 맞지 않는 것들이 많다.
하지만 배울 것들은 있다.
저자가 소개하는 해킹 사이트인 Wechall은 이제 구형이고, TryHackMe, Hack The Box 같은 사이트들이 더 점유율이 높다고 한다.
항목 | WeChall | TryHackMe | Hack The Box |
|---|---|---|---|
주 용도 | 여러 워게임 랭킹 및 모음 | 초중급 보안 실습 + 학습 | 실전 침투 테스트 + 고급 실습 |
사용자 수 | (공식 공개 없음) | ~4.5M 사용자 | 매우 활발, 업계에서도 인기 |
학습 구조 | 주로 외부 워게임 링크 모음 | 단계별 학습 코스 + CTF | 실제 시스템 해킹 실습 중심 |
주 관심층 | 워게임 애호가, 점수 경쟁 | 초보~중급 보안 학습자 | 중급~전문가 및 실전 준비자 |
또한 2drunk2hack 행사도 사라졌고, Paros와 같은 해킹 툴도 이제는 레거시라고 한다.
그래도 책을 읽으며 해킹 툴이 따로 존재한다는 사실도 알게 되었다.
레거시 기능은 익힐 필요 없으니 이런게 있구나 하고 넘어가면 된다.
항목 | Paros | Burp | ZAP | mitmproxy |
|---|---|---|---|---|
유지보수 | ❌ 중단 | ✅ 활발 | ✅ 활발 | ✅ 활발 |
HTTPS 최신 대응 | ❌ | ✅ | ✅ | ✅ |
실무 사용 | ❌ | ✅ 압도적 | △ | △ |
자동화 | ❌ | △ | △ | ✅ |
무료 | ✅ | ❌(Pro) | ✅ | ✅ |
유튜브에서 현재 구독중인 Nomaltic Place라는 분은 OverTheWire같은 워게임 사이트를 소개해주기도 한다.
이 책의 1장 보다는 아래의 내용이 조금 더 유익할 것 같다.
2장) 웹해킹
웹해킹에서는 php, mysql 설치부터 시작해서 검색을 이용한 취약점 탐색, 파일 업로드, 크로스 사이트, 쿼리 인젝션을 간단하게 다룬다.
구글 해킹 부분이 좀 신박했는데, 아래와 같이 사이트 운영자의 실수로 노출된 취약점을 검색을 통해 찾는 것이다.
목적 | 검색 예 |
|---|---|
노출된 백업 파일 |
|
환경변수 노출 |
|
디렉토리 리스팅 |
|
로그 파일 |
|
설정 파일 |
|
카메라 |
|
관리자 페이지 |
|
업로드 이미지를 통한 해킹 방법도 있었다.
이미지 태그에 <img src="/board/file/shell.php>와 같이 주입해 shell을 실행하는 것이다.
예전에 홈서버에서 이미지 프록시 api를 열어놨더니, 어떤놈이 이미지 태그내에 onerror={} 를 심고, 여기에 fetch 함수와 명령어를 이용해서 파일을 다운 받은 뒤 실행하려다 관리자 권한을 얻지 못해 실패하는 걸 본 적 있다.

또한 Web Shell 제작에 대한 내용도 있었다.
글쓴이는 C99를 소개했지만 이제는 옛말.
이제는 경량, 암호화 셀을 더 많이 쓴다고 한다.
시기 | 주류 웹 셸 | 특징 |
|---|---|---|
2000s–2010s | C99, R57, WSO | 기능 중심, PHP 기반, 크고 눈에 띔 |
2020s 중반 | China Chopper 변종 | 경량 + 은폐 + 암호화 |
최근(2024–2025) | Beima PHP Webshell 유형 및 커스텀/암호화형 셸 | JSON 인터페이스, 암호화 요청, C2 연계 |
쿼리 인젝션은 예전부터 알고 있는 내용이었지만, 책을 읽으며 더 자세히 알 수 있었다.
중요한 점은 사용자의 입력을 신뢰하면 안된다는 것이다.
반드시 검증 과정을 거쳐서 백앤드로 들어가도록 만들어야 한다.
3장) 리버스 엔지니어링
리버스 엔지니어링이란 나와있는 프로그램을 다시 분해하는 것을 의미한다.
쉽게 말하자면 python으로 개발 후 pyinsaller로 컴파일 된 exe 파일을 다시 .py로 만들어내는 과정이라고 생각하면 된다.
저자는 Visual Studio Express, OllyDbg를 소개한다.
최신 리버싱 툴들을 정리해 보았다.
도구 | 주요 용도 | 특징 | 플랫폼 |
|---|---|---|---|
Ghidra | 정적 분석 + 디컴파일 | 강력한 오픈소스 프레임워크, 디컴파일 포함, NSA 개발 | Windows / Linux / macOS |
Radare2 | 정적 분석(명령/스크립팅) | 완전 무료 오픈소스, CLI 중심, 다양한 바이너리 지원 | Windows / Linux / macOS 등 |
x64dbg | 동적 디버깅 | Windows용 32/64비트 디버거, GUI 제공, 인기 많음 | Windows |
Frida | 런타임 동적 분석 | 앱/바이너리 실행 중 후킹·트레이싱 가능, 모바일 분석에 강점 | Windows / Linux / macOS / 모바일 |
리버싱 과정에서 계산기를 많이 두드린다고 하지만, 이제 Cursor와 같은 자동화 앱에 올리면 끝이다.
하지만 난독화 같은 부분이 들어가면 사람의 해석이 여전히 필요하다.
아래와 같은 부분은 AI가 해석하기 쉽지 않다고 한다.
영역 | 이유 |
|---|---|
로직 오류 | 의도 문제 |
경계 조건 | 설계 판단 |
보안/리버싱 | 맥락 의존 |
이상 값 | 직관 필요 |
그리고 컴퓨터 구조와 어샘블리어 부분이 정말 미친 것 같다.
cpu 구조는 예전에 배워서 알고 있었지만 변수가 저장되는 부분, 숫자를 계산하는 부분, 문자열이 들어가는 부분이 모두 다르다는 것은 처음 알았다.
어샘블리어에서 16진수로 변환된 덧샘, 가정문, 반복문 등을 보는데 눈이 돌아갔다.

그리고 그 뒤에는 OllyDbg으로 실제 리버싱 실습 부분이 나왔다.
어차피 쓰지 않는 프로그램이기에 바로 4장으로 넘어갔다.
4장) 시스템 해킹
시스템 해킹은 운영체제 해킹과 같은 말이다.
파이썬 설치 같은 부분도 있는데, 취약점을 주로 다루어 보겠다.
(1) 명령어 삽입 취약점
명령어 삽입 방식은 개발자가 유저의 입력을 신뢰하면서 발생할 수 있다.
예를들어 아래와 같은 코드가 있다고 하자.
system("ping " + user_input);이 때 유저가 ; rm -rf / 을 입력해 버린다면, 개발자가 의도치 않은 명령어를 실행하게 된다.
유저의 입력을 받을 때는 반드시 검증 과정이 필요하다.
(2) 레이스 컨디션 공격
레이스 컨디션 공격은 멀티 스레딩, 또는 다중 요청 환경에서 공유 자원의 상태 확인과 사용 사이에 발생하는 시간차이를 노린다.
자원을 확인하고 사용하는 사이 순서가 어긋나게 되는 상황을 악용하는 것이다.
문제는 이 타이밍을 어떻게 잡느냐이다.
그래서 공격자는 요청을 빠르게, 동시에, 많이 하면서 실행 사이의 빈틈을 파고든다.

예를들어 놀이동산을 아래와 같은 순서로 입장한다고 해보자.
직원의 출입자 표 검사 -> 문을 열음 > 표를 검사받은 사람이 입장 -> 문 닫음이 때 먼저 온 A가 표를 검사 받았는데 열린 문으로 늦게 온 B가 들어가게 된다면, 이는 레이스 컨디션 공격이다.
이를 막기 위해서는 아래와 같은 설계가 필요하다.
1. 공용 상태를 줄이기
2. 원자성 보장하기 -> 체크 + 입장을 동시에 처리하기
3. 공유 자원을 건드리는 부분을 Lock으로 묶어 한번에 하나의 요청씩 처리하기
4. DB/스토리지에 맡기기
5. 임시/공유파일 안전하게 다루기
6. 재시도/멱등성 설계 -> 동일한 요청은 한 번만 처리하기(3) 메모리 오염 공격
버퍼 오버플로우 공격에 대해 조금 더 세부적으로 이해할 수 있었다.
예전에 c의 배열을 배우면서 오버 플로우에 대해 배운적이 있기에 조금 더 수월했다.
아래와 같은 상황에서 유저의 입력이 길어지면 인접한 메모리가 침범되는 것이다.
char arr[3];
scanf("%s", arr);5장) 버그 헌팅
버그 중에서도 문제를 일으킬 수 있는 버그를 보안 취약점이라고 한다.
공격자들은 이런 취약점들을 이용해 권한을 획득하고나, 사용자를 공격할 수 있다.
(1) 취약점 찾기
취약점을 찾는 방법은 여러가지이다.
소스코드 감사 - 코드 자체를 하나씩 분석하면서 취약점을 찾음
바이너리 감사 - 소프트웨어 소스가 없을 때 부득이하게 컴파일된 바이너리를 분석
퍼징 - 소프트웨어의 입력값을 자동으로 생성해 입력하고 그 결과를 통해 취역점을 탐색
(2) 취약점의 종류
메모리 오염 - 스택 오버플로우, 힙 오버플로우, 널 포인터 역참조, 해제 후 사용
설계 - 보안적인 측면을 완벽하게 고려하지 못한 로직
(3) 웹에서의 버그 헌팅
책에서는 제로보드 XE 원격 코드 실행을 서술해 놨지만, 너무 오래된 내용이기에 최근에 있었던 React2Shell에 대해 알아보기로 했다.
최근에 있었던 가장 큰 취약점으로, 원격으로 shell 과 명령어 실행이 가능한 보안 취약점이다.
문제는 아무런 API가 없는 npx create-next-app 로 생성된 앱에도 공격이 가능하다는 것이다.
공격 방법에 대한 내용은 Github의 사용자 zr0n이 구현해 놓았다.
그리고 안랩에 들어가면 취약점 원인과 공격 방법을 자세하게 분석해 두었다.
핵심만 이야기하자면 아래와 같다.
Flight 스트림에서 참조/레코드 해석 중 일부가 Promise resolution(thenable 동화)을 거치는데, 공격자는 : 경로 대입에서 __proto__ 검증이 약한 점을 이용해 프로토타입을 오염시킨다. 그 결과 _response._formData.get 같은 메서드가 Function으로 바뀌면 이후 정상 코드 경로에서 get(...) 호출이 문자열 실행으로 변질된다. thenable은 이 변질된 경로가 자동으로 실행되도록 트리거하는 역할을 한다.
제일 중요한 과정은 __proto__라는 매직 프로퍼티를 이용해 프로토 타입을 오염시키는 것이다.
이러한 공격 방식을 프로퍼타입 오염(Prototype Pollution) 이라고 한다.
(4) 다양한 환경에서의 버그 헌팅
이후 내용은 안드로이드에서의 권한상승 버그, 윈도우에서 곰플레이어, 한글의 원격 코드실행 등의 내용을 다룬다.
6장) 디지털 포렌식
디지털 데이터의 특성, 증거 능력 보장을 위한 특성, 증거 유형 등을 다룬다.
책이 오래되기도 했고, 아직 디지털 포렌식에는 큰 관심이 없어 대충 보고 넘어갔다.
7장) 취약점 마켓
취약점 마켓으로 블랙마켓을 소개해주고 있지만, 지금은 거의 착을 수 없다고 한다.
블랙마켓 사용 방법은 필요 없기에 아래 표로 대체한다.
구분 | 상태 |
|---|---|
공개 블랙마켓 | ❌ 거의 소멸 |
다크웹 포럼 | ⚠️ 축소·위장 |
메신저 기반 비공개 거래 | ✅ 활성 |
랜섬웨어 생태계 | ✅ 매우 활성 |
버그바운티 | ✅ 합법 루트 |
국가/정보기관 회색시장 | ✅ 고가 거래 |
2. 독서 후기
책을 읽으며 기본적인 해킹의 개념을 잡을 수 있었다.
해킹은 보안 취약점을 찾는 과정이고, 이 과정은 집의 보안을 생각하는 과정과 같다.
누가 어디로 들어올 수 있을지, 어떻게 들어오고 그 권한을 어떻게 얻는지를 보면 된다.
나름 재미있어서 앞으로도 해킹에 대해 꾸준히 공부하고 싶다는 생각이 들었다.
예전에는 코딩에 대한 정보를 얻기 힘들었지만, 지금은 AI나 웹을 통해 누구나 쉽게 접근할 수 있는 내용이 되었다.
그리고 10년이라는 시간은 개발 쪽에서는 엄청나게 긴 시간인 것 같다.
책에서 다루는 내용들 중에 이제는 사라진 것들이 너무나도 많다.
해킹에 대한 내용을 자세히 알고 싶다면, 이제는 다른 책을 사거나 웹을 이용해야 할 것 같다.

댓글을 불러오는 중...