web-dev-qa-db-ja.com

Webサーバーを偽造する最良の方法は何ですか

Webサーバーをセットアップするのではなく、Webサービスの応答を偽造する最良の方法について誰かが洞察していたのではないかと思っていました。たとえば、マルウェアの動的分析を行っている間、C&Cトラフィックを同じ方法で応答できる独自の偽のWebサーバーにリダイレクトすると便利です。

現在、私はpythonライブラリを使用して、手動でHTTP応答で返信していますが、これは時間がかかり、手間がかかります。

編集:必ずしも自動化されたツールを探すのではなく、それを行うためのより速い方法です。

8
Lizbeth

この目的のためにこのツール(およびlib)を作成しました-

https://github.com/jar-o/dumdum

gET/POST/etc、ヘッダー、JSON入力も処理します。コードを記述する必要はありません。「照合」する要求を指定して、それを応答に結び付けるだけです。

主に、さまざまなテストシナリオを処理するための小さなFlaskサーバーを大量に作成することにうんざりしていたためです。

現在、私はpythonライブラリを使用して、手動でHTTP応答で返信していますが、これは時間がかかり、手間がかかります。

丁度。ここでの考え方は、特定のHTTP入力が与えられたときに、特定の出力で応答することです。その出力は通常、入力に対してかなり固定されています。 dumdumを使用すると、一致が他の応答にフォールスルーするため、実際に機能しているサーバーをシミュレートできます。

2
jar

私はいつもこのようなことについて netcat が好きです。この場合、次のコマンドを使用して、C&Cサーバーからの実際の応答のコピーを作成できます。

nc candcserver.com 80

コマンドラインで渡すヘッダーを送信し、Enterキーを2回押して、テキストファイルに保存し、作成したファイルを使用して提供します

while true; do Sudo nc -l 80 < capturedpage.txt; done

テストを127.0.0.1にポイントします

6
Mike1980

これを行うことができるいくつかの製品があるかもしれませんが、私はいくつかのuriのリモートではなくローカルコンテンツを提供したいと思ったところ、同様のプロキシを自分で作成しました。

これは、pythonで書かれた私のコードの修正です。ツイストライブラリに基づいているため、 ここ から取得することをお勧めします。

これは、netlocの部分が「security.stackexchange.com」に等しいURLに一致し、「www.xkcd.org」に置き換えます。

私はあなたがpythonに精通していることを願っていますので、このコードに機能を追加できます。ロギングの追加、URIの動的な書き換えなどは簡単です。

また、マルウェアとC&Cから転送中のコンテンツを変更したい場合は、コンテンツ書き換えプロキシへの私の貢献を見てください: https://stackoverflow.com/questions/6491932/need-help- writing-a-twisted-proxy/6521024#6521024

from twisted.web import proxy, http
from twisted.internet import reactor

from urlparse import urlparse, urlunparse
fakeweb_netloc = "www.xkcd.org"
cc_netloc = "security.stackexchange.com"

class ProxyRequest(proxy.ProxyRequest):
    def process(self):

        res = urlparse(self.uri)
        netloc = res.netloc
        print self.uri

        if netloc == cc_netloc:
           netloc = fakeweb_netloc
        self.uri = urlunparse((res.scheme, netloc, res.path, res.params, res.query, res.fragment))

        proxy.ProxyRequest.process(self)

class MyProxy(http.HTTPChannel):
    requestFactory = ProxyRequest

class ProxyFactory(http.HTTPFactory):
    protocol = MyProxy

if __name__ == "__main__":
    factory = ProxyFactory()
    reactor.listenTCP(8080,factory)
    reactor.run()
3

Meddler を見ることを検討してください:

Meddlerは、シンプルですが強力なJScript.NETイベントベースのスクリプトサブシステムをベースにしたHTTP(S)生成ツールです。

これは、HTTPプロキシツールの優れたFiddlerファミリーからのものです。

2
AviD

ronin-web (0.3.0.rc1)ライブラリの Ronin :: Web.proxy_server を使用して、HTTPリクエストをプロキシし、リクエスト/レスポンスをインターセプト/変更できます。

$ gem install ronin-web --pre
$ ronin-web
>> Web.proxy_server do
|    every_request do |request|
|      # inspect the request (http://ronin-Ruby.github.com/docs/ronin-web/Ronin/Web/Middleware/ProxyRequest.html)
|    end
end
[-] Starting Web Server on 0.0.0.0:8080
[2011-07-12 15:31:11] INFO  WEBrick 1.3.1
[2011-07-12 15:31:11] INFO  Ruby 1.9.2 (2011-02-18) [x86_64-linux]
[2011-07-12 15:31:11] INFO  WEBrick::HTTPServer#start: pid=15697 port=8080
1
postmodern