0X01 Nessus简介

全球使用人数最多的漏洞扫描器,是由Renaud Deraison在1998年 开展的项名为 "Nessus"的计划,其计划目的是希望能为因特网社群提供一个免费、威力强大、更新频繁并简易使用的远端系统安全扫描程序。Nessus起初是开源的,后来公司决定走向闭源,核心开发者分为了两派,一派接受闭源,一派不接受,不接受的人就离开了公司,创建了GreenBone公司,开发了OpenVas。

OpenVas和Nessus我都用过,对OpenVas更为了解一些。OpenVas的特点在于开源,你能使用其所有功能,除了无法使用商用规则库,其他的都和商业版一样。Nessus分为社区版和商业版,社区版和商业版基本一样,但是社区版限制了可调用的API和扫描IP数量,扫描IP数量限制的既不是单个任务扫描IP数量,也不是多个任务扫描IP总数,而是该机器历史总共扫描的IP数量,16个。举个例子,你扫描了192.168.1.0/24,这个网段,扫出了192.168.1.1 -- 192.168.1.16,这16台机器,那么16个IP的限制就达到了,其余的所有IP扫描都没有结果。

OpenVas的扫描配置比较复杂,容易让人头晕,Nessus就设计得更为人性化一点,更容易使用。

Nessus 指南 nessus openvas_商业版API

0X02 安装

官方网站:https://www.tenable.com/downloads/nessus

支持各种操作系统,自行下载。我使用的是Ubuntu18.04,所以下载的安装包为:Nessus-8.8.0-ubuntu1110_amd64.deb

1.下载好之后安装deb包:

dpkg -i Nessus-8.8.0-ubuntu1110_amd64.deb

2.安好之后命令行输出会提醒你使用命令开启nessus进程:

/etc/init.d/nessusd start

3.nessus会占用8834端口,用来启动WEB服务,通过该WEB服务完成后续安装步骤,所以需要保证8834端口没有被其他进程占用,同时防火墙规则没有拦截对8834端口的访问。

后面的安装步骤没有太多说明的,傻瓜式安装,一路点下去就行了,要输什么参数就输吧。

0X03 干货来了

上面提到过,社区版的Nessus对API的调用是有限制的,先来讲下怎么调用API。

1.首先点击setting按钮,进入配置页面

Nessus 指南 nessus openvas_Nessus 指南_02

2.Version就是nessus版本,Licensed Hosts可以清楚看到当前已使用的IP数量,这里我已经把16个IP都扫完了,不能再扫描新的IP,但是旧IP可以重复扫描出结果,这个没有问题。点击My Account

Nessus 指南 nessus openvas_Nessus_03

3.可以看到,通过添加HTTP HEADER的方式来完成身份验证,同时可以查看API文档,蓝色字样。实际上还可以通过请求Nessus的身份验证API来获取token,也可以完成身份验证,但是不推荐该方法。使用API Keys比较好。

Nessus 指南 nessus openvas_Nessus 指南_04

4.再来看看API documentation,有很详细的API介绍,写的很清楚,慢慢看你会发现,很多重要的功能是不能调用的,比如创建扫描任务,也就是scans,开始一个任务等等。红框的字啥意思呢?点进去会让你搞什么Nessus Manager,说白了就是要你花钱买商业版。

Nessus 指南 nessus openvas_社区版_05

Nessus 指南 nessus openvas_社区版_06

写个调用API的DEMO:

import requests

url = 'https://192.168.1.2:8834'
headers = {'X-ApiKeys': 'accessKey=your_access_key;secretKey=your_secret_key',
           'content-type': 'application/json'}
resp = requests.get('%s/%s' % (url, 'scans'), headers=self.headers, verify=False)
print(resp.status_code)
print(resp.text)

携带了X-API-Token请求头的调用:

import requests

scan_id = 11 # 扫描任务的id
url = 'https://192.168.1.2:8834'
headers = {'X-ApiKeys': 'accessKey=your_access_key;secretKey=your_secret_key',
           'content-type': 'application/json',
           'X-API-Token': 'XXADADASDASDASD'}

resp = requests.post('%s/scans/%s/launch' % (url, scan_id), headers=headers, verify=False)
print(resp.status_code)
print(resp.text)

5.如何调用商用API

如果直接去请求API会返回412,API不可用,但是浏览器去访问页面,这些API是全部可以使用的,那么自然可以想到,Nessus用了一种方法去区分默认WEB界面的访问和API请求,那就看看WEB界面请求就发了些什么玩意吧。

Nessus 指南 nessus openvas_商业版API_07

X-API-Token,这字眼太吸引人了,让人不得不怀疑这个字段。OK,把这个请求头加在HTTP请求头里,你就发现,所有的API都可以调用了,就这么简单。

0X04 更牛逼的

上面说到了,通过添加X-API-Token就可以访问所有API了,但是这个X-API-Token的值会不会变?会,有时候会变,但是我找到了方法,去获取X-API-Token的值

继续更新:

显然,每次从浏览器去访问WEB页面来获取X-API-TOKEN是不切实际的,所以就开始了寻找X-API-TOKEN之旅,由于时间有点久远了,有些细节忘记了,说一下我当时的思路:查看页面的请求记录,找到可疑的JS文件,然后在Nessus源码目录中查看这些JS文件中是否存在当前X-API-TOKEN的值,或者X-API-TOKEN这个字段,后来在一个JS文件中发现了这个值,那么可以通过监听该JS文件来动态更新X-API-TOKEN。