- vừa được xem lúc

Xây dựng scan port với python và thư viện scapy

0 0 25

Người đăng: Vương Lê

Theo Viblo Asia

Chào mọi người, sau 2 bài viết về các phương pháp phát hiện live host và scan port bằng nmap, hôm nay mình sẽ hướng dẫn xây dựng 1 công cụ đơn giản có thể quét live host và scan port bằng cách tạo ra các gói tin, gửi chúng đi và chờ đợi phản hồi. Từ các phản hồi, ta có thể phân tích và đưa ra các kết quả.

Để hiểu rõ cách hoạt động của các phương pháp scan, từ đó giúp xây dựng gói tin, các bạn nên đọc qua 2 bài viết trước của mình nằm trong series này.

Link port scan: https://viblo.asia/p/nmap-port-scan-cac-phuong-phap-quet-cong-tu-co-ban-den-nang-cao-gDVK2PMwlLj

Link live host scan: https://viblo.asia/p/nmap-live-hosts-discovery-6J3ZgpJWlmB

1. Cài đặt module scapy (python3)

Như những module khác của python, các bạn cài đặt scapy với cú pháp như sau:pip install scapy

2. Xây dựng layer với scapy

Đầu tiên, ta import scapy from scapy.all import *

Với scapy, nó hỗ trợ cho ta tất cả các layer, ví dụ như Ether(), ARP(), IP(), UDP(), TCP(),...

Một số function cơ bản cần phải nhớ

  • sumary(): Show một cách tóm tắt gói tin
  • show(): Show chi tiết gói tin
  • srp(): Gửi và nhận gói tin đi ở layer 2
  • sr(): Gửi và nhận gói tin đi ở layer 3
  • sendp(): Gửi gói tin ở layer 2
  • send(): Gửi gói tin ở layer 3 Ví dụ dưới đây mình sẽ tạo ra 1 gói tin với layer IP, thực hiện 2 func show và sumary.

Sau khi sử dụng function show() để hiển thị các giá trị trong layer, ta có thể thực hiện sửa đổi giá trị trong layer, ví dụ mình thực hiện thay đổi src trong layer IP: pkt = IP(src=192.168.1.1)

3. Xây dựng các packet

Trong scapy, các packet được xây dựng từ các layer, để kết hợp các layer lại với nhau, ta sử dụng /, theo thứ tự từ layer thấp đến layer cao. Ví dụ: pkt = Ether()/ARP()/IP()

3.1 Host discovery

  • ARP: pkt = Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ipdest)

Trong đó, dst trong Ether layer là MAC address của địa chỉ đích, ở đây cần gửi cho tất cả các máy nên mình sẽ để địa chỉ là broadcast address, pdst là vùng địa chỉ ip đích cần quét, ví dụ 192.168.1.* Sau đó mình tiến hành gửi gói tin đi và nhận lại kết quả với hàm srp()

ip = 'scanme.nmap.org'
ans, unans = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip), timeout = 3)

Nếu có kết quả trả về, tức là host live, điều này mình sẽ không giải thích nữa vì đã nói trong các bài trước.Tương tự như vậy, ta có thể xây dựng các gói tin để quét ICMP, SYN ping, ACK ping và UDP ping, hay port scan. Mình sẽ gửi link github với code đã xây dựng xong của mình cho các bạn tham khảo, tuy nhiên mình nghĩ mng nên tự xây dựng và thử nghiệm, từ đó có thể hiểu chi tiết cách hoạt động của các phương pháp này.

Link github: https://github.com/vuongle-vigo/scanport

Bình luận

Bài viết tương tự

- vừa được xem lúc

Upload multipart / form-data files to S3 with Python AWS Lambda

Upload multipart / form-data files to S3 with Python AWS Lambda. Overview. Upload the multipart / form-data created via Lambda on AWS to S3. Repo.

0 0 428

- vừa được xem lúc

Giới thiệu về Numpy (một thư viện chủ yếu phục vụ cho khoa học máy tính của Python)

Numpy. Numpy là một thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ cho việc tính toán các mảng nhiều chiều, có kích thước lớn với các hàm đã được tối ưu áp dụng lên các mảng nhiều chiều

0 0 52

- vừa được xem lúc

Basic Linux Exploit - Buffer Overflow - Phần 2 - Tạo shell với lỗi buffer overflow

Chào mọi người, nối tiếp phần 1, phần 2 mình sẽ thực hiện khai thác lỗi buffer overflow để lấy shell bằng cách sử dụng thư viện pwntools của python3. Dưới đây là mã C của chương trình khai thác phần t

0 0 36

- vừa được xem lúc

Basic Linux Exploit - Buffer Overflow - Phần 3 - Khai thác lỗi tràn bộ đệm với small buffer

Chào mọi người, nối tiếp phần trước, phần này mình sẽ giới thiệu phương pháp khai thác với buffer nhỏ. Như phần trước, buffer của chúng ta có độ lớn 64 bytes, đủ chứa shellcode và thực hiện sửa đổi re

0 0 37

- vừa được xem lúc

Basic Linux Exploit - Buffer Overflow - Phần 4 - Bypass NX (Non-Executable Stack) with Return Oriented Programming (ROP)

Sau các phần 3 phần cơ bản, phần này mình sẽ hướng dẫn các bạn cách để bypass cơ chế NX của linux. Vậy NX là gì? NX (Non-executable Stack) là cơ chế ngăn không cho thực thi mã trên stack, điều này ngă

0 0 31

- vừa được xem lúc

Hành trình pass OSCP trong lần thi đầu tiên (2020)

Vào một chiều đông 17/12/2020, tôi nhận được cái email thông báo đã pass OSCP ngay lần thử đầu tiên. Sau đó, tôi bắt đầu tìm hiểu về Security và quyết định học cái gì đó cho riêng mình.

0 0 194