¿Cuáles son las mejores maneras de falsificar un servidor web?

8

Me preguntaba si alguien tenía alguna idea de la mejor manera de simular una respuesta de servicio web en lugar de configurar un servidor web. Por ejemplo, al hacer un análisis dinámico de malware, es útil redirigir el tráfico de C & C a su propio servidor web falso que puede responder de la misma manera.

Ahora mismo he estado usando una biblioteca de Python y luego respondí manualmente con las respuestas de HTTP, pero esto requiere mucho tiempo y es poco profesional.

EDITAR: no necesariamente buscando una herramienta automatizada, solo una forma más rápida de hacerlo.

    
pregunta Lizbeth 10.07.2011 - 01:31
fuente

6 respuestas

2

Creé esta herramienta (y lib) específicamente para este propósito -

enlace

maneja GET / POST / etc, encabezados, entrada JSON también. No es necesario escribir el código, simplemente especifique qué solicitud se debe "coincidir" y luego vincule eso con una respuesta.

Lo hice principalmente porque estaba cansado de escribir un montón de pequeños servidores Flask para manejar varios escenarios de prueba.

  

En este momento, he estado usando una biblioteca de Python y luego respondí manualmente con las respuestas HTTP, pero esto requiere mucho tiempo y es poco profesional.

Exactamente. La idea aquí es que, dada una determinada entrada HTTP, desea responder con una salida determinada. Esa salida generalmente es bastante fija en relación con la entrada. dumdum permite que las coincidencias caigan en otras respuestas, por lo que puede simular un servidor en funcionamiento real.

    
respondido por el jar 22.05.2017 - 17:36
fuente
4

Siempre me gusta netcat para este tipo de cosas. En este caso, puede crear una copia de la respuesta real del servidor C & C usando

nc candcserver.com 80

envíe los encabezados que desea pasar a la línea de comando, presione la tecla Intro dos veces, guárdelo en un archivo de texto y luego sirva el archivo que acaba de crear con

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

y apunte la aplicación a sus pruebas al 127.0.0.1

    
respondido por el Mike1980 10.07.2011 - 13:02
fuente
3

Puede que haya algunos productos que puedan hacer esto, pero yo mismo escribí un proxy similar en el que quería servir contenidos locales en lugar de remotos para algunos uri's.

Aquí hay una modificación de mi código escrito en python. Se basa en la biblioteca retorcida, por lo que puede obtenerla desde aquí .

Coincidirá con las URL con la parte de netloc igual a "security.stackexchange.com" y lo reemplazará con "www.xkcd.org".

Espero que estés familiarizado con python, para que puedas agregar más funcionalidad en este código. Debería ser fácil agregar el registro, reescribir dinámicamente los de uri y demás.

Además, si desea modificar el contenido en tránsito del malware y la C & C, consulte mi contribución para un proxy de reescritura de contenido: enlace

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()
    
respondido por el Dog eat cat world 10.07.2011 - 12:59
fuente
2

Considere mirar Meddler :

  

Meddler es una herramienta de generación de HTTP (S) basada en un simple pero potente subsistema de scripts basado en eventos JScript.NET.

Esto es de la excelente familia Fiddler de herramientas de proxy HTTP.

    
respondido por el AviD 10.07.2011 - 09:37
fuente
1

Puede enviar solicitudes HTTP e interceptar / modificar solicitudes / respuestas utilizando Ronin :: Web.proxy_server de ronin-web (0.3. 0.rc1) biblioteca.

$ 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
    
respondido por el postmodern 13.07.2011 - 01:12
fuente
-1

Aquí, un servidor web simple que imprime todo lo que se envió en la solicitud POST / GET, y devuelve una respuesta HTML válida

#!/usr/bin/python3

import socket
from http.server import BaseHTTPRequestHandler, HTTPServer
import time

hostName = ""
hostPort = 80

class MyServer(BaseHTTPRequestHandler):

        # GET 
        def do_GET(self):
                self.send_response(200)
                self.wfile.write("".encode("utf-8")) #send back to client

        # POST 
        def do_POST(self):
                content_length = int(self.headers['Content-Length']) 
                post_data = self.rfile.read(content_length) 
                self.send_response(200)
                print(post_data)
                self.wfile.write("".encode("utf-8")) #send back to client



myServer = HTTPServer((hostName, hostPort), MyServer)
print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))

try:
        myServer.serve_forever()
except KeyboardInterrupt:
        pass

myServer.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))
    
respondido por el Alex 12.02.2018 - 13:29
fuente

Lea otras preguntas en las etiquetas