您好,登錄后才能下訂單哦!
信很多人升級最新的msf后找不到自己曾經熟悉的msfpayload了(所以說喜歡收集shellcode是一件好事),沒錯我特么的也找不到了。其實可以use到自己要使用的payload,然后制作。但是也有人喜歡直接在終端里生產自己的shellcode。另外我想也找不到msfencode了,msfencode是shellcode的編碼器,準確的來講如果你自己編寫一個shellcode并不怎么需要一個編碼器,殺軟殺掉的概率不大,即使是msf生成的shellcode也很大概率不被殺掉(也許我沒用啥殺軟)所以以前我也覺得編碼器并不一定用得到。
我經常理論的思考問題,而不會實際的搞破壞,所以直到后來我才直到編碼器的重要,因為msf生成的shellcode經常是無法使用的!!需要編碼器進行處理,這個處理包括加殼,過濾壞字符,迭代編譯,甚至是控制字符串大小。當然編碼器也有其他的功能。
先說說payload和encode的關系,不然我想有些人會感到困惑,msf中payload模塊是用來制作shellcode,也即是大家理解的用來搞破壞的機器碼,對于沒有匯編基礎的人,幾乎很難寫出一個實用的shellcode,以前我也無奈,感覺被拒絕在安全大門之外了,好在有msfpayload,成全了一顆愛搗蛋的心。當然我也在一直學習著呢!我相信非常多的人甚至都不知道shellcode在棧中是怎么工作的,但是卻已經可以利用shellcode搞破壞了。我希望不要這樣。我不喜歡這種容易獲得又有巨大危險性的技術掌握在一個不能自控的人手里。比如前一陣子的Hacking team泄露事件中的flash0day,直接裝一個msf產生的shellcode就可以使用了,而根本不需要對漏洞原理或者shellcode原理懂太多。
有點說多了,encode 是編碼器,也是為payload設計的,因為殺軟會根據shellcode的特征進行殺毒,因此我們需要encode給payload加殼,這里的理論知識和軟件免殺原理相同,不過現在殺軟有沙箱功能了,在內存階段從行為判定進行查殺,所以有些shellcode 可能用編碼器怎么編碼也完蛋了,當然我胡亂吹的,因為我沒有嘗試過,有那時間我還不如去做飯。
總的來說msfvenom 結合了payload 和encode的功能。經過這兩個模塊生成的shellcode,要裝在的exp中來使用才行,就像彈頭安裝在×××上。下面說說具體的使用方式
中文翻譯大概是這樣(我從網上找的):
Options:
-p, --payload <payload> 指定需要使用的payload(***荷載)。如果需要使用自定義的payload,請使用'-'或者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> 設定規避字符集,比如: '\x00\xff'
-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支持的輸出格式列表
讓我先列一個和Linux有關的payload表
Ok,隨便找一個Linux下的payoad用吧,一個最簡單的 shellcode的生成至少需要2個選項 -p -f
這里我指定了上面截圖中顯示的payload模塊,可以看到有一些警告,因為沒有指定cpu架構也沒指定編碼器,至于這個shellcode能否用就拜托各位自己驗證了,我就為了講解方便,不過文章結束我會給一個簡單的裝載shellcode的裝載器,evil0x.com的其他文章有更多的裝載器,各位可以自行查看。還有部分人疑惑,我是怎么知道紅框里的選項的,不好意思其實我也不知道,我只是use進去然后show options 看了下= =!其實我鼓勵去看下源碼,ruby是一門很簡單的語言的。
下面來看一個win下面的shellcode生成案例,我想win下面才是大家更想要的吧,選擇了一個比較簡單而且經典的,就是執行exec命令的shellcode,這里我還是打開計算器
注意看我的紅框,這里描述了必要的選項,以及默認值
EXITFUNC指定進程完成的時候是退出線程還是進程或者其他選項,如果做注入的時候一定要指定線程,不然你的shellcode運行完就會退的。-o選項相比都容易理解,輸出到一個位置,畢竟是exe文件,終端輸出誰看得懂,在win下雙擊執行就是打開計算器了,不過被我的殺軟殺掉了,從隔離區恢復就可以驗證了。
那么怎么構造一個可以免殺的shellcode呢,當然需要編碼器了,我使用了一個異或算法的編碼器,-i迭代8次,結果就是呵呵沒過AV贏家360,也許是因為我編碼器沒用好,也許是360的內存查殺技術導致這個簡單的shellcode過不去。╮(╯▽╰)╭,怎么過呢,原理是是用殺軟沒見過的編碼器,如果殺軟支持內存查殺,恩就只能換shellcode了我用這個老shellcode過不了也正常。所以收集好的shellcode很重要,不過我一個沒有,歡迎分享給我。
-b選項是用來過濾“壞字符”的,不同的漏洞根據需要要過濾不同的壞字符,需要對匯編有足夠的理解才能說好這部分,目前我還無法以一個好的方式說出來,不過最長過濾的就是0x00,因為字符串遇到它就截斷了
這句命令不一定是有效的,我只是說明這個用法。如果我想知道哪些是不能用的壞字符呢,一般看高人的exp描述,或者自己的shellcode無法運行的時候使用OD去debug,看到底是哪里導致的,然后針對性修改設置選項。
-x應該是一個常用的命令,這個命令是用來做程序注入的,是不是叫寄生會好點,就是把你的shellcode程序寄生在另一個程序上,然后目標人打開另外一個程序即可執行shellcode
生成的文件沒能在WIN7下運行,XP下可以,說明目前免費版的msf有些功能win7不適用了,回頭OD看下為什么不能直接運行,不過使用方式就是如此,還可以加上-e進行編碼
給大家看下XP下的結果,當然win7我沒有注入成功不過可以OD看下為什么(就是需要不少時間),不知道收費版win7下能否成功注入,懷疑中。。。
-k 選項會將你的payload作為一個新的進程運行。但目前這個選項只支持老版本的windows系統比如windows xp。
-b 設定有效載荷的長度,這個要看EXP,如果沒有大小要求救不要設置
MSF圖形化工具是WEB工具,不知道新版是不是了,因為從來沒用過收費版。另外還有一個GUUI工具armitage,CobaltStrike是armitage 的收費版,armitage 是圖形化的msf使用工具,不過功能不全,收費版想來個人也不會購買,因此只能使用命令行了。
這里我想說的其實自動生成的shellcode很多時候并不能用,經常需要我們手動修改一些字符,最后請大家努力收集好的shellcode吧,并給我用吧卡卡。。。。
下面給大家一個簡單的shellcode裝載器,也就是說把shellcode放在里面就是可以使用的,網上隨便找了一個,evil0x.com有文章寫了幾個,有興趣可以查看
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。