본문 바로가기

Learning/└◆Security Section

[메타스플로잇]Metasploit_Password Crack(online/offline)

Metasploit을 활용한 정보수집

[실습] 칼리 리눅스 사용하기 10

 

패스워드 크랙(Crack)

- 오프라인(Offline) 암호 크랙 = 로컬(Local) 암호 크랙 (EX: John The Ripper ) <-- 오래된 프로그램

/etc/passwd, /etc/shadow같은 파일을 볼 수 있는 경우

- 온라인(Online) 암호 크랙 = 원격(Remote) 암호 크랙 (EX: hydra)

 

패스워드 공격
 - 패스워드 공격 추측공격(Password Guessing Attack) 
 - 기본 패스워드 공격(Default Password Attack)
 - 사전 대입 공격(Brute-Force Attack)
 - 무작위 대입 공격(Dictionary Attack)

[!]공격 성공에 대한 속도
 패스워드 추측 공격 > 기본 패스워드 공격 > 사전 대입 공격 > 무작위 대입 공격
 
패스워드 공격에 잘 성공하기 위한 조건
 좋은 사전 파일을 보유해야 한다.

 

 

오프라인(Offline) 패스워드 크랙(Crack)하기

Offline password crack(Local Password Crack)

 

John The Ripper

 

존더리퍼(John The Ripper) 실행하는 방법

Password Attacks > Offline Attacks > john

or

# john

 

모의해킹 절차

정보수집 -> 포트스캔 -> 웹페이지 접속 -> 어떤 프로그램을 사용하는지 확인 ->

프로그램 정보 확인 -> 프로그램 취약점 분석 -> 공격 -> 거점확보 -> 백도어 -> 결과 레포트

 

Offline password crack(Local Password Crack)

 

사용시스템

- KaliLinux

- Metasploitable V2 Server

 

(Kali Linux)

# cat /etc/passwd | grep --color root

root:x:0:0:root:/root:/bin/bash

사용자이름:x:UID:GID:사용자정보:홈디렉토리:셸

 

/etc/passwd 파일에 대한 해석

root               사용자 이름

:x                 place holder    X는 자리를 차지하고 있는 것(pwunconv사용할때 shadow가 있던 자리)

:0                 UID(User ID)    UID로 권한을 판단.

:0                 GID(Group ID)

:root              Comment         사용자의 정보를 입력, 주소, 연락처 등등..

:/root             Home Directory    

:/bin/bash          Login Shell

root@kali:~# which pwconv
/usr/sbin/pwconv

/etc/passwd -> /etc/passwd + /etc/shadow

root@kali:~# which pwunconv
/usr/sbin/pwunconv

/etc/passwd + /etc/shadow -> /etc/passwd (통합,옛날방식,보안상 불리)

 

 

 

# ls -l /etc/passwd /etc/shadow

-rw-r--r-- 1 root root 2172 102 19:21 /etc/passwd

-rw-r----- 1 root shadow 1448 1015 14:59 /etc/shadow

 

# cat /etc/shadow | grep --color root

root:$6$WEVVa8qf$Q9ERxWghMVy/KNq3xK9Ge7P.6dDpow0G8kT62W3DIcnCMC7ZOpX.i/SOuW0GHqPiN8YH1qfgOXoShMvsgORYb.:16258:0:99999:7:::

사용자가 있는데 암호가 없을수는 없다

/etc/shadow 파일에 대한 해석

root               사용자 이름(User Name)

:$6$WEVVa8qf$Q9ERxWghMVy/KNq3xK9Ge7.....qfgOXoShMvsgORYb.

            Password($암호화알고리즘$Salt key$암호화된 암호)

    Password Aging

:16258            - (Last Change) : 암호가 변경된 날짜(기준 1970.1.1)
:0                   - (Min Change) : 암호를 변경할 수 없는 기간(EX: 7)
:99999            - (Max Change) : 암호를 사용할 수 있는 최대 날짜(EX: 30)
:7                   - (WAN Date) : 경고 메세지를 출력하는 기간(EX: 7)
:                    - (Inactive) : 비활성화 기간(EX: 7)
:                    - (Expire Data): 암호를 사용할 수 있는 최대 날짜(EX: 2014.12.31)
:                    - (Reserved) : 예약만 해놓고 개발자들이 필요한 것들을 위해 사용

 

