Burp Suite 와 같은 프록시와 sqlmap 통합하기

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 강력한 오픈 소스 침투 테스트 도구인 sqlmap 을 Burp Suite 와 같은 가로채기 프록시 (intercepting proxy) 와 통합하는 방법을 배우게 됩니다.

sqlmap 과 함께 프록시를 사용하는 것은 보안 전문가에게 매우 중요한 기술입니다. 이를 통해 sqlmap 이 보내는 정확한 페이로드 (payload) 를 확인하고, 테스트 로직을 이해하며, 잠재적인 문제를 디버깅하고, 심지어 요청을 실시간으로 수정할 수도 있습니다. 이러한 가시성은 SQL 인젝션 공격이 어떻게 작동하는지 학습하고 보다 고급적이고 맞춤화된 보안 평가를 수행하는 데 모두 매우 유용합니다.

이 랩이 끝나면 sqlmap 의 트래픽을 Burp Suite 를 통해 라우팅하고, 생성된 요청을 관찰하며, 자동화된 공격 패턴을 분석할 수 있게 될 것입니다.

Burp Suite 를 로컬 포트에서 수신하도록 구성하기

이 단계에서는 Burp Suite 를 실행하고 프록시 리스너 (proxy listener) 가 활성화되어 있는지 확인할 것입니다. Burp Suite 는 웹 프록시 서버 역할을 하며, 브라우저 (이 경우 sqlmap) 와 대상 애플리케이션 사이에 중간자 (man-in-the-middle) 역할을 합니다. 기본적으로 로컬 머신 (127.0.0.1) 의 8080 포트에서 들어오는 연결을 수신합니다.

먼저 Burp Suite 를 실행해 보겠습니다. 애플리케이션 메뉴에서 찾을 수 있습니다.

  1. 애플리케이션 메뉴(화면 왼쪽 상단의 아이콘) 를 클릭합니다.
  2. Web -> Burp Suite Community Edition으로 이동합니다.
  3. 대화 상자가 나타납니다. 기본 설정을 그대로 두고 Next를 클릭합니다.
  4. 다른 대화 상자에서 프로젝트를 선택하라는 메시지가 표시됩니다. Use Burp defaults를 선택하고 Start Burp를 클릭합니다.

Burp Suite 가 로드되면 프록시 설정을 확인해야 합니다.

  1. Proxy 탭을 클릭합니다.
  2. Proxy 탭 내에서 Options 하위 탭을 클릭합니다.
  3. "Proxy Listeners" 섹션을 찾습니다. 인터페이스가 127.0.0.1:8080이고 "Running" 체크박스가 선택된 항목이 보여야 합니다.

이를 통해 Burp Suite 가 로컬 포트 8080에서 트래픽을 적극적으로 수신하고 있음을 확인할 수 있습니다. 이 주소와 포트로 트래픽을 보내도록 구성된 모든 애플리케이션은 해당 요청이 Burp Suite 에 의해 가로채지고 기록됩니다.

sqlmap 을 --proxy=http://127.0.0.1:8080으로 프록시 사용하도록 구성하기

이 단계에서는 방금 구성한 Burp Suite 프록시를 통해 네트워크 트래픽을 보내도록 sqlmap 에 지시하는 방법을 배우게 됩니다.

sqlmap은 HTTP 프록시를 지정하기 위해 --proxy라는 간단한 명령줄 인수를 제공합니다. 프록시의 주소를 http://<host>:<port> 형식으로 제공해야 합니다.

Burp Suite 가 127.0.0.1:8080에서 수신 대기 중이므로 사용할 올바른 인수는 다음과 같습니다.

--proxy=http://127.0.0.1:8080

이 인수를 sqlmap 명령에 추가하면 sqlmap은 대상 웹 서버로 직접 요청을 보내는 대신 http://127.0.0.1:8080으로 요청을 보냅니다. 그러면 Burp Suite 가 이러한 요청을 수신하고 기록한 다음 최종 목적지로 전달합니다.

다음 단계에서는 이 프록시 인수를 대상 URL 과 결합하여 스캔을 수행할 것입니다. 지금은 이 단일 매개변수가 두 도구를 통합하는 데 필요한 전부라는 것을 이해하는 것이 중요합니다.

기본 sqlmap 스캔 실행하기

이 단계에서는 트래픽을 Burp Suite 를 통해 라우팅하여 테스트 웹 애플리케이션에 대한 기본 sqlmap 스캔을 실행합니다. 서버에서 데이터베이스를 열거하도록 sqlmap에 요청할 것입니다.

터미널을 엽니다. 다음을 포함하는 명령을 구성합니다.

  • 대상 URL: -u "http://127.0.0.1/index.php?id=1"
  • 프록시 구성: --proxy=http://127.0.0.1:8080
  • 수행할 작업: --dbs (데이터베이스 열거)
  • 비대화형 플래그: --batch (모든 질문에 자동으로 '예'로 응답)

이제 터미널에서 전체 명령을 실행합니다.

sqlmap -u "http://127.0.0.1/index.php?id=1" --proxy=http://127.0.0.1:8080 --dbs --batch

