사용자의 입력 값이 어플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석돼 발생하는 취약점.
- SQL Injection
- SQL을 사용할 때 공격자의 값이 정상적인 요청에 영향을 주는 취약점
- Command Injection
- OS Command를 사용 시 사용자의 입력 데이터에 의해 실행되는 Command를 변조할 수 있는 취약점.
- Server Side Template Injection (SSTI)
- 템플릿 변환 도중 사용자의 입력 데이터가 템플릿으로 사용돼 발생하는 취약점
- Path Traversal (순회)
- URL / File Path 사용 시 사용자의 입력 데이터에 의해 임의의 경로에 접근하는 취약점.
- Server Side Request Forgery (SSRF)
- 서버에 위조된 요청 보내는 취약점
SQL Injection
SQL는 관계형 데이터베이스 (RDBMS)의 데이터를 정의하고 질의, 수정 하기 위해 고안된 언어.
사용자의 입력 값이 쿼리에 삽입돼 사용자가 원하는 쿼리를 실행할 수 있는 취약점.
DBMS 계정의 권한으로 공격이 가능하며 일반적으로 데이터베이스의 내용을 추출하거나 변조, 삭제가 가능.
SQL
- DDL
- 데이터를 저장하기 위한 언어
- 데이터를 저장하기 위한 스키마, 데이터베이스의 생성/수정/삭제 등의 행위 수행.
- DML
- 데이터를 조작하기 위한 언어
- 데이터에 대해 조회/저장/수정/삭제 등의 행위 수행.
- DCL
- 데이터베이스의 접근 권한 등의 설정을 하기 위한 언어.
- 권한 부여 GRANT 권한 박탈 REVOKE
select * from user_table
where uid='{uid}' and upw='{upw}';
이런 테이블 구조에서 uid guest, upw guest 입력 시에 guest로 로그인 가능.
admin의 upw를 모르는 상태에서 or 연산 둘 중에 하나라도 참이 되는 성질을 통해 출력 가능
1 ' or ' 1 과 같은 공격 페이로드 이용
에서
1)
주석처리로 아이디만으로 로그인하기.
2) ' or 1' 페이로드사용
이렇게하면 uid가 admin 이거나 1 (참) 이고 upw 값이 xx
이미 or에서 참이 껴있기때문에 upw값은 상관없이 uid가 admin인 경우는 참임
입력값으로 문자열 입력 시에는 문자열 구분자 ' , " 가 사용되는데 \문자를 문자열 구분자 앞에 붙여 사용자
입력을 escape해서 사용했음. (현재는 권장x)
escape는 본래의 의도대로 사용되지 않는다는 것인데 \를 붙이면 따옴표가 본래의 따옴표로 인식되지 않고 그냥 문자열로 입력되어 쿼리에서 기능을 하지못함
하지만 입력 값이 숫자인 경우가 있기 때문에 escape 방식은 사용되지 않음.
SQL Injection 방지를 위해 권장하는 방식은 ORM
Raw 쿼리를 사용하지 않고 라이브러리 단에서 스스로 escape하고 쿼리에 매핑.
하지만 ORM도 데이터 타입 검증이 없으면 위협이 될 수 있다.
'Security' 카테고리의 다른 글
[Webhacking] server side template injection (SSTI) (0) | 2021.09.24 |
---|---|
[Webhacking] Command Injection (0) | 2021.09.23 |
[Webhacking] server-side basic (0) | 2021.09.20 |
[Webhacking] click jacking (0) | 2021.09.19 |
[Webhacking] open redirect (0) | 2021.09.19 |