Xác thực phía máy khách
Trong chương này, chúng ta sẽ tìm hiểu cách xác thực giúp ích như thế nào trong Python Pentesting.
Mục tiêu chính của xác thực là kiểm tra và đảm bảo rằng người dùng đã cung cấp thông tin cần thiết và được định dạng đúng cần thiết để hoàn thành một hoạt động thành công.
Có hai loại xác thực khác nhau -
- xác thực phía máy khách (trình duyệt web)
- xác thực phía máy chủ
Xác thực phía máy chủ & Xác thực phía máy khách
Xác thực đầu vào của người dùng diễn ra ở phía máy chủ trong phiên đăng lại được gọi là server-side validation. Các ngôn ngữ như PHP và ASP.Net sử dụng xác thực phía máy chủ. Sau khi quá trình xác thực ở phía máy chủ kết thúc, phản hồi sẽ được gửi lại cho máy khách bằng cách tạo một trang web mới và động. Với sự trợ giúp của xác thực phía máy chủ, chúng tôi có thể được bảo vệ khỏi những người dùng độc hại.
Mặt khác, xác thực đầu vào của người dùng diễn ra ở phía máy khách được gọi là xác thực phía máy khách. Các ngôn ngữ kịch bản như JavaScript và VBScript được sử dụng choclient-side validation. Trong loại xác thực này, tất cả xác nhận đầu vào của người dùng chỉ được thực hiện trong trình duyệt của người dùng. Nó không quá an toàn như xác thực phía máy chủ vì tin tặc có thể dễ dàng bỏ qua ngôn ngữ kịch bản phía máy khách của chúng tôi và gửi thông tin đầu vào nguy hiểm cho máy chủ.
Tempering Thông số phía máy khách: Bỏ qua xác thực
Việc truyền tham số trong giao thức HTTP có thể được thực hiện với sự trợ giúp của các phương thức POST và GET. GET được sử dụng để yêu cầu dữ liệu từ một tài nguyên cụ thể và POST được sử dụng để gửi dữ liệu đến máy chủ để tạo hoặc cập nhật tài nguyên. Một điểm khác biệt chính giữa cả hai phương pháp này là nếu một trang web đang sử dụng phương thức GET thì các tham số truyền được hiển thị trong URL và chúng tôi có thể thay đổi tham số này và chuyển nó đến máy chủ web. Ví dụ: chuỗi truy vấn (cặp tên / giá trị) được gửi trong URL của một yêu cầu GET:/test/hello_form.php?name1 = value1&name2 = value2. Mặt khác, các tham số không được hiển thị khi sử dụng phương thức POST. Dữ liệu được gửi đến máy chủ với POST được lưu trữ trong phần thân yêu cầu của HTTP request. Ví dụ: ĐĂNG/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.
Mô-đun Python để bỏ qua xác thực
Mô-đun Python mà chúng tôi sẽ sử dụng là mechanize. Nó là một trình duyệt web Python, cung cấp phương tiện lấy các biểu mẫu web trong một trang web và cũng tạo điều kiện cho việc gửi các giá trị đầu vào. Với sự trợ giúp của cơ khí hóa, chúng tôi có thể bỏ qua các thông số xác thực và tạm thời phía máy khách. Tuy nhiên, trước khi nhập nó vào tập lệnh Python, chúng ta cần cài đặt nó bằng cách thực thi lệnh sau:
pip install mechanize
Thí dụ
Sau đây là một tập lệnh Python, sử dụng cơ khí hóa để bỏ qua xác thực của một biểu mẫu web bằng cách sử dụng phương thức POST để truyền tham số. Mẫu web có thể được lấy từ liên kếthttps://www.tutorialspoint.com/php/php_validation_example.htm và có thể được sử dụng trong bất kỳ trang web giả nào mà bạn lựa chọn.
Để bắt đầu, hãy để chúng tôi nhập trình duyệt cơ giới hóa -
import mechanize
Bây giờ, chúng ta sẽ tạo một đối tượng có tên brwsr của trình duyệt cơ giới hóa -
brwsr = mechanize.Browser()
Dòng mã tiếp theo cho thấy tác nhân người dùng không phải là rô bốt.
brwsr.set_handle_robots( False )
Bây giờ, chúng tôi cần cung cấp url của trang web giả có chứa biểu mẫu web mà chúng tôi cần bỏ qua xác thực.
url = input("Enter URL ")
Bây giờ, các dòng sau sẽ đặt một số dấu ngoặc kép thành true.
brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)
Tiếp theo nó sẽ mở trang web và in biểu mẫu web trên trang đó.
brwsr.open(url)
for form in brwsr.forms():
print form
Dòng mã tiếp theo sẽ bỏ qua xác thực trên các trường nhất định.
brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()
Phần cuối cùng của tập lệnh có thể được thay đổi theo các trường của biểu mẫu web mà chúng tôi muốn bỏ qua xác thực. Ở đây trong tập lệnh trên, chúng tôi đã lấy hai trường -‘name’ và ‘gender’ không thể để trống (bạn có thể thấy trong mã hóa của biểu mẫu web) nhưng tập lệnh này sẽ bỏ qua xác thực đó.