목차
1. Network Layer 구조
1-1 ARP
1-2 ICMP
2. 해킹 실습 John the Ripper
2-1 John the Ripper 설치
2-2 패스워드 크랙
1. Network Layer 구조
1-1 ARP
● ARP
ARP는 cache 목록을 조회하거나 목록을 추가 삭제한다.
# arp -a : 캐시 전체 목록을 검색한다.
# arp -s : 목록을 정적으로 추가한다.
# arp -d : 목록을 삭제한다.
ip n 명령어로도 arp 테이블을 조회할 수 있다.
※ ARP 헤더
H/W Type (2 byte) |
Protocol Type (2 byte |
H/W Length (1 byte) |
Protocol Length (1 byte) |
OP (2 byte) |
|
SA (Sender ethernet address) (6 byte) | Sender IP address (4 byte) | ||||
DA (Target ethernet address) (6 byte) | Target IP address (4 byte) |
arp 요청 시 상대의 맥주소를 모르므로 DA에 제대로 된 값을 입력할 수 없다. 통상 브로드캐스트로 보낸다고 알려지나, 프로토콜에서 모르는 값에 대해 정해진 규격은 없으므로 비워두거나 임의의 값을 채울 수 있다.
- H/W Type (하드웨어 타입) : 하드웨어 주소(Network 유형)
* http://www.iana.org/assignments/arp‐parameters/ 참조
* Ethernet : 1
- Protocol Type
* 어떠한 유형의 프로토콜(IPv4,IPv6,ATM등)을 사용하는지 정의한다.
* IPv4 : 0x0800
- H/W Length : H/W type에서 사용하는 주소의 길이이다.
* Ethernet : 6byte
- Protocol Length : Protocol Type에서 사용하는 주소의 길이이다.
* IPv4 : 4byte
- OP : ARP와 RARP를 구별하기 위해 사용한다.
* 1 : ARP요구, 2 : ARP응답
* 3 : RARP 요구, 4 : RARP 응답
- SA, Sender IP : Sender의 MAC과 IP 주소이다.
- DA, Target IP : Destination의 MAC과 IP 주소이다.
● RARP
- 나의 MAC 주소를 이용해 나의 IP 주소를 얻어오는 프로토콜이다.
- 디스크를 가지지 않은 호스트가 자신의 IP 주소를 서버로부터 얻어내려면 RARP라는 TCP/IP 인터넷 프로토콜을 사용해야 하며, 일반적으로 자체의 디스크 기억 장치가 없는 워크스테이션이나 지능형 터미널에 의해 이용된다.
- RARP 패킷은 ARP 패킷과 동일한 형식을 갖는다.
1-2 ICMP
● ICMP
ICMP(Internet Control Message Protocol)는 송신측의 상황과 목적지 노드의 상황을 진단한다.
ICMP로 인한 공격이 있을 수 있어 최근에는 ICMP 패킷을 받아도 무시하도록 하는 추세다.
※ ICMP 헤더
Type (1 byte) | Code (1 byte) | Checksum (2 byte) |
Type과 Code에 따른 내용 |
ICMP 헤더에는 type과 code가 있는데, 이 둘의 값을 조합하여 ICMP의 형태를 확인한다.
● ICMP 구조
- Type : ICMP 메시지 종류
- Code : 각 Type에 대한 코드값
타입 | 코드 | 설명 |
0 | 0 | 에코 응답 (ping 응답) |
8 | 0 | 에코 요청 (ping 요청) |
9 | 0 | 라우터 광고 |
10 | 0 | 라우터 청원 |
3 | 0 1 . . . |
네트워크 도달 불가 호스트 도달 불가 . . . |
5 | . . . | 재지정(redirect) |
. . . | . . . | . . . |
현재 쓰이는 ICMP는 에코 응답/요청 정도이나, 이조차 방화벽에 막히는 경우가 많다.
redirect의 경우, 잘못된 경로로 게이트웨이를 재지정하도록 하는 공격이 가능하다.
● ICMP – Ping
ping은 가장 많이 사용하는 형태의 ICMP 메시지 중 하나이다.
※ ping 헤더
Type(8 or 0) (1 byte) |
Code(0) (1 byte) |
Checksum (2 byte) |
Identifier (2 byte) |
Sequence number (2 byte) |
|
Option |
- Identifier
: Ping 프로세스의 프로세스 ID로, 여러 개의 ping이 동일 호스트에서 실행되는 경우 응답을 식별할때 쓰인다.
- Sequence number
: 요구 패킷의 순서로, 0부터 시작한다.
● ICMP redirect의 이해

① 호스트가 인터넷으로 패킷를 보낼때 디폴트 라우터로 라우터 A가 정해져 있다면 호스트는 일단 패킷을 라우터 A로 보낸다.
② 라우터A는 라우팅 테이블을 검색해서 직접 데이터를 처리하는것 보다 라우터 B가 처리하는것이 효과적이라면 패킷을 라우터 B로 전송한다.
③ 라우터 A는 동일 목적지로 보내는 패킷이 라우터 B로 전송되도록 호스트에게 ICMP 리다이렉트 패킷을 보낸다.
④ 호스트는 라우팅 테이블에 현재 전송중인 패킷에 대한 정보를 저장하고 동일 목적지로 전송하는 패킷은 라우터 B로 보낸다.
● ICMP 재지정 시에 반드시 확인해야 하는 세가지 IP
- Redirect 원인이 되는 IP
- Redirect 패킷을 보낸 라우터 IP
- 앞으로 이용하게 될 IP
● ICMP redirect 패킷 구조
Ethernet Header | ||
IP Header | ||
Type (5) | Code (0-3) | Checksum |
새로운게이트웨이주소(4 byte) | ||
IP header (12 byte) | ||
SI (sender IP : 4 byte) | ||
DI (Destination IP : 4 byte) | ||
Data (8 byte) |
2. 해킹 실습 John the Ripper
2-1 John the Ripper 설치
패스워드 크랙을 실습하기 위해 오픈 소스 소프트웨어인 John the Ripper를 이용한다.
칼리리눅스에 다음과 같이 apt 혹은 wget을 이용하여 John the Ripper를 설치한다.
● apt를 이용한 설치
# apt install ‐y john : 설치
# apt show john : 상세정보 확인
John the Ripper 배포본은 아직 YESCRYPT 방식의 hash를 지원하지 않으므로 암호 방식을 SHA512로 수정한다.
# vi /etc/login.defs
......
#ENCRYPT_METHOD YESCRYPT // 기존 설정 주석처리
ENCRYPT_METHOD SHA512 // SHA512 설정 추가
......
# vi /etc/pam.d/common‐password
......
#password [success=2 default=ignore] pam_unix.so obscure yescrypt // 기존 설정 주석처리
password [success=2 default=ignore] pam_unix.so obscure sha512 // SHA512 설정 추가
......
● wget을 이용한 설치
YESCRYPT 방식의 hash를 지원하도록 직접 설치한다.
https://www.openwall.com/john/ 에서 제공되는 버전은 Kali에서 컴파일에 문제가 있으므로 git에서 제공하는 소스를 이용한다.
# apt update
# apt install ‐y build‐essential libssl‐dev zlib1g‐dev yasmlibgmp‐dev pkg‐config \ libbz2‐dev libcurl4‐openssl‐dev libpcap‐dev libopenmpi‐dev openmpi‐bin git
# cd /usr/local
# git clone https://github.com/openwall/john ‐b bleeding‐jumbo john‐jumbo
# cd john‐jumbo/src
# ./configure
# make ‐s clean && make ‐sj$(nproc)
# cd ../run
# ./john ‐‐list=formats | grep yescrypt
# ln ‐s /usr/local/john‐jumbo/run/john /usr/local/bin/john
# ln ‐s /usr/local/john‐jumbo/run/unshadow /usr/local/bin/unshadow
2-2 패스워드 크랙
패스워드 크랙을 위한 사용자 계정을 생성한다.
계정 | 패스워드 |
st1 | st1 |
st2 | asdf |
. . . | . . . |
다음과 같은 과정을 수행하여 패스워드를 크랙한다.
step 1 : 암호 파일 생성
- unshadow 명령: shadow 암호를 passwd 파일에 병합한다.
- 문법: unshadow [passwd 파일] [shadow 파일]
# unshadow /etc/passwd /etc/shadow > passwd.1
step 2 : 암호크랙
- john 명령
- 문법: john [암호파일]
# john passwd.1
위의 명령어를 실행하고 가만히 기다리고 있으면 언젠간 크랙이 완료된다.
실행 중 아무 키나 입력 시 크랙 성공 숫자나 초당 시도 횟수 등 현재 진행 상황을 출력한다.

크랙암호확인
# cat john.pot
진행확인
# john ‐‐show passwd.1
# john ‐‐status
'일일 정리' 카테고리의 다른 글
Transport Layer, 해킹 실습 - 스니핑 (0) | 2025.04.11 |
---|---|
Transport Layer, 해킹 실습 - SCAN (0) | 2025.04.10 |
패킷 분석 실습 서버 구축, Wireshark, 패킷의 이해 (0) | 2025.04.09 |
게시판 웹브라우저 프로그래밍 (2) | 2025.04.04 |
게시판 웹브라우저 프로그래밍, PHP 보안 - 스크립트 공격 방지 (0) | 2025.04.03 |