客户端验证


在本章中,我们将了解验证如何在 Python 渗透测试中发挥作用。

验证的主要目标是测试并确保用户提供了成功完成操作所需的必要且格式正确的信息。

有两种不同类型的验证 -

  • 客户端验证(网络浏览器)
  • 服务器端验证

服务器端验证和客户端验证

在回发会话期间在服务器端进行的用户输入验证称为服务器端验证。PHP 和 ASP.Net 等语言使用服务器端验证。一旦服务器端的验证过程结束,反馈就会通过生成新的动态网页发送回客户端。借助服务器端验证,我们可以防止恶意用户。

另一方面,在客户端进行的用户输入验证称为客户端验证。JavaScript 和 VBScript 等脚本语言用于客户端验证。在这种验证中,所有用户输入验证仅在用户的浏览器中完成。它不像服务器端验证那么安全,因为黑客可以轻松绕过我们的客户端脚本语言并向服务器提交危险输入。

调优客户端参数:验证绕过

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 模块

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

pip install mechanize

例子

以下是一个 Python 脚本,它使用 mechanize 来绕过使用 POST 方法传递参数的 Web 表单的验证。该网络表单可以从链接https://www.tutorialspoint.com/php/php_validation_example.htm获取,并且可以在您选择的任何虚拟网站中使用。

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

import mechanize

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

brwsr = mechanize.Browser()

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

brwsr.set_handle_robots( False )

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

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)

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

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

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

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

脚本的最后一部分可以根据我们想要绕过验证的 Web 表单字段进行更改。在上面的脚本中,我们采用了两个字段—— “姓名”“性别”,不能留空(您可以在 Web 表单的编码中看到),但该脚本将绕过该验证。