[목차]

 

 

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 사용자의 암호를 원래대로 맞춘다.

 

 

 

 

 

 

 

 

728x90

+ Recent posts