Giới thiệu - Scapy

về Scapy
Scapy là một chương trình Python cho phép người dùng gửi, ngửi và phân tích và giả mạo gói tin mạng. Khả năng này cho phép xây dựng các công cụ có thể thăm dò, quét hoặc mạng tấn công.
Nói cách khác, Scapy là một chương trình thao tác gói tương tác mạnh. Nó có thể giả mạo hoặc các gói giải mã của một số lượng lớn các giao thức, gửi cho họ trên dây, nắm bắt chúng, yêu cầu phù hợp và trả lời, và nhiều hơn nữa. Scapy có thể dễ dàng xử lý các nhiệm vụ cổ điển như quét, vết tích, thăm dò, kiểm tra đơn vị, các cuộc tấn công hoặc phát hiện mạng. Nó có thể thay thế hping, arpspoof, arp-sk, arping, p0f và thậm chí một số bộ phận của Nmap, tcpdump, và tshark).
Scapy cũng thực hiện rất tốt trên rất nhiều nhiệm vụ cụ thể khác mà các công cụ khác hầu hết không thể xử lý, như gửi các khung không hợp lệ, tiêm chích 802,11 khung của riêng bạn, kết hợp kỹ thuật (VLAN hopping + ARP cache poisoning, giải mã VOIP trên kênh mã hóa WEP,. ..), vv
Ý tưởng là đơn giản. Scapy chủ yếu là thực hiện hai điều: gửi các gói tin và nhận được câu trả lời. Bạn định nghĩa một tập hợp các gói tin, nó sẽ gửi cho họ, nhận được câu trả lời, phù hợp với các yêu cầu với câu trả lời và trả về một danh sách các cặp vợ chồng gói (yêu cầu, câu trả lời) và một danh sách các gói tin chưa từng có. Điều này có lợi thế lớn so với các công cụ như Nmap hoặc hping là một câu trả lời không được giảm xuống (mở / đóng / lọc), nhưng là toàn bộ gói.
Ngày đầu này có thể xây dựng các chức năng cao cấp hơn, ví dụ một trong đó không traceroutes và cho kết quả là chỉ có TTL bắt đầu yêu cầu và nguồn IP của câu trả lời. Một mà ping toàn bộ mạng lưới và cung cấp cho các danh sách các máy trả lời tự động. Một mà không một portscan và trả về một báo cáo LaTeX.
Điều gì làm cho Scapy nên đặc biệt
Đầu tiên, với hầu hết các công cụ mạng khác, bạn sẽ không xây dựng someting tác giả đã không tưởng tượng. Những công cụ này đã được xây dựng cho một mục tiêu cụ thể và không thể đi chệch nhiều từ nó. Ví dụ, một ARP chương trình độc bộ nhớ cache sẽ không cho phép bạn sử dụng đôi 802.1q đóng gói. Hoặc cố gắng để tìm một chương trình mà có thể gửi, nói rằng, một gói tin ICMP với lớp đệm (Tôi đã nói đệm, không tải trọng, hiểu không?). Trong thực tế, mỗi khi bạn có một nhu cầu mới, bạn phải xây dựng một công cụ mới.
Thứ hai, họ thường nhầm lẫn giữa giải mã và phiên dịch. Máy là tốt ở giải mã và có thể giúp con người với điều đó. Giải thích được dành cho con người. Một số chương trình cố gắng bắt chước hành vi này. Ví dụ họ nói "cổng này được mở" thay vì "Tôi nhận được một SYN-ACK". Đôi khi họ đúng. Đôi khi không. Nó dễ dàng hơn cho người mới bắt đầu, nhưng khi bạn biết những gì bạn đang làm, bạn tiếp tục cố gắng để suy luận những gì thực sự đã xảy ra từ việc giải thích của chương trình để làm của riêng của bạn, đó là khó khăn bởi vì bạn bị mất một lượng lớn thông tin. Và bạn thường kết thúc bằng cách sử dụng tcpdump XX để giải mã và giải thích những gì cụ bỏ qua.
Thứ ba, ngay cả các chương trình mà chỉ giải mã không cung cấp cho bạn tất cả các thông tin mà họ nhận được. Tầm nhìn của mạng mà họ cung cấp cho bạn là một trong những tác giả của họ nghĩ là đủ. Nhưng nó không phải là hoàn toàn, và bạn có một sự thiên vị. Ví dụ, bạn có biết một công cụ báo cáo các padding Ethernet?
Scapy cố gắng để vượt qua những vấn đề. Nó cho phép bạn xây dựng một cách chính xác các gói tin mà bạn muốn. Ngay cả khi tôi nghĩ xếp một lớp 802.1q trên đầu trang của TCP không có ý nghĩa, nó có thể có một số cho người khác làm việc trên một số sản phẩm mà tôi không biết. Scapy có một mô hình linh hoạt mà cố gắng để tránh giới hạn tùy ý như vậy. Bạn đang miễn phí để đặt bất kỳ giá trị mà bạn muốn trong bất kỳ lĩnh vực nào bạn muốn, và ngăn xếp chúng như bạn muốn. Bạn là một người lớn sau khi tất cả.
Trong thực tế, nó giống như việc xây dựng một công cụ mới mỗi lần, nhưng thay vì đối phó với một chương trình trăm dòng C, bạn chỉ viết 2 dòng Scapy.
Sau một cuộc điều tra (quét, traceroute, vv) Scapy luôn mang đến cho bạn các gói giải mã đầy đủ từ thăm dò, trước khi bất kỳ giải thích. Điều đó có nghĩa là bạn có thể thăm dò một lần và giải thích nhiều lần, yêu cầu một traceroute và nhìn vào padding ví dụ.
thiết kế gói nhanh
Các công cụ khác dính vào các chương trình-mà-bạn-run-từ-một-vỏ mô. Kết quả là một cú pháp khủng khiếp để mô tả một gói. Đối với những công cụ, giải pháp thông qua sử dụng một mô tả cao hơn nhưng chưa mạnh mẽ, trong các hình thức của các kịch bản tưởng tượng của tác giả của công cụ. Như một ví dụ, chỉ có địa chỉ IP phải được trao cho một máy quét cổng để kích hoạt các kịch bản quét cổng. Ngay cả khi kịch bản được tinh chỉnh một chút, bạn vẫn đang bị mắc kẹt vào một cổng quét.
mô Scapy là để đề xuất một ngôn ngữ cụ thể tên miền (DSL) cho phép mô tả mạnh mẽ và nhanh chóng của bất kỳ loại gói tin. Sử dụng cú pháp Python và một thông dịch Python như cú pháp DSL và thông dịch viên đã nhiều lợi thế: không có cần phải viết một thông dịch viên riêng biệt, người dùng không cần phải học thêm ngôn ngữ và họ được hưởng lợi từ một ngôn ngữ hoàn chỉnh, ngắn gọn và rất mạnh mẽ .
Scapy cho phép người sử dụng để mô tả một gói hoặc thiết lập các gói tin như các lớp được xếp chồng lên nhau một trên người khác. Fields của mỗi lớp có giá trị mặc định hữu ích có thể bị quá tải. Scapy không bắt buộc người dùng sử dụng các phương pháp định trước hoặc mẫu. Điều này làm giảm bớt các yêu cầu của việc viết một công cụ mới mỗi lần một kịch bản khác nhau là cần thiết. Trong C, nó có thể mất trung bình khoảng 60 dòng để mô tả một gói. Với Scapy, các gói dữ liệu được gửi đi có thể được mô tả trong chỉ một dòng duy nhất với một dòng khác để in kết quả. 90% của các công cụ mạng thăm dò có thể được viết lại trong 2 dòng Scapy.
Thăm dò một lần, giải thích nhiều
Network discovery là thử nghiệm Blackbox. Khi khảo sát một mạng, nhiều kích thích được gửi trong khi chỉ có một vài trong số họ được trả lời. Nếu kích thích đúng được lựa chọn, các thông tin mong muốn có thể thu được bằng các câu trả lời hoặc thiếu của câu trả lời. Không giống như nhiều công cụ, Scapy cho tất cả các thông tin, nghĩa là tất cả các kích thích gửi và tất cả các câu trả lời nhận được. Kiểm tra dữ liệu này sẽ cung cấp cho người dùng các thông tin mong muốn. Khi các tập dữ liệu là nhỏ, người dùng chỉ có thể đào cho nó. Trong trường hợp khác, việc giải thích các dữ liệu sẽ phụ thuộc vào quan điểm thực hiện. Hầu hết các công cụ lựa chọn quan điểm và loại bỏ tất cả các dữ liệu không liên quan đến quan điểm đó. Bởi vì Scapy cho các dữ liệu thô xong, dữ liệu có thể được sử dụng nhiều lần cho phép các quan điểm phát triển trong quá trình phân tích. Ví dụ, một cổng TCP quét có thể được thăm dò và các dữ liệu hình dung như là kết quả của việc quét cổng. Các dữ liệu có thể sau đó cũng được hình dung đối với TTL của gói tin trả lời với. Một thăm dò mới không cần phải được khởi xướng để điều chỉnh quan điểm của dữ liệu.
giải mã Scapy, nó không giải thích
Một vấn đề thường gặp với các công cụ mạng thăm dò là họ cố gắng để giải thích các câu trả lời nhận được thay vì chỉ giải mã và đưa ra sự kiện. Báo cáo một cái gì đó giống như nhận Reset TCP trên cổng 80 là không chịu lỗi giải thích. Báo cáo Port 80 là khép kín là một giải thích rằng có thể đúng phần lớn thời gian nhưng sai trong một số hoàn cảnh cụ thể tác giả của công cụ không tưởng tượng. Ví dụ, một số máy quét có xu hướng khai một cổng TCP lọc khi họ nhận được một điểm đến gói tin ICMP unreachable. Điều này có thể đúng, nhưng trong một số trường hợp, nó có nghĩa là các gói tin không được lọc bởi tường lửa mà không có máy chủ để chuyển tiếp các gói tin đến.
kết quả diễn giải có thể giúp người sử dụng mà không biết những gì một cổng quét nhưng nó cũng có thể làm hại nhiều hơn lợi, vì nó tiêm thiên vị vào kết quả. Điều gì có thể có xu hướng xảy ra là để họ có thể làm việc giải thích bản thân mình, người dùng có hiểu biết sẽ cố gắng để đảo ngược kỹ sư giải thích của công cụ để lấy được các dữ kiện mà gây ra sự giải thích đó. Thật không may nhiều thông tin bị mất trong hoạt động này.
demo nhanh
Đầu tiên, chúng tôi chơi một chút và tạo ra bốn gói tin IP cùng một lúc. Hãy xem cách nó hoạt động. Đầu tiên chúng ta nhanh chóng lớp IP. Sau đó, chúng tôi nhanh chóng nó một lần nữa và chúng tôi cung cấp một điểm đến mà là giá trị bốn địa chỉ IP (/ 30 cho mặt nạ mạng). Sử dụng một thành ngữ Python, chúng tôi phát triển gói tiềm ẩn này trong một tập hợp các gói tin rõ ràng. Sau đó, chúng tôi bỏ người phiên dịch. Như chúng tôi đã cung cấp một tập tin phiên, biến chúng tôi đã làm việc trên đã được cứu, sau đó nạp lại:
Bây giờ, chúng ta hãy vận dụng một số gói tin:
Hãy nói rằng tôi muốn có một địa chỉ MAC broadcast, và trọng tải IP để ketchup.com và mayo.com, giá trị TTL 1-9, và một tải trọng UDP:
Chúng tôi đã 18 gói được xác định trong 1 dòng (1 gói tiềm ẩn)
giá trị mặc định hợp lý
Scapy cố gắng sử dụng các giá trị mặc định hợp lý cho tất cả các lĩnh vực gói. Nếu không overriden,

