
이번 세션은 SQL Injection 중 UNION Injection과 Blind Injection에 대한 내용이다. 첫 번째 퀴즈는 UNION Injection을 이용해서 유저의 패스워드 정보를 탈취하는 퀴즈인데, 친절하게도 두 개의 테이블에 대한 정보를 제공해준다. SQL Injection이 발생하는지 확인하기 위해 쿼리 에러가 발생할 수 있도록 입력값을 구성해서 전달해보니, 에러가 발생하는 것을 알 수 있었다. 이를 통해 SQL Injection이 가능할 수 있다는 것을 알 수 있다. 특히 에러 메시지를 통해 실제 실행되는 쿼리 구문이 무엇인지 까지 전달해주고 있어, SQL Injection에 더욱 도움이 되고 있는 상태이다. UNION SQL Injection을 할 때에는 테이블명, 필드명을 알..

이번 세션은 Injection 취약점 중 SQL Injection에 대한 내용이다. 세션 내용은 기본적인 Query 지식을 시작으로 간단한 SQL Injection 내용을 순으로 다루고 있다. 앞 부분에서 다루고 있는 Query에 대한 내용은 간단히 질문에 해당하는 쿼리구문을 입력만 하면 되는 문제들이므로 넘어가고, 후반부의 SQL Injection 부분을 다뤄본다. 첫 번째 문제는 주어진 쿼리구문이 SQL Injection이 발생하도록 3개의 셀렉트 박스에서 값을 선택해서 실행해보도록 디자인 되어 있다. 쿼리구문이 항상 참이 되도록 아래와 같이 선택하여 문제를 통과한다. Smith' or '1'='1 두 번째는 직접 쿼리를 입력하도록 좀 더 어렵게 퀴즈가 나왔다. 이때 두 필드 중 한개의 필드에서만 인..

가. 원인 - 입력된 데이터에 대한 유효성 검증을 하지 않고 DB 쿼리의 일부로 사용 - 입력값 필터링 없이 동적쿼리에 적용 후 사용 나. 영향 - 로그인 인증우회 - DB 데이터 유출/수정/삭제 - 시스템 명령어 실행 다. 보안대책 - 정적쿼리 사용 - 쿼리구조를 변경할 수 있는 문자열을 검사 후 쿼리문 생성에 사용 - PreparedStatement 객체 등을 이용하여 컴파일 된 쿼리문을 사용 - DB 사용자 권한 최소화 - 500 서버오류 정보 노출 제한 라. 안전한 코드 1. JDBC API 사용 String id = request.getParameter("id"); String sql = "select * from user_info where id = ?"; Connection con = db...

가. 취약점 개요 - SQL문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 취약점 → SQL삽입 나. 요구사항 1. 최소권한의 계정사용 2. 동적 SQL문을 생성 및 사용하지 않음 3. 동적 SQL 사용 시 입력값 검증 다. 요구사항 별 고려사항 1. 최소 권한의 계정사용 - 침해사고가 발생하더라도 다른 애플리케이션에 대해 공격자가 액세스 권한을 가지지 않도록 방지 2. 동적 SQL문을 생성 및 사용하지 않음 - ORM프레임워크를 사용하여 안전한 정적쿼리구조의 SQL문을 수행 - 외부입력값에 의해 쿼리문의 구조가 변경되지 않도록 입력값을 바인딩 처리 3. 동적 SQL 사용 시 입력값 검증 - 서블릿 필터를 이용한 입력값 검증 - 인터셉트를 이용한 입력값 검증 - 라이브러리 또는 Validato..
- Total
- Today
- Yesterday