前言

结构

文件结构

external:扩展文件,比如zsh的命令行自动补全,里面有一个source文件夹

data:放一些exploits要用的二进制文件,字典,配置等等,一般是上传到目标主机上执行或者在本地的一些辅助文件,里面有一个meterpreter文件放的是留后门时用到的文件。

scripts:独立脚本,可以学习里面的套路,自动化脚本。

tools:开发辅助参考等等

plugins:和其他工具的联动接口,rpc等等

modules结构

auxiliary:可以理解打点的时候用的辅助模块,端口扫描,指纹识别,漏洞验证,登录密码爆破等等

encoders:编码混淆

exploits:漏洞利用,先按照操作系统分类,里面再是各种应用协议分类

payloads:一共有三个不同的payload:SinglesStagersStages

  1. Singles是独立的payload,就是一个单独个功能,比如添加一个用户,执行一条命令,生成出来就不依赖Metasploit这个框架了,可以理解为shellcode;
  2. Stagers是需要依赖到Metasploit框架和目标主机建立网络连接,但是依赖较少,功能也比较单一,比如弹回一个shell;
  3. Stages就是我们常用的Meterpreter(Meta-Interpreter的缩写)这个高级payload,功能强大,DLL反射

post:后渗透模块

Post Exploitation

打印信息

class.instance_variables.map{|v|v.to_s[1..-1]}
class.methods.map &:to_s
<https://rapid7.github.io/metasploit-framework/api/>
<https://www.rubydoc.info/github/rapid7/metasploit-framework>
pry调试

函数 描述
print_line 打印普通信息
print_good 向终端输出绿色信息,成功,好消息
print_error,print_bad 向终端输出红色信息,失败,坏消息
print_warning 向终端输出黄色信息,警告
print_status 向终端输出黄色信息,状态
print_blank_line 打印空行
print_line("---")
print_good("successful")
print_error("error")
print_warning("warning")
print_status("status")
print_blank_line

当前session信息

meterpreter > sysinfo
Computer        : WIN-A18RNMNL9C2
OS              : Windows 2008 R2 (6.1 Build 7601, Service Pack 1).
Architecture    : x64
System Language : zh_CN
Domain          : KALI-TEAM
Logged On Users : 2
Meterpreter     : x86/windows

函数 描述
session.platform 获取目标操作系统平台,返回windows或其他操作系统平台等等
session.type 获取session的类型。返回meterpreter或其他session类型等等
session.tunnel_to_s 隧道
session.arch 获取目标平台架构,x86或者x64,常量(ARCH_X64,ARCH_X86)
session.info 获取主机名和用户名
session.run_cmd 相当于在msf控制台敲命令
session.session_host 获取目标连接通信IP地址
session.session_port 获取目标连接通信端口
session.session_type 类型
session.payload_uuid payload的UUID,在调用API的时候要用到
session.exploit_uuid exploit的UUID,在调用API的时候要用到
session.uuid UUID,在调用API的时候要用到
session.lookup_error(5) Windows的错误常量
session.exploit_datastore exploit选项
print_good(session.platform.to_s)
print_good(session.type.to_s)
print_good(session.tunnel_to_s.to_s)
print_good(session.arch.to_s)
print_good(session.info.to_s)
print_good(session.session_host.to_s)
print_good(session.session_port.to_s)
print_good(session.session_type.to_s)
print_good(session.lookup_error(5).to_s)
print_good(session.exploit_datastore['payload'].to_s)

目标网络信息

函数 描述
interfaces 获取网卡信息
each_interface 枚举网卡
arp_table arp表对象
get_routes 获取路由信息
remove_route 移除路由
netstat netstat
each_route 枚举路由
add_route 添加路由
routes routes表
get_netstat get_netstat
get_proxy_config 获取代理配置
get_arp_table 获取ARP表
[#<Rex::Post::Meterpreter::Extensions::Stdapi::Net::Interface:0x0000562efff8bbd0 @index=10, @mac_addr="\\\\x00\\\\f)Rr\\\\xD0", @mac_name="Intel(R) PRO/1000 MT Network Connection", @mtu=1500, @flags=nil, @addrs=["fe80::4c6f:11ed:581f:c274", "192.168.76.132"], @netmasks=["ffff:ffff:ffff:ffff::", "255.255.255.0"], @scopes=["\\\\n\\\\x00\\\\x00\\\\x00"]>

[#<Rex::Post::Meterpreter::Extensions::Stdapi::Net::Arp:0x00007f3d38463030 @ip_addr="224.0.0.22", @mac_addr="00:00:00:00:00:00", @interface="1">

[#<Rex::Post::Meterpreter::Extensions::Stdapi::Net::Route:0x00007f3d385a0b28 @subnet="0.0.0.0", @netmask="0.0.0.0", @gateway="192.168.76.2", @interface="10", @metric=266>

[#<Rex::Post::Meterpreter::Extensions::Stdapi::Net::Netstat:0x0000562f00520168 @local_addr="::", @remote_addr="::", @local_port=54538, @remote_port=0, @protocol="udp6", @state="", @uid=0, @inode=0, @pid_name="1344/dns.exe", @local_addr_str=":::54538", @remote_addr_str=":::*">

print_good(session.net.config.interfaces[0].mac_name.to_s)
session.net.config.each_interface do |interface|
    print_good(interface.addrs.to_s)
end
print_good(session.net.config.arp_table[0].ip_addr.to_s)
print_good(session.net.config.get_routes[0].gateway.to_s)
print_good(session.net.config.netstat[0].pid_name.to_s)
print_good(session.net.config.get_proxy_config.to_s)
session.net.config.add_route(subnet, netmask, gateway)   # Add route

核心功能

模块名称 描述
session.core.use 加载扩展插件
session.core.migrate 迁移进程
session.core.load_library 加载DLL
session.core.machine_id 机器ID
session.core.get_loaded_extension_commands('stdapi') 获取已加载扩展命令
session.core.secure secure
session.core.transport_sleep 传输休眠
session.core.transport_add 添加传输
session.core.transport_change reverse_tcp, reverse_http, bind_tcp
session.core.set_transport_timeouts 设置传输超时
session.core.transport_remove 移除传输
session.core.transport_next 关闭当前传输,切换到下一个传输
session.core.transport_prev 关闭当前传输,切换到上一个传输
session.core.transport_list 列出传输
session.core.create_named_pipe_pivot 创建命名管道
session.core.use("extapi")

注册表模块

lib/msf/core/post/windows/registry.rb
Msf::Post::Windows::Registry

根键
HKEY_CLASSES_ROOT 用于存储一些文档类型,类,类的关联属性
HKEY_CURRENT_CONFIG 用户存储有关本地计算机系统的当前硬件配置文件信息
HKEY_CURRENT_USER 用于存储当前用户配置项
HKEY_PERFORMANCE_DATA 用于存储当前用户对计算机的配置项
HKEY_LOCAL_MACHINE 用于存储当前用户物理状态
HKEY_USERS 用于存储新用户的默认配置项
HKEY_DYN_DATA 一个特别的根键

键操作

模块名称 描述
registry_hive_lookup 通过缩写注册根键
registry_createkey 创建键
registry_deletekey 删除键
registry_enumkeys 枚举键
print_good("#{registry_createkey(hkey+'X')}")
print_good("#{registry_deletekey(hkey+'X')}")
print_good(registry_enumkeys('HKEY_CURRENT_USER\\\\\\\\Software').to_s)

值操作

模块名称 描述
registry_getvaldata 获取值数据
registry_deleteval 删除值
Powered by Kali-Team