0%

在 Docker 技术出现之前, 搭建 lab 环境复现问题实在是件非常让人头疼的事情. 按照传统的方式搭建 LAB 环境非常麻烦. 比如你需要测试 nginx 或是 ftp, 我们需要安装 linux 服务器, 配置网络, 分配 IP, 更新软件源, 安装软件包, 调整配置文件… 而 Docker 的出现彻底解放了这些繁琐的工作! 通过一个 Dockerfile, 用户可以build 出符合自己需要的 docker image 并在几分钟内拉起一个服务.

阅读全文 »

nmap 可以用来快速发现网络中的主机以及其监听的端口. 同时 nmap 还可以猜测目标机器的操作系统的类型, 获取服务器的证书, 到达目标主机的 traceroute 信息等. 结合 “–script” 参数还可以调用扫描脚本对特定服务进行更加精细化的扫描.

nmap 扫描结果中常见的状态有:

  • Open: 监听并接受连接的端口
  • Closed: 未开放但是对于 nmap 的探测做出反映的端口. 可用于判断主机开机状态和 OS 的探测
  • Filtered: 端口前可能有 firewall 设备,丢弃了探测包或者返回了无法判断的应答,比如 destination unreachable
  • Unfiltered: 端口可达但是 nmap 无法判断端口是否处于 open 状态.
  • open|filtered: 端口未对 nmap 探测做出反映.可能 nmap 探测包被 firewall 丢弃,或者端口的响应报文被丢弃

扫描局域网主机

如果需要扫描的网段为内网 IP 段, nmap 默认会使用 arp 请求来探测内网主机. 这个方法的好处是可以尽量隐藏扫描的意图.因为其他的高级扫描类型可能会产生大量的流量,从而很容易被发现. 更加高级的扫描应该只针对那些确定存在的主机,而不是直接扫描全网从而造成大量的流量.

1
nmap -PR -sn 192.168.1.0/24

可以通过这个命令直接生成包含 IP 地址的列表文件:

1
nmap -PR -sn 192.168.1.0/24 | awk '/Nmap scan/{gsub(/[()]/,"",$NF); print $NF > "nmap_scanned_ips"}'

扫描外网主机

通过 Layer 3 的 ICMP echo request 探测目标主机

1
sudo nmap -PE -sn scanme.nmap.org

通过 Layer 4 的 ACK 探测目标主机, 收到 RST 表示目标主机处于up:

1
sudo nmap -PA80 -sn scanme.nmap.org

列出目标主机监听的端口

nmap 可以检测某个 IP, 多个 IP 或者一个网段内 IP 地址的监听端口(默认tcp):

1
2
3
4
nmap 10.0.0.1
nmap 10.0.0.1 10.0.0.20 10.0.0.60
nmap 10.0.0.0/24
nmap 10.0.0.*

扫描文件中列出的主机列表

1
2
3
4
5
6
7
8
nmap -iL /tmp/test.txt

cat /tmp/test.txt
server1.cyberciti.biz
192.168.1.0/24
192.168.1.1/24
10.1.2.3
localhost

排除10.0.0.60 和 10.0.0.80

1
nmap 10.0.0.0/24 --exclude 10.0.0.60,10.0.0.80 

排除exclude.txt文件内主机:

1
nmap 10.0.0.0/24 -iL /tmp/scanlist.txt --excludefile /tmp/exclude.txt

扫描 IP地址 末尾 1~20 主机:

1
nmap 10.0.0.1-20 

查找监听特定端口的主机

查找所有开放 22,80,443 端口的主机:

1
nmap -p 22,80,443 -il iplist.txt

检测主机前是否有 firewall

用来检测主机前是否有防火墙. -sA 也被称为 ACK Scan. 注意其目的不是绕过防火墙, 而是检测是否有防火墙存在. 当被检测主机接受到 ACK 时, 无论端口是否处于 open 状态都会直接返回 RST.

  • 如果 nmap 收到 RST 包, 则表示数据包并没有经过防火墙;
  • 如果收到 ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13), 或者没有任何回应数据包则表示 ACK 可能被防火墙丢弃.
