[목차]
1. 해시 스크립트 제작 - 쉘스크립트
2. 해시 스크립트 제작 - 파이썬
3. 리눅스 /etc/shadow 파일의 encrypted password 해시 분석
4. 리눅스 사용자 암호 크랙 - john the ripper
5. 윈도우 사용자 암호 크랙
[해시 스크립트 제작 : 쉘 스크립트]
■ Hash 스크립트 제작 실습
다음과 같은 프로그램을 제작하여 쉽게 해시값을 확인할 수 있도록 한다.
checkHash.sh
checkHash2.sh
1. 작업 시니라오
다음과 같이 파일이름을 입력 받아서 이 파일에 대한 여러가지 해시값을 출력한다.
# ./checkHash.sh /test/mod_fcgid-2.3.9.tar.gz
MD5 : ece4c66f0c05d216fc96969fcf3d1add
SHA1 : 99d6b24f3f83a3a83d1d93d12a0d5992e3fa7851
SHA224 : f905b3af67a74579bc20c7438ddf0fc54010651163b04b60201ec41f
SHA256 : 1cbad345e3376b5d7c8f9a62b471edd7fa892695b90b79502f326b4...
SHA384 : a2b918d2fccc14af7a9c1849201cf3532a4a6e879f16389faff57d2dd.....
SHA512 : 49a17deaabd481f8b581444891656f2516f10d198630f92ebc18db3d....
# vi checkHash.sh
#!/bin/bash
#
# CMD: md5sum, shasum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
#
# 인자 처리하는 구문
if [ $# -ne 1 ] ; then
echo "Usage: $0 <filename>"
exit 1
fi
# 첫번째 인자를 FILE1 변수
File1=$1
# HASH 함수
HASH() {
CMD=$1 # 명령어(ex: md5sum)
FILE=$2 # 파일이름(ex: mod_fcgid-2.3.9.tar.gz)
RET=$($CMD $FILE | awk '{print $1}')
echo $RET
}
# 출력내용
echo
echo -n "MD5 : "; HASH md5sum $File1
echo -n "SHA1 : "; HASH shasum $File1
echo -n "SHA224 : "; HASH sha224sum $File1
echo -n "SHA256 : "; HASH sha256sum $File1
echo -n "SHA384 : "; HASH sha384sum $File1
echo -n "SHA512 : "; HASH sha512sum $File1
echo
:<< EOF
echo
echo -n "MD5 : "; md5sum $1 | awk '{print $1}'
echo -n "SHA1 : "; shasum $1 | awk '{print $1}'
echo -n "SHA224 : "; sha224sum $File1 | awk '{print $1}'
echo -n "SHA256 : "; sha256sum $File1 | awk '{print $1}'
echo -n "SHA384 : "; sha384sum $File1 | awk '{print $1}'
echo -n "SHA512 : "; sha512sum $File1 | awk '{print $1}'
echo
EOF
2. 작업 시나리오
checkHash2.sh 프로그램은 해시값을 인자로 받아서, 이 해시값이 어떤 알고리즘을 사용하고 있는지 확인하는 프로그램을 제작한다.
# checkHash2.sh mod_fcgid-2.3.9.tar.gz ece4c66f0c05d216fc96969fcf3d1add
MD5 Algorithm
# vi checkHash2.sh
#!/usr/bin/hash
# 인자 처리 구문
if [ $# -ne 2 ] ; then
echo "Usage: $0 <filename> <hash value>"
exit 1
fi
# HASH 함수
HASH() {
CMD=$1
FILE=$2
RET=$($CMD $FILE | awk '{print $1}')
echo $RET
}
# 비교하는 구문 & 출력
case $2 in
$(HASH md5sum $1) ) echo "MD5 Hash Algorism" ;;
$(HASH sha1sum $1) ) echo "SHA1 Hash Algorism" ;;
$(HASH sha224sum $1) ) echo "SHA224 Hash Algorism" ;;
$(HASH sha256sum $1) ) echo "SHA256 Hash Algorism" ;;
$(HASH sha384sum $1) ) echo "SHA384 Hash Algorism" ;;
$(HASH sha512sum $1) ) echo "SHA512 Hash Algorism" ;;
*) echo "Error: Unkown Hash Algorism"
exit 1
esac
[해시 스크립트 제작 : 파이썬]
1. checkhash.py
#!/usr/bin/python3
#
# CMD: md5sum, shasum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
#
import os
import sys
import subprocess
def main():
# ./checkHash.py /test/mod_fcgid-2.3.9.tar.gz
# md5sum : ee5728c963179efb639d88c4cafbf180
# shasum : d566a894fe85d47805008c49b446b08bed698ad8
# .....
if len(sys.argv) != 2:
sys.exit("Usage: %s <filename>" % sys.argv[0])
cmdlist = ['md5sum', 'shasum', 'sha1sum',
'sha224sum', 'sha256sum', 'sha384sum', 'sha512sum']
filename = sys.argv[1]
for cmd in cmdlist:
execcmd = "%s %s | awk '{print $1}'" % (cmd, filename)
output = subprocess.check_output(execcmd, shell=True).decode().rstrip()
print("%s : %s" % (cmd, output))
if __name__ == '__main__':
main()
출력 값
md5sum : ece4c66f0c05d216fc96969fcf3d1add
shasum : 99d6b24f3f83a3a83d1d93d12a0d5992e3fa7851
sha1sum : 99d6b24f3f83a3a83d1d93d12a0d5992e3fa7851
sha224sum : f905b3af67a74579bc20c7438ddf0fc54010651163b04b60201ec41f
sha256sum : 1cbad345e3376b5d7c8f9a62b471edd7fa892695b90b79502f326b4692a679cf
sha384sum : a2b918d2fccc14af7a9c1849201cf3532a4a6e879f16389faff57d2ddace07f42ddd1872917bfc1afec784efe545763e
sha512sum : cae8bf8ad324512a51e6f34cb32468ea49a17deaabd481f8b581444891656f2516f10d198630f92ebc18db3d575f61dd7254153938a8206fb6c1441c7850be63
2. checkhash2.py
#!/usr/bin/python3
import sys
import os
import subprocess
hashtable = [['MD5', ''],
['SHA', ''],
['SHA1', ''],
['SHA224', ''],
['SHA256', ''],
['SHA384', ''],
['SHA512', '']]
cmdlist = ['md5sum', 'shasum', 'sha1sum', 'sha224sum',
'sha256sum', 'sha384sum', 'sha512sum']
def main():
# checkHash2.py /test/mod_fcgid-2.3.9.tar.gz ece4c66f0c05d216fc96969fcf3d1add
# sys.argv[0] sys.argv[1] sys.argv[2]
# MD5 인자 처리 구간
if len(sys.argv) != 3:
sys.exit('Usage: %s <file> <checksum>' % sys.argv[0])
filename = sys.argv[1]
hashvalue = sys.argv[2]
# (ex) md5sum <file> | awk '{print $1}’ 해시값 만드는 구간
for num, cmd in enumerate(cmdlist):
execcmd = "%s %s | awk '{print $1}'" % (cmd, filename)
data = subprocess.check_output(execcmd, shell=True)
hashtable[num][1] = data.decode().strip()
# print(hashtable)
for num, hashtable_value in enumerate(hashtable):
if hashtable_value[1] == hashvalue:
print("%s hash Algorithm " % hashtable[num][0])
if __name__ == '__main__':
main()
출력값
MD5 Hash Algorithm
[리눅스 /etc/shadow 파일의 encrypted password 해시 분석]
■ 사용시스템
kali : 데비안 계열
linux200 : redhat 계열
■ 작업 시나리오
/etc/shadow 파일의 2번째 필드(encrypted password 필드)에 들어 가는 내용을 해석하고 정확한 의미를 파악한다.
[실습] /etc/shadow 파일 해석
① (kali) /etc/shadow 파일에 대한 해석
# useradd -m -s /bin/bash hacker /* -m: directory 생성, -s: shell */
# passwd hacker
-> 암호: soldesk1.
# cat /etc/shadow | grep hacker
hacker:$6$s8uegy9O$ezU9tmYD8/hzsjuwY5M.tLxmB2hMbZLPdYXvyFqCR1zOhc8nE9ywyHMvBJh0i13/As/aC.eCMw3SDhrcE73p1.:18303:0:99999:7::: |
6 : HASH 알고리즘 종류(ex: SHA512)
s8uegy9O : salt key
ezU9tmYD8/hzsjuwY5 ... : 암호화된 패스워드
② (kali) salt key 대한 분석
# cat /etc/shadow | grep hacker | awk -F: '{print $2}'
$6$s8uegy9O$ezU9tmYD8/hzsjuwY5M.tLxmB2hMbZLPdYXvyFqCR1zOhc8nE9ywyHMvBJh0i13/As/aC.eCMw3SDhrcE73p1. |
# passwd hacker
-> soldesk1.
# cat /etc/shadow | grep hacker | awk -F: '{print $2}'
$6$k1h/aJQB$gcbnURJlPi.LCevj21.lpEEesgrbjHs85JyZfd83lHW51D9kZrwNfv71YxKBVwk92E5iiz21hattj/fz3rqAW. |
-> 동일한가?
③ (linux200) 다른 서버에서도 동작 원리가 같은지 확인
# useradd hacker
# passwd hacker
-> soldesk1.
# cat /etc/shadow | grep hacker | awk -F: '{print $2}'
$6$uBQ0P4Q8$AgfBCLE4gRJ1PwxkyoxbwnLw7uk1F8zAYt3MO00Kqh0tuLfF7xRdodsc0FYrWYfc7tV.tcuB3G9SNE/KSbr5U/ |
# passwd hacker
-> soldesk1.
# cat /etc/shadow | grep hacker | awk -F: '{print $2}'
$6$CPCmcsRA$XoQcrFa2F0cZbMzBIKAl.zUVOy/2A8sVKqLJ.pgQfpOfRi0tytPR3bi2P0dZmFJg7BQa7GGVw9EWfiwTZMm0M0 |
[리눅스 사용자 암호 크랙 - john the ripper]
■ 사용시스템
kali
■ 작업 시니리오
john the ripper 툴을 이용한 Linux 사용자 password crack 작업
공격자는 /etc/shadow 파일을 얻은 상태라고 가정하고, 사전 파일을 만들고 dictionry 공격을 진행해 본다.
(가정)
시스템에는 user01, user02, hacker 사용한다고 가정한다.
ID/PASS: user01/user01
ID/PASS: user02/user02
ID/PASS: hacker/hacker
① 사전 파일 만들기(ex: crunch CMD)
# mkdir -p /test
# cd /test
# rm -rf /test/*
# crunch --help
crunch version 3.6
Crunch can create a wordlist based on criteria you specify. The output from crunch can be sent to the screen, file, or to another program.
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. |
# man crunch
/EXAMPLE Example 8 crunch 4 5 -p dog cat bird The numbers aren't processed but are needed. crunch will generate birdcatdog, birddogcat, catbirddog, catdogbird, dogbirdcat, dogcatbird. |
# time crunch 4 5 soldesk > dict.txt (# time CMD)
# cat << EOF >> dict.txt
hacker
user01
user02
toor
EOF
# cat dict.txt
kkkkl kkkkd kkkke kkkkk hacker user01 user02 toor |
② 암호 파일 만들기(unshadow CMD)
# man unshadow
NAME unshadow - combines passwd and shadow files
SYNOPSIS unshadow password-file shadow-file
DESCRIPTION This manual page documents briefly the unshadow command, which is part of the john package. This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. john, better known as John the Ripper, is a tool to find weak passwords of users in a server. ..... (중략) ..... |
# unshadow /etc/passwd /etc/shadow
-> 출력 내용 생략
# unshadow /etc/passwd /etc/shadow | egrep 'user01|user02|hacker' > pass.txt
# cat pass.txt
user01:$6$HqmiT3Ei$WRoHe6/UQ3pQ2qaUDHfzAGFZZaPl8tM87mCu44Hou.09fGsmVJ4JZmTNdYx872hfeMX3d67WD5mTdmK8IiANO/:1000:1000::/home/user01:/bin/bash user02:$6$A4X.idvi$9uTjKejF4J6EY4ehRGJvejPVSN/ek3rpmu3deZ4ST.ot2c0XanbWv7QolGjJm5/A/ks3v7dnIAHB4V33FlT12/:1002:1002::/home/user02:/bin/sh hacker:$6$RUF4bsHx$rd6RzJ28cPUeFMds6RYqmUWuYZmRhoJJedzCC8ShdRJcH7GzQ.UbrJiW5dfxvFLpz2xtrwgkIAaAe1s8Ug2YE0:1003:1003::/home/hacker:/bin/bash |
③ 암호 크랙 작업
(CLI) john CMD
(GUI) johnny CMD
# rm -rf ~/.john
# time john --wordlist=dict.txt pass.txt
Created directory: /root/.john Using default input encoding: UTF-8 Loaded 3 password hashes with 3 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x]) Cost 1 (iteration count) is 5000 for all loaded hashes Will run 4 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status user02 (user02) user01 (user01) soldesk1. (hacker) 3g 0:00:00:08 DONE (2020-02-12 01:15) 0.3745g/s 1133p/s 3399c/s 3399C/s keoee..root Use the "--show" option to display all of the cracked passwords reliably Session completed |
# john --show pass.txt
user01:user01:1000:1000::/home/user01:/bin/bash user02:user02:1002:1002::/home/user02:/bin/sh hacker:hacker.:1003:1003::/home/hacker:/bin/bash
3 password hashes cracked, 0 left |
[참고] john CMD
https://null-byte.wonderhowto.com/forum/cracking-passwords-using-john-ripper-0181420/
Cracking Linux User password
Cracking Password Protected ZIP/RAR Files
Decrypting MD5 Hash
Using Wordlists To Crack Passwords
# crunch 4 5 soldesk | john --wordlist=- pass.txt
[윈도우 사용자 암호 크랙]
[참고]
Windows password cracking using John The Ripper
https://prakhar.prasad.pro/blog/windows-password-cracking-using-john-the-ripper/
How to Crack Windows 10, 8 and 7 Password with John the Ripper
https://www.top-password.com/blog/crack-windows-password-with-john-the-ripper/
패스워드 보안의 기술
http://www.codeok.net/패스워드%20보안의%20기술
Cracking Windows Password Hash with Kali linux Live Booting
https://kali-km.tistory.com/entry/Cracking-Windows-Password-Hash-with-Kali-linux-Live-Booting
How to Crack Window Password with Kali Live Usb
https://null-byte.wonderhowto.com/forum/crack-window-password-with-kali-live-usb-0170855/
■ 사용시스템
win2008
win7
KaliLinux CD
■ 작업 시나리오
win2008/win7 시스템의 administrator/soldesk 사용자의 암호를 초기화 한다.
예를 들어, win2008 서버가 해킹을 당했고, 악의적인 사용자에 의해 암호가 변경된 상태라면 !!
win2008/win7 서버에 KaliLinux CD(LiveCD)를 장착하고 부팅 작업을 한다.
윈도우 파티션을 마운트하고 관리자의 암호를 초기화 한다.
[실습] 윈도우 암호 크랙 - windows 2008 R2/win7
(주의) 실습 전 반드시 windows 2008 R2 서버에 대해서 snapshot을 수행한다.
① (win2008) kali CD 장착
win2008 VM에 KaliLinuxCD ISO 파일을 내장한다.
VMware > VM > Settings > CD/DVD > Use ISO image file: kali Linux CD
[참고] Kali Linux CD : kali-linux-2019-W44-amd64.iso
② (win2008) BIOS로 부팅 & 부팅 순서 변경
VMware > VM > Power > Power on to Firmware
CD 부팅 순서를 Disk 부팅순서 위쪽으로 올린다.
CD > Disk
저장하고 빠져 나가기
③ Kali 리눅스 선택 부팅 후 root 사용자로 로그인
"Live (amd64)" 선택
ID/PASS: root/toor
④ 윈도우 파티션 마운트
# lsblk
# fdisk -l
* sda2
# mkdir -p /mnt/win
# mount /dev/sda2 /mnt/win
# df -h -T
⑤ SAM, system 파일이 있는 위치로 이동
C:\Windows\System32\config\SAM
# cd /mnt/win ; ls
# cd Windows/System32/config
# ls *SAM*
⑥ SAM 파일안의 내용 확인
# chntpw -l SAM
⑦ SAM 파일 편집(암호 초기화)
# chntpw -u Administrator SAM
⑧ 암호 clear 하고 저장
Administrator 사용자가([v] ADMIN?, [ ] Lock?)
1 - Clear (blank) user password
[참고] Lock 걸린 관리자 계정 암호 clear 하기
Administrator 사용자가([v] ADMIN?, [v] Lock?)
2 - Unlock and enable user account [seems unlocked already]
1 - Clear (blank) user password
⑨ 빠져나가기 & 저장하기
q
y
⑩ CD 빼기 & 재부팅
VMware > VM > Settings > CD/DVD
Device status
[ ] connected
[ ] connect at power on
# reboot
⑪ win2008 서버에 administrator 사용자로 로그인
로그인 창이 뜬 이후에 administrator 사용자를 선택하면 암호입력 없이 로그인이 가능하다.
(복원) administrator 사용자의 암호 복원
* lusrmgr.msc
* administrator 사용자의 암호를 원래대로 맞춘다.
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day90 : 메시지 인증 코드, putty, openssl, ssh, https (0) | 2021.01.14 |
---|---|
정보보안 과정 Day89 : NTLM 해시 크랙 / Yum repo 서명/검증 실습 / 해시 함수 테스트 (0) | 2021.01.13 |
정보보안 과정 Day88 : 일방향 해시 함수(이론) (0) | 2021.01.12 |
정보보안 과정 Day87-1 : 하이브리드 암호 시스템 (0) | 2021.01.11 |
정보보안 과정 Day87 : RSA 실습 (0) | 2021.01.11 |