Nmap을 활용한 웹 애플리케이션 모의 해킹

NmapBeginner
지금 연습하기

소개

이번 실습에서는 정보 보안의 핵심 분야인 웹 애플리케이션 모의 해킹에 대해 알아봅니다. 웹 애플리케이션은 다양한 영역에서 널리 사용되고 있으므로, 그 보안은 최우선 과제입니다. 본 실습은 대상 머신에서 호스팅되는 취약한 웹 애플리케이션의 취약점을 식별하고 공격하는 실습 경험을 제공하는 것을 목표로 합니다. 이를 통해 일반적인 웹 애플리케이션 취약점과 이를 공격하는 기법에 대한 이해를 높일 수 있습니다.

환경 설정

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

먼저, 바탕 화면의 xfce 터미널을 더블 클릭하고 다음 명령어를 실행하여 Kali Linux 이미지의 ID를 확인해야 합니다.

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)을 사용하여 대상 웹 서버의 디렉터리와 파일을 무차별 대입(brute-force) 방식으로 찾습니다. -t 옵션은 동시 스레드 수를 지정하며, -o 옵션은 결과를 gobuster_scan.txt 파일로 저장합니다.

gobuster_scan.txt 파일을 분석하여 추가 정보나 공격 벡터를 제공할 수 있는 흥미로운 디렉터리나 파일이 있는지 확인하세요.

취약점 공격

이 단계에서는 이전 단계에서 식별된 취약점을 공격해 봅니다.

nmap 및 gobuster 스캔에서 수집된 정보를 바탕으로 대상 시스템의 잠재적 취약점을 식별합니다. Metasploitable2에는 취약한 Mutillidae 교육용 애플리케이션이 포함되어 있으므로, 이 단계에서는 자리 표시자 URL 대신 해당 애플리케이션의 실제 페이지를 테스트합니다.

웹 애플리케이션에서 흔히 발견되는 취약점 중 하나는 SQL 인젝션입니다. Mutillidae의 user-info.php 페이지는 쿼리 문자열에서 username 매개변수를 허용하므로, Kali Linux 컨테이너 내에서 sqlmap을 사용하기 위한 구체적인 타겟이 됩니다.

sqlmap -u "http://192.168.122.102/mutillidae/index.php?page=user-info.php&username=admin&password=admin&user-info-php-submit-button=View+Account+Details" -p username --batch --risk=3 --level=5 --random-agent --dbs

이 명령어는 대상 VM의 실제 Mutillidae 엔드포인트를 테스트합니다. -u 옵션은 전체 취약 URL을 제공하고, -p usernamesqlmap이 집중할 매개변수를 지정하며, --batch는 비대화형으로 실행하고, --risk=3--level=5는 더 깊은 테스트를 활성화하며, --random-agent는 사용자 에이전트 문자열을 무작위로 변경하고, --dbs는 공격 성공 시 데이터베이스 이름을 열거하도록 sqlmap에 지시합니다.

공격하려는 취약점에 따라 다른 도구나 기법을 사용해야 할 수도 있습니다. 특정 취약점 및 도구에 대한 문서와 리소스를 참조하세요.

공격 후 단계 및 권한 상승

이 단계에서는 정찰 중에 발견된 서비스 노출을 사용하여 대상 시스템에 대한 셸 접근 권한을 확인하고 기본적인 공격 후 증거를 확보합니다.

Metasploitable2의 nmap 스캔 결과에는 일반적으로 TCP 포트 1524가 열려 있는 것으로 나타납니다. 이 VM에서 해당 서비스는 루트 셸을 제공하므로, 별도의 리버스 셸이 이미 존재한다고 가정할 필요 없이 Kali Linux 컨테이너에서 직접 연결할 수 있습니다.

Kali Linux 컨테이너에서 다음 명령어를 실행하세요.

printf 'id\nuname -a\nexit\n' | nc 192.168.122.102 1524

이 명령어는 대상 VM의 노출된 셸 서비스로 세 가지 명령어를 보냅니다. id 명령어는 서비스가 제공하는 계정을 확인하고, uname -a는 커널 정보를 기록하며, exit는 터미널에 출력이 표시된 후 셸을 깔끔하게 닫습니다.

연결이 성공하면 uid=0(root)와 Metasploitable2 커널 세부 정보가 포함된 출력을 볼 수 있습니다. 이 출력은 공격 후 단계에서 성공적인 셸 접근을 입증하기에 충분합니다.

실제 평가에서는 이 노출된 서비스가 추가적인 공격 체인 없이 즉각적인 권한 접근을 허용하므로 이를 심각한 발견 사항으로 문서화해야 합니다.

요약

이번 실습에서는 웹 애플리케이션 모의 해킹에 대해 배우고, 대상 머신에서 호스팅되는 취약한 웹 애플리케이션의 취약점을 식별하고 공격하는 실습 경험을 쌓았습니다. 정찰, 웹 애플리케이션 열거, sqlmap을 이용한 SQL 인젝션 테스트, 그리고 기본적인 공격 후 검증 단계를 다루었습니다.

본 실습은 실제 시나리오를 연습하고 웹 애플리케이션 보안 기술을 개발할 수 있는 통제된 환경을 제공했습니다. 각 단계를 따라가며 실습 환경 설정 방법, 정찰 및 정보 수집 수행, SQL 인젝션을 위한 실제 Mutillidae 엔드포인트 테스트, 그리고 대상 시스템의 노출된 서비스를 통한 셸 접근 확인 방법을 배웠습니다.

이 실습을 통해 웹 애플리케이션 보안을 강화하고 악의적인 공격자가 취약점을 악용하기 전에 이를 식별하는 데 필수적인 웹 애플리케이션 모의 해킹에 대한 실무 지식과 경험을 갖추게 되었습니다.