Quali sono i modi migliori per falsificare un server web

8

Mi chiedevo se qualcuno avesse qualche idea del modo migliore per simulare una risposta al servizio web piuttosto che configurare un server web. Ad esempio, mentre esegui analisi dinamiche del malware, è utile reindirizzare il traffico C & C sul tuo server web falso che può rispondere allo stesso modo.

In questo momento ho usato una libreria python e poi ho risposto manualmente con le risposte HTTP, ma questo è dispendioso in termini di tempo e kludgy.

EDIT: non necessariamente alla ricerca di uno strumento automatico, ma solo di un modo più rapido per farlo.

    
posta Lizbeth 10.07.2011 - 01:31
fonte

6 risposte

2

Ho creato questo strumento (e lib) appositamente per questo scopo -

link

gestisce GET / POST / etc, intestazioni, input JSON. Non c'è bisogno di scrivere codice, basta specificare quale richiesta "abbinare" e quindi legarla a una risposta.

L'ho fatto principalmente perché ero stufo di scrivere un sacco di minuscoli server Flask per gestire vari scenari di test.

Right now I've been using a python library and then manually replying with the HTTP responses but this is time consuming and kludgy.

Esattamente. L'idea qui è che, dato un certo input HTTP, vuoi rispondere con un certo output. Quell'uscita generalmente è abbastanza fissa in relazione all'input. dumdum consente alle corrispondenze di passare ad altre risposte, in modo da poter simulare un server funzionante.

    
risposta data 22.05.2017 - 17:36
fonte
4

Mi piace sempre netcat per questo genere di cose. In questo caso è possibile creare una copia della risposta reale dal server C & C mediante

nc candcserver.com 80

invia le intestazioni che vuoi passare sulla riga di comando, premi invio due volte e salvalo in un file di testo, quindi servi il file appena creato utilizzando

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

e indica all'app il test a 127.0.0.1

    
risposta data 10.07.2011 - 13:02
fonte
3

Potrebbero esserci alcuni prodotti che sono in grado di farlo, ma io stesso ho scritto un proxy simile dove volevo servire contenuti locali piuttosto che remoti per alcuni uri.

Ecco una modifica del mio codice scritto in python. Si basa sulla libreria ritorta, quindi potresti volerlo scaricare da qui .

Corrisponde agli URL con la parte netloc uguale a "security.stackexchange.com" e la sostituisce con "www.xkcd.org".

Spero che tu abbia familiarità con Python, quindi puoi aggiungere più funzionalità in questo codice. Dovrebbe essere facile aggiungere logging, riscrivere dinamicamente uri e così via.

Inoltre, se vuoi modificare il contenuto in transito dal malware e dal C & C, dai un'occhiata al mio contributo per un proxy di riscrittura dei contenuti: link

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()
    
risposta data 10.07.2011 - 12:59
fonte
2

Considera di guardare Meddler :

Meddler is a HTTP(S) Generation tool based around a simple but powerful JScript.NET event-based scripting subsystem.

Questo deriva dall'eccellente famiglia Fiddler di strumenti proxy HTTP.

    
risposta data 10.07.2011 - 09:37
fonte
1

Puoi inoltrare richieste HTTP e intercettare / modificare richieste / risposte usando Ronin :: Web.proxy_server dal ronin-web (0.3. 0.rc1) library.

$ 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
    
risposta data 13.07.2011 - 01:12
fonte
-1

Qui un semplice server web che stampa tutto ciò che è stato inviato nella richiesta POST / GET e restituisce una risposta HTML valida

#!/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))
    
risposta data 12.02.2018 - 13:29
fonte

Leggi altre domande sui tag