1. 선수 지식: Docker와 OS 구조
본격적인 셸 개념에 앞서, 애플리케이션이 실행되는 환경인 Docker와 OS의 구조를 간단히 짚고 넘어가도록 하자.

- Docker: 애플리케이션을 '컨테이너'라는 격리된 환경에서 실행할 수 있게 해주는 가상화 플랫폼입니다. 코드, 라이브러리, 실행 환경을 하나로 묶어 어디서든 동일하게 실행되도록 한다. → 도커에 대한 내용은 추후 자세하게 포스팅할 예정이다.

- Kernel (커널): OS의 심장부로, 하드웨어 자원(I/O, 메모리 등)을 직접 제어하고 프로세스를 관리한다.
- Shell (셸): 사용자와 커널 사이의 인터페이스이다. 사용자가 명령어를 입력하면 이를 해석하여 커널이 이해할 수 있도록 전달해 주는 '명령어 해석기' 역할을 한다.
2. Web Shell (웹 셸)이란?

공격자가 웹 서버의 취약점을 이용해 침투할 때 가장 흔히 사용되는 방식 중 하나가 바로 웹 셸이다.
- 정의: 공격자가 웹 서버에 업로드하거나 삽입하는 악성 스크립트 파일
- 목적: 웹을 통해 서버 내부의 명령어를 원격으로 실행할 수 있게 해주는 백도어(Backdoor) 역할을 수행
- 작동 원리
- 공격자가 파일 업로드 취약점 등을 이용해 웹 서버에 스크립트 파일(php, jsp, asp 등)을 업로드
- 웹 브라우저를 통해 해당 파일에 접근
- 스크립트가 실행되면서 웹 서버의 시스템 명령어를 수행하고 결과를 공격자에게 보여줌
3. 셸 연결 방식: Bind Shell vs Reverse Shell
공격자가 서버의 셸을 획득하여 연결하는 방식은 접속 주체(누가 누구에게 연결하느냐)에 따라 크게 두 가지로 나뉩니다.
(1) Bind Shell (바인드 셸)
- 개념: 가장 일반적인 서버 접속 형태입니다.
- 연결 흐름: 서버(피해자)가 특정 포트를 열어두고 기다리면, 클라이언트(공격자)가 해당 포트로 접속하여 셸을 생성합니다.
- 특징: 방화벽에서 인바운드(Inbound) 정책이 엄격할 경우, 공격자가 외부에서 내부 서버로 접속하는 것이 차단될 수 있어 실제 해킹 시나리오에서는 제약이 많음.
(2) Reverse Shell (리버스 셸)
- 개념: 바인드 셸과는 반대로 연결이 이루어지는 형태
- 연결 흐름: 클라이언트(공격자)가 자신의 포트를 열고 리스닝(Listening)을 하고 있으면, 서버(피해자)가 공격자 쪽으로 접속을 요청하여 연결을 맺음.
- 중요성: 대부분의 방화벽은 외부에서 들어오는 연결(Inbound)은 막지만, 내부에서 외부로 나가는 연결(Outbound)은 허용하는 경우가 많습니다. 따라서 공격자는 리버스 셸 기법을 이용해 방화벽을 우회하여 셸 권한을 획득하는 경우가 많습니다.
| 구분 | Bind Shell | Reverse Shell |
| 연결 방향 | 공격자 ➡ 서버 (접속) | 서버 ➡ 공격자 (접속) |
| 리스닝 주체 | 서버 (피해자) | 클라이언트 (공격자) |
| 방화벽 | 인바운드 차단 시 접속 불가 | 아웃바운드 허용 시 우회 가능 |
4. 실습 및 마무리
https://tryhackme.com/room/vulnversity
Vulnversity
Learn about active recon, web app attacks and privilege escalation.
tryhackme.com
풀이(아직 안함)
'설명' 카테고리의 다른 글
| Mac에서 CTF / pwn 실습용 원격 개발 환경 구축 (0) | 2026.01.15 |
|---|---|
| SSTI(Server-Side Template Injection)와 Python RCE 원리 (0) | 2026.01.09 |
| XSS란? (0) | 2026.01.03 |
| SQL injection 이란? (0) | 2025.12.31 |
| mac에서 x86 환경 구축하기 (0) | 2025.08.31 |