客户端验证
本章我们将学习验证如何在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表单的验证。Web表单可以从链接https://tutorialspoint.com/php/php_validation_example.htm获取,并可用于您选择的任何虚拟网站。
首先,让我们导入mechanize浏览器:
import mechanize
现在,我们将创建一个名为brwsr的mechanize浏览器对象:
brwsr = mechanize.Browser()
下一行代码表明用户代理不是机器人。
brwsr.set_handle_robots( False )
现在,我们需要提供包含我们需要绕过验证的Web表单的虚拟网站的URL。
url = input("Enter URL ")
接下来几行代码将设置一些参数为真。
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表单的代码中看到),但此脚本将绕过该验证。