[ Time-Based ]
Time-Based SQL Injection 공격은 sleep() 함수를 사용하여 쿼리의 조건이 참일 경우 응답 시간이 지연되고, 거짓이라면 즉시 결과를 반환하여 응답 지연 시간을 통해 구문의 참과 거짓을 알아낼 수 있다.
sleep() 함수를 제외하고도 benchmark(), waitfor() 함수의 사용이 가능하다.
admin 계정의 pw가 admin123인 것을 알고 있다는 가정 하에 실습을 진행한다.
' or ascii(substring(pw,1,1))=97 and sleep(5)--(공백)
위 구문을 실행하면 5초의 지연 후 페이지가 응답되는 것을 볼 수 있다.
만약 데이터베이스에 없는 일치하지 않는 값을 입력한다면? 페이지의 지연 없이 바로 응답될 것이다.
[ Union-Based ]
Union SQL Injection 은 기존의 쿼리에 UNION 연산자를 이용하여 2개 이상의 쿼리를 요청하며 공격하는 방법이다. 컬럼의 개수와 데이터 형식이 같아야 한다는 조건이 붙는다.
' union select 1--(공백)
=> 실패
' union select 1,2--(공백)
=> 성공
' union select 1,2,3--(공백)
=> 실패
위 공격을 통해 컬럼의 개수는 2개인 것을 알 수 있다. 이를 이용해 현재 데이터베이스를 사용 중인 사용자의 정보도 알아낼 수 있다.
' union select user(),2--(공백)
'Security > Web Hacking' 카테고리의 다른 글
SuNiNaTaS(써니나타스) Challenges 2번 문제 풀이 (0) | 2023.03.21 |
---|---|
SuNiNaTaS(써니나타스) Challenges 1번 문제 풀이 (0) | 2023.03.21 |
PHP SQL Injection 방어 기법 (0) | 2022.09.01 |
Blind SQL Injection (0) | 2022.08.30 |
SQL Injection (0) | 2022.08.30 |