sqlmap 으로 웹사이트 크롤링하여 인젝션 포인트 발견하기

Kali LinuxBeginner
지금 연습하기

소개

SQL 인젝션은 애플리케이션이 데이터베이스에 실행하는 쿼리에 공격자가 간섭할 수 있도록 하는 일반적인 웹 취약점입니다. sqlmap 은 SQL 인젝션 결함을 탐지하고 악용하며 데이터베이스 서버를 장악하는 프로세스를 자동화하는 오픈 소스 침투 테스트 도구입니다.

sqlmap 은 주로 인젝션 테스트 기능으로 알려져 있지만, 대상 웹사이트를 크롤링하여 잠재적인 인젝션 지점을 발견하는 강력한 기능도 포함하고 있습니다. 이는 특정 URL 이나 매개변수를 염두에 두고 있지 않고, sqlmap 이 사이트를 탐색하여 인젝션에 대한 가능한 모든 진입점을 식별하도록 하고 싶을 때 특히 유용합니다.

이 실습에서는 sqlmap 의 크롤링 기능을 활용하여 대상 웹사이트에서 URL 과 폼을 자동으로 검색하고, SQL 인젝션 취약점을 테스트하는 방법을 배우게 됩니다. 루트 URL 을 식별하고, --crawl 플래그를 사용하며, 크롤링 깊이를 설정하고, 작업을 실행한 다음, 발견된 인젝션 지점을 검토하게 됩니다.

대상 웹사이트의 루트 URL 식별

이 단계에서는 sqlmap 이 크롤링을 시작할 대상 웹사이트의 루트 URL 을 식별합니다. 이는 sqlmap 이 링크와 폼을 발견하기 시작하는 진입점입니다. 이 실습에서는 로컬에서 실행되는 간단한 웹 서버를 사용할 것입니다.

먼저 웹 서버가 실행 중이고 접근 가능한지 확인합니다. curl을 사용하여 서버가 응답하는지 확인할 수 있습니다.

curl http://127.0.0.1:8000

서버가 활성화되었음을 나타내는 HTML 출력이 표시되어야 합니다. 대상 웹사이트의 루트 URL 은 http://127.0.0.1:8000이 될 것입니다.

다음으로 이 URL 을 sqlmap 의 시작점으로 사용합니다.

--crawl 플래그를 사용하여 링크 및 폼 검색

이 단계에서는 sqlmap 과 함께 --crawl 플래그를 사용하는 방법을 배우게 됩니다. 이 플래그는 sqlmap 에게 대상 웹사이트를 크롤링하고 SQL 인젝션 취약점을 테스트할 새로운 URL 및 폼을 검색하도록 지시합니다. 이 플래그가 없으면 sqlmap 은 명시적으로 제공된 URL 만 테스트합니다.

--crawl 사용의 기본 구문은 다음과 같습니다.

sqlmap -u < target_url > --crawl

대상 URL 에서 --crawl 플래그를 사용하여 sqlmap 을 실행해 보겠습니다. 이 명령은 크롤링 프로세스를 시작합니다.

sqlmap -u http://127.0.0.1:8000 --crawl

sqlmap 이 웹사이트를 크롤링하기 시작하고 링크와 폼을 식별하는 것을 볼 수 있습니다. 프로세스 중에 몇 가지 질문을 할 것입니다. 이 실습에서는 일반적으로 프롬프트가 표시될 때 Enter를 누르거나 y를 입력하여 기본 옵션을 수락할 수 있습니다.

예를 들어, "결과를 CSV 파일에 저장하시겠습니까?"라는 질문이 나오면 n을 입력하고 Enter를 누를 수 있습니다. "다른 일반적인 취약점을 테스트하시겠습니까?"라는 질문이 나오면 n을 입력하고 Enter를 누를 수 있습니다.

--crawl-depth=2로 크롤링 깊이 설정

이 단계에서는 --crawl-depth 플래그를 사용하여 특정 크롤링 깊이를 설정하여 크롤링 프로세스를 개선합니다. 크롤링 깊이는 sqlmap 이 새로운 URL 을 발견할 때 몇 단계까지 내려갈지를 결정합니다. 깊이 1은 초기 URL 에서 직접 연결된 링크만 방문한다는 의미입니다. 깊이 2는 초기 URL 의 링크를 방문한 다음, 새로 발견된 페이지의 링크를 방문하는 식으로 진행된다는 의미입니다.

우리의 작은 대상 웹사이트의 경우, 깊이 2로도 사용 가능한 모든 페이지를 발견하기에 충분할 것입니다.

크롤링 깊이를 설정하는 구문은 다음과 같습니다.

sqlmap -u <target_url> --crawl --crawl-depth=<depth_value>

이번에는 크롤링 깊이를 2로 지정하여 sqlmap 을 다시 실행해 보겠습니다.

sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2

