본문 바로가기

HOW TO HACK/MITM

칼리리눅스에서 Responder.py 툴을 이용해 패스워드 크랙하기


안녕하세요, Mr. Rootable입니다.

오늘은 Responder라는 툴에 대한 소개와 실습을 해보겠습니다.

사실, 포스팅을 쉬면서 몇개 비공개로 작성해둔 것을 이제서야 공개하는 것이긴 합니다. ㅋㅋ

아무튼...

Responder는 LLMNR, NBT-NS, MDNS 포이즈너(poisner)입니다.


(상기 이미지는 구글에서 찾아서 사용했습니다. 출처:https://i.ytimg.com/vi/sAr4PBR7EUE/maxresdefault.jpg)


로컬네트워크 환경에서 각 호스트들의 인증 크레덴셜(Credentials) 해쉬를 획득하기 위해 사용되는 툴이죠.

그럼 용어정리부터 하고 가시죠.

  • LLMNR(Link-Local Multicast Name Resolution)

-.로컬네트워크상에서 호스트의 이름을 찾는데 사용되는 프로토콜임.

-.윈도우 비스타, 7, 8, 2008 부터 사용되고, UDP 5355 포트를 사용함.


  • NBT-NS(NetBIOS Name Service)

-.LLMNR의 선배입니다. 

-.윈도우 비스타 이전까지 사용되었으며, IPv4 환경만 지원이 가능합니다. 이 때문에 IPv4, IPv6환경 모두 지원이 되는 LLMNR이 후임으로 나온거죠.


MDNS



  • 해쉬

-.어떤 값이 고정된 길이로 암호화된 값을 말하며, 윈도우 환경에서의 사용자 계정의 비밀번호가 이 해쉬로 저장이 됩니다. 

-.사용되는 암호화 알고리즘으로는 LM Hash와 NTLM Hash, NTLMv2 Hash가 있습니다.


LM Hash : 윈도우95,98,me에서 사용됨.

NTLM Hash : 윈도우XP, 2000에서 사용됨.

NTLMv2 Hash : 윈도우 비스타 이후로 사용됨. 



Responder툴은 로컬네트워크에서 호스트명을 조회하는 메카니즘의 취약점을 이용하여 인증 크레덴셜을 획득한다고 보시면 될 듯 합니다.


원래는 fileserver라는 호스트가 존재하지만 사용자의 실수(오타) flieserver와 통신을 시도하는 상황을 가정해봅시다.


1) 희생자가 DNS가 모르는 호스트명을 묻습니다. 오타를 쳤으니 DNS는 모르겠쬬? "//flieserver 라는 이름을 가진 녀석이 누구야?"

2) DNS가 응답합니다. "//flieserver 난 그런 녀석 몰라!!"

3) 같은 로컬네트워크 내의 다른 호스트들에게 묻습니다. "너네중에 //flieserver 아는 녀석있어?"

4) 이 때, 공격자가 개입해서 위장행세를 합니다. "어!! 그거 나야~~ ㅋㅋㅋㅋ"

5) 희생자는 그대로 믿고, 자신의 인증 크레덴셜을 공격자에게 전송합니다.

6) 공격자는 "완전 땡큐"를 외칩니다.


깃허브(https://github.com/SpiderLabs/Responder)에서 다운로드가 가능합니다.




Step 1 : Responder를 실행합니다.


칼리리눅스의 터미널을 열어 아래 명령어를 실행합니다.


# python Responder.py -I eth0 -i 192.168.0.64 -w On -r On -f On




Step 2 : 걸려들때까지 기다립니다.


Responder를 실행해놓고 기다리다보면 LAN환경에서 누군가가 인증을 시도할테고, 그러면 아래 화면과 같이 공격자에게 해쉬값이 전달되고맙니다. 이 해쉬값은 Responder/logs 디렉토리에 별도로 저장됩니다. 





Step 3: 패스워드를 크랙합니다.


logs라는 디렉토리에 획득한 인증 크레덴셜이 있으면 txt 파일로 저장되며, 파일명 형식은 아래와 같습니다.


(모듈이름)-(해쉬유형)-(클라이언트IP)


획득한 파일 중에 SMB-NTLMv2-SSP-192.168.0.4.txt라는 이름의 파일 하나를 골라 John the ripper(존더리퍼) 툴을 이용하여 해쉬값을 크랙해봅시다.


# john --format=netntlmv2 SMB-NTLMv2-SSP-192.168.0.4.txt


아래 스크린샷과 같이(흰색블럭으로 가려놨음^^) 평문의 패스워드를 얻을 수 있습니다.<끝>