示例#1
0
	def testHang(self):
		path = os.path.join(modulePath(),'testtasks','Hang.py')
		runner = TaskRunner()
		runner.start()

		out_q = runner.taskStart([path,"Foo"])
		time.sleep(0.1)
		self.assertTrue(runner.taskAlive())
		runner.taskStop()
		self.assertFalse(runner.taskAlive())
		runner.quit()
示例#2
0
	def testStress(self):
		path = os.path.join(modulePath(),'testtasks','Hang.py')
		runners = []
		for i in range(100):
			runner = TaskRunner()
			runner.start()
			runner.taskStart([path,"Foo"])
			runners.append(runner)

		for i in range(100):
			runners[i].quit()

		for i in range(100):
			self.assertFalse(runners[i].taskAlive())
示例#3
0
	def testBroken(self):
		path = os.path.join(modulePath(),'testtasks','Broken.py')
		runner = TaskRunner()
		runner.start()
		out_q = runner.taskStart([path,"Foo"])
		time.sleep(0.2)
		self.assertEquals(len(out_q.get()),34)
		self.assertFalse(runner.taskAlive())
		runner.quit()	
示例#4
0
	def testBasic(self):
		path = os.path.join(modulePath(),'testtasks','Succesful.py')
		runner = TaskRunner()
		runner.start()

		out_q = runner.taskStart([path,"Foo"])
		txt = out_q.get(True,1)
		self.assertEquals(txt,"FLAG: foobarbaz")
		self.assertEquals(len(out_q.get(True,1)),0)

		self.assertFalse(runner.taskAlive())
		self.assertEquals(0,runner.taskRetcode())
		runner.quit()
示例#5
0
	def testOverloadQue(self):
		path = os.path.join(modulePath(),'testtasks','FlagZ.py')
		runner = TaskRunner()
		runner.start()
		out_q = runner.taskStart([path,"Foo"])
		time.sleep(1)
		runner.quit()

		self.assertFalse(runner.taskAlive())
		self.assert_(out_q.qsize() > 1000)
示例#6
0
	def __init__(self,script,team,logger=None):
		self.logger = logger

		if(self.logger != None):
			self.logger.debug("Creating Service Task: %r %r" % (team.host,script))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()

		self.script = script
		self.team = team
		self.cookie_txt = None
		self.error_txt = None

		self.prev_flag = None
		self.current_flag = None
		self.expected_flag = None

		self.line_q = None
		threading.stack_size(thread_size)
示例#7
0
    def __init__(self, script, ip, timeout, logger):
        self.logger = logger

        if (self.logger != None):
            self.logger.debug("Creating Attack Task: %r %r %d" %
                              (script, ip, timeout))

        thread_size = threading.stack_size(524288)
        self.runner = TaskRunner()
        self.runner.start()

        self.script = script
        self.line_q = None
        self.ip = ip
        self.cookie = None
        self.captured_flags = []

        self.timeout = timeout
        self.timeout_set = False
        self.timer = AttackTimer(self.runner, timeout)
        self.timer.start()
        threading.stack_size(thread_size)
示例#8
0
	def testLinesThenHang(self):
		path = os.path.join(modulePath(),'testtasks','Hang2.py')
		runner = TaskRunner()
		runner.start()
		out_q = runner.taskStart([path,"Foo"])

		line1 = out_q.get()
		line2 = out_q.get()

		self.assertEquals("A"*1024,line1)
		self.assertEquals("B"*1024,line2)

		self.assertTrue(runner.taskAlive())
		runner.quit()
		self.assertFalse(runner.taskAlive())
示例#9
0
	def __init__(self,script,team,logger):
		self.logger = logger

		if(self.logger != None):
			
			self.logger.debug("Creating UsenixExploitTask: %r %r" % (script,team.host))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()
		
		self.script = script
		self.line_q = None
		self.team = team
		self.cookie = None
		self.exploit_success = False
		self.captured_flags = []

		threading.stack_size(thread_size)
