본문 바로가기

웹 보안

SQL injection

반응형

이번 시간에는 OWSAP top 10 에서도 많이 나오는 injection 공격에 대해서 배워볼거야
injection 공격 중에서도 가장 많이 일어나는 공격이 바로 SQL injection인데
SQL injection이 어떤 방식으로 공격이 진행되는지 알아보도록 할께~



먼저 내가 만든 웹 페이지에 3개의 계정으로 회원가입을 진행해보도록 할께
admin, test, jinwoo 라는 아이디로 3개의 계정을 만들고
DB에 계정들이 잘 입력되었는지 확인해보자

회원가입을 하고 DB를 확인해보자

 

현재 id,pw를 관린하는 database의 이름은 class야


자 그러면 이제 로그인 창에 들어가서 접속이 잘 되는지 확인을 한 이후,
이제 여기서부터 injection 공격을 진행해도록 할건데
id , pw를 입력하는 곳에 'or' 1=1 입력 후 로그인을 시도해보도록 해보자
그리고 결과가 어떻게 나오는지 한 번 볼까?

'or'1=1을 입력하고 로그인을 진행하면......



????



id,pw 입력란에 'or'1=1 이라는 입력값을 넣었더니 관리자 계정, 즉 admin id로 로그인이 된 것을 볼 수 있어
왜 이런 결과가 도출된 것인지 보려면 login을 통해 DB와 연동시키는 로그인 페이지를 확인해봐야해
로그인을 처리해주는 로그인 php 파일의 code를 확인해보도록 하자




$sql=" select id,pw from class where id='$id' and pw='$pw' ";
$exec=mysql_query($sql);
$result=mysql_fetch_array($exec) or die ('Login Fail');
echo "Login Success<br>";

위의 네 줄을 보면 select 문을 통해서 입력한 id와 pw가 같으면 DB의 id,pw를 추출하고
해당 id와 pw를 통해서 login 성공여부를 판단해주는 코드야
그런데 문제는 바로 $sql에서 만들어진 sql문에 취약한 부분이 있다는거야

아까 id,pw 창에 'or' 1=1 이라는 값이 각각 $id 와 $pw의 값으로 설정이 되면 구문은 다음과 같이 해석될 수 있어

$sql= "select id,pw from class where id=' 'or ' 1=1 ' and pw= ' 'or' 1=1' ";
즉, id 와 pw 값이 항상 참이되는 값을 갖게 되어 where절의 조건이 항상 참이 되는 결과가 나오게 돼
따라서 이 결과의 첫번째 값인 admin 계정이 추출되어 관리자 id로 결과가 출력된거야
DB에 위 명령대로 입력하면 지금 결과와 똑같은 결과가 나오는 것을 알 수 있어...!!

위의 두 select 명령이 똑같이 나오는 것을 볼 수 있지...???


자, 간단한 실습으로 sql injection의 기본 형태를 한번 살펴봤어...!!
다음 시간에는 SQL injection을 막기 위한 방법은 무엇이 있는지 알아볼건데
그 전에 SQL injection의 공격형태와 그 의미를 간단하게 살펴보고 끝내볼게~


SQL Injection 분류



--- SQL_Injection 종류 ---
SQL Injection 종류는 크게 두 가지로 나뉠 수 있는데 바로
Non-Blind injection과 Blind injection으로 나뉘어!
그러면, 두 injection의 차이가 뭘까? 바로 밑에 정리해놨어


- Non-Blind SQL injection: 쿼리문 결과가 확인가능한 injection (query 결과를 확인할 수 있어)
1. query result sql injection
쿼리문 결과를 보고 data를 추출하는 sql injection

2. error based sql injection
error를 발생시켜 data를 추출하는 sql injection



- Blind SQL injection: 쿼리문 결과를 유추하여 공격하는 injection (query 결과를 확인하기 어려워)
1. boolean sql injection
참과 거짓으로 data를 확인하는 injection

2. time based sql injection
시간차로 sleep을 활용하여 참일 경우 delay를 주는 injection


오늘 우리가 한 injection의 형태는 바로 Non-Blind SQL injection이라고 볼 수 있지!!
why?? query 문에 대한 결과를 확인할 수 있는 injection이었잖아 ㅎㅎ
이제 다음 시간에는 injection 방어 방법을 알아보도록 해보자~

반응형

'웹 보안' 카테고리의 다른 글

HTTP method status code  (0) 2023.11.08
Blind SQL injection  (0) 2023.02.06
Non-Blind SQL injection  (0) 2022.12.13
XSS 공격  (1) 2022.11.22
Web Hacking  (0) 2022.11.22