1

SQL Injection 학습

SQL Injection 학습

노아의 블로그

    목차
반응형

SQL Injection은 보다시피 SQL 질의문을 삽입하는 공격입니다.
 
공격을 당할시
DB에 있는 데이터가 유출되거나
인증을 우회해서 관리자 권한으로 로그인하거나
심지어 DB의 데이터 변조까지 가능한 무서운 공격입니다.
 
로그인 SQL문이 이렇게 있다고 가정해봅시다.
 
SELECT * FROM MEMBER
WHERE id = ? AND password = ?
 
그렇다면 클라이언트에서 
로그인 정보를 서버에게 보낼것입니다.
나는 id가 mario고 password 가 mariosuper야.
그럼 저 ? 자리에 사용자가 입력한 문자가 전달되겠죠.
 
그러면 SQL문은
SELECT * FROM MEMBER
WHERE id = 'mario' AND password = 'mariosuper' 가 됩니다.
 
만약 mario라는 사용자가 회원가입을 했고 테이블에 정보가 있으면 SQL문을 실행한 결과값 = 회원의 정보(mario의 정보) 가 정상적으로 출력되겠죠.
중요한건 SQL문의 실행 결과값이 있으면 로그인되고 없으면 로그인이 실패되는것입니다.(기억하세요)
 
그렇다면 어떤 나쁜 해커가 사용자의 DB를 털어가고싶어요.
해커는 어떻게 어떻게 하다가 로그인의 SQL문이
SELECT * FROM MEMBER
WHERE id = 'mario' AND password = 'mariosuper' 이렇게 작동한다는것을 알게 됩니다.
 
이게 웬 떡이냐? 
나는 해커니까 아이디 ? 비밀번호 ? 그딴거 왜써! 다른 사람의 정보를 털으면 되는걸?
그래서 해커는 id를 안씁니다.
바로 id란에 SQL쿼리문을 쓰는것이죠. 이것이 SQL Injection (삽입 공격) 입니다.
 
일단 해커는 아까처럼
로그인의 SQL문을 구했습니다.
SELECT * FROM MEMBER
WHERE id = 'admin' AND password = '몰라그딴거'
 
멀쩡한 SQL이니까. 이렇게 입력하면 실행이 안되고 결과값이 안나와서 로그인이 실패되죠.
 
해커는 고민합니다. 아 여기는 AND 연산자를 써서 로그인을 못해먹겠네...
Id는 분명 admin일텐데 하지만 나는 패스워드를 모르는데 이걸 좀 변형해볼까?
 
그렇다면 생각할수 있는게 이 골칫덩어리 AND를 지워버리는 것입니다.
SELECT * FROM MEMBER
WHERE id = 'admin' or password = '몰라그딴거' 
라고 하면 or연산자를 사용하니까. id아님 password 두개중에 하나만 맞아도 그냥 실행되는것이죠.
 
하지만, 서버측에서 쿼리를 설정해놓고 클라이언트의 입력값만 받아서 작동하는것이기 때문에 직접 and를 or로 바로 바꿔버릴수가 없으니까 
간접적으로 바꿔버리는 것 입니다.
 
그러면 해커는 SELECT * FROM MEMBER
WHERE id = 'admin' or '1' = '1' AND password = '몰라그딴거' 
라는 SQL문을 생각해냈습니다.
 
여기서 잠깐 봐야하는것이 SQL문에서는 항상 AND 연산부터 먼저 한다는 개념이 있습니다.
그렇다면 실행 순서는 이것이 되겠죠.
 
1. '1' = '1' and pssword = '몰라그딴거' 를 비교하니까 첫번째는 참인데 두번째는 거짓이네? 그러면 and에 적합하지 않으므로 거짓!
 
2.id = 'admin' or 거짓이 됩니다.
 
어라? id = admin or 거짓이니까 
id가 admin이라는 사람이 있네? 그러면 참 or 거짓이네 ?
= 너 통과
 
그러면 이 SQL문은 id만 맞아도 통과되는 SQL문입니다.
해커는 이 SQL을 만들기위해 
 
원래 서버에서 사용하는 
 
SELECT * FROM MEMBER
WHERE id = '' AND password = ''
형식에 
id = admin' or '1' = '1 
password = '몰라그딴거'
를 입력해버리면 
 
서버에서 사용하는 SQL문이 해커가 의도한
SELECT * FROM MEMBER
WHERE id = 'admin' or '1' = '1' AND password = '몰라그딴거'  로 변조되어서 실행되는것입니다.
 
이렇게 SQL문을 삽입하는것을 SQL Injection이라고 합니다. 
 
 
 

반응형

'해킹 > SQL Injection' 카테고리의 다른 글

로그인 로직 생각1  (0) 2023.04.23
SQL Injection - Union - 절차적 해킹  (0) 2023.04.21
SQL Injection - Union  (0) 2023.04.14