Salt key

암호화 복호화는 모든 시스템에 들어 있으므로, 두대만 갖는 Salt Key 값을 암호화,

복호화에 집어넣어 아무나 암호화, 복호화 할 수 없도록 만드는 것, 즉 Salt Key값을 안전하게 관리하는 것이 중요하다.

ex) 1234 라는 암호에 Salt key(소금)를 더하면 qwIcSxKt0R 이런식으로 변한다.  

 

 

# ls -l /etc/passwd /etc/shadow

-rw-r--r-- 1 root root 2213 722 17:15 /etc/passwd

-rw-r----- 1 root shadow 1573 722 17:15 /etc/shadow

 

 

# john

John the Ripper password cracker, ver: 1.7.9-jumbo-7_omp [linux-x86-sse2]

Copyright (c) 1996-2012 by Solar Designer and others

Homepage: http://www.openwall.com/john/

 

Usage: john [OPTIONS] [PASSWORD-FILES]

--config=FILE use FILE instead of john.conf or john.ini

--single[=SECTION] "single crack" mode

--wordlist[=FILE] --stdin wordlist mode, read words from FILE or stdin

--pipe like --stdin, but bulk reads, and allows rules

--loopback[=FILE] like --wordlist, but fetch words from a .pot file

--dupe-suppression suppress all dupes in wordlist (and force preload)

--encoding=NAME input data is non-ascii (eg. UTF-8, ISO-8859-1).

For a full list of NAME use --list=encodings

.....

 

 

 

[참고] 사용자 추가하는 방법

(CentOS) # useradd user01 ; passwd user01

(Debian) # useradd -m -s /bin/bash user01 ; passwd user01

                    -m : make directory  m옵션을 사용하면 홈디렉토리가 생성된다.

                    -s : shell           기본값은 본쉘로 되어져있다. 배시셸로 설정.

 

 


# useradd -m -s /bin/bash user01

# passwd user01

UNIX 암호 입력: (user01)

UNIX 암호 재입력: (user01)

passwd: 암호를 성공적으로 업데이트했습니다

 

 

# useradd -m -s /bin/bash hacker

# passwd hacker

UNIX 암호 입력: (h4ckEr1.)

UNIX 암호 재입력: (h4ckEr1.)

passwd: 암호를 성공적으로 업데이트했습니다

hacker -> h4ckEr1. (hacker1.)

A -> 4

0 -> 0

l -> 1

해커들이 자주쓰는 비밀번호

 

 

# cd /root/bin

# unshadow /etc/passwd /etc/shadow > passwd.txt

unshadow 실행해서 계정이랑 비번 정보 저장된 파일

pwunconv 는 실제 설정, unshadow는 모니터상에서만 출력

# vi passwd.txt

root:$6$ZNKrPCuv$.JvW3m.3GlKL31JavpUS4lbjqXinZdF.ubpKBX79vmR2ja

mDpJjGZb6q9j77sOfZ9Njr7jdLphACiXyS1WMZL0:0:0:root:/root:/bin/bash

user01:$6$89MayOmo$hBVztZgFcTcF/IZC3n04aGnqAKLJTmwJ2bH.iO9A9UU9tOXNbF8EfeD4yIyvEn

CTOo3PrdOhNJouJjxAnRSqn.:1000:1001::/home/user01:/binbash

-> root 사용자와 user01,hacker 사용자를 제외한 모든 사용자의 정보를 삭제한다.

# vi passwd.txt 상태에서

:w passwd1.txt <-- hacker를 지우고 root와 user01만 있는 상태에서 따로저장(약한암호 보유자)

:w passwd2.txt <-- 다른이름으로 저장하기(강함암호 보유자)

 

# john passwd1.txt

Created directory: /root/.john

Warning: detected hash type "sha512crypt", but the string is also recognized as "crypt"

Use the "--format=crypt" option to force loading these as that type instead

