본문 바로가기

카테고리 없음

WebGoat SQL Injection

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번

 

 


내용은 이와 같다.

 

쿼리 체이닝을 통한 무결성 침해

 

  1. 시스템 취약점
    - SQL 인젝션에 취약한 시스템은 CIA 트라이어드(기밀성, 무결성, 가용성)의 각 측면을 쉽게 침해할 수 있다.
    - SQL 쿼리 체이닝을 통해 데이터의 무결성을 심각하게 침해할 수 있다.
  2. SQL 쿼리 체이닝이란?
    - 쿼리 체이닝은 쿼리 끝에 하나 이상의 쿼리를 추가하는 방법을 의미한다.
    - 이는 ; 메타문자를 사용하여 여러 쿼리를 연결할 수 있다.
    - ;는 SQL 문장의 끝을 표시하며, 이를 통해 새 줄을 시작할 필요 없이 초기 쿼리 직후에 다른 쿼리를 시작할 수 있다.

 

 

 

Employee Name 필드에 SQL 인젝션 코드 입력했다.

Smith'; UPDATE employees SET salary = 99999 WHERE last_name = 'Smith
  1. 쿼리 종료
    - Smith'로 원래의 SELECT 쿼리를 종료한다.
  2. 새로운 쿼리 시작
    - 세미콜론(;)을 사용해 새로운 쿼리를 시작한다.
  3. 급여 업데이트
    - UPDATE 구문을 사용하여 employees 테이블의 salary 필드를 변경한다.
    -WHERE 절을 통해 자신(Smith)의 레코드만 변경되도록 한다.

 

 

 


13번

 

 

 

위의 내용은 이와 같다.

 

가용성 침해

 

CIA 트라이어드의 세 번째 요소인 가용성을 침해하는 방법을 다룬다.

 

가용성 침해 방법

  1. 계정 삭제
    - 계정이 삭제되면, 실제 소유자는 더 이상 해당 계정에 접근할 수 없다.
  2. 비밀번호 변경
    - 비밀번호가 변경되면 계정 소유자는 더 이상 자신의 계정에 접근할 수 없다.
  3. 데이터베이스 삭제
    - 데이터베이스의 일부 또는 전체를 삭제하여 데이터에 접근할 수 없게 한다.
  4. 접근 권한 취소
    - 관리자나 다른 사용자의 접근 권한을 취소하면, 데이터베이스의 특정 부분이나 전체 데이터베이스에 접근할 수 없게 된다.




    access_log 테이블에 모든 활동이 기록되고 있다.
    access_log 테이블을 삭제하는 것이 목표이다.

 

 

1' drop table access_log--
  1. 1'
    - 원래의 SQL 쿼리를 종료한다. 숫자 1은 조건을 무시하기 위한 값이며, 작은따옴표(')는 문자열을 닫는 역할을 한다.
  2. DROP TABLE access_log
    - 새로운 SQL 명령으로 access_log 테이블을 삭제한다.
  3. --
    - SQL 구문의 나머지 부분을 주석 처리하여, 뒤에 오는 원래 쿼리의 내용을 무시한다.