(1)确定全部用户输入入口点,包括URL、查询字符串参数、POST数据、cookie和其他由应用程序处理的HTTP消息头。
(2)分析应用程序使用的查询字符串格式。如果应用程序并未使用第3章描述的标准格式,设法了解它如何通过URL提交参数。几乎所有定制方案仍然使用名/值模型的某种变化形式,因此要设法了解名/值对如何被封装到已经确定的非标准URL中。
(3)确定任何向应用程序处理过程引入用户可控制或其他第三方数据的带外通道。
(4)查看应用程序返回的HTTP服务器旗标。注意,在某些情况下,应用程序的不同区域由不同的后端组件处理,因此可能会收到不同的Server消息头。
(5)检查所有定制HTTP消息头或HTML源代码注释中包含的任何其他软件标识符。
(6)运行Httprecon工具识别Web服务器。
(7)如果获得关于Web服务器和其他组件的详细信息,搜索其使用的软件版本,确定在发动攻击时可供利用的所有漏洞(请参阅第18章了解相关内容)。
(8)分析应用程序URL列表,确定任何看似重要的文件扩展名、目录或其他提供服务器使用技术相关线索的内容。
(9)分析应用程序发布的全部会话令牌的名称,确定其使用的技术。
(10)使用常用技术列表或Google推测服务器所使用的技术,或者查找其他明显使用相同技术的Web站点和应用程序。
(11)在Google上搜索可能属于第三方软件组件的任何不常见的cookie、脚本、HTTP消息头名称。如果发现使用相同组件的应用程序,对其进行分析,确定该组件支持的任何其他功能和参数,并确定目标应用程序是否具有这些功能、使用这些参数。注意,由于品牌定制,相同第三方组件在每个应用程序中的外观可能截然不同,但其核心功能(包括脚本和参数名称)往往并无变化。如有可能,下载并安装组件,对其进行分析以充分了解它的功能、查找其中存在的所有漏洞。同时,查询已知漏洞库,确定相关组件中存在的所有已知漏洞。
通过留意应用程序向客户端披露的线索,通常可推断与服务器端功能和结构有关的大量信息,或者至少可做出有根据的猜测。
1.仔细分析请求
以下面用于访问搜索功能的URL为例:
https://wahh-app.com/calendar.jsp?name=new%20applicants&isExpired=0&startDate=22%2F09%2F2010&endDate=22%2F03%2F2011&OrderBy=name
可见,.jsp文件扩展名表示它使用Java Server Pages。据此可以推断:搜索功能从索引系统或数据库获取信息;OrderBy参数暗示它使用后端数据库,提交的值将被SQL查询的ORDER BY子句使用。和数据库查询使用的其他参数一样,这个参数也非常容易受到SQL注入攻击(请参阅第9章了解相关内容)。
在这些参数中,isExpired字段同样值得我们注意。很明显,这是一个指定搜索查询是否应包含已到期内容的布尔型标志。如果应用程序的设计者并不希望用户访问任何到期的内容,将这个参数由0改为1就能够确定一个访问控制漏洞(请参阅第8章了解相关内容)。
下面的URL允许用户访问内容管理系统,其中包含另外一些线索:
https://wahh-app.com/workbench.aspx?template=NewBranch.tpl&loc=/default&ver=2.31&edit=false
这里的.aspx文件扩展名表示这是一个ASP.NET应用程序。而且,很可能template参数用于指定一个文件名,loc参数用于指定一个目录。很明显,文件扩展名.tpl证明了上述推论,而位置/default很有可能是一个目录名称。应用程序可能获得指定的模板文件,并将其内容包含在响应中。这些参数非常容易受到路径遍历攻击,允许攻击者读取服务器上的任何文件(请参阅第10章了解相关内容)。
同样值得注意的是edit参数,它被设置为假。将这个值更改为真会修改注册功能,可能允许攻击者编辑应用程序开发者不希望用户编辑的数据。由ver参数并不能推断出任何有用的线索,但修改这个参数可能会使应用程序执行一组可被攻击者利用的不同功能。
最后,我们来分析以下请求,它用于向应用程序管理员提出问题:
和其他示例一样,.php文件扩展名表示它使用PHP语言执行功能。而且,应用程序极有可能正通过接口与一个外部电子邮件系统连接;同时,它显示使用电子邮件的相关字段向那个系统提交用户可控制的输入。攻击者可利用这项功能向任何接收者发送任意邮件,并且,其中所有字段都易于遭受电子邮件消息头的注入攻击(请参阅第10章了解相关内容)。
提示
在猜测请求不同部分的功能时,通常有必要从整个URL和应用程序的角度进行考虑。同样以Extreme Internet Shopping应用程序中的以下URL为例:
http://eis/pub/media/117/view
在功能上,此URL相当于以下URL:
http://eis/manager?schema=pub&type=media&id=117&action=view
虽然并不肯定,但media资源集中很可能包含资源117,并且应用程序正对该资源执行相当于view的操作。检查其他URL将有助于确认这一点。
首先需要考虑将view操作更改为其他可能的操作,如edit或add。但是,如果将其更改为add并且猜测是正确的,则该操作可能相当于添加一个ID为117的资源。这一操作将会失败,因为已经存在一个ID为117的资源。最佳方案是,寻找ID值大于观察到的最大ID值的add操作,或选择任意较大的值。例如,可以请求以下URL:
http://eis/pub/media/7337/add
此外,还有必要通过修改media(同时保留类似的URL结构)来寻找其他数据集合:
http://eis/pub/pages/1/view
http://eis/pub/users/1/view