## 如何開始寫一個exploit
exploit開發真正的功夫在背后.而實際不是你選擇的開發語言,
它是關于你對于正在調試的應用程序如何處理輸入以及如何通過操作來獲得控制權的正確理解
沒錯,關鍵字是“調試”。 你的binjitsu(逆向工程),真正的功夫在哪里。但是,如果你的目標不僅僅是彈出一個計算器,而是實際上想要武器化,維持和提供實際應用,
你需要一個開發框架。 Metasploit就是這樣開發的。這個框架是免費的,開源,由世界各地的研究人員積極貢獻。
所以當你編寫Metasploit漏洞的時候,你不必擔心任何依賴性問題,或者版本錯誤,或者沒有足夠的有效載荷供不同的滲透場景選擇,等等。你需要思考的就是專注于構建這個漏洞利用,而不是別的。
### 計劃你的模塊
與編寫概念證明不同,當您編寫Metasploit模塊時,您需要考慮用戶如何在現實世界中使用它。隱藏通常是一個重要的考慮因素。您的exploit可以在不丟棄文件的情況下執行代碼嗎?輸入能看起來更隨機,通過更多不同的檢測?如何混淆?它是否產生不必要的流量?它能更穩定而不會造成系統崩潰等等.
另外,請盡量準確地考慮可利用的需求。通常,一個bug是特定于一系列的版本.甚至是build.如果你不能自動檢查,你至少需要在描述中提到它.您的一些漏洞利用技術也可能是特定于應用程序的.
就像,您可以利用應用程序中的特定行為以您希望的方式生成堆分配,但是在較新版本中可能會更混亂,因此會給您帶來一些穩定性問題.
是否需要第三方組件才能工作,甚至可能不會被所有人安裝?即使是這樣,是否經常修改組件,可能會使您的漏洞不太可靠?
要知道,在現實世界中,你的利用可能會以很多不同的方式打斷或失敗.在開發和測試階段,你應該嘗試找出并修復它,在學習困難的方式之前.
### rank
正如你所看到的,可靠性對于Metasploit來說很重要,我們試圖對用戶更加友好。我知道你在想什么:“好吧,如果他們正在利用漏洞,他們應該明白它是如何運作的,所以他們知道自己正在陷入困境。” 在完美的世界里,是的。
了解漏洞的工作方式或者exploit的工作方式只會使用戶受益,但是你知道,我們并不是生活在完美的世界。如果您正在進行滲透測試,那么不可能總是找到時間重新創建易受攻擊的環境,分割exploit到最基本的形式來調試正在發生的事情,然后再進行測試。
你可能有一個緊張的日程安排,打入一個大型的網絡,所以你需要小心使用你的時間。正因為如此,至少對模塊有很好的描述和很好的參考。當然,可以信任的rank系統。
Metasploit框架有七個不同的rank來表明漏洞的可靠性。請參閱漏洞利用rank了解更多詳情。
### 模板
如果你已經讀了這么多,我們認為你是相當的印象深刻.因為要消化很多.你可能想知道為什么我沒有分享一行代碼?
呃,你記得,利用開發主要是關于你的逆向技能。如果你有這一切,我們不應該告訴你如何寫一個利用.
我們到目前為止所做的是希望你的心態正確,成為安全社區的Metasploit漏洞利用開發者意味著什么,剩下的更多的是如何使用我們的mixins構建exploit.
那么,有很多mixin,所以不可能在一個頁面中瀏覽所有的,所以你必須閱讀[API文檔](https://github.com/rapid7/metasploit-framework/wiki/How-to-Send-an-HTTP-Request-Using-HTTPClient),現有的代碼示例,或者尋找更多的wiki頁面,我們已經寫了特定的mixin。
例如,如果您正在尋找關于如何與HTTP服務器交互的文章,您可能會對以下內容感興趣:[如何使用HTTPClient發送HTTP請求](https://github.com/rapid7/metasploit-framework/wiki/How-to-Send-an-HTTP-Request-Using-HTTPClient)。如果您對瀏覽器漏洞利用感興趣,請務必查看:如何使用BrowserExploitServer編寫瀏覽器漏洞利用程序等
但是,當然,開始你很可能需要一個模板來處理,在這里。我們還將解釋如何填寫必填字段
~~~
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
def initialize(info={})
super(update_info(info,
'Name' => "[Vendor] [Software] [Root Cause] [Vulnerability type]",
'Description' => %q{
Say something that the user might need to know
},
'License' => MSF_LICENSE,
'Author' => [ 'Name' ],
'References' =>
[
[ 'URL', '' ]
],
'Platform' => 'win',
'Targets' =>
[
[ 'System or software version',
{
'Ret' => 0x41414141 # This will be available in `target.ret`
}
]
],
'Payload' => {
'BadChars' => "\x00"
},
'Privileged' => false,
'DisclosureDate' => "",
'DefaultTarget' => 0))
end
def check
# For the check command
end
def exploit
# Main function
end
end
~~~
Name字段應以供應商名稱開頭,后面跟著軟件。理想情況下,“Root Cause”字段意味著發現錯誤的組件或功能。最后,模塊正在利用的漏洞類型。
在Description字段應該解釋模塊做什么,什么事情要留意,具體要求,多多益善。目標是讓用戶了解他所使用的內容,而不需要實際讀取模塊的源代碼并找出結果。相信我,他們中的大多數人不會。
Author 字段是你的名字。格式應該是“名稱”。如果你想在那里有你的Twitter,留下它作為一個注釋,例如:“名稱#handle”
References字段是與漏洞或exploit相關的參考數組。例如:咨詢,博客文章等.確保您使用已知的引用標識符 - 請參閱[Metasploit模塊引用標識符](https://github.com/rapid7/metasploit-framework/wiki/Metasploit-module-reference-identifiers)以獲取列表。
該Platform字段表示所支持的平臺,例如:win, linux, osx, unix, bsd.
targets字段是一個你的exploit是針對的系統,應用,設置或者特殊設置的數組.第二個元素整個數組是你儲存目標的特殊元數據的位置.例如特定偏移量,小工具,ret地址等.當用戶選擇目標時,元數據將被加載并跟蹤“target index”,并可以通過該target方法進行檢索。
Payloads字段指定有效載荷應該如何被編碼和生成。您可以指定:Space,SaveRegisters,Prepend,PrependEncoder,BadChars,Append,AppendEncoder,MaxNops,MinNops,Encoder,Nop,EncoderType,EncoderOptions,ExtendedOptions,EncoderDontFallThrough。
DisclosureDate是當漏洞被公開披露時,格式:: "M D Y". 例子: "Apr 04 2014"
你的漏洞也應該有一個check方法來支持check命令,但是這是可選的,因為如果這是不可能的。
最后,這個exploit方法就像你的main方法。開始在那里寫你的代碼。
### 基本的git命令
Metasploit不再使用svn進行源代碼管理,而是使用git,所以了解git的一些技巧會有很長的路要走。
我們不是在這里教你git是多么的棒,我們知道它有一個學習曲線,新的用戶犯錯誤并不奇怪。
每隔一段時間,你的git”怒火"就會踢過來,我們理解。不過,重要的是要利用分支
。
每次創建模塊或對現有代碼進行一些更改時,都不應該在默認主分支上這樣做。為什么?因為當你使用msfupdate更新你的Metasploit倉庫的工具時,它會在合并這些改變之前做一個git reset,你就要和你所有的代碼說再見。
人們傾向于做的另一個錯誤是在提交拉取請求之前對主分支進行了任何更改.這是個壞主意,因為很可能你提交了你不打算改變的其他垃圾,或者你可能會要求我們合并其他不必要的提交歷史.只要一次提交就行了.感謝你提交模塊到社區,但不感謝你提交其他不必要的提交歷史.
所以作為一種習慣,當你想要做出新的東西或者改變某些東西的時候,從最新的主分支分叉一個新的分支開始,首先,先確認你是master分支,如果你使用`git status`,它將會告訴你現在所在分支
~~~
$ git status
# On branch upstream-master
nothing to commit, working directory clean
~~~
好的,接下來`git pull`從metasploit下載最新更改
~~~
$ git pull
Already up-to-date.
~~~
現在,你準備開始一個新分支了.在這種情況,我們新分支的名字是"my_awesome_branch":
~~~
$ git checkout -b my_awesome_module
Switched to a new branch 'my_awesome_module'
~~~
現在你可以繼續前進 添加一個模塊.確認他在合適的路徑
~~~
$ git add [module path]
~~~
當你決定保存更改時,提交(如果只有一個模塊,你也可以這樣做,git commit -a所以你不必輸入模塊路徑,注意-a事實上意味著所有)
~~~
$ git commit [module path]
~~~
完成后,推送您的更改,將您的代碼上傳到您的遠程分支“my_awesome_branch”。您必須推送您的更改才能提交拉取請求,或與互聯網上的其他人共享。
~~~
$ git push origin my_awesome_branch
~~~
- Home
- 開始使用
- 安裝metasploit開發環境
- 使用metasploit
- 使用git
- 報告一個bug
- 貢獻代碼
- 貢獻給metasploit
- 創建一個loginscans Metasploit模塊
- 接受模塊和增強功能的指導
- 常見的Metasploit模塊代碼錯誤
- 樣式提示
- metasploit提交者
- metasploit開發
- 為什么是ruby
- 樣式提示
- 如何開始寫一個exploit
- 如何開始寫一個輔助模塊
- 如何開始寫一個post模塊
- 如何開始寫一個Meterpreter腳本
- 載入外部模塊
- exploit rank
- Metasploit模塊引用標識符
- 怎么在你的exploit中確認window補丁程序級別
- 如何使用filedropper清理文件
- 如何棄用metasploit模塊
- 如何在模塊開發中報告或儲存數據
- 在metasploit如何使用日志
- 如何在metasploit對JavaScript進行混淆
- 如何解析一個http響應
- 如何使用HTTPClient發送HTTP請求
- 如何使用命令階段
- 如何使用數據儲存選項
- 如何在window后期開發中使用railgun
- 如何在exploit中使用powershell
- 如何使用PhpEXE來利用任意文件上傳漏洞
- 如何使用FILEFORMAT mixin創建一個文件格式exploit
- 如何使用BrowserExploitServer編寫一個瀏覽器exploit
- 如何使用HttpServer編寫瀏覽器exploit
- 如何編寫一個check()方法
- 如何使用Seh mixin來利用異常處理程序
- 如何在Windows上使用WbemExec進行寫入權限攻擊
- 如何使用httpserver和httpclient編寫一個模塊
- payloads如何工作
- 如何免殺
- 如何正確使用metasploit模塊