[SQL인젝션] CASE WHEN 구문의 활용

오대진·2024년 4월 30일

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이 데이터 추론 구문 들어가는 곳

0개의 댓글