## 如何使用HTTPClient發送HTTP請求
這是一個如何編寫一個使用HttpClient mixin發送基本HTTP請求的模塊的例子。
### 主要有兩種常見的方法:
* send_request_raw - 您使用此發送一個原始的HTTP請求。通常,如果你需要不常規的東西,你會需要這個方法。在大多數情況下,你應該更喜歡send_request_cgi。如果你想了解這個方法的工作原理,請查看Rex::Proto::Http::Client#request_raw的文檔。
* send_request_cgi - 您使用它來發送更多CGI兼容的HTTP請求。如果你的請求包含查詢字符串(或POST數據),那么你應該使用這個。如果你想了解這種方法如何工作,請查看 Rex::Proto::Http::Client#request_cgi
這是一個`send_request_cgi`非常基本的例子
~~~
send_request_cgi({
'method' => 'GET',
'uri' => '/hello_world.php',
'vars_get' => {
'param_1' => 'abc',
'param_2' => '123'
}
})
~~~
請注意:send_request_raw和send_request_cgi如果超時會返回一個nil,請在處理返回值的時候考慮這個情況
### URI解析
在發送HTTP請求之前,您很可能必須做一些URI解析。這是一個棘手的任務,因為有時當你加入路徑,你可能會不小心得到雙斜線,如:“/test//index.php”。或者由于某種原因,你又缺少一個斜線。這些確實是常犯的錯誤。所以這里是你如何安全地處理它
1 - 將您的默認URI數據存儲選項注冊為“TARGETURI”:
~~~
register_options(
[
OptString.new('TARGETURI', [true, 'The base path to XXX application', '/xxx_v1/'])
], self.class)
~~~
2- 加載你的TARGETURI target_uri,這樣的URI輸入將會被驗證,然后你得到一個真實的URI對象
在這個例子中,我們將只加載路徑:
~~~
uri = target_uri.path
~~~
3- 當您想要加入另一個URI時,請始終使用[`normalize_uri`](https://rapid7.github.io/metasploit-framework/api/Msf/Exploit/Remote/HttpClient.html#normalize_uri-instance_method):
例子
~~~
# Returns: "/xxx_v1/admin/upload.php"
uri = normalize_uri(uri, 'admin', 'upload.php')
~~~
4 - 當您完成URI的規范化后,即可使用send_request_cgi或send_request_raw
請注意:該normalize_uri方法將始終遵循這些規則:
該URI應該始終以斜線開頭。
你將不得不決定是否需要結尾的斜杠。
不應該有雙斜杠。
### 一個完整例子
~~~
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'HttpClient Example',
'Description' => %q{
Do a send_request_cgi()
},
'Author' => [ 'sinn3r' ],
'License' => MSF_LICENSE
))
register_options(
[
OptString.new('TARGETURI', [true, 'The base path', '/'])
], self.class)
end
def run
uri = target_uri.path
res = send_request_cgi({
'method' => 'GET',
'uri' => normalize_uri(uri, 'admin', 'index.phpp'),
'vars_get' => {
'p1' => "This is param 1",
'p2' => "This is param 2"
}
})
if res && res.code == 200
print_good("I got a 200, awesome")
else
print_error("No 200, feeling blue")
end
end
end
~~~
### 使用Burp套件
Burp Suite是一個有用的工具,用于在使用HttpClient開發模塊的同時檢查或修改HTTPS流量。嘗試這個:
1. 啟動burp `java -jar burpsuite.jar`
2. 在Burp中,單擊“proxy”選項卡,然后單擊“option”。在那里配置代理偵聽器。在這個例子中,假設我們在6666端口上有一個監聽器。
3. 一旦Burp偵聽器啟動,啟動msfconsole并加載您正在處理的模塊
4. 輸入: set Proxies HTTP:127.0.0.1:6666
5. 繼續運行模塊,Burp應攔截HTTPS流量
請注意,Burp僅支持HttpClient的HTTPS。這個問題只針對Burp和Metasploit。
如果您需要檢查HttpClient的HTTP通信,解決方法是在模塊中添加以下方法。這將覆蓋HttpClient的send_request_ *方法,并返回修改的輸出:
~~~
~~~
你也可以為send_request_raw做同樣的事情。
### 其他常見問題
1 -我可以一起使用vars_get和vars_post么
是。當你提供一個散列vars_get,基本上它意味著“把所有的數據在查詢字符串”.當你提供一個散列vars_post,意味著“把所有這些數據放在正文中”。他們都將發送相同的請求。當然,你確實需要確保你在使用send_request_cgi。
2 - 我由于一些奇怪的原因不能使用vars_get或vars_post,該怎么辦?
在代碼中提及這個問題(作為注釋)。如果你不能使用vars_post,你可以嘗試一下data鍵,它會發送你的原始數據。通常情況下,解決問題的最常見的解決方案vars_get是將您的東西留在uri關鍵位置。msftidy會標記這個,但只是作為“Info”而不是警告,這意味著你仍然應該通過msftidy。如果這是一個常見問題,我們可以隨時更改msftidy。
3 - 我需要手動進行基本身份驗證嗎?
您不需要在請求中手動執行基本身份驗證,因為HttpClient應該自動為您執行此操作。您只需在數據存儲區選項中設置用戶名和密碼,然后當Web服務器詢問時,mixin將使用該用戶名和密碼。
- 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模塊