<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tools/515

                    0x00 背景


                    Zmap是美國密歇根大學研究者開發出一款工具。在第22屆USENIX安全研討會,以超過nmap 1300倍的掃描速度聲名鵲起。相比大名鼎鼎的nmap全網掃描速度是他最大的亮點。在千兆網卡狀態下,45分鐘內掃描全網絡IPv4地址。

                    安裝:

                    64位版本

                    Debian/Ubuntu 系列

                    Step1: sudo apt-get install libgmp3-dev libpcap-dev gengetopt
                    Step2: wget https://github.com/zmap/zmap/archive/v1.0.3.tar.gz
                    Step3: tar –zxvf v1.0.3.tar.gz
                    Step4: cd zmap-1.0.3/src
                    Step5: make && make install
                    

                    32版本 (zmap 主頁只說適用于64位linux,這里用BT5r3 32位同樣安裝成功,建議還是盡量選用64版本的)

                    Debian/Ubuntu 系列

                    Step1: sudo apt-get install libgmp3-dev libpcap-dev gengetopt
                    Step2: git clone git://github.com/zmap/zmap.git
                    Step3: tar –zxvf v1.0.2.tar.gz
                    Step4: cd zmap-1.0.2/src
                    Step5: make && make install
                    

                    Fedora, Red Hat Enterprise Linux, or CentOS版本:

                    只把step2替換成

                    sudo yum install gmp gmp-devel libpcap-devel gengetopt
                    

                    如果想使用 redis用來存儲則需要首先安裝 Hiredis,并在step5中

                    make REDIS=true   (加入此安裝選項)
                    

                    不是以root權限運行則需要配置:

                    setcap cap_net_raw=ep /usr/local/sbin/zmap
                    

                    0x01 使用介紹:


                    安裝完后,可直接調用zmap

                    1.最簡單的調用

                    zmap -B 10M -p 80 -n 100000 -o results.txt
                    

                    -B 是指的是帶寬 -p 端口 -n 掃描多少個目標 -o 輸出結果

                    整句表示利用10M帶寬掃描100000IP地址的端口,并將結果輸出到results.txt中。

                    我BT5 R3 測試時,必須加入-G 參數

                    zmap -B 10M -p 80 -n 100000 -G "01:00:5e:00:00:02" -o results.txt
                    

                    -G 是指定出口的mac地址,必須為網關的實際mac地址,否則返回數據找不到信息。

                    如果掃到IP地址開了80端口,就會按照下列格式進行保存。

                    115.237.116.119
                    23.9.117.80
                    207.118.204.141
                    217.120.143.111
                    

                    2.用的最多的指令

                    zmap -p 443 -G "00:00:00:00:00:00"
                    

                    檢測全網絡SSL/STL使用狀況,ZMAP幾個研究項目都與此有關。 ? enter image description here

                    可見我使用的掃描全網的所得大約9小時16分鐘,網絡為10MADSL帶寬,ADSL上行速度只有100k左右,導致時間加倍延遲。

                    3.常用參數

                    -p, --target-port=port
                    

                    指定掃描的目標端口

                    -o, --output-file=name  
                    

                    把結果寫入指定文件 -o result.txt

                    -b, --blacklist-file=path  
                    

                    IP地址黑名單,例如192.168.0.0/16 表示 192.168.x.x將不被掃描,默認提供一份?RFC 1918保留和內網地址供參考,存放位置在conf/blacklist.conf

                    zmap -p 443 -G "00:00:00:00:00:00" -b  conf/blacklist.conf
                    
                    
                    
                    
                    
                    -n, --max-targets=n
                    

                    最大掃描IP地址數量,-n 100 表示總歸掃描100個IP地址。也可指定 –n 0.1%形式,表示掃描除去黑名單列表里面全網段的0.1%數量的IP地址。

                    -N, --max-results=n
                    

                    最大掃描到結果的IP數量,-N 100 表示掃描到100個存在的結果就停止。

                    -t, --max-runtime=secs
                    

                    最大掃描時間,-t 10 表示程序運行10s結束。

                    -r, --rate=pps
                    

                    設置每秒發送包的數量 –r 10000 表示每秒發送10k個包。

                    -B, --bandwidth=bps
                    

                    設置每秒發送包的大小,-B 10M 表示每秒發送10Mbps 支持單位(GMK)。

                    -c, --cooldown-time=secs
                    

                    設置數據包發送完之后多長時間開始接受數據(response),默認8s,TCP連接異步接受。

                    -e, --seed=n
                    

                    設置掃描隨機地址的順序,C語言中的偽隨機種子,指定 定值每次隨機掃描的IP地址順序是一樣。

                    -T, --sender-threads=n
                    

                    設置掃描線程。默認是1,經測試單線程基本是把網絡帶寬充分利用。

                    -P, --probes=n
                    

                    設置往每個IP發送包的數量,默認為1。(DDOS的參數之一)。

                    -d, --dryrun
                    

                    打印出每個包的內容,非常實用的功能。

                    -s, --source-port=port|range
                    

                    設置掃描的源端口,可指定范圍 –s 30000-50000。(DDOS的參數之一)。

                    -S, --source-ip=ip|range
                    

                    設置掃描的源IP地址,可指定范圍-S 100.100.0.1-200.200.200.200(DDOS的參數之一)。

                    -G, --gateway-mac=addr
                    

                    設置網關的mac地址,可偽造。(DDOS的參數之一)

                    -M, --probe-module=name
                    

                    設置掃描模式,參數tcp_synscan(默認),icmp_echoscan(ping掃描),udp(測試速度要遜于前兩個),這里可自定義自己的模塊,ZMAP作者后續會增加例如自定義UDP payload 的選項。(`*udp_send_msg = "GET / HTTP/1.1

                    "; // Must be null-terminated`)源碼里不可直接更改 (1.0.3版本加入UDP Data Probes可進行自定義)

                    -O, --output-module=name
                    

                    設置結果輸出模塊,參數simple_file(默認),extended_file。

                    Simple_file 模式如下

                    115.237.116.119
                    23.9.117.80
                    207.118.204.141
                    217.120.143.111
                    

                    Extended File模式如下

                    response, saddr, daddr, sport, dport, seq, ack, in_cooldown, is_repeat, timestamp
                    synack, 159.174.153.144, 10.0.0.9, 80, 40555, 3050964427, 3515084203, 0, 0,2013-08-15 18:55:47.681
                    

                    掃描模塊和輸出模塊都提供了API ,可自己根據需要添加功能。

                    --quiet
                    

                    安靜狀態下運行,不把進度信息打印到屏幕上

                    --summary
                    

                    輸出結果匯總,對研究人員來說 非常有幫助。

                    0x02 三個額外的擴展應用


                    Banner Grab

                    抓取指紋,簡言之抓取response 為識別類似SSH,http 401之類的信息做準備。

                    這里?examples?/?banner-grab 目錄下

                    首先 make 生成banner-grab-tcp

                    向http-req 文件寫入要發送的數據 (也可以自定義SSH-req 之類)

                    如:

                    echo -e -n "GET / HTTP/1.1
                    Host: %s
                    
                    " > http-req
                    

                    (%s 保留,其他可任意構造HTTP請求,包括GET,POST)

                    這里擴展下 banner-grab-tcp下的參數

                    -c, --concurent   每次的連接數,最好低于1000,想要高于1000則必須設置ulimit -SSn 1000000` and `ulimit -SHn 1000000` 突破每個文件最大進程數1024
                    -p, --port      連接的端口
                    -t, --conn-timeout  連接超時時間
                    -r, --read-timeout  響應超時時間
                    -v, --verbosity     列取信息詳細程度 ,與sqlmap 類似
                    -f, --format        輸出文件格式hex,ascii,base64
                    -d, --data      發送的數據信息 就是前面設置http-req
                    

                    源碼里 #define MAX_BANNER_LEN 1024 接收的每條返回數據,只接收1024字節,根據需要可自行更改。

                    與zmap 聯合使用

                    例子

                    zmap -p 80 -N 1000 -o - | ./banner-grab-tcp -p 80 -c 100 -d http-req > http-banners.out
                    

                    zmap掃描1000個80端口開放的IP地址,banner-grab-tcp 來掃描這些IP地址,掃描請求內容通過http-req可自定義 .

                    forge-socket

                    與Banner Grab功能一樣,參數也類似,不再重復。

                    主要是安裝方式不同

                    要先安裝下列驅動

                    git clone [email protected]:ewust/forge_socket.git
                    cd forge_socket
                    make
                    sudo insmod forge_socket.ko(以底層驅動方式 比Banner Grab效率高一些)
                    

                    并且用iptables阻止發rst包

                    iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
                    

                    UDP Data Probes

                    1.03版本加入

                    詳細的測試payload見

                    https://github.com/zmap/zmap/tree/master/examples/udp-probes

                    以探測mssql的1434端口為例:

                    zmap -M udp -p 1434 --probe-args=file:examples/udp-probes/mssql_1434.pkt
                    

                    pkt也可自行構造。

                    格式化配置

                    利用配置文件 簡化命令行輸入

                    interface "eth1"
                    source-ip 1.1.1.4-1.1.1.8
                    gateway-mac b4:23:f9:28:fa:2d # upstream gateway
                    cooldown-time 300 # seconds
                    blacklist-file /etc/zmap/blacklist.conf
                    output-file ~/zmap-output
                    quiet
                    summary
                    

                    上述指令上面全部有介紹。

                    很顯然,可以通過配置文件更快速配置zmap.

                    使用方法:

                    zmap --config=~/.zmap.conf --target-port=443
                    

                    0x03 原理分析


                    Know it

                    首先講下TCP三次握手。

                    在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。

                    enter image description here

                    可見三次握手存在于發送-應答-發送機制,等待監聽的時間勢必導致發包速度很慢。

                    這里zmap是發送SYN,隨后發送RST(重置連接),不存在監聽同步操作,清空連接,再繼續發下一個數據包。 而對于識別 zmap把 Ip地址和端口做了類似hash表一樣的映射,當數據包返回時(可能是Syn+Ack,也可能RST),取出返回數據包里Ip和端口地址進行儲存的hash表里查詢,并對應處理記錄。 同步變異步高效的基本原因。

                    0x04 發散擴展


                    DDoS的可行性:

                    作者旨在關注全網的掃描,并未提及相關DDoS 的信息。

                    也并未特別提供指向型發包的指令。

                    下面討論可能與作者想法相違,希望各位重在技術鉆研,而非一些惡意破壞。

                    指定ip段 和ip地址

                    -w, --whitelist-file=path
                    

                    限制只掃描文件中的下列地址或者地址段,例如:

                    222.222.221.82/24   (192.168.1.0-255 )(可利用種子 –seed 調整從那個IP開始)
                    

                    單個Ip地址

                    222.222.221.82/32  (隨機找了一個,這里1.02版本測試不能直接,需要改 blacklist.c和constraint.c 中生成IP地址的二叉樹的root節點一小部分代碼)
                    

                    然后利用

                    -P  10000000 (重復多次發包)
                    -s  2000-60000 (設置一個大的端口段)
                    -S  20.20.20.0-200.200.200.200(隨機大量Ip地址,模擬分布式的D)
                    -G  這個偽造mac (但是收不到數據包)
                    
                    
                    
                    
                    
                    Zmap –p 80 -P 10000000 -s 2000-60000 -S 20.20.20.0-200.200.200.200 -w attack_url.txt
                    

                    見下列發送的數據效果,達到預期

                    enter image description here

                    可能造成什么樣的危害?

                    可以配置IP Spoofing,syn flood,land attack, ICMP floods, Application floods 和其他UDP 全零等多種攻擊。

                    Zmap 的發包速度甚至可以忽略一下 隨后發的這個rst 包。

                    也可以做得完美一點就是利用iptables

                    iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
                    

                    把發出去的RST包給drop掉。

                    可以再升一下?

                    畢竟有部分擴展能控制到應用層也是可以進行慢攻擊。

                    Get 類型

                    echo -e -n "GET / HTTP/1.1
                    Host: %s
                    
                    " > http-req  替換成
                    echo -e -n "GET / HTTP/1.1
                    Host: %s
                     " > http-req
                    

                    Post 類型

                    可以把源碼sizeof(value) 的值設置一個大的動態數值。 Post數據設置很小。

                    DDoS 流量 +連接數 +畸形包

                    流量基本只能硬防,拼硬件。

                    zmap幾乎是最大限度利用網絡帶寬,10臺G口服務器不會損耗多少,如果再利用DNS放大流量之類,很恐怖的數字。

                    Ps :

                    Zmap 某些方面和python 的scapy很像。

                    但zmap 純C實現,比scapy效率要高一些。

                    以前老是糾結scapy 隨后發送RST 問題,這里利用iptables 方式確實是個好方法。

                    參考其中的源碼和相對規范的API接口,編寫一些模塊可以玩出很多花樣。

                    LINK:

                    https://zmap.io/documentation.html

                    https://github.com/zmap/

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频