示例#10
0
    def testStress(self):
        path = os.path.join(modulePath(), 'testtasks', 'Hang.py')
        runners = []
        for i in range(100):
            runner = TaskRunner()
            runner.start()
            runner.taskStart([path, "Foo"])
            runners.append(runner)

        for i in range(100):
            runners[i].quit()

        for i in range(100):
            self.assertFalse(runners[i].taskAlive())
示例#11
0
	def __init__(self,script,ip,timeout,logger):
		self.logger = logger

		if(self.logger != None):
			self.logger.debug("Creating Attack Task: %r %r %d" % (script,ip,timeout))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()
		
		self.script = script
		self.line_q = None
		self.ip = ip
		self.cookie = None
		self.captured_flags = []

		self.timeout = timeout
		self.timeout_set = False
		self.timer = AttackTimer(self.runner,timeout)
		self.timer.start()
		threading.stack_size(thread_size)
示例#12
0
class AttackTask():
	
	def __init__(self,script,ip,timeout,logger):
		self.logger = logger

		if(self.logger != None):
			self.logger.debug("Creating Attack Task: %r %r %d" % (script,ip,timeout))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()
		
		self.script = script
		self.line_q = None
		self.ip = ip
		self.cookie = None
		self.captured_flags = []

		self.timeout = timeout
		self.timeout_set = False
		self.timer = AttackTimer(self.runner,timeout)
		self.timer.start()
		threading.stack_size(thread_size)

	def launch(self,overwrite_key=None):
		cmd = [self.script,self.ip]

		if(overwrite_key != None):
			cmd.append(overwrite_key)

		if(self.cookie != None):
			cmd.append(self.cookie)

		self.line_q = self.runner.taskStart(cmd)
		self.timeout_set = False
		self.timer.setTimeout(self.timeout)

	def isAlive(self):
		return self.runner.taskAlive()

	def stop(self):
		self.runner.taskStop()

	def quit(self):
		self.timer.running = False
		self.runner.quit()

	def processOutput(self):
		assert(self.line_q != None)
		count = self.line_q.qsize()

		for i in xrange(count):
			line = self.line_q.get(False)
			assert(line != None)

			if(line == ""):
				continue

			if(self.logger != None):
				self.logger.debug("(%s) %r" % (self.ip,line))

			if(line.startswith("FLAG:")):
				self.captured_flags.append(line[5:].strip())
				if(self.timeout_set == False):
					self.timer.setTimeout(self.timeout)

			if(line.startswith("COOKIE:")):
				self.cookie = line[7:].strip()
				if(self.timeout_set == False):
					self.timer.setTimeout(self.timeout)

			if(line.startswith("TIMEOUT:")):
				value = line[8:].strip()
				if(value.upper() == "INFINITE"):
					self.timer.setInfinite()
				else:
					value = int(value)
					if(value == 0):
						self.timeout_set = False
						self.timer.setTimeout(self.timeout)

					else:
						self.timer.setTimeout(value)
						self.timeout_set = True

			line = None 

	def collectFlags(self):
		flags = self.captured_flags
		self.captured_flags = []
		return flags
示例#13
0
class ServiceTask():

	def __init__(self,script,team,logger=None):
		self.logger = logger

		if(self.logger != None):
			self.logger.debug("Creating Service Task: %r %r" % (team.host,script))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()

		self.script = script
		self.team = team
		self.cookie_txt = None
		self.error_txt = None

		self.prev_flag = None
		self.current_flag = None
		self.expected_flag = None

		self.line_q = None
		threading.stack_size(thread_size)

	def launch(self,flag):
		cmd = [self.script,self.team.host,flag]

		if(self.cookie_txt != None):
			cmd.append(self.cookie_txt)

		self.expected_flag = self.current_flag
		self.current_flag = flag

		self.prev_flag = None
		self.error_txt = None
		
		if(self.logger != None):
			self.logger.debug("Service Task starting for %r (%r)" % (self.team.host,flag))

		self.line_q = self.runner.taskStart(cmd)

	def isAlive(self):
		return self.runner.taskAlive()

	def finish(self):
		self.runner.taskStop()
		if(self.logger != None):
			self.logger.debug("Service Task finished for %r" % (self.team.host))

	def prevFlag(self):
		return self.prev_flag

	def retcode(self):
		return self.runner.taskRetcode()

	def gotExpectedFlag(self):
		if(self.prev_flag == None or self.expected_flag == None):
			return False
		return self.prev_flag == self.expected_flag

	def cookie(self):
		return self.cookie_txt

	def error(self):
		return self.error_txt

	def quit(self):
		self.runner.quit()

	def processOutput(self):
		assert(self.line_q != None)

		for i in xrange(self.line_q.qsize()):
			line = self.line_q.get(False)

			assert(line != None)

			if(line == ""):
				continue

			if(self.logger != None):
				self.logger.debug("(%s) %r" % (self.team.host,line.strip()))

			if(line.startswith("FLAG:")):
				self.prev_flag = line[5:].strip()

			elif(line.startswith("ERROR:")):
				self.error_txt = line[6:].strip()

			elif(line.startswith("COOKIE:")):
				self.cookie_txt = line[7:].strip()
