소개
이 랩에서는 강력한 오픈 소스 침투 테스트 도구인 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 를 실행해 보겠습니다. 애플리케이션 메뉴에서 찾을 수 있습니다.
- 애플리케이션 메뉴(화면 왼쪽 상단의 아이콘) 를 클릭합니다.
- Web -> Burp Suite Community Edition으로 이동합니다.
- 대화 상자가 나타납니다. 기본 설정을 그대로 두고 Next를 클릭합니다.
- 다른 대화 상자에서 프로젝트를 선택하라는 메시지가 표시됩니다. Use Burp defaults를 선택하고 Start Burp를 클릭합니다.
Burp Suite 가 로드되면 프록시 설정을 확인해야 합니다.
- Proxy 탭을 클릭합니다.
- Proxy 탭 내에서 Options 하위 탭을 클릭합니다.
- "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 창을 맨 앞으로 가져옵니다.
- Proxy 탭에 있는지 확인합니다.
- 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 탭에서 목록의 아무 요청이나 클릭합니다. 요청을 선택하면 목록 아래에 Request와 Response라는 두 개의 새 패널이 나타납니다.
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
...
이 페이로드를 사용하여 sqlmap은 SLEEP(5) 명령을 주입합니다. 서버 응답이 5 초 더 오래 걸리면 sqlmap은 인젝션이 성공했으며 데이터베이스가 취약하다는 것을 알게 됩니다.
이러한 요청을 분석함으로써 자동화된 스캐너가 작동하는 방식에 대해 훨씬 더 깊이 이해할 수 있습니다. 취약점을 확인하기 위해 사용하는 논리를 볼 수 있으며, 이는 터미널에서 최종 결과만 보는 것보다 훨씬 교육적입니다.
요약
이 실습에서는 sqlmap 자동 스캔 도구를 Burp Suite 가로채기 프록시와 성공적으로 통합했습니다.
다음과 같은 방법을 배웠습니다.
- Burp Suite 를 실행하고 프록시 리스너가
127.0.0.1:8080에서 실행 중인지 확인합니다. sqlmap에서--proxy인수를 사용하여 모든 트래픽을 Burp Suite 를 통해 라우팅합니다.- 프록시를 활성화하여 트래픽을 생성하는 스캔을 실행합니다.
- Burp Suite 의 HTTP history 탭에서 전체 HTTP 요청 목록을 관찰합니다.
- 개별 요청을 분석하여
sqlmap이 취약점을 식별하는 데 사용하는 특정 불리언 기반 및 시간 기반 SQL 인젝션 페이로드를 이해합니다.
이 기법은 모든 웹 보안 테스터에게 기본적입니다. 자동화된 도구의 동작에 대한 중요한 통찰력을 제공하고 침투 테스트 중에 더 큰 제어 및 분석을 가능하게 하기 때문입니다.
