渗透测试步骤

(1)确定任何在提交表单前使用客户端JavaScript进行输入确认的情况。

(2)通过修改所提交的请求,在其中插入无效数据,或修改确认代码使其失效,向服务器提交确认机制通常会阻止的数据。

(3)与长度限制一样,确定服务器是否采用了和客户端相同的控件;如果并非如此,确定是否可利用这种情况实现任何恶意意图。

(4)注意,如果在提交表单前有几个输入字段需要由客户端确认机制检验,需要分别用无效数据测试每一个字段,同时在所有其他字段中使用有效数据。如果同时在几个字段中提交无效数据,可能服务器在识别出第一个无效字段时就已经停止执行表单,从而使测试无法到达应用程序的所有可能代码路径。

img001  注解  使用客户端JavaScript程序确认用户输入的做法在Web应用程序中非常普遍,但这并不表示这种应用程序全都易于遭受攻击。只有当服务器并未采用和客户端相同的确认机制,以及能够避开客户端确认的专门设计的输入可在应用程序中造成某种无法预料的行为时,应用程序才存在风险。

在绝大多数情况下,在客户端确认用户输入有助于提高应用程序的性能,改善用户体验。例如,在填写详细的注册表单时,普通用户可能会犯许多错误,如忽略必要的字段或电话号码格式出现错误。如果不采用客户端确认机制,更正这些错误可能需要多次加载注册页面,反复向服务器传送消息。在客户端执行基本的确认检查可使用户体验更佳,减轻服务器的负担。

5.2.3 禁用的元素

如果HTML表单中的一个元素标记为禁用,它会在屏幕上出现,但以灰色显示,并且无法像常规控件那样编辑或使用。而且,提交表单时,表单也不向服务器传送这个元素。以下面的表单为例:

img117

这个表单中的产品价格位于禁用的文本字段中,并出现在屏幕上,如图5-4所示。

img118

图5-4 包含禁用的输入字段的表单

提交该表单时,应用程序只向服务器传送quantity参数。但是,存在禁用字段表示应用程序最初可能已经使用过price参数(可能在开发阶段用于测试目的)。这个参数很可能已经提交给服务器并经过应用程序处理了。在这种情况下,应当测试服务器端应用程序是否仍然会处理这个参数。如果确实如此,可以尝试对这种情况加以利用。