Tamper Data 虽然已经能给测试过程提供很大的便利了,但是有时候,我们需要更加灵活的方法去修改请求,还需要一些其它功能,比如修改请求方法(GET 或 POST),保存request/response信息,供后期测试中其它工具使用。OWASP ZAP 不仅仅是一个Web代理器,它不仅可以拦截通信,还有很多其它功能,比如爬虫(之前的文章中提到过), 漏洞扫描,fuzzer,暴力破解等。它还有一个脚本引擎,用于构建自动化的任务,或者开发一个新的功能。这篇文章,我们先看一下它的Web代理,请求拦截,并在修改请求后发往服务器的功能。
实施方法
先根据前面讲过的内容,启动 ZAP ,配置浏览器代理,让 ZAP 监听浏览器请求和响应。
浏览器访问:http://192.168.150.144/mutillidae/
选择页面左边菜单栏第一个 OWASP Top 10 | A1 – SQL Injection | SQLi – Extract Data | User Info
下一步是提高应用的安全等级,如下图所示,单击** Toggle Security ,把安全等级调整为 Security Level:1 ** (Client-side Security)。
在安全等级1的情况下,点击登陆,输入用户名: test', 输入密码:password',然后点击登陆,查看相应提示信息,如下图:
上图所示的提示信息,告诉我们,输入内容校验机制,发现了非法字符。图中的撇号(')就被检测到了,并且被应用的安全机制拦截了。
点击确定按钮,关闭告警窗口。
此时,我们查看ZAP中监听的请求历史,我们可以看到没有请求发出给服务器,这说明刚才的校验是一个客户端的校验机制,如此一来,我们可以通过代理拦截请求来绕过客户端的校验。
现在,启动请求拦截(这个功能在ZAP中成为断点),点击** break on all requests **按钮:
下一步,我们使用合法的用户名和密码(test/password),再次点击login提交登陆请求。提交请求后,焦点会切换到ZAP,并弹出Break弹窗:
上图所示的请求,就是我们刚刚在登陆页面发起的登陆请求,这个POST请求的参数中包含的用户名和密码,在这里可以修改成刚才不允许的包含非法字符的用户名和密码,然后点击发送按钮,将修改后的请求发给服务器,如下图所示:
包含非法字符参数的请求发给服务器后,返回的错误信息如下图,这就说明,服务器端没有加对该异常的处理和校验:
如果要关闭 ZAP 断点,再次点击之前的那个圆形按钮即可。
总结
这篇文章,我们使用 ZAP 的代理来拦截一个合法请求,修改为非法请求后,再发给服务器,触发异常响应。前面几部,我们开启了应用的安全保护来检测撇号(非法字符)。然后我们测试了几个参数,用来查看应用的校验情况。当告警窗口出现的时候,ZAP代理中没有像后台发送任何请求,基于此我们判断,应用的校验机制是客户端校验(如JavaScript校验)。然后基于以上信息,我们提交了一个合法请求,在ZAP代理截取了请求后,这就使得我们可以绕过客户端的校验。 通过修改请求参数,添加非法字符,构造恶意请求,发给服务器,返回错误响应。