상세 컨텐츠

본문 제목

MySQL password 함수 복호화

프로그래밍/팁관련

by jin* 2013. 2. 24. 23:06

본문








MySQL에서 기본적으로 지원해주는 password 함수.


영문과 숫자로 이루어진 비밀번호를 암호화처리해서 DB 에 저장해줍니다.


예를 들어 DB를 해킹하여 아이디와 비밀번호를 알아내더라도 password 함수에 의해 암호화처리가 되기때문에 2차 피해를


줄일 수 있습니다.




하지만 ..!





약간의 트릭만 이용하면 password 함수를 이용하여 암호화된 내용을 복호화 할 수 있습니다. 후후후


역시 많이들 사용하는 MD5나 다른 암호화알고리즘을 사용했더라도 복호화는 가능 하기는 합니다.


방법은 하나하나 대조해보는 것.



말은 쉽지만 하나하나 대조해본다는게 쉬운 건 아니요;;



방법을 알려드리게 되면,


첫번째 방법과 두번째 방법이 있습니다.


첫번째 방법은 인터넷상에서 많이 돌아다니고 있는 내용이고, 흔한 방법중 하나입니다.


DB안에서 아래와 같이 테이블을 만들어 줍니다.


create table crack ( c char(1) ); 
insert into crack values ('a'); 
insert into crack values ('b'); 
insert into crack values ('c'); 
insert into crack values ('d'); 
insert into crack values ('e'); 
insert into crack values ('f'); 
insert into crack values ('g'); 
insert into crack values ('h'); 
insert into crack values ('i'); 
insert into crack values ('j'); 
insert into crack values ('k'); 
insert into crack values ('l'); 
insert into crack values ('m'); 
insert into crack values ('n'); 
insert into crack values ('o'); 
insert into crack values ('p'); 
insert into crack values ('q'); 
insert into crack values ('r'); 
insert into crack values ('s'); 
insert into crack values ('t'); 
insert into crack values ('u'); 
insert into crack values ('v'); 
insert into crack values ('w'); 
insert into crack values ('x'); 
insert into crack values ('y'); 
insert into crack values ('z'); 
insert into crack values ('0'); 
insert into crack values ('1'); 
insert into crack values ('2'); 
insert into crack values ('3'); 
insert into crack values ('4'); 
insert into crack values ('5'); 
insert into crack values ('6'); 
insert into crack values ('7'); 
insert into crack values ('8'); 

insert into crack values ('9'); 



그리고 아래와 같이 쿼리를 날려주면 됩니다. 


(아래의 쿼리는 비밀번호가 4자리일 경우일때만 가능합니다. 그 이후로는 t4 이후 t5를 추가해주면 됩니다)


select 
concat(t1.c, t2.c, t3.c, t4.c), 
password(concat(t1.c, t2.c, t3.c, t4.c)) 
from 
crack t1, crack t2, crack t3, crack t4 
where 

password(concat(t1.c, t2.c, t3.c, t4.c)) = "446a12100c856ce9"; 


(446a12100c856ce9는 암호화된 비밀번호)



위에 것이 첫번째 방법입니다.


음............


저 방법으로 비밀번호를 복호화하기란, 직접 해봤지만 정말 힘듭니다 'ㅡ';;;;




실전에서 사용할만한 방법으로 두번째 방법을 소개합니다.





위에 있는 c언어 파일을 받아주세요.



그리고 컴파일해서 실행파일로 만들어줘야 하는데, 복호화를 시도하는 상황이라면 음, 뭐 거의 리눅스상태라고 생각하겠습니다.


(윈도우면 Visual Studio나 컴파일러를 이용해서 컴파일해주면됩니다.)


자, 리눅스의 경우!


gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast

./mysqlfast 446a12100c856ce9


(446a12100c856ce9는 암호화된 비밀번호)




요렇게하면 뾰로롱하면서 복화된 비밀번호가 출력됩니다.



구글링해본결과 복호화되는 속도는


6자리까지는 복호화실행과 동시에 결과값이 나오고, 7자리는 한 몇분정도? 8자리는 1시간정도 걸린다고 합니다.


그럼 9자리 이상으로는 엄청 걸리겠죠^^;;??



일반적으로 비밀번호 8자리 이내로 설정하는 경우가 많으니깐 간단한 비밀번호의 경우는 쉽게 뚫을 수 있을 것 같네요^^



오랜만에 복호화할 일이 생겨서 잠깐 사용한 것을 블로그 쓰려니깐 내용이 엉성엉성 하네요.


궁금한 내용들 댓글로 달아주시면 바로바로 확인하는대로 답변 드리도록 하겠습니다 ^^






관련글 더보기

댓글 영역