SQL 명령문을 주입하는 공격
- 다양한 조건 및 정보를 이용하여 DB의 정보를 조회하여 이용자의 웹 브라우저에 출력하는 과정에서 발생하는 소스코드의 취약점을 이용
--> 조작된 SQL구문이 DBMS에 그대로 전달되어 비정상적인 DB명령을 실행한다.
SQL인젝션을 위한 최소한의 조건.
1. 웹 어플리케이션이 DB와 연동되어있어야함.
2. 외부 입력값이 DB 쿼리문으로 사용된다.
(SQL 구문 + 사용자 입력값 + SQL구문 형태)
공격기법
1. 쿼리 조건의 무력화
DBMS는 쿼리에 대한 응답으로 참/거짓만을 반환
False : 0/Null
True : False가 아닌 모든 값.
EX) select id from login where id = "iqsp" or 1 = 1
--> select id from login 의 결과가 참이됨
--> 모든 id 값이 출력됨.
2. 고의적 에러 유발 후 정보 획득
php.ini의 display_error=On 일경우 에러 발생시 에러를 확인 가능
기본적으로 웹 애플리케이션은 쿼리 수행중에 오류가 발생시 DB오류를 그대로 브라우저에 출력.
DB의 스키마 정보나 데이터가 그대로 유출될 수 있음.
3. 시스템 명령어 실행.
MS sql의 경우 시스템 명령을 실행할 수 있는 확장 프로시저(XP_cmdshell)를 제공.
Ex) Python의 system(), eval()
SQL 로그
--> 너무 많은 로그를 발생시킴
--> 기본적으로 로깅이 꺼져있음.
/etc/my.cnf.d/mysql_service.cnf
general_log=on
general_log_file=/var/log/mysql/sqllog.log
'모의해킹 및 보안' 카테고리의 다른 글
Nicto / Sqlmap (0) | 2024.10.17 |
---|---|
Security Onion (0) | 2024.10.15 |
Netcat (0) | 2024.10.10 |
Commend Injection (0) | 2024.10.10 |
snort2 (0) | 2024.09.24 |