示例#14
0
class UsenixExploitTask():
    def __init__(self, script, team, logger):
        self.logger = logger

        if (self.logger != None):

            self.logger.debug("Creating UsenixExploitTask: %r %r" %
                              (script, team.host))

        thread_size = threading.stack_size(524288)
        self.runner = TaskRunner()
        self.runner.start()

        self.script = script
        self.line_q = None
        self.team = team
        self.cookie = None
        self.exploit_success = False
        self.captured_flags = []

        threading.stack_size(thread_size)

    def launch(self):

        cmd = [self.script, self.team.host]
        if (self.cookie != None):
            cmd.append(self.cookie)

        if (self.logger != None):
            script_name = os.path.basename(self.script)
            ip = self.team.host
            cookie = self.cookie
            self.logger.debug(
                "Starting UsenixExploitTask: script=%r ip=%r cookie=%r" %
                (script_name, ip, cookie))

        self.line_q = self.runner.taskStart(cmd)

    def isAlive(self):
        return self.runner.taskAlive()

    def stop(self):
        if (self.logger != None):
            self.logger.debug("Stopping UsenixExploitTask: %r %r" %
                              (self.script, self.team.host))
        self.runner.taskStop()

    def quit(self):
        self.runner.quit()

    def processOutput(self):
        assert (self.line_q != None)
        count = self.line_q.qsize()

        for i in xrange(count):
            line = self.line_q.get(False)
            assert (line != None)

            if (line == ""):
                continue

            if (self.logger != None):
                self.logger.info("(%s) %r" % (self.team.host, line))

            if (line.startswith("FLAG:")):
                self.captured_flags.append(line[5:].strip())

            if (line.startswith("COOKIE:")):
                self.cookie = line[7:].strip()

            if (line.startswith("EXPLOIT:")):
                success_txt = line[8:].strip().upper()
                if (success_txt == "SUCCESS"):
                    self.exploit_success = True

            line = None

    def collectFlags(self):
        flags = self.captured_flags
        self.captured_flags = []
        return flags

    def clearExploitSuccess(self):
        self.exploit_success = False

    def exploitSuccess(self):
        return self.exploit_success

    def getTeam(self):
        return self.team
