공격 종류
1) 인증 우회 공격
인증 기능을 수행하는 애플리케이션. 로그인 기능 등에서 정상적인 입력값이 아닌, 비정상적인 구문을 삽입하는 경우. SQL 구문으로 접근하는 경우.
2) 데이터 조회 공격
SQL 인젝션 취약점이 발생하는 기능에 대해 데이터베이스 내의 데이터를 조회하는 공격. 가장 많이 이루어지는 공격.
3) 시스템 명령어 실행 공격
SQL 서버 시스템 명령어를 실행하는 공격. 제일 취약한 공격. 시스템 명령어 실행하기 위해서는 환경적 조건이 까다로워서 위험하지만 잘 일어나는 공격은 아니다.
+) 데이터 조작 공격
삽입, 수정, 삭제 등의 행위.
인증 우회 공격이란 무엇인가?
로그인에 성공하면 하나의 레코드를 반환하고, 실패하면 0개의 레코드가 반환된다. 레코드 결과가 반환된 경우 세션&쿠키가 발급되고, 반환되지 않으면 ID나 PW가 존재하지 않는다는 등의 에러 페이지를 띄운다.
SQL 구문을 로그인 기능에서 입력하면 강제적으로 True를 만드는 구문이 삽입된다.
예:
SELECT * FROM member WHERE id='' or 1=1--' and...
ID를 admin이라고 해버리면 admin 계정으로 로그인되어 버릴 것이다.
인증 우회 공격 원리 분석
ENC_DATA는 어플리케이션 서버에서 해쉬함수로 암호화되었다는 의미.
ID부분만 취약점이 발생한다.
공격자에게 세션이 발급되는 원리이다.
예시1
SELECT * FROM member WHERE id=' ' or 1=1--' and pw='{ENC_DATA}'
id='' 는 거짓이 되고, 1=1은 참이기 때문에, or 연산자를 통해 둘다 참으로 반환된다. 하나라도 참이기 때문에.
뒤에 --는 주석처리이므로, pw는 주석처리가 된다. (Terminating query 방식)
그렇게 인증 우회가 성공된다.
예시2
SELECT * FROM member WHERE id=' ' or 1=1 or '1'=' ' and pw='{ENC_DATA}'
뒤의 구문이 영향이 간다. 주석 처리를 하지 않았기 때문에. (In-line query 방식)
만약 위의 예시1에서 주석처리 (--)를 하지 못한다면, and 연산자가 or 연산자보다 우선순위가 높기 때문에 결과적으로는 거짓인 문장이 되어 버린다. 만약 주석 처리가 불가능한 상황이라면, 위의 방식으로는 인증 우회 공격을 할 수 없다.
그때 or 연산자를 한번 더 사용하면 결과가 참으로 바뀐다.
'웹 해킹 & 시큐어 코딩' 카테고리의 다른 글
웹 해킹 & 시큐어 코딩 (7) (0) | 2025.01.15 |
---|---|
웹 해킹 & 시큐어 코딩 (6) (0) | 2025.01.15 |
웹 해킹 & 시큐어 코딩 (4) (0) | 2025.01.13 |
웹 해킹 & 시큐어 코딩 (3) (0) | 2025.01.13 |
웹 해킹 & 시큐어 코딩 (2) (1) | 2025.01.10 |