如何使用python连接远程OpenVas扫描仪?

问题描述 投票:0回答:3

我正在探索 OpenVas 工具来满足项目需求,openVas 目前由 Greenbone 管理。当我尝试使用 python api 使用远程扫描仪时出现错误。

我完成了所有初始配置,设置了所需的 gui 帐户等,并且能够手动扫描所需的系统,但是当我尝试使用 Python Api 执行相同操作时,它不起作用。互联网上和手册中都没有任何示例来验证我的代码。 我已经使用了 [https://pypi.org/project/python-gvm/] api。

我写了简单的代码,但它不起作用..

from gvm.connections import SSHConnection
from gvm.protocols.latest import Gmp
from gvm.transforms import EtreeTransform
from gvm.xml import pretty_print

connection = SSHConnection(hostname='192.168.1.84',username='alex',password='alex@123')
gmp = Gmp(connection)
gmp.authenticate('admin', 'admin')

# Retrieve current GMP version
version = gmp.get_version()

# Prints the XML in beautiful form
pretty_print(version)

我收到错误-

/usr/bin/python3.7 /home/punshi/PycharmProjects/nessus_api/openvas-greenbone.py
/usr/local/lib/python3.7/dist-packages/paramiko/kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
  m.add_string(self.Q_C.public_numbers().encode_point())
/usr/local/lib/python3.7/dist-packages/paramiko/kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
  self.curve, Q_S_bytes
/usr/local/lib/python3.7/dist-packages/paramiko/kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
  hm.add_string(self.Q_C.public_numbers().encode_point())
Traceback (most recent call last):
  File "/home/punshi/PycharmProjects/nessus_api/openvas-greenbone.py", line 8, in <module>
    gmp.authenticate('admin', 'admin')
  File "/usr/local/lib/python3.7/dist-packages/gvm/protocols/gmpv7.py", line 211, in authenticate
    response = self._read()
  File "/usr/local/lib/python3.7/dist-packages/gvm/protocols/base.py", line 54, in _read
    return self._connection.read()
  File "/usr/local/lib/python3.7/dist-packages/gvm/connections.py", line 126, in read
    raise GvmError('Remote closed the connection')
gvm.errors.GvmError: Remote closed the connection

Process finished with exit code 1

我已经手动测试了 SSH 连接,因此问题要么出在我的代码上,要么出在其他代码上。

额外细节-

Ubuntu 16,
Greenbone Security Assistant 7.0.3 (gui)
Open Vas - 9.0.3
python linux security ssh openvas
3个回答
6
投票

我有完全相同的问题,我用

TLSConnection
而不是
SSHConnection
解决了它。这是您的代码:

import gvm
from gvm.protocols.latest import Gmp
from gvm.transforms import EtreeTransform
from gvm.xml import pretty_print

connection =gvm.connections.TLSConnection(hostname='192.168.1.84')
gmp = Gmp(connection)
gmp.authenticate('admin', 'admin')

# Retrieve current GMP version
version = gmp.get_version()

# Prints the XML in beautiful form
pretty_print(version)

2
投票

我正在探索 OpenVas 工具来满足项目需求,openVas 目前由 Greenbone 管理。

只是一个旁注。 OpenVAS 由 Greenbone 开发多年。因此,我们确实将该项目重命名为版本 10 的Greenbone Vulnerability Management (GVM)。只有实际的扫描器组件仍会以 OpenVAS 命名。请参阅 https://community.greenbone.net/t/is-openvas-manager-and-gvmd-the-same/1777/3 了解更多详细信息。

使用 SSHConnection 需要在远程服务器上进行一些额外的设置。使用 TLSConnection 可能更容易,但还需要更改 gvmd/openvasmd 的设置,因为默认情况下它仅侦听 unix 套接字。


0
投票

不幸的是,Greenbone 团队似乎致力于把关任何有用的信息,但有几种方法可以做到这一点。我在下面提供了一个针对 Gmp 版本 22.4 的工作示例。


概述

SSHConnection
方法期望 SSH 连接直接打开到正在读取/写入 gvmd.sock 文件的交互式 shell。

但是,我们选择以交互方式公开该套接字并不重要;最后,我们只需要能够以用户身份通过 SSH 登录,并拥有对套接字文件的读/写访问权限,无需额外麻烦。

我的环境

我使用 Compose 文件部署了 Greenbone 社区版。我选择使用主机的 SSH 程序来公开它,因此我也将 Unix 套接字从容器公开到主机。 SSH 配置

让 OpenSSH 开始以交互方式提供套接字文件的最简单方法是使用

ForceCommand

nc -U
:
ForceCommand /usr/bin/nc -U /tmp/gvm/gvmd/gvmd.sock

这可以通过按用户/组过滤在默认 SSH 实例内完成。我在这里选择按组进行过滤,因此该组中的任何 SSH 用户都将被定向到 API。

Match Group gvm-api ForceCommand /usr/bin/nc -U /tmp/gvm/gvmd/gvmd.sock

或者您可以在另一个端口上创建一个
单独的 OpenSSH 实例

,无条件转发到套接字: Port 8000 PermitRootLogin no PubkeyAuthentication no PasswordAuthentication yes PermitEmptyPasswords no KbdInteractiveAuthentication no UsePAM yes PrintMotd no PidFile /run/sshd_gvm.pid ForceCommand /usr/bin/nc -U /tmp/gvm/gvmd/gvmd.sock

注意:您需要为此新配置文件创建一个守护程序。请参阅上面链接的指南。

一旦您能够执行
ssh <user>@<hostname> -p <port>

,并以交互方式访问套接字文件,您就可以开始使用 Gmp 了:

from gvm.protocols.gmp import Gmp
from gvm.connections import SSHConnection
from gvm.transforms import EtreeCheckCommandTransform

hostname = '192.168.1.84'
username = 'alex'
password = 'alex@123'
port = 22

transform = EtreeCheckCommandTransform()
connection = SSHConnection(hostname=hostname, username=username, password=password, port=port)

with Gmp(connection=connection, transform=transform) as gmp:
    _ = gmp.authenticate('admin', 'admin')
    version = gmp.get_version()

© www.soinside.com 2019 - 2024. All rights reserved.