【发布时间】:2019-01-23 06:46:20
【问题描述】:
我有一个由 ZAP 工具“主动扫描”的 spring-mvc Web 应用程序。它有两个针对 SQL 注入的高中警报,我认为这是误报。
- 原始 URL 是
/msg/showList?,它返回 200OK 和 json 消息列表。 ZAP 在运行扫描时添加了一个参数/deliverymsg/showList?query=query+AND+1%3D1+--+,它还返回 200 OK 和 json 消息列表。响应没有变化,列表相同。应用程序不会读取 ZAP 添加的参数“查询”,因此这里没有实际的 SQL 注入。 但 ZAP 将此警告为 HIGH 中。 - 原始URL为
/filterlist?fromDate=&toDate=&_csrf=1534403682524,返回200Ok和list,ZAP正在扫描并添加SQL注入条件/filterlist?fromDate=&toDate=&_csrf=1534403682524+AND+1%3D1+--+该参数是 spring-boot 隐式添加的 csrf 令牌,应用程序实际上并未直接读取。但 ZAP 再次将此警告为“中高”。
我想了解 ZAP 在此处的工作原理,以及如何解决此误报,以免 ZAP 发出警报。我过去有过一些案例,我更改了应用程序代码以通过测试。但无法为此想出一个明确的解决方案。
我正在考虑添加HandlerInterceptor 并检查任何“AND”字的请求参数并返回 HTTP400,我不想这样做,因为这只是为了欺骗 ZAP 不警告 HIGH。
我知道我也可以提供误报的证据并在不修复的情况下发布它,但由于内部政策,我不能这样做。
我在 ZAP 附带的任何默认配置中运行它。
更新:
我添加了HandlerInterceptor 并拒绝了具有AND 或query 的请求,并且到目前为止仅针对报告的URL 重新运行ZAP 没有产生任何警报。我想知道这是为什么?因为ZAP创建的攻击URL有更多的sql关键字,如@987654330@等。我只拒绝了两个关键字的请求。那如何解决问题?
为什么ZAP会附加它自己的参数query,应用程序永远不会读取,我不明白用query攻击背后的逻辑。
【问题讨论】:
-
您确定响应没有变化吗?这是通常的罪魁祸首
-
没有变化。我比较了响应 json 和 header。不用找了。过去我有一个实例,其中 HTTP 响应状态为 404,并且正文不同,因为一个时间戳参数每次都会更改并提醒 ZAP。我通过删除时间戳来修复它。但这一次,响应体是一样的。没有变化,所以一无所知。
-
你试过increase ZAP log levels吗? (当您将 ZAP 限制为仅对特定 url 使用特定规则时,您可能应该这样做)
-
不,我没有。我将在下一次运行中这样做。这需要很长时间才能完成主动扫描。任何指针,我应该具体寻找什么?编辑:只会将其限制为 URL。谢谢。
标签: spring-mvc spring-boot sql-injection zap false-positive