渗透测试步骤

可以使用以下步骤推断是否安装了Web应用程序防火墙。

(1)在参数值中使用明确的攻击有效载荷向应用程序(最好是响应中包含名称或值的某个应用程序位置)提交任意参数名称。如果应用程序阻止该攻击,这可能是由于外部防御机制所致。

(2)如果可以提交在服务器响应中返回的变量,则提供一系列模糊测试字符串及这些字符串的编码形式可以确定应用程序的用户输入防御行为。

(3)对应用程序中的变量实施相同的攻击来确认这一行为。

在尝试避开Web应用程序防火墙时,可以提交以下字符串。

(1)对于所有模糊测试字符串和请求,使用标准签名数据库中不可能存在的良性字符串作为有效载荷。根据定义,我们不可能提供这些字符串的示例。但是,在进行文件检索时,应避免将/etc/passwd或/windows/system32/config/sam作为有效载荷。此外,应在XSS攻击中避免使用<script>,并避免将alert()或xss用作XSS有效载荷。

(2)如果特定请求被阻止,可以尝试在其他位置或上下文中提交相同的参数。例如,在GET请求的URL中、在POST请求主体中,以及在POST请求的URL中提交相同的参数。

(3)此外,应尝试在ASP.NET上将参数作为cookie提交。如果在查询字符串或消息主体中找不到参数foo,API Request.Params[“foo”]会检索名为foo的cookie的值。

(4)回顾第4章中介绍的引入用户输入的所有其他方法,选择其中任何不受保护的方法。

(5)确定以非标准格式(如序列化或编码)或可能以此类格式提交用户输入的位置。如果找不到此类位置,可以通过串联字符串和/或将字符串分布到多个参数中来构建攻击字符串。(注意,如果目标是ASP.NET,可以使用HPP通过同一变量的各种变体来串联攻击字符串。)

许多部署了Web应用程序防火墙或IDS的组织并没有根据本节介绍的方法对防御设备进行有针对性的测试,因此,在针对此类设备实施攻击时,以上方法通常能够奏效。