IP nguồn được chọn theo bảng điểm và định tuyến
Checksum được tính
Nguồn MAC được chọn theo các giao diện đầu ra
loại Ethernet và giao thức IP được xác định bởi các lớp trên
giá trị mặc định của các lĩnh vực khác được lựa chọn là những người hữu ích nhất:

cổng nguồn TCP là 20, cổng đích là 80.
nguồn UDP và đích đến cảng là 53.
ICMP loại là echo request.

học Python
Scapy sử dụng các thông dịch Python như một bảng lệnh. Điều đó có nghĩa rằng bạn có thể trực tiếp sử dụng các ngôn ngữ Python (gán biến, các vòng lặp sử dụng, xác định chức năng, vv)
Nếu bạn là người mới đến Python và bạn thực sự không hiểu một từ vì lý do đó, hoặc nếu bạn muốn tìm hiểu ngôn ngữ này, mất một giờ để đọc Python hướng dẫn rất tốt bởi Guido Van Rossum. Sau đó, bạn sẽ biết Python :) (thực sự!). Đối với một sâu hơn hướng dẫn Dive Into Python là một khởi đầu rất tốt quá.
Đối với một sự khởi đầu nhanh chóng, đây là một tổng quan về các kiểu dữ liệu của Python:

int (ký, 32bits): 42
dài (ký, vô hạn): 42L
str: "chuông \ x07 \ n" hoặc "chuông \ x07 \ n '
tuple (không thay đổi): (1,4 ", 42")
danh sách (có thể thay đổi): [4,2, "1"]
dict` (có thể thay đổi): `` {"một": 1, "hai": 2}
Không có ký tự phân khối trong Python. Thay vào đó, indendation hiện vấn đề:

Comments

Popular posts from this blog

Thiết lập card không dây trên Kali Linux

Monitor mode