示例#15
0
class AttackTask():
    def __init__(self, script, ip, timeout, logger):
        self.logger = logger

        if (self.logger != None):
            self.logger.debug("Creating Attack Task: %r %r %d" %
                              (script, ip, timeout))

        thread_size = threading.stack_size(524288)
        self.runner = TaskRunner()
        self.runner.start()

        self.script = script
        self.line_q = None
        self.ip = ip
        self.cookie = None
        self.captured_flags = []

        self.timeout = timeout
        self.timeout_set = False
        self.timer = AttackTimer(self.runner, timeout)
        self.timer.start()
        threading.stack_size(thread_size)

    def launch(self, overwrite_key=None):
        cmd = [self.script, self.ip]

        if (overwrite_key != None):
            cmd.append(overwrite_key)

        if (self.cookie != None):
            cmd.append(self.cookie)

        self.line_q = self.runner.taskStart(cmd)
        self.timeout_set = False
        self.timer.setTimeout(self.timeout)

    def isAlive(self):
        return self.runner.taskAlive()

    def stop(self):
        self.runner.taskStop()

    def quit(self):
        self.timer.running = False
        self.runner.quit()

    def processOutput(self):
        assert (self.line_q != None)
        count = self.line_q.qsize()

        for i in xrange(count):
            line = self.line_q.get(False)
            assert (line != None)

            if (line == ""):
                continue

            if (self.logger != None):
                self.logger.debug("(%s) %r" % (self.ip, line))

            if (line.startswith("FLAG:")):
                self.captured_flags.append(line[5:].strip())
                if (self.timeout_set == False):
                    self.timer.setTimeout(self.timeout)

            if (line.startswith("COOKIE:")):
                self.cookie = line[7:].strip()
                if (self.timeout_set == False):
                    self.timer.setTimeout(self.timeout)

            if (line.startswith("TIMEOUT:")):
                value = line[8:].strip()
                if (value.upper() == "INFINITE"):
                    self.timer.setInfinite()
                else:
                    value = int(value)
                    if (value == 0):
                        self.timeout_set = False
                        self.timer.setTimeout(self.timeout)

                    else:
                        self.timer.setTimeout(value)
                        self.timeout_set = True

            line = None

    def collectFlags(self):
        flags = self.captured_flags
        self.captured_flags = []
        return flags
示例#16
0
    def testHang(self):
        path = os.path.join(modulePath(), 'testtasks', 'Hang.py')
        runner = TaskRunner()
        runner.start()

        out_q = runner.taskStart([path, "Foo"])
        time.sleep(0.1)
        self.assertTrue(runner.taskAlive())
        runner.taskStop()
        self.assertFalse(runner.taskAlive())
        runner.quit()
示例#17
0
class UsenixExploitTask():
	
	def __init__(self,script,team,logger):
		self.logger = logger

		if(self.logger != None):
			
			self.logger.debug("Creating UsenixExploitTask: %r %r" % (script,team.host))

		thread_size = threading.stack_size(524288)
		self.runner = TaskRunner()
		self.runner.start()
		
		self.script = script
		self.line_q = None
		self.team = team
		self.cookie = None
		self.exploit_success = False
		self.captured_flags = []

		threading.stack_size(thread_size)

	def launch(self):

		cmd = [self.script,self.team.host]
		if(self.cookie != None):
			cmd.append(self.cookie)

		if(self.logger != None):
			script_name = os.path.basename(self.script)
			ip = self.team.host
			cookie = self.cookie
			self.logger.debug("Starting UsenixExploitTask: script=%r ip=%r cookie=%r" % (script_name,ip,cookie))

		self.line_q = self.runner.taskStart(cmd)

	def isAlive(self):
		return self.runner.taskAlive()

	def stop(self):
		if(self.logger != None):
			self.logger.debug("Stopping UsenixExploitTask: %r %r" % (self.script,self.team.host))
		self.runner.taskStop()

	def quit(self):
		self.runner.quit()

	def processOutput(self):
		assert(self.line_q != None)
		count = self.line_q.qsize()

		for i in xrange(count):
			line = self.line_q.get(False)
			assert(line != None)

			if(line == ""):
				continue

			if(self.logger != None):
				self.logger.info("(%s) %r" % (self.team.host,line))

			if(line.startswith("FLAG:")):
				self.captured_flags.append(line[5:].strip())

			if(line.startswith("COOKIE:")):
				self.cookie = line[7:].strip()

			if(line.startswith("EXPLOIT:")):
				success_txt = line[8:].strip().upper()
				if(success_txt == "SUCCESS"):
					self.exploit_success = True

			line = None 

	def collectFlags(self):
		flags = self.captured_flags
		self.captured_flags = []
		return flags

	def clearExploitSuccess(self):
		self.exploit_success = False

	def exploitSuccess(self):
		return self.exploit_success

	def getTeam(self):
		return self.team