渗透测试步骤

(1)确定所有通过在参数中提交某一功能的名称(如/admin.jsp?action=editUser)而非通过请求代表那个功能的一个特殊页面(如/admin/editUser.jsp)访问应用程序功能的情况。

(2)修改上述用于查找URL相关内容的自动化技巧,利用它处理应用程序使用的内容–访问机制。例如,如果应用程序使用参数指定servlet和方法名称,首先确定它在请求一个无效servlet或方法以及请求一个有效方法与其他无效参数时的行为。设法确定表示“触点”(即有效servlet和方法)的服务器响应的特点。如果可能,想出办法分两个阶段攻击这个问题,首先枚举servlet,然后枚举其中的方法。对用于查找URL相关内容的技巧使用相似的方法,列出常见项目,通过从实际观察到的名称进行推断,增加这些项目,并根据项目生成大量请求。

(3)如果可能,根据功能路径绘制一幅应用程序内容图,说明所有被枚举的功能和逻辑路径以及它们之间的依赖关系。

4.1.5 发现隐藏的参数

如果应用程序使用其他参数以别的方式控制其逻辑,那么它使用请求参数说明应执行何种功能的情况就会出现变化。例如,如果在URL的查询字符串中加入debug=true参数,应用程序的运作方式就会发生改变:它可能会关闭某些输入确认检查,允许用户避开某些访问控制或者在响应中显示详细的调试信息。许多时候,我们无法从应用程序的任何内容直接推断它如何处理这个参数(例如,它并不在超链接的URL中插入debug=false)。只有通过猜测许多值,才能在提交正确的值之后了解这个参数产生的效果。