웹 아키텍처 유형
1. 순수 정적 웹
순수 정적 웹은 사용자와의 상호작용이 없으며, 단순히 정보를 표시하는 용도로만 사용됩니다. 이 때문에 일반적인 웹 취약점이 존재하지 않습니다.
2. 프론트엔드와 백엔드가 분리되지 않은 웹
프론트엔드 코드가 백엔드 프레임워크에 내장되어 있습니다. 사용자가 웹사이트에 접속하면, 백엔드에서 페이지를 렌더링하여 사용자에게 전달합니다. 사용자의 요청이 있을 때마다 페이지가 새로 고침됩니다.
3. 프론트엔드와 백엔드가 분리된 웹
프론트엔드는 정적 리소스 서버나 CDN에 배치되고, 백엔드는 별도의 서버에 배치됩니다. AJAX와 같은 인터페이스를 통해 통신하며, 사용자 상호작용 시 전체 페이지를 다시 로드하지 않고 부분적으로 업데이트됩니다.
웹 구축 유형
1. 템플릿 기반 구축
공식 제공되는 템플릿을 기반으로 웹사이트를 생성합니다. 개인 블로그나 사이트가 공식 사이트의 하위 도메인으로 운영되며, 보안 문제는 주로 공식 사이트에 의존합니다.
2. 독립/미러 구축
- 독립 구축: 개발자가 직접 Apache, PHP, MySQL 등을 설치하여 웹 아키텍처를 구성합니다.
- 미러 구축: 미러 이미지를 통해 필요한 소프트웨어를 미리 설치한 상태로 받습니다.
3. 통합 소프트웨어 구축
통합 소프트웨어 패널(예: 보타, Phpstudy)을 사용하여 간편하게 웹 서비스를 구축할 수 있습니다. 이러한 소프트웨어는 기본 보안 설정이 포함되어 있어 더 안전하고 편리합니다.
4. 컨테이너 구축
컨테이너는 가상 머신과 달리 OS만 가상화합니다. Docker와 같은 도구를 사용하여 컨테이너 내에서 웹 서비스를 구축할 수 있습니다.
실험
1. 실험 내용
독립/미러, 통합 소프트웨어, 컨테이너 방식으로 웹 서비스를 구축하고, 웹셸 권한의 차이를 관찰합니다.
2. 실험 단계
- 알리바바 클라우드에서 3대의 Ubuntu 서버를 임대하고, 각각의 방식으로 웹 서비스를 구축합니다.
- 독립 구축:
sudo apt update sudo apt upgrade -y sudo apt install apache2 -y sudo systemctl start apache2 sudo systemctl status apache2 sudo apt install php libapache2-mod-php php-mysql php-cli php-curl php-xml php-mbstring -y sudo systemctl stop ufw
- 보타 구축:
sudo apt install -y wget curl wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh sudo bash install.sh
- Docker 구축:
sudo apt update sudo apt install -y docker.io sudo systemctl start docker docker pull php:7.4-apache
- GoatShell을 사용하여 .php 백도어 파일을 업로드:
# 독립 구축, 웹 서비스 기본 디렉토리: /var/www/html # 보타 구축, 기본 디렉토리: /www/wwwroot/xxx.xxx.xxx.xxx/ # Docker 구축, 로컬 파일을 Docker의 HTTP 서비스 기본 디렉토리에 마운트: docker run -d --name test-web -p 80:80 -v /door.php:/var/www/html/door.php php:7.4-apache
- GoatShell을 사용하여 연결하고, 각 구축 방식에 따른 서버 권한의 차이를 관찰합니다.
- 독립 구축: 높은 권한, 디렉토리 탐색 및 명령 실행 가능.
- 보타 구축: 보안 정책으로 인해 디렉토리 탐색 및 명령 실행 불가능.
- Docker 구축: 컨테이너 권한만 얻을 수 있으며, 실제 서버 권한 획득이 어려움.