这篇文章在微信公众号上发过,这里的版本比微信上的新。
背景:偶尔需要用nmap做服务器安全扫描。流程:1. 扫描;2. 结果分析;3. 爆破、漏洞扫描和漏洞利用(可选);4. 出具报告。
一次测试流程记录
扫描
典型命令和参数说明
nmap -A -T4 -oA report <ip or domain>
以下命令参数详细说明可以在nmap的man文档中找到。
-A:同时执行多项扫描任务,除了基本的端口扫描,还包含版本探测,脚本扫描,OS探测以及路由跟踪
-T4:选择速度为4的扫描。(速度从T1-T5,从慢到快)
-oA report:生成所有三种格式的报告
<ip or domain>:待扫描的IP或域名
结果分析
nmap默认扫描了前1000个TCP端口,其中有8个开放。
举例分析扫描结果:
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
22号端口开放,提供SSH服务,使用的版本可能是OpenSSH 6.6.1。
风险一:使用默认端口提供SSH服务,存在批量扫描22号端口并进行爆破的可能;
风险二:OpenSSH版本较低,存在漏洞利用可能。
5432/tcp open postgresql PostgreSQL DB 9.5.0 - 9.5.3
5432端口开放,提供postgresql服务,使用的版本可能是PostgreSQL DB 9.5.0 - 9.5.3。
风险一:开放数据库端口,存在被爆破的风险;
风险二:PostgreSQL版本过低,存在可利用漏洞。
kali@PT:~$ nmap -A -T4 -oN report scan_me.org
Starting nmap 7.60 ( https://nmap.org ) at 2020-07-02 10:04 CST
nmap scan report for scan_me.org (192.168.2.2)
Host is up (0.0021s latency).
rDNS record for 192.168.2.2: hello.os
Not shown: 992 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.2
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
| ssh-hostkey:
| 2048 f8:71:fd:56:a8:f9:94:bb:15:43:be:ca:c0:d4:8a:4f (RSA)
| 256 9a:72:7d:00:d5:42:a3:e1:d2:f2:eb:73:44:01:80:a8 (ECDSA)
|_ 256 96:01:be:66:56:fd:03:2d:66:15:a7:3a:26:fe:88:5d (EdDSA)
80/tcp open http nginx 1.10.3
|_http-cors: GET POST OPTIONS
|_http-server-header: nginx/1.10.3
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
5432/tcp open postgresql PostgreSQL DB 9.5.0 - 9.5.3
8011/tcp open http nginx 1.17.5
|_hadoop-datanode-info:
|_hadoop-jobtracker-info:
|_hadoop-tasktracker-info:
|_hbase-master-info:
|_http-server-header: nginx/1.17.5
|_http-title: project
8080/tcp open http nginx 1.17.5
|_http-cors: GET POST OPTIONS
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: nginx/1.17.5
|_http-title: Site doesn't have a title (text/html; charset=utf-8).
8088/tcp open http Tornado httpd 4.3
|_http-server-header: TornadoServer/4.3
|_http-title: AVL FDFS Status
8099/tcp open http BaseHTTPServer 0.3 (Python 2.7.6)
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
nmap done: 1 IP address (1 host up) scanned in 33.97 seconds
进一步分析
对22号端口进行SSH爆破
nmap -p 22 -sV --script ssh-brute <ip>
从结果来看,虽然开放默认22号端口提供SSH服务,但是不允许账号密码登录,被爆破的风险低。
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
|_ssh-brute: Password authenication not allowed
对5432号端口进行pgsql爆破
nmap -p 22 -sV --script pgsql-brute <ip>
从结果来看,5432号端口的认证策略是 Trusted authentication,也就是默认信任所有人,任意账户密码均可登录,风险很高。
PORT STATE SERVICE VERSION
5432/tcp open postgresql PostgreSQL DB 9.5.0 - 9.5.3
| pgsql-brute:
| root => Trusted authentication
| admin => Trusted authentication
| administrator => Trusted authentication
| webadmin => Trusted authentication
| sysadmin => Trusted authentication
| netadmin => Trusted authentication
| guest => Trusted authentication
| user => Trusted authentication
| web => Trusted authentication
|_ test => Trusted authentication
对5432号端口进行漏洞扫描和漏洞利用
这里使用了metasploit framework。
搜索相关漏洞
# 进入msfconsole
msfconsole
# 搜索postgresql相关漏洞
search postgresql
# 搜索结果中有一个非常新并且危险等级很高的漏洞——xxx,网页搜索得知会影响11.2以下版本的PostgreSQL。
漏洞利用
# 使用该漏洞
use xxx
# 查看漏洞参数
options
# 配置参数
set rhosts xxx
set lhost xxx
# 开始利用
run
# 这个时候,会话已经建立
# 可以开始操作数据库
# 可以尝试使用bash/python等工具进一步渗透
# 可能继续渗透其他内网服务器
出具报告
通过上述分析得知:
22号端口
使用默认端口提供SSH服务,但未提供密码登录,风险低;
OpenSSH版本较低,但网页搜索未发现高风险漏洞,风险低;
5432端口
存在弱口令爆破,风险高;
版本较低,存在可利用的高风险漏洞,风险高;
测试报告格式
1 概述
1.1 扫描对象
说明扫描对象,即目的IP或域名等
1.2 扫描命令
扫描时所用的命令
1.3 扫描报告
扫描html格式结果截图、文本格式结果附件,简述此次扫描结果
2 安全问题
列举安全问题
2.1 SSH端口弱口令
简述问题作为标题,例如 SSH端口弱口令
2.1.1 风险等级
分为高、中、低
2.1.2 触发方式
说明是如何发现的,如果有利用方式,如何利用的
2.1.3 加固建议
提供加固建议,例如升级软件到最新版本等
安全建议
下面是个人做了多次测试后的总结。
想获得更高的安全性就会牺牲便捷性,想要获得更多便捷性那就会牺牲安全性,便捷和安全是矛盾的,具体情况按需选择。
- 服务器只开放必须的端口,例如作为http服务器只开放提供http服务的80和443端口;
- 开放端口提供服务的软件尽量使用最新版本,如果升级代价太高而选择不升级,那么要关注公开情报来及时修复漏洞,一定不能使用有公开高危漏洞的软件提供服务;
- 如果必须要提供SSH远程登录:
- 不要使用默认的22端口;
- 禁止root组远程登录;
- 禁止账号密码登录,只允许密钥登录,并妥善保管私钥;
- 使用最新版本的SSH软件;
- 开启防火墙,具体如何配置看需求;
- 版本混淆,有需要的话,混淆软件版本信息,例如Nginx、Linux distribution等,不提供或提供错误的版本信息。