웹해킹/파이썬해킹 5

TCP/UDP

◆TCP/UDP에 대한 이해TCP는 신뢰성이 있는 패킷의 전달을 위해 고안된 프로토콜이다. 통신 전에 항상 세션을 성립하며 패킷을 전송한 후 전송받은 측에서 패킷이 잘 도착했다고 알린다. 그러다보니 상대적으로 속도가 느리다.UDP는 영화나 유튜브같은 영상을 시청할 때 약간의 동영사잉 깨지는 정도는 감수할 수 있는 곳에서 사용된다. 속도가 빠르며 정확도가 상대적으로 덜 하다.TCPUDP연결형 서비스비연결형 서비스신뢰성 높음신뢰성 낮음속도가 느림속도가 빠름수신 여부 확인수신 여부 확인 x전송 순서 보장전송 순서 보장 x ◆TCP 3-Way Handshake의 3단계 설명TCP 통신의 연결을 초기화 할 때 거치는 3단계 과정이다.1단계: 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보내고 SYN_SENT..

Ping Sweep 스캐너 구현

ICMP Echo Request를 이용해 IP 범위를 쓸고 지나가면서 존재하는 호스트를 찾아내는 것을 Ping Sweep Scan이라고 한다.Ping 모듈을 이요해 1초의 대기 시간으로 반복해서 Echo Request를 요청한다. ip_address에는 스캔할 대상을 설정하고 대상 서버의 상태에 따라 다른 응답결과가 나올 수 있다. 메인 함수에서 끝 시간에서 시작 시간을 빼서 걸린 시간을 출력한다. 결과 화면에서 알 수 있듯이 요청 이후의 응답을 받기 전까지는 다음 요청을 하지 않는다. 따라서 시간이 오래 걸린다. 만약 1000개의 호스트를 대상으로 스캔한다고 가정하면 시간은 훨씬 많이 들게된다. Note. 코드 실행 전 'pip install pythonping' 명령어를 이용해 해당 모듈을 설치해야 ..

은닉 채널을 이용한 파일 전송

네트워크에서 프로토콜이란 약속이며 정의하기 나름이다. IP 헤더의 사용하지 않는 부분이나 특정한 약속을 만들거나 Icmp 헤더의 데이터에 다른 프로토콜을 구현할 수도 있다. 은닉 채널(Covert Channel)은 이렇게 숨겨서 정보를 전송하는 네트워크 공격 기법이다. 간혹 방화벽과 같은 장비에서 TCP, UDP 포트를 막아 놓거나 감시할 때 은닉 채널을 이용할 수 있다. 방화벽이나 장비 등을 피해 장악한 호스트에게 악성 코드 등을 전송하거나 원격 명령을 내리는 등의 행위를 할 수 있다. 또한 네트워크 패킷 감시 장비를 우회해 파일을 송수신 할 수도 있다. Ping은 대부분의 운영체제에 설치된 도구이며 TCP, UDP 포트가 막혀도 파일을 전송할 수 있다. ICMP의 메세지를 이용해 사진파일을 전송해 보..

ICMP(Internet Control Message Protocol)

3계층(네트워크 계층)에서 동작하며 네트워크 통신의 테스트 또는 오류 메시지 응답을 전송하는 데 주로 사용된다.통신 상태를 확인할 때 사용하는 Ping, Tracert 또한 ICMP를 이용한다. Type: ICMP패킷의 종류를 나타낸다.Code: Type에 대한 상세한 항목이다.Checksum: 오류를 검출하는 필드이다.Other message specific information: ICMP 헤더의 추가 메시지 필드이다. ICMP헤더는 Type과 Code에 따라 헤더의 내용이 바뀐다.ICMP 스니퍼(ICMP Sniffer)sniff는 '킁킁거리다'라는 뜻이다. 네트워크 패킷을 훔쳐보는 프로그램을 스니퍼(Sniffer)라고 한다.스니퍼 테스트를 위해 ICMP프로토콜을 수신하는 방화벽을 열어야 한다.윈도우1..

Raw소켓을 이용한 IP 헤더 분석

from socket import *import osimport structdef parsing(host):    # raw socket 생성 및 bind    if os.name == "nt":        sock_protocol = IPPROTO_IP    else:        sock_protocol = IPPROTO_ICMP    sock = socket(AF_INET, SOCK_RAW, sock_protocol)    sock.bind((host, 0))    # socket 옵션    sock.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)    # promiscuous mode 켜기    if os.name == "nt":        sock.ioctl(SIO_RCV..