渗透测试框架

CobaltStrike

安装:

服务端

apt install openjdk-11-jdk  # 先安装java环境
cd cobaltstrike4.3
chmod +x teamserver  # 赋予执行权限
./teamserver 192.168.31.211 cs123  # 192.168.31.21(服务端机器ip地址)  cs123(连接密码)

客户端:

java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar
# 或者双击运行 `cobaltstrike.exe`,填写服务端 ip 地址和连接密码,用户名随意

服务端开机自动运行 cobaltstrike

1)创建一个运行脚本:vim /usr/local/cobaltstrike4.3/teamserver.sh

#!/bin/bash
cd /usr/local/cobaltstrike4.3/
/usr/local/cobaltstrike4.3/teamserver 192.168.31.211 123456987
# 必须要到cobaltstrike目录中,运行teamserver,不然报错

2)创建一个 systemd 服务:vim /etc/systemd/system/cobaltstrike.service

[Unit]
# 服务描述
Description = cobaltstrike server

[Service]
Type = forking
# 启动 cobaltstrike 的命令
ExecStart = /bin/bash -c "/usr/local/cobaltstrike4.3/teamserver.sh &"

[Install]
WantedBy = multi-user.target

3)完成服务脚本编写后,需要执行以下命令重新加载所有的 systemd 服务,否则会找不到 service 服务。

sudo systemctl daemon-reload

MSF

安装 msf

参考官网: https://docs.metasploit.com/docs/using-metasploit/getting-started/nightly-installers.html

两种方法

# 1、直接下载官网发布的install文件,然后授予执行权限,直接执行即可。默认安装在/opt/metasploit-framework
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
chmod 755 msfinstall && \
./msfinstall

# 2、下载对应系统的 deb 包或 rpm 包
dpkg -i metasploit-framework_6.4.4+20240412151135~1rapid7-1_amd64.deb  # 默认安装在/opt/目录下

了解 msf

kali 自带的 msf 目录和手动安装的 msf 目录并不一样

一、目录结构(kali 自带的)

msf 主目录为/usr/share/metasploit-framework/,包含有命令、文件、文件夹

手动安装的在:/opt/metasploit-framework/embedded/framework

modules 中的文件为我们最常用的模块文件,其中每个模块中都根据不同的操作系统,分为不同平台不同协议功能对应的漏洞利用文件,这些文件用 ruby 编写

1. Auxiliaries (辅助模块)

该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。

2. Exploit (漏洞利用模块)

漏洞利用是指由渗透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、Web 应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种 POC 验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。

3. Payload (攻击载荷模块)

攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在 Metasploit 框架中可以自由地选择、传送和植入。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等。

4. Post (后期渗透模块)

该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等。

5. Encoders (编码工具模块)

该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、IDS 及类似的安全软件检测出来

管理MSF的数据库的命令

msfdb init     # start and initialize the database
msfdb reinit   # delete and reinitialize the database
msfdb delete   # delete database and stop using it
msfdb start    # start the database
msfdb stop     # stop the database
msfdb status   # check service status
msfdb run      # start the database and run msfconsole

sessions

-h, --help        # 帮助
-c, --command     # 在给定-i或all的会话上运行命令
-C, --meterpreter #在给定-i或全部的会话上运行meterpreter指令
-l, --list        # 列出所有活动会话
-d, --list-inactive # 列出所有非活动会话
-k, --kill<id>  # 按会话id终止会话
-K, --kill-all    # 终止所有会话
-i, --interact<id> # 与提供的会话id交互
-n, --name        # 按id命名,重命名会话
-v, --list-verbose # 以详细模式列出所有活动会话





# 重命名会话
sessions -i 1 -n webmin-2019

https://zhuanlan.zhihu.com/p/38522755


Pocsuite

官方文档: https://pocsuite.org/guide/what-is-pocsuite3.html

安装

命令行参数:官方文档

-r:指定一个或多个 PoC 路径(或目录),如果提供的是目录,框架将遍历目录然后加载所有符合条件的 PoC。多个路径或目录之间用空格分隔。

-u:加载单个 URL 或 CIDR,支持 IPv 4 / IPv 6。

--verify:验证模式,执行 PoC 脚本的 _verify() 方法,进行漏洞验证。默认模式

--attack:攻击模式,执行 PoC 脚本的 _attack() 方法,具体表现取决于方法的实现。

api 详解

常用属性:
self.url  # 目标 _url_
self.scheme  # 目标 _url_ 的协议
self.rhost  # 目标 _url_ 的主机名
self.rport  # 目标 _url_ 的端口
self.host_ip  # 本机的 _wan_ 口 _ip_

常用方法:
self._check()
self.get_option('key')  # 获取自定义命令行参数的值
self.parse_output({})  # 返回结果的方法,参数是一个字典,建议统一使用该方法返回结果

关于返回结果

def _verify(self):  
    result = {}  
    param = 'param'  
    # res = self._exploit(param)  
    res = requests.get(self.url)  
    if res:  
        result['VerifyInfo'] = {}  
        result['VerifyInfo']['我是VerifyInfo'] = '我是VerifyInfo'  
        result['VerifyInfo']['URL'] = self.url  
        result['VerifyInfo'][param] = res  
    return self.parse_output(result)

自定义 poc 的命令行参数

参考: https://pocsuite.org/guide/poc-definition-options.html

def _options(self):  
    o = OrderedDict()  
    o['cmd'] = OptString('cmd默认值', description='参数的描述信息')  
    # 除了OptString以外,还有其它的数据类型,查阅文档学习
    return o  
  
def _verify(self):  
    result = {}  
    param = 'param'  
    res = requests.get(self.url)  
    # self.get_option() 方法可以获取自定义的命令行参数  
    param1 = self.get_option('cmd')  
    if res:  
        result['VerifyInfo'] = {}  
        result['VerifyInfo']['我是VerifyInfo'] = '我是VerifyInfo'  
        result['VerifyInfo']['URL'] = self.url  
        result['VerifyInfo'][param] = res  
        result['VerifyInfo']['cmd参数'] = param1  
    return self.parse_output(result)

不指定 --cmd 参数的话,使用默认值

使用 --cmd 参数

使用 --options 参数查看自定义的命令行参数