nmap | 一次实战记录

这篇文章在微信公众号上发过,这里的版本比微信上的新。

背景:偶尔需要用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 加固建议
提供加固建议,例如升级软件到最新版本等

安全建议

下面是个人做了多次测试后的总结。

想获得更高的安全性就会牺牲便捷性,想要获得更多便捷性那就会牺牲安全性,便捷和安全是矛盾的,具体情况按需选择。

  1. 服务器只开放必须的端口,例如作为http服务器只开放提供http服务的80和443端口;
  2. 开放端口提供服务的软件尽量使用最新版本,如果升级代价太高而选择不升级,那么要关注公开情报来及时修复漏洞,一定不能使用有公开高危漏洞的软件提供服务;
  3. 如果必须要提供SSH远程登录:
    1. 不要使用默认的22端口;
    2. 禁止root组远程登录;
    3. 禁止账号密码登录,只允许密钥登录,并妥善保管私钥;
    4. 使用最新版本的SSH软件;
  4. 开启防火墙,具体如何配置看需求;
  5. 版本混淆,有需要的话,混淆软件版本信息,例如Nginx、Linux distribution等,不提供或提供错误的版本信息。
原文地址:https://www.cnblogs.com/jamesnpu/p/13598012.html