sqlmap 의 출력이 어떻게 변경되는지 관찰하고, 사이트 구조를 더 깊이 탐색하면서 더 많은 링크나 폼을 발견할 수 있습니다. 다시 말하지만, 추가 테스트에 대해 Enter를 누르거나 n을 입력하여 기본 프롬프트를 수락할 수 있습니다.

크롤링 및 테스트 작업 실행

이 단계에서는 전체 크롤링 및 테스트 작업을 실행합니다. 이전 단계에서는 크롤링 플래그를 시연했지만, sqlmap 은 기본적으로 발견된 URL 에서 인젝션 지점을 테스트하려고 시도합니다. 테스트를 더 명확하게 하고 sqlmap 이 철저한 검사를 수행하도록 하려면, 프롬프트에 대한 응답을 자동화하기 위해 --batch 플래그를 추가하고 폼을 특정 대상으로 지정하기 위해 --forms 플래그를 추가할 수 있습니다.

--batch 플래그는 sqlmap 에게 비대화형 모드로 실행하여 모든 프롬프트에 기본 답변을 수락하도록 지시합니다. 이는 자동화에 유용합니다. --forms 플래그는 sqlmap 에게 대상의 HTML 폼을 파싱하고 테스트하도록 구체적으로 지시합니다.

이러한 플래그를 이전 명령과 결합해 보겠습니다.

sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2 --batch --forms

이 명령은 다음을 수행합니다.

  1. http://127.0.0.1:8000에서 크롤링을 시작합니다.
  2. 두 단계 깊이로 이동합니다 (--crawl-depth=2).
  3. 기본값으로 프롬프트에 자동으로 응답합니다 (--batch).
  4. HTML 폼을 구체적으로 찾고 테스트합니다 (--forms).

출력을 관찰하십시오. sqlmap 은 발견한 URL 과 테스트하는 매개변수를 나열합니다. 또한 잠재적인 인젝션 지점을 발견했는지 여부도 표시합니다.

발견된 URL 및 잠재적 인젝션 포인트 검토

이 마지막 단계에서는 sqlmap 의 출력을 검토하여 어떤 URL 과 폼이 발견되었는지, 그리고 잠재적인 인젝션 포인트가 식별되었는지 이해합니다.

sqlmap 이 실행을 완료하면 결과에 대한 요약을 제공합니다. "parameter is vulnerable" 또는 유사한 메시지를 나타내는 줄을 찾으십시오.

sqlmap 이 확인된 SQL 인젝션 취약점을 찾지 못하더라도 (간단한 더미 사이트의 경우 예상되는 결과), 테스트한 URL 과 매개변수를 여전히 보여줄 것입니다. 이 정보는 수동 분석 또는 추가 자동화 테스트에 매우 중요합니다.

볼 수 있는 출력 스니펫의 예시:

...
[INFO] retrieved new form: 'http://127.0.0.1:8000/search.php' (GET)
...
[INFO] testing GET parameter 'id'
...
[INFO] testing GET parameter 'param'
...
[INFO] testing GET parameter 'query'
...

핵심은 sqlmap 이 사이트를 성공적으로 크롤링하고, index.php, page.php, 그리고 search.php(폼을 통해) 를 식별한 다음, 해당 매개변수 (id, name, param, query) 를 테스트했다는 것입니다. 이는 대상 애플리케이션의 공격 표면을 자동으로 매핑하는 sqlmap 의 크롤링 기능의 강력함을 보여줍니다.

더 자세한 보고서를 위해 sqlmap 로그 파일 (일반적으로 ~/.sqlmap/output/에 있음) 을 확인할 수도 있지만, 이 실습에서는 콘솔 출력이 충분합니다.

요약

이 실습에서는 sqlmap 의 강력한 크롤링 기능을 사용하여 대상 웹사이트에서 잠재적인 SQL 인젝션 지점을 발견하는 방법을 성공적으로 배웠습니다. 루트 URL 을 식별하는 것으로 시작하여, --crawl 플래그를 사용하여 sqlmap 이 사이트를 탐색하도록 지시했습니다. --crawl-depth로 특정 깊이를 설정하여 크롤링 프로세스를 더욱 개선했습니다. 마지막으로, --batch--forms를 사용하여 포괄적인 크롤링 및 테스트 작업을 실행하여 프로세스를 자동화하고 폼을 특정 대상으로 지정했습니다.

이 실습을 완료함으로써 다음을 수행하는 방법을 이해하게 되었습니다.

  • sqlmap 의 크롤링 시작 URL 식별
  • 링크 및 폼을 발견하기 위해 --crawl 플래그 활용
  • --crawl-depth로 크롤링 깊이 제어
  • --batch--forms로 자동화된 크롤링 및 테스트 작업 실행
  • 발견된 URL, 매개변수 및 잠재적 인젝션 포인트를 식별하기 위해 sqlmap 출력 해석

이 기술은 웹 침투 테스트의 정찰에 필수적이며, 특정 취약점을 악용하기 전에 웹 애플리케이션의 공격 표면을 효율적으로 매핑할 수 있게 해줍니다.