sqlmap이 대상을 테스트하기 시작하면서 터미널에 sqlmap의 출력이 표시됩니다. 먼저 id 매개변수가 취약한지 확인한 다음 사용 가능한 데이터베이스를 나열합니다.

출력은 다음과 유사해야 합니다 (버전 번호 및 일부 세부 정보는 다를 수 있습니다).

        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.x.x#dev}
|_ -| . [.]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[INFO] starting @ ...
...
[INFO] GET parameter 'id' is 'MySQL >= 5.0 boolean-based blind' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 stacked queries' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 time-based blind' injectable
...
[INFO] fetching database names
[INFO] the following databases are available [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys

[INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/127.0.0.1'

sqlmap이 실행되는 동안 Burp Suite 를 통해 수백 개의 요청을 보내고 있습니다.

Burp Suite 의 HTTP 기록에서 sqlmap 이 생성한 트래픽 관찰하기

이 단계에서는 Burp Suite 로 다시 전환하여 sqlmap이 스캔 중에 생성한 트래픽을 볼 것입니다.

Burp Suite 창을 맨 앞으로 가져옵니다.

  1. Proxy 탭에 있는지 확인합니다.
  2. HTTP history 하위 탭을 클릭합니다.

이제 HTTP 요청으로 채워진 테이블이 표시됩니다. 이 모든 요청은 sqlmap이 Burp 프록시를 통해 대상 서버로 보낸 것입니다.

잠시 시간을 내어 목록을 관찰해 보세요.

  • Host: 모든 요청은 127.0.0.1로 향합니다.
  • Method: 대부분의 요청은 GET 요청입니다.
  • URL: URL 은 항상 /index.php이지만 쿼리 문자열의 id 매개변수는 모든 요청마다 변경됩니다.

이 보기는 sqlmap 활동의 전체 로그를 제공합니다. 단일 취약점 클래스를 테스트하기 위해 자동화된 도구가 생성하는 엄청난 양의 요청을 볼 수 있습니다. 이것이 프록시를 사용하는 주요 이점입니다. 도구의 "블랙박스" 작업을 보이게 만듭니다.

프록시를 통해 sqlmap 이 보낸 페이로드 분석하기

이 단계에서는 개별 요청을 더 자세히 살펴보고 sqlmap이 SQL 인젝션 취약점을 탐지하고 악용하는 데 사용하는 특정 페이로드를 이해합니다.

Burp Suite 의 HTTP history 탭에서 목록의 아무 요청이나 클릭합니다. 요청을 선택하면 목록 아래에 RequestResponse라는 두 개의 새 패널이 나타납니다.

Request 패널을 클릭하여 sqlmap이 보낸 원시 HTTP 요청을 확인합니다. URL 의 id 매개변수에 주의를 기울이세요. 다양한 페이로드가 테스트되는 것을 볼 수 있습니다.

예를 들어, 다음과 같은 불리언 기반 블라인드 페이로드를 찾을 수 있습니다.

GET /index.php?id=1%20AND%208003=8003 HTTP/1.1
Host: 127.0.0.1
...

여기서 sqlmap은 참 조건 (AND 8003=8003) 이 주입되었을 때 애플리케이션이 다르게 응답하는지 테스트하고 있습니다. %20은 공백의 URL 인코딩 표현입니다.

시간 기반 블라인드 페이로드를 찾을 수도 있습니다.

GET /index.php?id=1%20AND%20(SELECT%202079%20FROM%20(SELECT(SLEEP(5)))IImL) HTTP/1.1
Host: 127.0.0.1
...

이 페이로드를 사용하여 sqlmapSLEEP(5) 명령을 주입합니다. 서버 응답이 5 초 더 오래 걸리면 sqlmap은 인젝션이 성공했으며 데이터베이스가 취약하다는 것을 알게 됩니다.

이러한 요청을 분석함으로써 자동화된 스캐너가 작동하는 방식에 대해 훨씬 더 깊이 이해할 수 있습니다. 취약점을 확인하기 위해 사용하는 논리를 볼 수 있으며, 이는 터미널에서 최종 결과만 보는 것보다 훨씬 교육적입니다.

요약

이 실습에서는 sqlmap 자동 스캔 도구를 Burp Suite 가로채기 프록시와 성공적으로 통합했습니다.

다음과 같은 방법을 배웠습니다.

  • Burp Suite 를 실행하고 프록시 리스너가 127.0.0.1:8080에서 실행 중인지 확인합니다.
  • sqlmap에서 --proxy 인수를 사용하여 모든 트래픽을 Burp Suite 를 통해 라우팅합니다.
  • 프록시를 활성화하여 트래픽을 생성하는 스캔을 실행합니다.
  • Burp Suite 의 HTTP history 탭에서 전체 HTTP 요청 목록을 관찰합니다.
  • 개별 요청을 분석하여 sqlmap이 취약점을 식별하는 데 사용하는 특정 불리언 기반 및 시간 기반 SQL 인젝션 페이로드를 이해합니다.

이 기법은 모든 웹 보안 테스터에게 기본적입니다. 자동화된 도구의 동작에 대한 중요한 통찰력을 제공하고 침투 테스트 중에 더 큰 제어 및 분석을 가능하게 하기 때문입니다.