渗透测试
- 一、该文章简介
- [二、认识Kali Linux](#二、认识Kali Linux)
-
- 1、知识准备
-
- [1.1 Linux操作系统](#1.1 Linux操作系统)
- [1.2 Kali Linux系统](#1.2 Kali Linux系统)
- [1.3 常用网络服务端口](#1.3 常用网络服务端口)
- 2、利用Dmitry进行端口扫描
- 3、利用Nikto扫描网页漏洞
- 4、利用Crunch生成密码字典
- 三、Nmap主机发现和服务扫描
-
- 1、知识准备
-
- [1.1 Nmap介绍](#1.1 Nmap介绍)
- [1.2 Nmap扫描参数](#1.2 Nmap扫描参数)
- 2、Nmap发现存活主机
- 3、Nmap扫描主机端口
- 4、Nmap扫描主机服务版本
- 四、Nmap漏洞发现与渗透
-
- 1、知识准备
-
- [1.1 Nmap扫描中常见漏洞检测脚本](#1.1 Nmap扫描中常见漏洞检测脚本)
- [1.2 Metasploit介绍](#1.2 Metasploit介绍)
- 2、Nmap扫描系统漏洞
- 3、Metasploit漏洞渗透
一、该文章简介
网络扫描时黑客攻击钟信息收集的有效手段,通过扫描可以了解网络中主机的相关情况,为下一步渗透做准备。同时,扫描需要借助工具,本篇介绍Kali Linux中的Nmap工具,通过该工具的使用,设置一定的参数,得到网络主机的操作系统、端口状态、服务版本漏洞等信息。
1、目标
技能目标:
- 1、熟悉Kali Linux系统并能使用Kali中的一些工具,如Nikto、Crunch等
- 2、了解Kali Linux中Nmap扫描时用到一些参数的功能,如-A,-O等
- 3、熟悉Nmap扫描后反馈信息的含义
知识目标:
- 1、理解Kali Linux系统在黑客实践中的作用
- 2、掌握Kali Linux中一些基本工具的使用
- 3、掌握用Nmap配合相关参数扫描网络的流程
2、任务
- 1、认识Kali Linux
- 2、Nmap主机发现和服务扫描
- 3、Nmap漏洞发现与渗透
二、认识Kali Linux
Kali Linux是黑客攻击的常用工具,集成了Nmap、Dmitry、Nikto等网络扫描工具,Crunch、John等密码生成和破解工具,Burp、Wireshark等抓包工具,同时有基于Metasploit框架的渗透模块等。
1、知识准备
1.1 Linux操作系统
Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于UNIX的多用户、多任务、支持多线程和多CPU的操作系统。并能运行主要的UNIX工具软件、应用程序和网络协议。同时支持32位和64位硬件。Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux与其他操作系统相比,具有开放源码、没有版权、技术社区用户多等特点。开放源码使得用户可以自由裁剪、灵活性高,功能强大、成本低。尤其是系统中内嵌网络协议栈,经过适当的配置就可以实现路由器的功能。这些特点使得Linux成为路由交换设备的理想开发平台。
Linux发行版本以及特点
版本名称 | 网址 | 特点 | 软件包管理器 |
---|---|---|---|
Debian Linux | www.debian.org | 开放的开发模式,并易于进行软件包升级 | apt |
Fedora Core | www.redhat.com | 拥有数量庞大的用户、优秀的社区技术支持、并有很多创新 | yum(rpm) up2date(rpm) |
CentOS | www.centos.org | CentOS是一种对RHEL源码再编译的产物 | rpm |
SUSE Linux | www.suse.com | 专业的操作系统,易用的YaST软件包管理系统 | YaST(rpm) |
Mandriva | www.mandriva.com | 操作界面友好,使用图形配置工具,支持NTFS分区的大小变更 | rpm |
KNOPPIX | www.knoppix.com | 可以在CD上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用 | apt |
Gentoo Linux | www.gentoo.org | 高度的可定制性,使用手册完整 | portage |
Ubuntu | www,.ubuntu.com | 优秀的桌面环境 | apt |
1.2 Kali Linux系统
Kali Linux是一个基于Debian的Linux发行版,包括很多安全和取证方面的相关工具。其有32位和64位得镜像下载地址,可用于x86指令集。同时,它还有基于ARM架构得镜像,可用于树莓派和三星得ARM Chromebook。用户可以通过硬盘、Live CD或Live USB来运行Kali Linux操作系统。
Kali Linux下载地址为:https://www.kali.org/downloads/
Kali Linux预装了许多渗透测试软件,包括Nmap、Wireshark、John the Ripper,以及Aircrack - ng。Kali-Linux有着永远开源免费、支持多张无线网卡、定制内核、支持无线注入、支持手机/PAD/ARM平台、高度可定制及更新频繁等特点,是渗透测试者、安全研究者、电子取证者、逆向工程者及黑客常用的工具。
1.3 常用网络服务端口
网络协议是指一些在网络上运行的、面向服务的、基于分布式程序的软件模块。TCP协议、UDP协议是现实通信中的重要协议、它们为这些软件模块提供了通信端口。
(1)TCP端口
TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样能提供可靠的数据传输。常用的包括FTP服务的21端口、Telnet服务的23端口、SMTP服务的25端口及HTTP服务的80端口等等。
(2)UDP端口
UDP端口,即用户数据包协议端口,无须在客户端和服务器之间建立连接,安全性得不到保障,常见的有DNS服务的53端口、SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。
端口 | 服务 | 说明 |
---|---|---|
21 | FTP | FTP服务所开放的端口,用于上传、下载文件 |
22 | SSH | 用于通过命令行模式或远程连接软件连接Linux实例 |
23 | Telnet | 用于Telnet远程登录ECS实例 |
25 | SMTP | SMTP服务所开放的端口,用于发送邮件 |
80 | HTTP | 用于HTTP服务提供访问功能,例如Apache,Nginx等服务 |
110 | POP3 | 用于POP3协议,POP3是电子邮件收发的协议 |
143 | IMAP | 用于电子邮件接收的协议 |
443 | HTTPS | 用于HTTPS服务提供访问功能。是一种能提供加密和通过安全端口传输的协议 |
1433 | SQL Server | SQL Server的TCP端口,用于供对外提供服务 |
1434 | SQL Server | SQL Server的UDP端口,用于返回使用了哪个TCP/IP端口 |
1521 | Oracle | 通信端口 |
3389 | Windows Server Remote Desktop Services | 远程桌面服务端口,可以通过这个端口使用软件连接windows实例 |
8080 | 代理端口 | 同80端口一样,8080端口常用于WWW代理服务,实现网页浏览,如果使用8080端口,访问网站或使用代理服务器时,需要在IP地址后面加上8080,安装Apache Tomcat服务后,默认服务端口为8080 |
137 138 139 | NetBIOS协议137,138为UDP端口,通过网上邻居传输文件时使用的端口,通过139这个端口库进入的连接视图获得NetBIIOS/SMB服务,NetBIOS协议常被用于Windows文件、打印机共享和Samba |
2、利用Dmitry进行端口扫描
Dmitry是Kali Linux中的信息收集工具。在Kali终端输入dmitry,回车即可:
- -o,把扫描结果保存为一个文件。
- -i,扫面的IP地址
- -n,获取相关主机的netcraft.com信息,包括主机操作系统、Web服务上线和运行时间信息
- -p,在目标主机上执行TCP端口扫描,这是个相对简单的模块
- -f,让TCP扫描器输出过滤的端口信息
- -t,设置端口扫描的TTL,默认是2s。
在dmitry后加上参数-p,扫描百度网站开放的端口,结果显示百度服务器开放了80端口:
3、利用Nikto扫描网页漏洞
Nikto是一款使用Perl语言开发的开源代码的、功能强大的Web扫描评估软件,能对Web服务器多种安全项目进行测试,在Kali Linux终端输入nikto -H,回车即可:
参数说明:
- -Cgidirs,扫描CGI目录
- -config,使用指定的config文件来替代安装在本地的config.txt文件
- dbcheck,选择语法错误的扫描数据库
- -evasion,使用LibWhisker中对IDS的躲避技术
- -findonly,仅用来发现HTTP和HTTPS端口,而不执行检测规则
- -Format,指定检测报告输出文件的格式,默认是txt文件格式(csv/txt/htm)
- -host,目标主机,包括主机名,IP地址,主机列表文件
- -id,ID和密码对于授权的HTTP认证
- -nolookup,不执行主机名查找
- -output,报告输出指定地点
- -port,扫描端口指定,默认为80端口
- -Pause,每次操作之间的延迟时间
- Display,控制Nikto输出的显示
- ssl,强制在端口上使用SSL模式
- -Single,执行单个对目标服务的请求操作
- -timeout,每个请求的超过时间,默认为10s
- -Tuning,控制Nikto使用不同的方式来扫描目标
- -useproxy,使用执行代理扫描
- -update,更新插件和数据库
在nikto后加上参数-host扫描项目网站,结果如图,带+号的是网站的敏感信息:
4、利用Crunch生成密码字典
网站入侵靠的是数据字典,Crunch是Kali Linux中的字典生成工具,在Kali Linux终端输入crunch,回车:
输入man crunch即可查看手册:
crunch参数说明:
- -c,数字,指定写入输出文件的行数,也即包含密码的个数
- -d,数字符号,限制出现相同元素的个数,"-d 2@"限制小写字母输出,比如aab,aac,不会产生aaa,因为这是连续的三个字母。格式为+符号,数字是连续字母出现的次数,符号是限制字符串的字符。
- -e,字符串,定义停止生成密码,比如-e 222222,到222222停止生成密码。
- -f /path/to/charset - name,从charset.lst指定字符集,也即调用密码库文件。
- -i,改变格式
- -o wordlist.txt,执行输出文件的名称
- -p,字符串或者-p 单词1 单词2,以排列组合方式来生成字典。
- -q filename.txt,读取这个文件
在crunch后加上参数6 6 01234567890 - o mum6.dic,生成6位的数字密码,并保存在mum6.dic中:
三、Nmap主机发现和服务扫描
1、知识准备
1.1 Nmap介绍
Nmap是一个网络连接端扫描软件,用来扫描网络中主机开放的连接端口,确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统,它是网络管理员必用的软件之一,还用于评估网络系统安全。
Nmap命令的格式为:
Nmap [扫描类型][通用选项]{扫描目标说明}
1.2 Nmap扫描参数
下面哦我们对nmap命令的参数进行说明:
(1)扫描类型
参数 | 说明 |
---|---|
-sT | TCP connect()扫描,这是最基本的TCP扫描方式,这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求及错误信息 |
-sS | TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以该技术通常称为半开扫描(half-open),该技术最大的好处是很少有系统能够把这计入系统日志,不过,需要root权限来定制SYN数据包 |
-sF -sX -sN | 秘密FIN数据包扫描、圣诞树、空扫描模式,这些扫描方式的理论依据是:关闭端口需要对你的探测包回应RST包,而打开的端口必须忽略有问题的包 |
-sP | ping扫描,用ping方式检查网络上哪些主机正在运行,当主机阻塞ICMP echo请求包时,ping扫描是无效的。Nmap在任何情况下都会进行ping扫描,只有目标主机处在运行状态时,才会进行后续的扫描。 |
-sU | 如果想知道在某台主机上提供哪些UDP服务,可以使用此选项 |
-sA | ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙 |
-sW | 滑动窗口扫描,类似于ACK扫描 |
-sR | RPC扫描,和其他不同的端口扫描方法结合使用 |
-b | FTP反弹攻击,连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描 |
(2)通用选项
参数 | 说明 |
---|---|
-P0 | 在扫描之前,不ping主机 |
-PT | 在扫描之前,使用TCP ping确定哪些主机正在运行 |
-PS | 对于root用户,这个选项让Nmap使用SYN包而不是ACK包来对目标主机进行扫描 |
-PI | 设置这个选项,让Nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行 |
-PB | 这是默认的ping扫描选项,它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法就能够穿过防火墙 |
-O | 这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型 |
-I | 打开Nmap的反向标志扫描功能 |
-f | 使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的意图 |
-v | 冗余模式,强烈推荐使用这个选项,它会给扫描过程中的详细信息 |
-S<IP> |
在一些情况下,Nmap可能无法确定你的源地址(Nmap会告诉你),这时使用这个选项给出的IP地址 |
-g port | 设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接,显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护 |
-oN | 把扫描结果重定向到一个可读的文件logfilename中 |
-oS | 把扫描结果输出到标准输出 |
--host_timeout | 设置扫描一台主机的时间,以ms为单位。默认的情况下,没有超时限制 |
--max_rtt_timeout | 设置对每次检测的等待时间,以毫秒为单位。如果超过这个时间限制,就重传或者超时。默认值是大约9000ms |
--min_rtt_timeout | 设置Nmap对每次检测至少等待你指定的时间,以ms为单位 |
-M count | 设置进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描 |
(3)扫描目标
参数 | 说明 |
---|---|
目标地址 | 可以为IP地址、CIRD地址等 |
-iL filename | 从filename文件中读取扫描的目标 |
-iR | 让Nmap自己随机挑选主机进行扫描 |
-p | 这个选项让你选择要进行扫描的端口号范围 |
-exclude | 排除指定主机 |
-excludefile | 排除指定文件中的主机 |
2、Nmap发现存活主机
利用Nmap工具对Kali Linux所在网段进行扫描,在Nmap后加上-sP 192.168.217.0/24 -T5(以速度5进行扫描),Host is up表示存活的主机:
go
nmap 192.168.217.0/24 -T5
3、Nmap扫描主机端口
利用Nmap主机对网段中存活的主机(192.168.217.143)进行端口扫描,在nmap后面加上-p 1-65535 -T5,可以看到目标主机开放了以下几个端口:
go
nmap 192.168.217.143 -p 1-65535 -T5
4、Nmap扫描主机服务版本
继续对目标主机192.168.217.143进行服务版本的扫描,输入nmap -sV 192.168.217.143
,可以看到主机是一个Windows系统,开放服务有以下几个,同时显示了对应的服务版本:
四、Nmap漏洞发现与渗透
1、知识准备
1.1 Nmap扫描中常见漏洞检测脚本
在Nmap扫描中可以利用漏洞脚本检测漏洞类型:
脚本名 | 描述 |
---|---|
ftp - anon.nse | 检查目标FTP是否允许匿名登录,自动检测目录是否可读写 |
ftp - brute.nse | FTP爆破脚本,默认只会尝试一些比较简单的弱口令 |
ftp - vuln - cve2010 -4221. nse | ProFTPD 1.3.3c之前的 netio.c 文件中的 pr_netio_telnet_gets 函数中存在多个栈溢出 |
ftp - proftpd - backdoor. nse | 检查 ProFTPD 服务是否被插入后门,如果被插入后门,会运行脚本弹出 shell 指令 |
ftp - vsftpd - backdoor. nse | 检查 VSFTPD服务是否被插人后门,如果被插人后门,会运行脚本弹出 shell 指令 |
sshvl.nse | 检查SSH 服务(版本1)是否存在被中间人攻击的漏洞 |
smtp - brute. nse | 简单爆破 SMTP 弱口令 |
smtp - enum - users. nse | 枚举目标 SMTP 服务器的邮用户名,前提是目在此错误配置 |
smtp - vuln - cve2010 -4344. nse | Exim 4.70之前的版本 string 文件中的 string_vformat 函数中存在堆溢出 |
smtp - vuln - cve2011 -1720. nse | osfix 2.5.13 之前的版本、2.6.10 之前的2.6. 版本、2.7. 之前的2.7.x 版本和 2.8.3 之前的 2.8 版本,存在溢出 |
smtp - vuln - cve2011 -1764. nse | 检查 Exim dkim_exim_verify_finsh()是否存在格式字符串漏洞,此漏洞现在不常见 |
pop3 - brute. nse | POP简单弱口令爆破 |
imap - brute. nse | IMAP简单弱口令爆破 |
dns - zone - transfer. nse | 检查目标 NS 服务器是否允许传送,如果允许,直接把子域拖出来即可 |
hostmap -ip2hosts.nse | 旁站查询,目测了一下脚本,用的是 p2hosts 接口,不过该接口似平早已停用,如果想继续用,可自行到脚本里把接口部分的代码改掉 |
informix - brute. nse | Informix爆破脚本 |
mysql - empty - password.nse | MySQL 扫描 root 空密码,比如想批量抓 MySQL |
mysql- brute.nse | MySOLroot 弱口简单爆破 |
mysql-dump -hashes.nse | 检查能否导出MySOL中所有用户的哈希值 |
mysql-vuln - cve2012 -2122.nse | MySOL身份认证漏洞 (MariaDB和MySOL 5.1.61,52115355.522),利用条件有些苛刻(需要目标的MySOL 是自己源码编译安装的,这样的成功率相对较高) |
ms - sql - empty - password.nse | 扫描MSSOL sa空密码,比如想批量抓MSSOL |
ms - sql - brute. nse | SA弱口令爆破 |
ms - sql - xp - cmdshell nse | 利用xp_cmdshell远程执行系统命令 |
ms - sql - dump - hashes. nse | 检查能否导出MSSOL中所有数据库用户的密码对应的哈希值 |
pgsql - brute. nse | 尝试爆破 Postgresql |
telnet - brute. nse | 简单爆破Telnet |
oracle - brute - stealth. nse | 尝试爆破Oracle |
http - iis - webday - vuln. nse | 检查否有IIS50和IS60的WebDAV可写漏洞 |
http - vuln - cve2015 - 1635nse | IIS60远程代码执行 |
smb - vuln - ms08 -067 nse smb - vuln -ms10-054.nse smb- vuln - ms10 - 061. nse smb - vuln - ms17 -010. nse | SMB远程执行 |
1.2 Metasploit介绍
Metasploit是一款开源安全漏洞的检测工具,可以帮助安全和IT专业人士识别安全性问题,验证服务漏洞,对系统和服务安全性进行评估,提供安全风险情报。这些功能包括智能开发,代码审计、Web应用扫描、社会工程。Metasploit适用于所有流行的操作系统,Kali Linux已经预装了Metasploit框架。
- auxiliary:辅助模块
- encoders:msfencode编码工具模块
- exploits:攻击模块
- nops:空模块
- payloads:攻击载荷模块
- post:后渗透阶段模块
2、Nmap扫描系统漏洞
首先我们依旧对192.168.217.143的扫描得知目标主机开放了445端口(smb服务),那么我们利用Nmap中著名的漏洞检测脚本smb - vuln -描述7 -010.nse对目标主机进行扫描,如图,目标主机445端口存在着严重的漏洞。
go
nmap -p445 --script smb-vuln-ms17-010.nse 192.168.217.143
3、Metasploit漏洞渗透
打开Kali Linux的Metasploit模块,查找MS17010漏洞模块,选择exploit目录下的ms17_010_enternalblue模块并查看设置参数,此时只有RHOST一个参数要配置,设置RHOST为目标主机地址192.168.217.143并进行攻击主机的命令shell: