伪造网络服务器的最佳方法是什么

信息安全 网络服务器 恶意软件
2021-09-10 18:42:19

我想知道是否有人对伪造 Web 服务响应而不是设置 Web 服务器的最佳方法有所了解。例如,在对恶意软件进行动态分析时,将 C&C​​ 流量重定向到您自己的可以以相同方式回复的虚假 Web 服务器是很有用的。

现在我一直在使用 python 库,然后手动回复 HTTP 响应,但这既耗时又笨拙。

编辑:不一定要寻找自动化工具,只是一种更快的方法。

4个回答

我一直喜欢netcat这种事情。在这种情况下,您可以使用 C&C 服务器创建真实响应的副本

nc candcserver.com 80

在命令行上提交您要传递的标题,按两次回车键,然后将其保存到文本文件中,然后提供您刚刚创建的文件使用

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

并将应用程序指向您的测试 127.0.0.1

可能有一些产品能够做到这一点,但我自己编写了类似的代理,我想为某些 uri 提供本地内容而不是远程内容。

这是我用python编写的代码的修改。它基于 twisted 库,因此您可能想从这里获取它

它将匹配 netloc 部分等于“security.stackexchange.com”的 URL,并将其替换为“www.xkcd.org”。

我希望你熟悉 python,所以你可以在这段代码中添加更多的功能。添加日志记录、动态重写 uri 等应该很容易。

此外,如果您想从恶意软件和 C&C 修改传输中的内容,请查看我对内容重写代理的贡献:https ://stackoverflow.com/questions/6491932/need-help-writing-a-扭曲代理/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()

我专门为此目的创建了这个工具(和 lib)——

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

它还处理 GET/POST/etc、标头、JSON 输入。无需编写代码,您只需指定要“匹配”的请求,然后将其绑定到响应。

我之所以成功,主要是因为我厌倦了编写一堆微型 Flask 服务器来处理各种测试场景。

现在我一直在使用 python 库,然后手动回复 HTTP 响应,但这既耗时又笨拙。

确切地。这里的想法是,给定特定的 HTTP 输入,您希望以特定的输出响应。该输出通常相对于输入是相当固定的。dumdum允许匹配到其他响应,因此您可以模拟实际运行的服务器。

考虑看看Meddler

Meddler 是一个 HTTP(S) 生成工具,它基于一个简单但功能强大的 JScript.NET 基于事件的脚本子系统。

这是来自优秀的 Fiddler 系列 HTTP 代理工具。