Loaded 2 password hashes with 2 different salts (sha512crypt [32/32])

toor (root)

user01 (user01)

guesses: 2 time: 0:00:00:00 DONE (Tue Jul 22 16:41:27 2014) c/s: 29.62 trying: user01 - toor

Use the "--show" option to display all of the cracked passwords reliably

 

# john --show passwd1.txt 언제든지 크랙된 패스워드를 볼수있다.

 root:toor:0:0:root:/root:/bin/bash
user01:user01:1000:1001::/home/user01:/bin/bash

 


# john passwd2.txt 

짧지만 강력한 암호를 사용하여 hacker ID는 크랙하는데 1일 이상 소모될 것이다.

 

새로운 터미널을 열고

# john --show passwd2.txt 쳐보면 결과

root와 user01은 크랙이 된 상태.

john passwd2.txt 를 ctrl+c 로 끊을시 다음번에 다시 명령어 실행하면 끊은 상태부터 이어서 검사한다.

 

강력한 암호를 사용하는 방법

- 암호의 길이는 8글자 이상

- 문자(소문자/대문자)

- 숫자

- 특수기호(EX: $)

- 공백

 

 


짧지만 강력한 암호를 사용하여 hacker ID는 크랙하는데 1일 이상 소모될 것이다.

 

 

[과제] john the ripper 툴은 윈도우용 툴도 존재한다.

윈도우 용도로 되어 있는 툴을 사용해 본다.

# johnny

 

[과제] john the ripper 툴을 통해 dictionary file(user/password)를 통해 테스트 해 본다.

 

   

[과제] su 명령어를 사용하는 su crack 툴을 제작해 보자.

인터넷을 검색해 보자.

() sucrack 툴 => 로컬계정

() expect () && expect CMD + ssh CMD

 

# which sucrack 관리자 수행 할 수 업다, 사용자로 수행 햐여야 한다.

/usr/bin/sucrack

 

ex)

# service ssh restart

# service ssh status

# ssh user01@localhost

su - root

암호: fail

echo $?    --> 1

su - root

암호 : sucssece

echo $?    --> 0

 

일반 사용자만 있으면 관리자 권한을 얻을 수 있다.(시간문제)

 

 

 

온라인(Online) 패스워드 크랙(Crack)하기

xhydra(hydra-gtk), hydra 툴을 사용해 보자

 

xhydra 프로그램 실행하는 방법

Password Attacks > ONline Attacks > hydra-gtk (hydra)

or

# hydra

 

 

[실습] Online password crack

 

사용시스템

- KaliLinux (Attacker)

- Metasploitable V2 Server (Victim)

 

# nmap -sV -O -F 192.168.10.134  Metasploitable V2 Linux IP : 192.168.10.134

-sV 서비스 버전 정보

-O 운용체제 버전,종류 확인할 때 

-F fast scan 전체 포스트 레지스트리 포트대역중 / 서버 대역 0-491510 / 포트검색의 속도를 줄임 

Starting Nmap 6.49BETA5 ( https://nmap.org ) at 2015-11-05 11:16 KST

Nmap scan report for 192.168.10.134

Host is up (0.00039s latency).

Not shown: 83 closed ports

PORT     STATE SERVICE     VERSION

21/tcp   open  ftp         vsftpd 2.3.4

22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

23/tcp   open  telnet      Linux telnetd

25/tcp   open  smtp        Postfix smtpd

53/tcp   open  domain      ISC BIND 9.4.2

80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)

111/tcp  open  rpcbind     2 (RPC #100000)

139/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)

445/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)

513/tcp  open  login?

514/tcp  open  tcpwrapped

