一、NMAP命令
Nmap(Network Mapper)是一个开源的网络探测和安全审核工具。它被广泛用于网络发现和安全扫描。Nmap使用原始IP数据包来确定网络上的哪些主机可用、这些主机提供哪些服务(应用程序名和版本)、这些主机运行的操作系统(包括版本信息和可能的硬件类型)、这些主机使用的包过滤器/防火墙类型以及各种其他特性。
| 参数 | 解释 | 示例 | | --- | --- | --- | | -p [port(s)] | 扫描指定的端口或端口范围 | nmap -p 80,443 [target] | | -F | 快速扫描,只检查常用端口 | nmap -F [target] | | -O | 启用操作系统检测 | nmap -O [target] | | -sV | 探测服务版本信息 | nmap -sV [target] | | -n | 禁止DNS解析 | nmap -n [target] | | -sS | 使用TCP SYN扫描,不完全建立TCP连接 | nmap -sS [target] | | -sT | 使用TCP Connect扫描,完全建立TCP连接 | nmap -sT [target] | | --script | 使用指定的Nmap脚本进行扫描 | nmap --script=[script-name] [target] | | -A | 综合扫描,包括操作系统检测、版本检测、脚本扫描和traceroute | nmap -A [target] | | -T[0-5] | 设置扫描速度,0是最慢,5是最快 | nmap -T4 [target] | | -v | 增加输出的详细程度 | nmap -v [target] | | -Pn | 跳过主机发现,直接扫描端口 | nmap -Pn [target] |
基本端口扫描
例子: 扫描端口: nmap 192.168.75.225 扫描特定端口: nmap -p 22,80,443 192.168.75.225 快速扫描: nmap -F 192.168.75.225
┌──(newrain㉿kali)-[~/Desktop] └─$ sudo nmap 192.168.75.225 [sudo] newrain 的密码: Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-14 14:21 CST Nmap scan report for 192.168.75.225 Host is up (0.000031s latency). Not shown: 997 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql MAC Address: 00:0C:29:A4:C1:3C (VMware) Nmap done: 1 IP address (1 host up) scanned in 2.26 seconds
使用$ sudo nmap 192.168.75.225命令可以给你提供什么信息?
1. **主机存活状态** - 当执行该命令后,nmap首先会尝试判断目标主机(IP地址192.168.75.225)是否存活。如果主机是存活的,会显示“Host is up”以及可能会有一个延迟时间值,例如“Host is up (0.00x s latency)”,这里的延迟时间是指从发送探测信号到收到主机响应之间的时间差,它可以让您了解到网络连接的响应速度情况。
- 如果主机没有响应,可能会出现提示“Host seems down. If it is really up, but blocking our ping probes, try -Pn”。这表明初步判断主机似乎是不活跃的,但如果实际上主机是开启的,只是阻止了nmap的ping探测,您可以使用 -Pn选项来跳过主机存活检测步骤,直接进行端口扫描。
2. **端口开放情况** - 若主机存活,nmap会对主机上的端口进行扫描,以确定端口的状态。 - 对于开放的端口,会有类似“PORT STATE SERVICE”的输出,然后列出开放端口的信息,例如“22/tcp open ssh”,这表示TCP端口22是开放的,并且nmap推测该端口对应的服务可能是SSH。nmap有一个服务 - 端口映射数据库,它会根据端口号尝试匹配对应的服务。
- 对于关闭的端口,可能会显示“Not shown: [number] closed tcp ports (reset)”,意思是有一定数量的TCP端口是关闭的,并且当nmap探测这些端口时,主机返回了一个“reset”信号,这是TCP协议用于表示连接复位的信号。
3. **网络设备的MAC地址(可能)**
- 如果目标主机位于本地局域网内,并且网络环境允许,nmap可能会获取到目标主机的MAC地址,格式通常是“MAC Address: [MAC地址](设备厂商标识)”,例如“MAC Address: 00:11:22:33:44:55 (Dell)”,这表明获取到的MAC地址是00:11:22:33:44:55,并且nmap推测该设备可能是戴尔(Dell)公司生产的。这是因为nmap可以根据MAC地址的前几位来判断设备的厂商。
4. **扫描总结信息** - 扫描结束后,会有总结性的输出,例如“Nmap done: 1 IP address (1 host up) scanned in [time] seconds”,这表示扫描了1个IP地址,其中有1个主机是存活的,整个扫描过程花费了[time]秒。这有助于您快速了解扫描的基本情况,包括扫描效率等信息。
多地址扫描
扫描多个目标:nmap 192.168.75.225 192.168.75.226 192.168.75.227 扫描整个子网:nmap 192.168.75.0/24
# 多地址扫描 ┌──(newrain㉿kali)-[~/Desktop] └─$ sudo nmap 192.168.75.225 192.168.75.226 192.168.75.227 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-14 14:24 CST Nmap scan report for 192.168.75.225 Host is up (0.00026s latency). Not shown: 997 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql Nmap done: 3 IP addresses (1 host up) scanned in 3.34 seconds # 扫描整个网段 ┌──(newrain㉿kali)-[~/Desktop] └─$ sudo nmap 192.168.75.0/24(这是在 Linux 或类 Unix 系统中执行的命令。“sudo”是用于以管理员权限执行命令的前缀;“nmap”是一款网络探测工具和安全审计工具,用于扫描和分析网络;“192.168.75.0/24”是一个 IP 地址范围,表示对从 192.168.75.0 到 192.168.75.255 这个范围内的 IP 地址进行网络扫描。) Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-14 14:25 CST Nmap scan report for 192.168.75.1 Host is up (0.00013s latency). Not shown: 993 closed tcp ports (conn-refused) PORT STATE SERVICE 135/tcp open msrpc 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 902/tcp open iss-realsecure 912/tcp open apex-mesh 7000/tcp open afs3-fileserver(这是一段 Nmap 扫描报告的输出内容。首先说明了使用的 Nmap 版本以及扫描开始的时间为 2024 年 1 月 14 日 14:25 CST(中国标准时间)。报告显示对 IP 地址为 192.168.75.1 的主机进行了扫描。该主机处于运行状态,延迟时间为 0.00013 秒。有 993 个关闭的 TCP 端口(由于连接被拒绝未显示具体端口号)。接着列出了开放的端口及对应的服务,如 135/tcp 端口开放,对应的服务是 msrpc;139/tcp 端口开放,对应的服务是 netbios-ssn 等。) Nmap scan report for 192.168.75.2 Host is up (0.00024s latency). Not shown: 999 closed tcp ports (conn-refused) PORT STATE SERVICE 53/tcp open domain Nmap scan report for 192.168.75.225 Host is up (0.00052s latency). Not shown: 997 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql Nmap scan report for 192.168.75.231 Host is up (0.000091s latency). All 1000 scanned ports on 192.168.75.231 are in ignored states. Not shown: 1000 closed tcp ports (conn-refused) Nmap done: 256 IP addresses (4 hosts up) scanned in 7.19 seconds
平台检测
操作系统检测:nmap -O 192.168.75.225 服务版本检测:nmap -sV 192.168.75.225
# 检测操作系统 ┌──(newrain㉿kali)-[~/Desktop] └─$ sudo nmap -O 192.168.75.225(这是一个在 Linux 或类 Unix 系统中执行的命令。“sudo”用于以管理员权限执行命令;“nmap”是一个网络扫描工具;“-O”参数表示尝试确定目标主机的操作系统类型;“192.168.75.225”是要进行扫描的目标 IP 地址。这个命令的作用是以管理员权限使用 nmap 工具对 IP 地址为 192.168.75.225 的主机进行操作系统类型探测扫描。) Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-14 14:27 CST Nmap scan report for 192.168.75.225 Host is up (0.00044s latency). Not shown: 997 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql MAC Address: 00:0C:29:A4:C1:3C (VMware) Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.9 Network Distance: 1 hop(这段内容是 Nmap 扫描报告的输出结果。首先给出了使用 Nmap 的起始信息,包括版本和扫描时间。接着报告了对 IP 地址为 192.168.75.225 的扫描结果。表明该主机处于开启状态且延迟时间很短。有 997 个关闭的 TCP 端口未显示,因为它们的状态为“reset”。然后列出了三个开放的端口(22/tcp 对应 ssh 服务、80/tcp 对应 http 服务、3306/tcp 对应 mysql 服务)。还给出了该设备的 MAC 地址、设备类型、运行的操作系统信息(可能是 Linux 3.x 到 4.x 版本)、操作系统的详细信息以及网络距离为 1 跳。) OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 3.65 seconds # 检查版本 ┌──(newrain㉿kali)-[~/Desktop] └─$ sudo nmap -sV 192.168.75.225(这是在命令行中执行的一个命令。“sudo”表示以超级用户权限执行后续的命令。“nmap”是一个网络扫描工具,“-sV”是 nmap 的一个选项参数,表示进行版本探测。“192.168.75.225”是要扫描的目标 IP 地址。这个命令的作用是使用 nmap 工具以超级用户权限对 IP 地址为 192.168.75.225 的设备进行版本探测扫描。) Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-14 14:29 CST Nmap scan report for 192.168.75.225 Host is up (0.000070s latency). Not shown: 997 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) 80/tcp open http nginx 1.20.1 3306/tcp open mysql MySQL 5.7.44 MAC Address: 00:0C:29:A4:C1:3C (VMware) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 8.94 seconds
基于特殊脚本扫描
nmap --script=default 192.168.106.134 执行默认的脚本集,这通常包括针对最常见的漏洞和问题的检测。 nmap --script=auth 192.168.106.214 运行与认证相关的脚本,通常用于发现目标上的认证漏洞。 nmap --script=brute 192.168.106.134 执行暴力破解攻击的脚本,用于尝试破解目标上的各种服务(如FTP、SSH等)的密码。 nmap --script=vuln 192.168.106.134 运行检测已知漏洞的脚本,用于识别目标上可能存在的漏洞。 nmap --script=broadcast 192.168.106.134 使用广播脚本,这通常用于发现局域网内的主机和服务。 nmap --script=smb-brute.nse 192.168.106.134 执行针对SMB服务的暴力破解脚本,尝试猜测SMB协议上的用户名和密码。 nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.106.134 运行SMB漏洞检查脚本,unsafe=1参数允许脚本执行可能会对目标系统造成影响的检测。 nmap --script=smb-vuln-conficker.nse --script-args=unsafe=1 192.168.106.134 执行检测Conficker蠕虫的脚本,这是一种在Windows系统上广泛传播的恶意软件。 nmap -p3306 --script=mysql-empty-password.nse 192.168.106.134 在端口3306(MySQL的默认端口)上运行检查空密码的MySQL账户的脚本。
二、nikto命令
站点扫描
执行对目标服务器的基本扫描,只需输入以下命令:
nikto -h [目标主机] 例如:nikto -h http://www.example.com
┌──(newrain㉿kali)-[~] └─$ nikto -h http://192.168.75.225 - Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.75.225 + Target Hostname: 192.168.75.225 + Target Port: 80 + Start Time: 2024-01-14 16:07:36 (GMT8) --------------------------------------------------------------------------- + Server: nginx/1.20.1 + /: Retrieved x-powered-by header: PHP/8.0.30. + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: Drupal Link header found with value: <http://192.168.75.225/index.php?rest_route=/>; rel="https://api.w.org/". See: https://www.drupal.org/ + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + /index.php?: Uncommon header 'x-redirect-by' found, with contents: WordPress. + No CGI Directories found (use '-C all' to force check all possible dirs) + /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version usually matches the WordPress version. + /wp-links-opml.php: This WordPress script reveals the installed version. + /license.txt: License file found may identify site software. + /: A Wordpress installation was found. + /wp-login.php?action=register: Cookie wordpress_test_cookie created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies + 8102 requests: 0 error(s) and 10 item(s) reported on remote host + End Time: 2024-01-14 16:08:27 (GMT8) (51 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
报告内容
报告内容: 针对IP地址192.168.75.225上运行的Web服务器(端口80)的一些关键发现。这台服务器运行着nginx/1.20.1,并且部署了WordPress和Drupal。以下是一些重要的安全隐患和信息泄露点:
PHP版本公开:
扫描发现了x-powered-by头部,显示PHP版本为8.0.30。公开版本信息可能增加被攻击的风险。
缺少X-Frame-Options头:
没有X-Frame-Options头可能使网站容易受到点击劫持攻击。更多信息可参考:X-Frame-Options。
Drupal API链接:
发现了Drupal的API链接,这可能是信息泄露。
缺少X-Content-Type-Options头:
缺少这个头部可能允许浏览器基于内容推断MIME类型,可能导致安全漏洞。详情见:[Missing Content-Type Header](https://www
.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/).
WordPress的非常见头部 'x-redirect-by':
发现了指向WordPress的非常见头部,这可能是信息泄露。
未找到CGI目录:
未发现CGI目录,但可以使用**-C all**参数强制检查所有可能的目录。
WordPress Akismet插件信息:
通过**/wp-content/plugins/akismet/readme.txt**文件,泄露了WordPress Akismet插件的版本信息。
WordPress版本泄露:
/wp-links-opml.php脚本泄露了WordPress的安装版本。
可能泄露的许可证文件:
通过**/license.txt**文件可能泄露了站点软件的信息。
WordPress安装确认:
确认了站点上安装了WordPress。
Cookie缺少HttpOnly标志:
在**/wp-login.php?action=register发现了未设置HttpOnly标志的wordpress_test_cookie**。这可能使cookie容易受到跨站脚本攻击。
解决建议:
更新和打补丁:确保所有服务(如PHP, WordPress, Drupal, nginx)都是最新版本,并应用了所有安全补丁。
隐藏版本信息:配置Web服务器和应用,以避免泄露版本信息。
设置安全头部:添加X-Frame-Options、X-Content-Type-Options等安全头部,以增强浏览器安全性。
安全配置WordPress:确保WordPress配置正确,不泄露不必要的信息。
检查插件版本:确保所有WordPress插件是最新的,避免使用过时的插件。
配置Cookie安全:对所有敏感Cookie设置HttpOnly标志。
参数解释
| 参数 | 解释 | 示例 | | --- | --- | --- | | -h [host] | 指定要扫描的主机或IP地址 | nikto -h www.example.com | | -p [port] | 指定要扫描的端口 | nikto -h www.example.com -p 8080 | | -ssl | 使用SSL连接到主机 | nikto -h www.example.com -ssl | | -id [id:pass] | 使用HTTP认证 | nikto -h www.example.com -id user:pass | | -o [file] | 将扫描结果保存到指定文件 | nikto -h www.example.com -o result.txt | | -nolookup | 不进行DNS或WHOIS查找 | nikto -h 192.168.1.1 -nolookup | | -C [dir] | 强制检查指定目录 | nikto -h www.example.com -C all | | -T [test] | 选择特定测试类型执行 | nikto -h www.example.com -T xss | | -useproxy [host] | 通过指定的HTTP/HTTPS代理进行扫描 | nikto -h www.example.com -useproxy http://localhost:8080 | | -timeout [time] | 设置请求超时时间(秒) | nikto -h www.example.com -timeout 30 | | -evasion [num] | 使用指定的逃避技术 | nikto -h www.example.com -evasion 1 | | -useragent [ua] | 设置自定义的User-Agent字符串 | nikto -h www.example.com -useragent "MyUserAgent" | | -update | 更新Nikto插件和数据库 | nikto -update | | -list-plugins | 列出所有可用的Nikto插件 | nikto -list-plugins |
三、暴力破解
Hydra
是一款由著名的黑客组织THC开发的开源
暴力破解工具,支持大部分协议的在线密码破解,是网络安全渗透测试
必备的一款工具。
1、安装方式
[root@bogon ~]# yum install -y epel-release [root@bogon ~]# yum install -y hydra
具体的参数含义见下表:
| 参数名 | 参数含义 | | --- | --- | | -l : | 指定破解的用户,对特定用户破解 | | -L | 指定用户名字典 | | -p | 小写,指定密码破解,少用,一般是采用密码字典 | | -P | 大写,指定密码字典 | | -R | 继续从上一次进度接着破解 | | -S | 大写,采用SSL链接 | | -s | 小写,可通过这个参数指定非默认端口 | | -e | 可选选项,n:空密码试探,s:使用指定用户和密码试探 | | -t | 同时运行的线程数,默认为16 | | -C | 使用冒号分割格式,例如“登录名:密码”来代替 -L/-P 参数 | | -M | 指定目标列表文件一行一条 | | -o | 指定结果输出文件 | | -f | 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解 | | -w | 设置最大超时的时间,单位秒,默认是30s | | -v / -V | 显示详细过程 | | server | 目标ip | | service | 指定服务名,支持的服务和协议 |
破解SSH
# 使用用户 root 密码 1 破解 192.168.1.101 服务器 [root@bogon ~]# hydra -l root -p 1 -o ssh.txt -vV 192.168.1.101 ssh -s 22 # 使用用户 root 密码字典文件 passwd.txt 破解 192.168.1.101 服务器 # passwd.txt 为密码字典 [root@bogon ~]# cat passwd.txt 0 1 2 3 4 5 6 7 8 9 123 111 qwer [root@bogon ~]# hydra -l root -P passwd.txt -o ssh.txt -vV 192.168.1.101 ssh -s 22 # 使用用户 root 密码 1 破解服务器列表文件中的服务器 [root@bogon ~]# hydra -l root -p 1 -o ssh.txt -vV -M ip_list ssh -s 22 # 使用用户 root 密码字典文件 passwd.txt 破解服务器列表文件中的服务器 [root@bogon ~]# hydra -l root -P passwd.txt -o ssh.txt -vV -M ip_list ssh -s 22 # 使用用户字典文件、密码字典文件、服务器列表进行破解 [root@bogon ~]# hydra -L user.txt -P passwd.txt -o ssh.txt -vV -M ip_list ssh -s 2