我想知道是否有人对伪造 Web 服务响应而不是设置 Web 服务器的最佳方法有所了解。例如,在对恶意软件进行动态分析时,将 C&C 流量重定向到您自己的可以以相同方式回复的虚假 Web 服务器是很有用的。
现在我一直在使用 python 库,然后手动回复 HTTP 响应,但这既耗时又笨拙。
编辑:不一定要寻找自动化工具,只是一种更快的方法。
我想知道是否有人对伪造 Web 服务响应而不是设置 Web 服务器的最佳方法有所了解。例如,在对恶意软件进行动态分析时,将 C&C 流量重定向到您自己的可以以相同方式回复的虚假 Web 服务器是很有用的。
现在我一直在使用 python 库,然后手动回复 HTTP 响应,但这既耗时又笨拙。
编辑:不一定要寻找自动化工具,只是一种更快的方法。
我一直喜欢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 代理工具。