2049/tcp open  nfs         2-4 (RPC #100003)

2121/tcp open  ftp         ProFTPD 1.3.1

3306/tcp open  mysql       MySQL 5.0.51a-3ubuntu5

5432/tcp open  postgresql  PostgreSQL DB 8.3.0 - 8.3.7

5900/tcp open  vnc         VNC (protocol 3.3)

6000/tcp open  X11         (access denied)

MAC Address: 00:0C:29:FA:DD:2A (VMware)

Device type: general purpose

Running: Linux 2.6.X

OS CPE: cpe:/o:linux:linux_kernel:2.6

OS details: Linux 2.6.9 - 2.6.33

Network Distance: 1 hop

Service Info: Host:  metasploitable.localdomain; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel


OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 19.46 seconds


FTP가 두개 동작중인것을 확인할 수 있다.

 

[참고] hydra

# hydra -l mfsadmin -P <암호 사전 파일> <타켓> <프로토콜>

or

# xhydra

 

# xhydra (GUI툴)

-> 생성된 사전 파일을 가지고 작업한다.

-> 사전 파일을 생성하고 크랙하는 과정은 아래 [참고] 내용을 확인한다.

[참고] Kali Linux 서버에서 사전파일을 생성하고 FTP 통해 user1 사용자의 패스워드를 크랙한다.

 

 

(Metasploitable V2 Linux)

서버에서 아이디/패스가 쉬운 사용자(EX: user1)를 만든다.

 

(RedHat 계열) # useradd user1 ; passwd user1

(Debian 계열) # useradd -m -s /bin/bash user1 ; passwd user1

-m : 디렉토리 만들기 위한 옵션

-s : 쉘 설정

 

$ sudo useradd -m -s /bin/bash user1 (/etc/sudoers)

$ sudo passwd user1

 

Enter new UNIX password: user1

Retype new UNIX password: user1

passwd: password updated successfully

 

-> user1 사용자의 암호를 user1으로 설정한다.

 

$ cat /etc/passwd | grep --color user1

user1:x:1003:1003::/home/user1:/bin/bash

 

 

$ sudo cat /etc/shadow | grep --color user1

user1:$1$C/z.wtw5$9xIpcoOi03LF5IS.CrzYw/:16401:0:99999:7:::

 

 

$ ftp localhost 21  정상로그인

Connected to localhost.

220 (vsFTPd 2.3.4)

Name (localhost:msfadmin): user1

331 Please specify the password.

Password: user1

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> quit

221 Goodbye.

 

 

(Kali Linux)

xhydra 프로그램에서 사용할 사전 파일을 생성한다.

 

# cd /root/bin

 

# crunch --help   사전파일을 생성하는 툴 

Usage: crunch <min> <max> [options]

where min and max are numbers

 

Please refer to the man page for instructions and examples on how to use crunch.

# crunch 1 3              암호는 반드시 1~3글자 사이여야 하고 아무조합이나 3글자를 대입

# crunch 1 3 klz          이 3글자의 조합으로 1~3글자의 조합을 만들어 낸다.

# crunch 1 3 klz > wordlist.txt



 

 

# crunch 1 5 user1 > user.list

Crunch will now generate the following amount of data: 73645520 bytes

0 MB

0 GB

0 TB

0 PB

Crunch will now generate the following number of lines: 12356638

 

 

# cat user.list

..... (중략) .....

111re

111rr

111r1

1111u

1111s

1111e

1111r

11111

 

root@kali:~/bin# cat user.list | grep user

 user
uuser
useru
users
usere
userr
user1
suser
euser
ruser
1user

 

 

# grep --color user1 user.list

user1

 

 

 

# xhydra /* 이전에 실행한 툴 */

Target :

    Single Target : 192.168.10.134

    Port : 21

    Protocol : ftp

    Output Options:

        [ v ] Be Verbose

        [ v ] Debug

[ v ] Show Attempts  <--실습시 이것만 체크

Password :

    Username

        [ v ] Username : user1

    Password

        [ v ] Passwd list : /root/bin/user.list

Start :

하단에 있는 "Start" 선택

(참고) xhydra 툴의 가장 하단의 명령어 확인


 





 


 

(주의) /root/bin/user.list 파일 직접 편집

# vi /root/bin/user.list

상단 부분에 "user1" 입력

user1 입력후 뒤에 부분은 모두 삭제한다.(dG)

 

(Metasploitable V2)

$ sudo cat /var/log/vsftpd.log ($ sudo tail -f /var/log/vsftpd.log)

 

 

..... (중략) ....

Wed Nov 26 20:10:39 2014 [pid 5981] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5991] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5985] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5983] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5993] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5996] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 5998] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6000] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6002] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6004] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6006] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6008] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6010] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:39 2014 [pid 6012] CONNECT: Client "192.168.10.50"

