<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    使用 GoReplay 進行 HTTP 流量復制

    VSole2022-03-07 08:15:51

    GoReplay 是一款開源網絡監控工具,可以記錄您的實時流量,并將其用于shadowingload testingmonitoringdetailed analysis。捕獲實時HTTP流量并將其重放到測試環境中,以便使用真實數據持續測試您的系統。

    1一、安裝

    GoReplay 采用 Go 編寫,其只有一個單獨的可執行文件,在官方 Release[1] 頁下載后將其放到 PATH 目錄即可。

    wget https://github.com/buger/goreplay/releases/download/v1.2.0/gor_v1.2.0_x64.tar.gz
    tar -zxvf gor_v1.2.0_x64.tar.gz
    mv gor /usr/local/bin
    

    2二、基本使用

    GoReplay 命令行整體使用方式為指定輸入端和輸入端,然后 GoReplay 從輸入端將流量復制到輸出端。

    2.1、實時流量復制

    GoReplay 輸入端可以指定一個 tcp 地址,然后 GoReplay 將該端口流量復制到輸出端;下面樣例展示從 127.0.0.0:8000 復制流量并輸出到控制臺的樣例。

    首先啟動一個 HTTP Server,這里直接使用 python 的 HTTP Server

    接著再讓 gor 監聽同樣的端口,--output-stdout 指定輸出端為控制臺

    此時通過 curl 訪問 python 的 HTTP Server 可以看到 gor 將 HTTP 請求復制并輸出到了控制臺

    同樣如果我們通過 --output-http 選項將輸出端指定為另一個 HTTP Server,那么 gor 會將請求同步復制并發送到輸出端 HTTP Server。

    2.2、流量抓取與重放

    2.2.1、基本使用

    GoReplay 可以將輸出端指定為文件,從而將流量保存到文件中,然后 GoReplay 讀取該保存的流量文件并重放到指定的 HTTP Server 中。首先通過 --outpu-file 選項將請求保存到文件中

    使用 --input-file 選項讀取流量信息,然后通過 --output-http 選項重放到目標服務器

    2.2.2、擴展選項

    在將流量保存到文件時,默認情況下 GoReplay 以塊形式寫入文件,并且每個塊將生成一個獨立的文件名(test_0.gor),如果想要將所有塊的流量全部寫入一個文件中,可以設置 --output-file-append 為 true

    同時 GoReplay 輸出文件名支持日期占位符,例如 --output-file %Y%m%d.gor 會生成 20210801.gor 這種文件名;所有可用的日期占位符如下:

    • %Y: year including the century (at least 4 digits)
    • %m: month of the year (01..12)
    • %d: Day of the month (01..31)
    • %H: Hour of the day, 24-hour clock (00..23)
    • %M: Minute of the hour (00..59)
    • %S: Second of the minute (00..60)

    請求比較多時,將流量保存到文件可能會導致文件很大,這時候可以使用 .gz 結尾作為文件名,GoReplay 讀取到 .gz 后綴后會自動進行 GZip 壓縮處理。

    gor --input-raw :8000 --output-file test.gor.gz
    

    如果需要對多個文件進行聚合重放,只需要指定多個文件即可,重放過程中 GoReplay 會自動保持請求順序:

    gor --input-file *.gor --output-http http://127.0.0.1:8080
    

    在使用文件輸入時,GoReplay 還支持壓力測試,通過 test.gor|200% 這種方式指定的文件名,GoReplay 會以兩倍的速率進行請求重放:

    # Replay from file on 2x speed 
    gor --input-file "requests.gor|200%" --output-http "staging.com"
    

    2.3、數據丟失與緩沖區

    GoReplay 采用比較底層的數據包攔截技術,當一個 TCP 數據包到達時內核 GoReplay 會進行攔截;然而數據包可以亂序到達,接下來內核需要重建 TCP 流來保證上層應用能以正確的順序讀取 TCP 數據包,這時候內核就會有一個數據包的緩沖區;默認情況下 Linux 系統的緩沖區為 2M,Windiws 為 1M,當特定的 HTTP 請求數據包超過緩沖區時,GoReplay 就無法正確的攔截(因為 GoReplay 需要一個完整的 HTTP 請求數據包用于保存到文件或者重放),同時可能會導致請求丟失、請求損壞等問題。

    為了解決這種問題,GoReplay 提供了 --input-raw-buffer-size 選項用于調整緩沖區大小,例如 --input-raw-buffer-size 10485760 選項會將緩沖區調整為 10M。

    2.4、速率限制

    某些情況下可能為了方便調試,我們在生產環境抓取流量并鏡像到測試環境進行重放;但是可能由于生產環境流量比較大,我們并不需要如此大的請求速率,這時候可以通過速率限制讓 GoReplay 幫我們控制請求數量。

    絕對數量限制: 使用 --output-http "ADDRESS|N" 形式的參數時,GoReplay 會保證鏡像的流量請求每秒不會超過 “N” 個。

    # staging.server will not get more than ten requests per second
    gor --input-tcp :28020 --output-http "http://staging.com|10"
    

    百分比限制限制: 使用 --output-http "ADDRESS|N%" 形式的參數時,GoReplay 會保證鏡像的流量維持在總流量的 “N%”。

    2.5、請求過濾

    在某些時候我們只期望把生產環境的特定流量重放到測試環境,或者禁止一些流量重放到測試環境,這時候我們可以使用 GoReplay 的過濾功能;GoReplay 提供以下選項來提供過濾功能:

    • --http-allow-header: 允許重放的 HTTP 頭(支持正則)
    • --http-allow-method: 允許重放的 HTTP 方法
    • --http-allow-url: 允許重放的 URL(支持正則)
    • --http-disallow-header: 不允許的 HTTP 頭(支持正則)
    • --http-disallow-url: 不允許的 HTTP URL(支持正則)

    以下是官方給出的命令樣例:

    # only forward requests being sent to the /api endpoint
    gor --input-raw :8080 --output-http staging.com --http-allow-url /api
    # only forward requests NOT being sent to the /api... endpoint
    gor --input-raw :8080 --output-http staging.com --http-disallow-url /api
    # only forward requests with an api version of 1.0x
    gor --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1\.0\d
    # only forward requests NOT containing User-Agent header value "Replayed by Gor"
    gor --input-raw :8080 --output-http staging.com --http-disallow-header "User-Agent: Replayed by Gor"
    gor --input-raw :80 --output-http "http://staging.server" \
        --http-allow-method GET \
        --http-allow-method OPTIONS
    

    2.6、請求重寫

    有時候可能測試環境的 URL 路徑與生產環境完全不同,此時如果直接把生產環境的流量在測試環境重放可能會導致請求路徑錯誤等情況;為此 GoReplay 提供了 URL 重寫、參數設置、請求頭設置等功能。

    通過 --http-rewrite-url 選項進行 URL 重寫

    # Rewrites all `/v1/user//ping` requests to `/v2/user//ping`
    gor --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping
    

    設置 URL 參數

    gor --input-raw :8080 --output-http staging.com --http-set-param api_key=1
    

    設置請求頭

    gor --input-raw :80 --output-http "http://staging.server" \
        --http-header "User-Agent: Replayed by Gor" \
        --http-header "Enable-Feature-X: true"
    

    Host 頭是一個特殊的請求頭,默認情況下 GoReplay 會將其自動設置為目標重放地址的域名,如果想關閉這種默認行為請使用 --http-original-host 選項。

    3三、其他高級配置

    3.1、中繼服務器

    GoReplay 可以使用中繼服務器從而實現鏈式的流量傳遞,使用中繼服務器時只需要將輸出端設置為 TCP 模式,然后中繼服務器輸入端也設置為 TCP 模式即可:

    # Run on servers where you want to catch traffic. You can run it on each `web` machine.
    gor --input-raw :80 --output-tcp replay.local:28020
    # Replay server (replay.local).
    gor --input-tcp replay.local:28020 --output-http http://staging.com
    

    如果有多個中繼服務器,可以使用 --split-output 選項讓每個抓取流量的 GoReplay 使用輪詢算法向每個中繼服務器發送流量:

    gor --input-raw :80 --split-output --output-tcp replay1.local:28020 --output-tcp replay2.local:28020
    

    3.2、輸出到 ElasticSearch

    GoReplay 支持將輸出端設置為 ElasticSearch:

    ./gor --input-raw :8000 --output-http http://staging.com --output-http-elasticsearch localhost:9200/gor
    

    輸出到 ES 時不需要預先創建索引,GoReplay 會自動完成,輸出到 ES 后其數據結構如下:

    type ESRequestResponse struct {
     ReqURL               string `json:"Req_URL"`
     ReqMethod            string `json:"Req_Method"`
     ReqUserAgent         string `json:"Req_User-Agent"`
     ReqAcceptLanguage    string `json:"Req_Accept-Language,omitempty"`
     ReqAccept            string `json:"Req_Accept,omitempty"`
     ReqAcceptEncoding    string `json:"Req_Accept-Encoding,omitempty"`
     ReqIfModifiedSince   string `json:"Req_If-Modified-Since,omitempty"`
     ReqConnection        string `json:"Req_Connection,omitempty"`
     ReqCookies           string `json:"Req_Cookies,omitempty"`
     RespStatus           string `json:"Resp_Status"`
     RespStatusCode       string `json:"Resp_Status-Code"`
     RespProto            string `json:"Resp_Proto,omitempty"`
     RespContentLength    string `json:"Resp_Content-Length,omitempty"`
     RespContentType      string `json:"Resp_Content-Type,omitempty"`
     RespTransferEncoding string `json:"Resp_Transfer-Encoding,omitempty"`
     RespContentEncoding  string `json:"Resp_Content-Encoding,omitempty"`
     RespExpires          string `json:"Resp_Expires,omitempty"`
     RespCacheControl     string `json:"Resp_Cache-Control,omitempty"`
     RespVary             string `json:"Resp_Vary,omitempty"`
     RespSetCookie        string `json:"Resp_Set-Cookie,omitempty"`
     Rtt                  int64  `json:"RTT"`
     Timestamp            time.Time
    }
    

    3.3、Kafka 對接

    除了輸出到 ES 以外,GoReplay 還支持輸出到 Kafka 以及從 Kafka 中讀取數據:

    gor --input-raw :8080 --output-kafka-host '192.168.0.1:9092,192.168.0.2:9092' --output-kafka-topic 'kafka-log'
    gor --input-kafka-host '192.168.0.1:9092,192.168.0.2:9092' --input-kafka-topic 'kafka-log' --output-stdout
    
    流量string
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    冰蝎流量免殺初探
    2022-12-20 09:11:06
    本文僅針對冰蝎流量改造進行初步探討,熟悉一下整個流程,真的要繞流量設備,估計還需要其他的技巧。
    無意中看到ch1ng師傅的文章覺得很有趣,不得不感嘆師傅太厲害了,但我一看那長篇的函數總覺得會有更騷的東西,所幸還真的有,借此機會就發出來一探究竟,同時也不得不感慨下RFC文檔的妙處,當然本文針對的技術也僅僅只是在流量層面上waf的繞過。Pre很神奇對吧,當然這不是終點,接下來我們就來一探究竟。前置這里簡單說一下師傅的思路部署與處理上傳war的servlet是?
    感覺冰蝎流量魔改的文章比較少,我自己琢磨了一下,感覺簡單地做個流量魔改并不復雜,發出來供大家參考。我自己是個Java笨比,有問題的地方歡迎大佬們評論區指正共同學習。
    CTF之流量分析
    2021-10-08 06:29:38
    CTF雜項中存在一種題型——流量分析,主要是給你一個流量包,讓你分析獲取其中的flag的值。有5種方式,可以直接查找flag。因此flag是backdoor00Rm8ate案例三:簡單文件提取wireshark讀取pcap包,追蹤TCP流,將post請求,進行url及base64解碼,發現好像是菜刀客戶端流量,使用菜刀客戶端下載了x.tar.gz文件。
    我見過的流量分析類型的題目總結: 一,ping 報文信息? 二,上傳/下載文件 三,sql注入攻擊 四,訪問特定的加密解密網站 五,后臺掃描+弱密碼爆破+菜刀 六,usb流量分析 七,WiFi無線密碼破解 八,根據一組流量包了解黑客的具體行為例題:一,ping 報文信息?如果是菜刀下載文件的流量,需要刪除分組字節流前開頭和結尾的X@Y字符,否則下載的文件會出錯。
    burp0_data = {"name": username, "pw": password, "repw": password, "email": email, "submit": ''}
    0x01 前言最近在改寫 yso,覺得自己基礎太差了,想先閱讀一下 sqlmap、冰蝎以及一些其他工具的開發思路。0x03 冰蝎的使用與流量分析冰蝎的使用我們看冰蝎的客戶端界面,對于 shell 其實是沒有輸入密碼模塊的,其實在冰蝎當中 shell 是通過傳輸協議配置的。這一傳輸協議的加密函數是用 Java 寫的,并且 key 是默認的,不需要自己修改,我們點擊生成服務端,則會生成三個 shell 文件,分別為?這種加密方式的攻防性),代碼如下,此處代碼和 v3.0 的相當不一樣。
    GoReplay 是一款開源網絡監控工具,可以記錄您的實時流量,并將其用于shadowing、load testing、monitoring和detailed analysis。捕獲實時HTTP流量并將其重放到測試環境中,以便使用真實數據持續測試您的系統。
    MSF+生成流量免殺木馬
    2022-01-14 11:34:16
    在實戰中,即便你繞過了殺毒軟件的檢測,也很有可能會結束在某些流量監控的設備上。MSF可以說其是每一個內網玩家的必用工具。理所當然,這款工具也自然而然地被各大安全廠商分析,捕捉其在命令執行時產生的數據和流量。當我們使用一個沒有做過加密處理的原版工具時,內網中的安全設備會根據我們的流量特征進行判斷,認定我們為惡意進程,從而導致控制中斷。Meterpreter技巧生成后門msfvenom?
    0x00 介紹工具介紹RedGuard,是一款C2設施前置流量控制技術的衍生作品,有著更加輕量的設計、高效的流量交互、以及使用go語言開發具有的可靠兼容性。它所解決的核心問題也是在面對日益復雜的紅藍攻防演練行動中,給予攻擊隊更加優秀的C2基礎設施隱匿方案,賦予C2設施的交互流量流量控制功能,攔截那些“惡意”的分析流量,更好的完成整個攻擊任務。RedGuard是一個C2設施前置流量控制工具,可以避免Blue Team,AVS,EDR,Cyberspace Search Engine的檢查。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类