11번
내용은 이와 같다.
문자열 SQL 인젝션을 통한 기밀성 침해
1. 시스템 취약점
- SQL 인젝션에 취약한 시스템은 CIA 트라이어드(기밀성, 무결성, 가용성)의 각 측면을 쉽게 침해할 수 있다.
2. 문자열 SQL 인젝션이란
- 애플리케이션이 사용자 입력을 단순히 SQL 쿼리에 연결하는 방식으로 구축될 때 발생한다.
- 사용자 입력이 적절한 검증 없이 쿼리에 직접 삽입되면, 공격자가 쿼리의 동작을 수정할 수 있다.
3. 실습 시나리오
- John Smith라는 직원으로, 회사의 내부 시스템에 접근할 수 있다.
- 시스템은 인증 TAN을 사용하여 직원 개인 정보에 접근한다.
- 목표: 자신의 정보 대신 모든 동료의 정보, 특히 급여 정보를 조회하는 것이다.
4. 주어 쿼리
"SELECT * FROM employees WHERE last_name = '" + name + "' AND auth_tan = '" + auth_tan + "'";
- last_name과 auth_tan에 입력된 값에 따라 데이터베이스에서 조건에 맞는 사용자 정보를 조회하는 쿼리이다.
- 여기서 last_name=""과 auth_tan=""은 사용자가 입력하는 값이다.
auth_tan 필드는 싱글쿼터('')로 감싸져 있는데 이는 auth_tan 필드에 입력된 값이 문자열로 처리된다는 뜻이다.
주어진대로 써보면 이와 같이 뜬다.
- 싱글쿼터 닫기
-auth_tan 값이 문자열로 감싸져 있으므로 주입된 코드가 올바르게 동작하려면 기존의 싱글쿼터를 먼저 닫아야 한다. - 자동으로 닫히도록 싱글쿼터를 열기
-쿼리가 끝날 때 자동으로 싱글쿼터가 닫히기 때문에 마지막에 따로 닫을 필요가 없다.
12번
내용은 이와 같다.
쿼리 체이닝을 통한 무결성 침해
- 시스템 취약점
- SQL 인젝션에 취약한 시스템은 CIA 트라이어드(기밀성, 무결성, 가용성)의 각 측면을 쉽게 침해할 수 있다.
- SQL 쿼리 체이닝을 통해 데이터의 무결성을 심각하게 침해할 수 있다. - SQL 쿼리 체이닝이란?
- 쿼리 체이닝은 쿼리 끝에 하나 이상의 쿼리를 추가하는 방법을 의미한다.
- 이는 ; 메타문자를 사용하여 여러 쿼리를 연결할 수 있다.
- ;는 SQL 문장의 끝을 표시하며, 이를 통해 새 줄을 시작할 필요 없이 초기 쿼리 직후에 다른 쿼리를 시작할 수 있다.
Employee Name 필드에 SQL 인젝션 코드 입력했다.
Smith'; UPDATE employees SET salary = 99999 WHERE last_name = 'Smith
- 쿼리 종료
- Smith'로 원래의 SELECT 쿼리를 종료한다. - 새로운 쿼리 시작
- 세미콜론(;)을 사용해 새로운 쿼리를 시작한다. - 급여 업데이트
- UPDATE 구문을 사용하여 employees 테이블의 salary 필드를 변경한다.
-WHERE 절을 통해 자신(Smith)의 레코드만 변경되도록 한다.
13번
위의 내용은 이와 같다.
가용성 침해
CIA 트라이어드의 세 번째 요소인 가용성을 침해하는 방법을 다룬다.
가용성 침해 방법
- 계정 삭제
- 계정이 삭제되면, 실제 소유자는 더 이상 해당 계정에 접근할 수 없다. - 비밀번호 변경
- 비밀번호가 변경되면 계정 소유자는 더 이상 자신의 계정에 접근할 수 없다. - 데이터베이스 삭제
- 데이터베이스의 일부 또는 전체를 삭제하여 데이터에 접근할 수 없게 한다. - 접근 권한 취소
- 관리자나 다른 사용자의 접근 권한을 취소하면, 데이터베이스의 특정 부분이나 전체 데이터베이스에 접근할 수 없게 된다.
access_log 테이블에 모든 활동이 기록되고 있다.
access_log 테이블을 삭제하는 것이 목표이다.
1' drop table access_log--
- 1'
- 원래의 SQL 쿼리를 종료한다. 숫자 1은 조건을 무시하기 위한 값이며, 작은따옴표(')는 문자열을 닫는 역할을 한다. - DROP TABLE access_log
- 새로운 SQL 명령으로 access_log 테이블을 삭제한다. - --
- SQL 구문의 나머지 부분을 주석 처리하여, 뒤에 오는 원래 쿼리의 내용을 무시한다.