Python for InfoSec Part 3: Fuzzer


  • administrators

    Ghi chú: fuzzing là một kỹ thuật liên quan đến testing và security.
    Bài viết này sẽ chứng minh cách bạn có thể tận dụng Python để tạo ra một fuzzer script .Khi thực hiện một nghiên cứu nó rất hữu dụng đối với ngôn ngữ kịch bản trong việc đưa một số lượng đầu vào đa dạng để làm cho một ứng dụng bị lỗi (crash).

    Đầu tiên là phải hiểu làm thế nào ứng dụng có thể xử lý được đầu vào từ người dùng. Một khi chúng ta biết được loại đầu vào nào được đưa vào chúng ta có thể phân cấp cho nó. Ý tưởng đơn giản là kết nối đến dịch vụ, gửi bộ đệm, gia tăng nó lên, và sau đó cứ tiếp tục như vậy. Chúng ta có thể lưu trữ nó với vòng lặp while và lặp cho đến khi có lỗi với "while True".

    Đây là một script đơn giản (Code giả lập):

    <import modules> # thường sẽ là socket, sys, nhưng nếu là ứng dụng web thì có thể import httplib, urllib, vv.
     
    # Set up remote IP/Port variables
    # Invoke the script: ./script.py  
    RHOST = sys.argv[1]
    RPORT = sys.argv[2]
     
    # Khởi tạo chuỗi đệm và gia tăng cho đến khi có khả năng bị crash
    buffer = '\x41'*50
     
    # Tạo vòng lặp để kết nối đến dịch vụ và gửi bộ đệm:
    while True:
        try:
            # send buffer
            # increment buffer by 50
            buffer = buffer + '\x41'*50
        except:
    print "Buffer Length: "+len(buffer)
    print "Can't connect to service...check debugger for potential crash"
    

    Đoạn script trên có thể được sử dụng cho một số loại dịch vụ khác nhau. Bạn cũng có thể xây dụng script của bạn dựa trên loại dịch vụ mà bạn thích fuzz. Dưới đây là một ví dụ về script dùng để fuzz một FTP server trong "USER" command.

    # Import the required modulees the script will leverage
    # This lets us use the functions in the modules instead of writing the code from scratch
    import sys, socket
    from time import sleep
     
    # set first argument given at CLI to 'target' variable
    target = sys.argv[1]
    # create string of 50 A's '\x41'
    buff = '\x41'*50
     
    # loop through sending in a buffer with an increasing length by 50 A's
    while True:
        # The "try - except" catches the programs error and takes our defined action
        try:
            # Make a connection to target system on TCP/21
            s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            s.settimeout(2)
            s.connect((target,21))
            s.recv(1024)
     
            print "Sending buffer with length: "+str(len(buff))
            # Send in string 'USER' + the string 'buff'
            s.send("USER "+buff+"\r\n")
            s.close()
            sleep(1)
            # Increase the buff string by 50 A's and then the loop continues
            buff = buff + '\x41'*50
     
        except: # If we fail to connect to the server, we assume its crashed and print the statement below
            print "[+] Crash occured with buffer length: "+str(len(buff)-50)
            sys.exit()
    

    Bài viết này đã chỉ ra một vài điều cơ bản của khái niệm fuzzer script, nhớ rằng không phải loại ứng dụng nào gửi chuỗi đệm '\x41' cũng sẽ làm nó bị lỗi Trong một vài trường hợp bạn cần gửi nhiều kiểu ký tự khác nhau để tạo ra được lỗi. Một công cụ fuzzing nâng cao hơn là Spike, cái này sẽ gửi một số lượng lớn các kiểu ký tự khác nhau để cố gắng crash được dịch vụ. Hãy cố gắng thực hành tạo một Python fuzzer là HTTP request đến một dịch vụ thay vì FTP server.
    Dịch giả: Trung.


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.