📅  最后修改于: 2020-12-06 10:35:22             🧑  作者: Mango
在本章中,我们将学习验证如何在Python Pentesting中提供帮助。
验证的主要目标是测试并确保用户提供了成功完成操作所需的必要且格式正确的信息。
有两种不同类型的验证-
在回发会话期间在服务器端进行的用户输入验证称为服务器端验证。 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主机:’URL’name1 = value1&name2 = value2 。
我们将要使用的Python模块是机械化的。它是一个Python Web浏览器,它提供了在网页中获取Web表单的便利,并且也方便了输入值的提交。在机械化的帮助下,我们可以绕过验证和调整客户端参数。但是,在将其导入Python脚本之前,我们需要通过执行以下命令进行安装-
pip install mechanize
以下是一个Python脚本,该脚本使用机械化来绕过使用POST方法传递参数的Web表单的验证。该网络表单可从链接https://www.tutorialspoint.com/php/php_validation_example.htm获取,并可在您选择的任何虚拟网站中使用。
首先,让我们导入机械化浏览器-
import mechanize
现在,我们将创建一个机械化浏览器的名为brwsr的对象-
brwsr = mechanize.Browser()
下一行代码显示用户代理不是机器人。
brwsr.set_handle_robots( False )
现在,我们需要提供虚拟网站的网址,其中包含我们需要绕过验证的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表单的字段来更改脚本的最后一部分。在上面的脚本中,我们采用了两个字段- “名称”和“性别” ,它们不能留为空白(您可以在网络表单的代码中看到),但是此脚本将绕过该验证。