1. INJECTION
: LDAP이나 OS, SQL에서 정상적이지 않은 질의문을 삽입해 비정상적인 동작을 만들어 내는 공격
: 자신의 권한을 상승시키거나, 볼 수 없는 비밀 자료를 얻어내는데 사용 됨
->웹 어플리케이션에서는 DB 쿼리문을 조작해 원하는 동작을 얻어 낼 수 있는 SQL INJECTION이 많이 사용됨
1-1. SQL INJECTION
: 허가받지 않은 사용자가 임의의 값을 주입
=> (-) 인증 우회, 불법 로그인, DB 내용 삭제, 열람 등을 수행하여 비정상적인 DB 접근을 시도하는 공격 기법
2. 취약점 발생 이유
: 사용자의 입력값을 사용 => 동적으로 SQL 질의문 생성
=> 특수문자로 이뤄진 입력값 조작으로 개발자의 의도와 완전히 다른 SQL 질의문 생성됨
-정상적인 로그인: 컴퓨터는 사용자가 말한 것이 맞는지 확인하고 맞다면 맞은 정보에 대한 대답으로 로그인을 시켜줌.
VS
-비정상적인 로그인: 무조건 맞는 말을 웹사이트에 삽입해 컴퓨터에게 혼돈을 줘 로그인 성공
; 컴퓨터는 아이디 패스워드를 조회해보니까 일단 맞다는 정보를 얻었지만 누구라고 로그인을 시켜 줘야 할지 모르기 때문에 아무 계정으로 로그인을 시켜줌
3. 공격 방법
: SQL 질의문의 임력값 필드에 ' OR 1=1 #을 삽입=> 대부분 우회 가능
input에 ' OR 1=1 #을 입력하고 input1에 공백을 입력
=> SELECT * FROM LOGIN WHERE ID= ' ' OR 1=1 # AND PW = ''
=> # 이후는 주석처리되며, 논리 연산자 우선순위에 의해 항상 참인 질의문이 생성되어 로그인에 성공
[Bee box- SQL injection(GET/SEARCH) 실습]
우선 검색창에 ' 를 입력하여 sql injection 취약점이 있는지 확인한다.
입력 결과 위와 같은 오류 메세지가 표시된다.
이를 통해 공격자는 DB가 MySQL 임을 확인할 수 있고, SQL INJECTION 공격을 시도해 볼 수 있다.
다음으로 ' or 1=1# 을 입력해보았다.
이를 통해 쿼리 결과가 1=1을 통해 항상 참이 되고 기존 코드 뒷부분을 전부 주석 처리된다.
출력된 결과를 보면, 입력값이 정상 쿼리로 인식되어 영화 목록이 쭉 출력된다.
4. 방어 방법
:Statement 대신 PreparedStatement를 사용
왜? SQL 질의문으로 사용되기 위해 미리 컴파일된 PreparedStatement
=> 사용자 입력값에 의한 SQL 질의문 구조 변경이 불가능
'HACKING > WEB' 카테고리의 다른 글
[OWASP] 2. Broken Authentication (0) | 2021.09.28 |
---|---|
[1. 입력 데이터 검증 및 표현] 5. Path Traversal (0) | 2021.08.03 |
[1. 입력 데이터 검증 및 표현] 4. OS Command Injection (0) | 2021.08.03 |
[OWASP] 7. XSS (0) | 2021.07.31 |
[1. 입력 데이터 검증 및 표현] 2.File Upload (0) | 2021.07.31 |