12/15
보고서 작성법
- 글자는 21포인트
- 고딕체, 휴먼명료체
- 파란색이나 빨간색으로 강조 표시
ex)
- 일반적인 개요
- 테스트
- 보안 방법
SQL Injection
- 입력값을 쿼리문으로 작성해서 DBMS 시스템의 제어권을 탈취, 또는 기능을 우회 오용이 가능하다.
- 홑따옴표는 항상 쌍으로 사용되야 하는데, 하나만 사용할 경우 오류 발생해서 에러메시지로 정보로 공격자의 추가 공격 가능성이 생김
- 쿼리문이 항상 참이 되는 값을 넣으면 데이터에 접근하고 조회가 가능함 ex) Smith' or 'a' = 'a
- Union 구문을 이용해서 정보 노출 ex) UNION select
- Stored procedure 를 사용해서 데이터베이스 제어권 탈취 > ; exec
- Blind SQL Injection 쿼리 실행 결과로 서버 반응을 보고 정보 수집
Numeric SQL Injection
* Numeric 타입인지 String 타입인지 생각하면서 SQL쿼리 생각
ex)
Numeric = 101 or 1 = 1
String = Smith' or '1'='1
>> 문자열과 결합하는 코드 > 쿼리 구문
소스 코드를 안전한 형태로 변경하는 객체
- PreparedStatement : 정의된 쿼리 구조로 실행 보장
코드 수정 시에
- 쿼리 문 정의 코드 확인
- Statement 객체 확인
- 쿼리 실행 코드 확인
Blind Numeric SQL Injection
- 계좌번호의 유효성 검증 서비스
>> sql문 작성 후 뒤 찾고자 하는 연산 값
101 and (select pin from pins where cc_number '______') > 10000
101 and (select name from pins where cc_number = '4321432143214321') = 'Jill'
101 and (select ascii(substr(name, 1, 1)) from pins where cc_number = '4321432143214321') = 'jill'
홑 따옴표 검색 시 어떤 DB, '%' 오류 메시지를 보아 검증, 제한 없이 그대로 쿼리문 생성 및 실행에 사용 가능 것 확인
DB테이블 쿼리 찾기
> order by 활용
UNION 쿼리로 실행결과
Sql map
- DB목록 조회
- 테이블 수 확인
SQL 인젝션 방어 기법
구조화된 쿼리
> PreparedStatement 객체 사용
iBatis, myBatis
> #기호 사용
HTTP 개론
대부분 자바나 php로 만들어진 침투 테스트
- 어떻게 구동되는지 알면 보안에 큰 도움