Python Penetration Testing 简明教程

Client-side Validation

在本章中,我们将了解验证如何帮助 Python 渗透测试。

验证的主要目的是测试并确保用户提供了必要的和正确格式化的信息,以便成功完成操作。

有两种不同的验证类型−

  1. client-side validation (web browser)

  2. server-side validation

Server-side Validation & Client-side Validation

在回传会话期间在服务器端进行的用户输入验证称作 server-side validation 。PHP 和 ASP.Net 等语言使用服务器端验证。一旦服务器端验证过程结束,通过生成一个新的动态网页将反馈发送回客户端。借助服务器端验证,我们可以对恶意用户进行保护。

另一方面,在客户端进行的用户输入验证称作客户端验证。用于 client-side validation 的脚本化语言例如 JavaScript 和 VBScript。在这种验证中,所有用户输入验证仅在用户的浏览器中进行。它不像服务器端验证那样安全,因为黑客可以轻松绕过我们的客户端脚本化语言,并将危险的输入提交到服务器。

Tempering Client-side Parameter: Validation Bypass

HTTP 协议中的参数传递可以在 POST 和 GET 方法的帮助下完成。GET 用于从指定资源请求数据,POST 用于向服务器发送数据以创建或更新资源。这两个方法之间的一个主要区别是,如果网站使用 GET 方法,则传递的参数显示在 URL 中,我们可以更改此参数并将其传递到 Web 服务器。例如,查询字符串(名称/值对)发送到 GET 请求的 URL 中: /test/hello_form.php?name1 = value1&name2 = value2 。另一方面,在使用 POST 方法时,不会显示参数。使用 POST 发送到服务器的数据存储在 HTTP 请求的请求正文中。例如,POST /test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2

Python Module for Validation Bypass

我们将使用 Python 模块 mechanize 。它是一个 Python Web 浏览器,它提供了获取网页中的网络表单的功能,并有助于提交输入值。借助 mechanize,我们可以绕过验证和调节客户端参数。但是,在将其导入到我们的 Python 脚本中之前,我们需要通过执行以下命令进行安装 −

pip install mechanize

Example

以下是一个 Python 脚本,它使用 mechanize 通过 POST 方法绕过 Web 表单的验证来传递参数。Web 表单可以从链接 [role="bare" [role="bare"]https://www.tutorialspoint.com/php/php_validation_example.htm ] 中获取,并且可以根据你的选择使用在任何虚假网站中。

首先,让我们导入 mechanize 浏览器 −

import mechanize

现在,我们将创建 mechanize 浏览器的名为 brwsr 的对象 −

brwsr = mechanize.Browser()

代码的下一行显示用户代理不是机器人。

brwsr.set_handle_robots( False )

现在,我们需要提供包含我们要绕过验证的 Web 表单的虚假网站的 URL。

url = input("Enter URL ")

现在,以下几行会将一些括号设置为 true。

brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)

接下来它将打开网页并打印该页面上的 Web 表单。

brwsr.open(url)
for form in brwsr.forms():
   print form

代码的下一行将绕过给定字段上的验证。

brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()

脚本的最后部分可以根据要绕过验证的 Web 表单的字段进行更改。在上面的脚本中,我们采取了两个字段—— ‘name’‘gender’ ,它们不能留空(你可以在 Web 表单的编码中看到),但此脚本会绕过该验证。