Wed Nov 26 20:10:40 2014 [pid 5989] [user1] OK LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 5995] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 5997] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 5999] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6001] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6003] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6007] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6005] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6009] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:41 2014 [pid 6011] [user1] FAIL LOGIN: Client "192.168.10.50"

Wed Nov 26 20:10:42 2014 [pid 5987] [user1] FAIL LOGIN: Client "192.168.10.50"

ftp로 로그인 시도했던 흔적 로그 기록. 자동 로그인 패스워드 검색기능으로

공격당한 흔적

 

$ sudo cat /var/log/auth.log

..... (중략) .....

Nov 26 20:09:58 metasploitable vsftpd: pam_unix(ftp:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=user1 rhost=192.168.10.50 user=user1

Nov 26 20:10:29 metasploitable last message repeated 160 times    동일한 메시지가 많이발생

Nov 26 20:10:39 metasploitable last message repeated 57 times

Nov 26 20:10:56 metasploitable sshd[6014]: Accepted password for msfadmin from 192.168.10.50 port 54028 ssh2

Nov 26 20:10:56 metasploitable sshd[6016]: pam_unix(sshd:session): session opened for user msfadmin by (uid=0)

Nov 26 20:11:05 metasploitable sudo: msfadmin : TTY=pts/1 ; PWD=/home/msfadmin ; USER=root ; COMMAND=/bin/cat /var/log/vsftpd.log

Nov 26 20:11:05 metasploitable sudo: pam_unix(sudo:session): session opened for user root by msfadmin(uid=0)

Nov 26 20:11:05 metasploitable sudo: pam_unix(sudo:session): session closed for user root

Nov 26 20:13:14 metasploitable sudo: msfadmin : TTY=pts/1 ; PWD=/home/msfadmin ; USER=root ; COMMAND=/bin/cat /var/log/auth.log

 


[과제] 사전 파일을 모으자  좋은 파일을 갖고 있을수록 빨리 크래킹 할 수 있다.

인터넷을 통해 사전 파일을 모아보자.

 

[예제1]

<사전파일1> : Oracle Database 10gR2

<사전파일2> : Oracle Database 11gR2

<사전파일3> : Oracle Database 12c

.....

# cat (사전파일1) (사전파일2) (사전파일3) > (새로운 사전파일)

EX) # cat file1 file2 file3 > file4      

 

[예제2]

<기본암호 사전파일>

<인터넷상에서 구한 사전파일>

# cat (기본암호 사전파일) (인터넷상에서 구한 사전파일) > (새로운 사전파일)

EX) # cat file1 file2 > file3       기본암호가 확률이 높기 때문에 앞에 두는 것이 더 효율적이다.

 

[예제3]

<인터넷상에서 구한 사전파일1>

<인터넷상에서 구한 사전파일2>

# cat (사전파일1) (사전파일2) | sort -u > (새로운 사전파일)

EX) # cat file1 file2 | sort -u > file3  sort -u는 정렬해주면서 중복된 것을 정리해준다.

 

 



[실습] 사전 파일 만들기 예제

 

사용 시스템

- KaliLinux

 

# mkdir -p /test && cd /test

# rm -rf /test/*

 

# echo 1111 > passwd1.txt

# echo 2222 > passwd2.txt

# echo 3333 > passwd3.txt

 

# cat passwd1.txt passwd2.txt passwd3.txt

# cat passwd1.txt passwd2.txt passwd3.txt > result.txt

# cat result.txt

 

# cat passwd3.txt passwd1.txt > result.txt

# cat result.txt

 

# vi passwd1.txt

 

1111

2222

3333

4444

 

 

# vi passwd2.txt

 

6666

3333

1111

7777

 

 

# vi passwd3.txt

 

3333

22

7777

1010

 

 

# cat passwd1.txt passwd2.txt passwd3.txt | sort -u > result.txt

# cat result.txt

sort -u : 중복된 문자 제거해준다