OWASP/ZAP 尝试扫描时悬空

OWASP/ZAP dangling when trying to scan

我正在尝试 OWASP/ZAP 看看它是否可以用于我们的项目,但我无法让它工作我不知道我做错了什么而且文档真的没有帮助.我正在尝试的是 运行 扫描我的 api 运行ning 在我 windows 机器本地的 docker 容器中所以我 运行命令: docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable zap-baseline.py -t http://172.21.0.2:8080/swagger.json -g gen.conf -r testreport.html ip 172.21.0.2 是我的 api 容器的 IP 地址,甚至尝试使用 localhost127.0.0.1

但它只是挂在以下日志消息中:

_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
Feb 14, 2019 1:43:31 PM java.util.prefs.FileSystemPreferences run
INFO: Created user preferences directory.

没有任何反应,我的 zap docker 容器处于不健康状态,一段时间后它崩溃并以一堆 NullPointerExceptions 结束。 zap docker 是否仅适用于 linux,当 运行 在 windows 机器上使用它时,我需要做些什么?即使我特别遵循 https://github.com/zaproxy/zaproxy/wiki/Docker

中的指南,我也不明白为什么这不起作用

编辑 1 我最近的尝试是直接将我的主机 IP 地址和我公开 api 的端口给了我以下错误:

_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
Feb 14, 2019 2:12:07 PM java.util.prefs.FileSystemPreferences run
INFO: Created user preferences directory.
Total of 3 URLs
ERROR Permission denied
2019-02-14 14:12:57,116 I/O error(13): Permission denied
Traceback (most recent call last):
  File "/zap/zap-baseline.py", line 347, in main
    with open(base_dir + generate, 'w') as f:
IOError: [Errno 13] Permission denied: '/zap/wrk/gen.conf'
Found Java version 1.8.0_151
Available memory: 3928 MB
Setting jvm heap size: -Xmx982m
213 [main] INFO org.zaproxy.zap.DaemonBootstrap

这里的关键错误是:

IOError: [Errno 13] Permission denied: '/zap/wrk/gen.conf'

这意味着脚本无法写入您安装在 /zap/wrk

上的 gen.conf 文件

当 cwd 未挂载时,您是否有写入权限?

当您 运行 docker 使用:docker 运行 -v $(pwd):/zap/wrk/:rw ... 您正在将 docker 图像中的 /zap/wrk/ 目录映射到您 运行ning docker.[=11= 所在机器的当前工作目录 (cwd) ]

我认为问题在于您当前的用户没有对 cwd 的写入权限。

尝试以下命令,希望它能解决问题。

$docker 运行 --user $(id -u):$(id -g) -v $(pwd):/zap/wrk/:rw --rm -t owasp/zap2docker-stable zap-baseline.py -t https://your_url -g gen.conf -r testreport.html

原因是,如果您使用 -r 参数,zap 将尝试在位置 /zap/wrk/ 生成文件 report.html。为了使这项工作正常进行,我们必须将目录挂载到此位置 /zap/wrk.

但是当你这样做时,重要的是 zap 容器能够对挂载的目录执行写操作。

所以,下面是使用 gitlab ci yml 的工作解决方案。我从这种使用 image: owasp/zap2docker-stable 的方法开始,但后来不得不使用普通的 docker 命令来执行它。

  test_site:
          stage: test
          image: docker:latest
          script:
          # The folder zap-reports created locally will be mounted to owasp/zap2docker docker container,
          # On execution it will generate the reports in this folder. Current user is passed so reports can be generated"
            - mkdir zap-reports
            - cd zap-reports
            - docker pull owasp/zap2docker-stable:latest || echo
            - docker run  --name zap-container --rm -v $(pwd):/zap/wrk -u $(id -u ${USER}):$(id -g ${USER}) owasp/zap2docker-stable zap-baseline.py -t "https://example.com" -r report.html
          artifacts:
            when: always
            paths:
              - zap-reports
          allow_failure: true

所以上面代码中的技巧是

  1. 将本地目录zap-reports挂载到/zap/wrk,如$(pwd):/zap/wrk
  2. 将主机上的当前用户和组传递给 docker 容器,以便进程使用相同的用户/组。这允许在从本地主机安装的目录上编写报告。这是由 -u $(id -u ${USER}):$(id -g ${USER})
  3. 完成的

下面是 image: owasp/zap2docker-stable

的工作代码
 test_site:
  variables:
    GIT_STRATEGY: none
  stage: test
  image:
    name: owasp/zap2docker-stable:latest
  before_script:
    - mkdir -p /zap/wrk
  script:
    - zap-baseline.py -t "https://example.com" -g gen.conf -I -r testreport.html
    - cp /zap/wrk/testreport.html testreport.html
  artifacts:
    when: always
    paths:
      - zap.out
      - testreport.html