1
2
3
4
5
6
# nmap -sA 10.154.172.172
Starting Nmap 7.70 ( https://nmap.org ) at 2021-09-02 19:31 CST
Nmap scan report for 10.154.172.172
Host is up (0.00070s latency).
All 1000 scanned ports on 10.154.172.172 are filtered
MAC Address: 00:50:56:86:47:46 (VMware)

扫描 udp 端口

1
#sudo nmap -sU -iL list.name

获取服务版本信息

1
#sudo nmap -sV -iL list.name

猜测操作系统版本

1
2
3
4
5
6
# 对主机进行全面检查: OS detection, version detection, script scanning, and traceroute
nmap -v -A 192.168.1.254

# 对主机只进行操作系统猜测, 当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认 进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效
nmap -v -O --osscan-guess 10.0.0.1
nmap -v -O --osscan-guess --fuzzy 10.0.0.1

扫描 IPV6 地址

1
2
3
4
nmap -6 IPv6-Address-Here
nmap -6 server1.cyberciti.biz
nmap -6 2607:f0d0:1002:51::4
nmap -v A -6 2607:f0d0:1002:51::4

快速扫描子网内 up 主机

在特权账号下 nmap 使用 ICMP echo request, TCP SYN to port 443, TCP ACK to port 80, and an ICMP timestamp 来探测网络中的主机, 而对于非特权用户, nmap 只会使用 80 或者 443 来进行扫描.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# nmap -sP 10.88.0.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2021-09-02 19:00 CST
Nmap scan report for 10.88.0.105
Host is up (0.00089s latency).
MAC Address: 00:50:56:86:D3:88 (VMware)
Nmap scan report for 10.88.0.115
Host is up (0.0010s latency).
MAC Address: 00:50:56:86:5C:19 (VMware)
Nmap scan report for 10.88.0.116
Host is up (0.00062s latency).
MAC Address: 00:50:56:86:3C:3A (VMware)
Nmap scan report for 10.88.0.129
Host is up (0.00051s latency).
MAC Address: 00:50:56:86:90:5D (VMware)
Nmap scan report for 10.88.0.153
Host is up (0.00083s latency).
MAC Address: 00:50:56:86:5A:02 (VMware)
Nmap scan report for 10.88.0.162
Host is up (0.0042s latency).
MAC Address: 00:50:56:86:D3:88 (VMware)
Nmap scan report for 10.88.0.200
Host is up.
Nmap done: 256 IP addresses (7 hosts up) scanned in 3.98 seconds

显示 nmap 发出的包

另外如果要观察 nmap 发送了哪些扫描包, 可以加上 --packet-trace

1
nmap -sP --packet-trace --send-ip 10.88.0.0/24

控制 nmap 的扫描速度

nmap 的扫描速度范围为 0~5, 默认是 3. 0 表示最慢但是可以绕过 IDS 的检测, 而 5 表示最快.

1
nmap -T0-5 10.88.0.0/24

伪造 nmap 的源 IP 或者 MAC 地址

为了隐藏扫描的源 IP 地址,可以使用如下命令. 例子中 nmap 使用 20 个随机的源地址进行扫描.

1
nmap 10.0.0.1 -D RND:20

为了隐藏 MAC 地址

1
nmap 192.168.1.0/24 --spoof-mac 0

乱序扫描

nmap 默认按数字顺序扫描主机. 通过乱序扫描可以躲避 IDS 设备的检查.

1
nmap -iL iplist.name --randomize-hosts

分片扫描

将数据包拆成小的分片以躲避检测.(目前很多 IDS 都有能力探测分片扫描,但是可以作为一种备用的方法尝试)

1
nmap 192.168.1.1 -f

列出 nmap 扫描结果的理由

--reason 可以写明 nmap 得出扫描结果的依据, 比如下面的例子中 nmap 是收到了 ICMP echo-reply 来判定 10.88.0.105 处于 up 状态

1
2
3
4
5
nmap -sP --packet-trace --send-ip --reason 10.88.0.0/24

Nmap scan report for 10.88.0.105
Host is up, received echo-reply ttl 255 (0.00041s latency).
MAC Address: 00:50:56:86:D3:88 (VMware)

用 nmap 检测 vulnerability

nmap 还可以用来扫描漏洞. nmap 的官网上提供了许多用来扫描漏洞的 script.(后缀为 nse 的文件). 而 kali 中这些 script 默认存放位置为: /usr/share/nmap/scripts

1
2
nmap -iL iplist.txt --script smb-vuln-ms17-010.nse
nmap -iL iplist.txt --script ftp-vsftpd-backdoor -p 21

另外 nmap 还可以通过下面的方法扫描批量的漏洞

1
nmap -iL iplist.txt --script vuln

检测 TLS 服务端支持的 cipher list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
$ nmap --script ssl-enum-ciphers -p 443 phishme.com

Starting Nmap 6.25 ( http://nmap.org ) at 2014-10-21 16:56 PDT
Nmap scan report for phishme.com (198.90.20.111)
Host is up (0.011s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| TLS_RSA_WITH_SEED_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.0:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| TLS_RSA_WITH_SEED_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| TLS_RSA_WITH_SEED_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| TLS_RSA_WITH_SEED_CBC_SHA - strong
| compressors:
| NULL
|_ least strength: strong

Nmap done: 1 IP address (1 host up) scanned in 3.46 seconds

检测 SSH 服务端支持的Cipher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# nmap --script ssh2-enum-algos -sV -p 22 10.155.216.4
Starting Nmap 7.70 ( https://nmap.org ) at 2021-09-01 20:58 CST
Nmap scan report for 10.155.216.4
Host is up (0.0011s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh2-enum-algos:
| kex_algorithms: (4)
| ecdh-sha2-nistp256
| ecdh-sha2-nistp384
| diffie-hellman-group14-sha1
| diffie-hellman-group-exchange-sha1
| server_host_key_algorithms: (5)
| ssh-rsa
| rsa-sha2-512
| rsa-sha2-256
| ecdsa-sha2-nistp256
| ssh-ed25519
| encryption_algorithms: (8)
| [email protected]
| [email protected]
| aes128-cbc
| aes256-cbc
| aes128-ctr
| aes192-ctr
| aes256-ctr
| aes192-cbc
| mac_algorithms: (1)
| hmac-sha1
| compression_algorithms: (2)
| none
|_ [email protected]

本文初步介绍了在 Ubuntu 18.04 上安装 gitlab-ce 以及 gitlab runner 的方法. gitlab-ce 在收到代码的提交后可以触发gitlab runner 执行 CI 命令. gitlab runner 默认使用 gitlab-runner 的账号运行 CI 命令.

阅读全文 »