def scanByQuery(self,query):
		content = ''
		#数据库记录
		db = DBHelper()
		sql = "insert into job_status (status,path) values(%s,'%s')" % ('0',file_name)
		db.execute_ddl_sql('safecat_jobs',sql)

		#生成报告头
		self.exp_list = self.loadExploit()
		self.file.write('domain\t\t\tattack_results\n')
		query_dsl = self.queryParser(query)
		query_res = self.es.search(body=query_dsl,index='safecat',doc_type='hostcrawler',size=100000)
		domain_list = [ x['_source']['domain'] for x in query_res['hits']['hits'] ]
		for target in domain_list:
			target = self.httptools.get_standard_url(target)
			print '[+]TargetHOST:%s' % target
			for obj in self.exp_list:
				res = obj.exploit(target)
				if not res:
					record = '%s\t\t\tFailed\n' % target
					content += record
					print record
				else:
					record = '%s\t\t\t%s\n' % (target,res)
					content += record
					print record
				self.file.write(record)
		content = content.replace('\n',' ')
		sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % ('1',content)
		print sql
		db.execute_ddl_sql("safecat_jobs",sql)

		self.file.close()
	def scanByDomain(self,domain):
		#数据库记录
		content = ''
		db = DBHelper()
		sql = "insert into job_status (status) values(%s)" % '0'
		db.execute_ddl_sql('safecat_jobs',sql)

		self.exp_list = self.loadExploit()
		self.file.write('domain\t\tattack_results')
		domain = self.httptools.get_standard_url(domain)
		for obj in self.exp_list:
			res = obj.exploit(domain)
			if not res:
				print '%s Exploit Failed:Unknown' % domain
				content += '%s\tExploit\tFailed:Unknown' % domain
			else:
				print 'Exploit Success:%s\t\t%s' % (x,str(res))
				content = '%sExploit\tSuccess:%s\t\t%s' % (domain,x,str(res))
		sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % ('1',content)
		print sql
		db.execute_ddl_sql("safecat_jobs",sql)
Example #3
0
    def scanByDomain(self, domain):
        # 数据库记录
        content = ''
        db = DBHelper()
        sql = "insert into job_status (status, path) valuse(%d, '%s')" % (
            0, file_name)
        db.excute_ddl_sql('safe_jobs', sql)

        # 生成报告头
        self.exp_list = self.loadExp()
        self.file.write('domain\t\t\tattack_results\n')

        domain = self.httptools.get_standard_url(domain)
        for obj in self.exp_list:
            res = obj.expoit(domain)
            if not res:
                print('%s Exploit Failed:Unknow' % domain)
                content += '%s\tExploit\tFailed:Unknow' % domain
            else:
                print('Exploit Success:%s' % str(res))
                content += '%sExploit\tSuccess:%s' % (domain, str(res))
        # 完成后修改数据库,可添加一项时间列,记录任务开始时间,任务完成后查找当前开始时间的行 状态修改为完成
        sql = "update job_status set status=%d,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)" % (
            1, content)
        print(sql)
        db.excute_ddl_sql('safe_jobs, sql')
	def scanOneRange(self,startip,endip):
		ip_list = []
		tmp_list = []
		domain_list = []
		#数据库记录
		db = DBHelper()
		sql = "insert into job_status (status,path) values(%d,%s)" % (0,file_name)
		db.execute_ddl_sql('safe_jobs',sql)

		myscanner = Scanner()
		ip_reverse = IPReverse()
		ip_list = myscanner.WebScanner(startip,endip)
		for x in ip_list:
			tmp_list = ip_reverse.getDomainsList(x)
			if tmp_list == None:
				continue
			domain_list.extend(tmp_list)

		content = ''
		for url in domain_list:
			res = self.exp.exploit(url)
			if not res:
				record = 'Exploit Failed:Unknown'
				content += record
			else:
				record = 'Exploit Success:%s\t\t%s' % (url,str(res))
				content += record
			self.file.write(record)
		sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % ('1',content)
		print sql
		db.execute_ddl_sql("safe_jobs",sql)
		self.file.close()
	def scanAll(self):
		global file_name
		#数据库记录
		db = DBHelper()
		sql = "insert into job_status (status,path) values(%d,%s)" % (0,file_name)
		db.execute_ddl_sql('safe_jobs',sql)
		#获取全部的域名列表
		domain_list = []
		query = {
			'query':{
				'match_all':{}
			},
			'_source':['domain']
		}
		res = self.es.search(body=query,index='safecat',doc_type='hostcrawler',size=1000000)
		for x in res['hits']['hits']:
			domain_list.append(x['_source']['domain'])

		#开始载入exp扫描并写入记录文件
		print '[+]Start scanning in mode all,please wait...'
		content = ''
		for url in domain_list:
			res = self.exp.exploit(url) 
			if not res:
				record = '%s\t\t\tFailed\n' % url 
				content += record
			else:
				record = '%s\t\t\t%s\n' % (url,str(res))
				content += record
			self.file.write(record)
		#任务完成,写入数据库
		sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % ('1',content)
		print sql
		db.execute_ddl_sql("safe_jobs",sql)
		self.file.close()
Example #6
0
    def run(self):
        (option, args) = self.optionInit()
        # print((option, args))
        self.loaddir()

        if option.module_name == 'exp_name':
            if option.option == 'all':
                print('全网扫描模式')
                # 根据EXP名字查找模块文件
                fp, pathname, desctiption = imp.find_module(option.exp_name)
                # 加载找到的文件 exp_file为模块文件
                exp_file = imp.load_module(option.exp_name, fp, pathname,
                                           desctiption)
                # 从文件初始化为类的对象
                exp_file = exp_file.SafecatExploit()
                # 初始化一个扫描脚本的对象,将要运行的EXP对象作为参数传入
                self.exp_module = EXPModule(exp_file)

            elif option.option == 'single' and option.thost:
                target = self.httptools.get_standard_url(option.thost)
                mod = importlib.import_module(option.exp_name)
                print('[+] Test %s' % option.exp_name)
                # 通过module名字获取module中类的对象
                for name in dir(mod):
                    # dir(mod) 返回mod的属性,方法列表,getattr()获取列表中名字为变量name的那一个属性或方法;这里是取得类名
                    var = getattr(mod, name)  # var即为最终获取到的类名
                    try:
                        poc = var(target)  # 通过类名初始化类的对象
                    except Exception:
                        pass
                result = poc.run()  # 执行类的对象的方法
                db = DBHelper()
                sql = "insert into job_status (url, pocname, result) values('%s','%s','%s')" \
                      % (option.thost, mod.__name__, result)
                db.excute_ddl_sql('showsafe', sql)
        else:
            print('请输入-m确定测试模式')
	def scanOneHost(self,target):
		#数据库记录
		content = ''
		db = DBHelper()
		sql = "insert into job_status (status,path) values(%s,'%s')" % ('0',file_name)
		db.execute_ddl_sql('safecat_jobs',sql)

		print '[+]Start scanning in mode single...'
		res = self.exp.exploit(target)
		if not res:
			print '%s Exploit Failed:Unknown' % domain
			content += '%s\tExploit\tFailed:Unknown' % domain
		else:
			print 'Exploit Success:%s\t\t%s' % (x,str(res))
			content = '%sExploit\tSuccess:%s\t\t%s' % (domain,x,str(res))

		content = content.replace('\n',' ')
		sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % ('1',content)
		print sql
		db.execute_ddl_sql("safecat_jobs",sql)
Example #8
0
    def scanByQuery(self, query):
        content = ''
        # 数据库记录
        db = DBHelper()
        sql = "insert into job_status (status, path) valuse(%d, '%s')" % (
            0, file_name)
        db.excute_ddl_sql('safe_jobs', sql)

        # 获取所有的EXP对象
        self.exp_list = self.loadExp()
        # 生成报告头
        self.file.write('domain\t\t\tattack_results\n')

        query_dsl = self.queryParser(query)
        query_res = self.es.search(body=query_dsl,
                                   index='showsafe',
                                   doc_type='web',
                                   size=100000)
        domain_list = [
            x['_source']['domain'] for x in query_res['hits']['hits']
        ]
        for target in domain_list:
            target = self.httptools.get_standard_url(target)
            print('[+]TargetHOST:%s' % target)
            for obj in self.exp_list:
                res = obj.expoit(target)
                if not res:
                    record = '%s\t\t\tFailed\n' % target
                    content += record
                    print(record)
                else:
                    record = '%s\t\t\t%s\n' % target
                    content += record
                    print(record)
                self.file.write(record)
        content = content.replace('\n', ' ')
        sql = "update job_status set status=%d,content='%s' where id =(select tmp.id from (select id from job_status order by id desc limit 1)tmp)" % (
            1, content)
        print(sql)
        db.excute_ddl_sql("safe_jobs", sql)
        self.file.close()
    def scanByQuery(self, query):
        content = ''
        #数据库记录
        db = DBHelper()
        sql = "insert into job_status (status,path) values(%s,'%s')" % (
            '0', file_name)
        db.execute_ddl_sql('safecat_jobs', sql)

        #生成报告头
        self.exp_list = self.loadExploit()
        self.file.write('domain\t\t\tattack_results\n')
        query_dsl = self.queryParser(query)
        query_res = self.es.search(body=query_dsl,
                                   index='safecat',
                                   doc_type='hostcrawler',
                                   size=100000)
        domain_list = [
            x['_source']['domain'] for x in query_res['hits']['hits']
        ]
        for target in domain_list:
            target = self.httptools.get_standard_url(target)
            print '[+]TargetHOST:%s' % target
            for obj in self.exp_list:
                res = obj.exploit(target)
                if not res:
                    record = '%s\t\t\tFailed\n' % target
                    content += record
                    print record
                else:
                    record = '%s\t\t\t%s\n' % (target, res)
                    content += record
                    print record
                self.file.write(record)
        content = content.replace('\n', ' ')
        sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % (
            '1', content)
        print sql
        db.execute_ddl_sql("safecat_jobs", sql)

        self.file.close()
    def scanByDomain(self, domain):
        #数据库记录
        content = ''
        db = DBHelper()
        sql = "insert into job_status (status) values(%s)" % '0'
        db.execute_ddl_sql('safecat_jobs', sql)

        self.exp_list = self.loadExploit()
        self.file.write('domain\t\tattack_results')
        domain = self.httptools.get_standard_url(domain)
        for obj in self.exp_list:
            res = obj.exploit(domain)
            if not res:
                print '%s Exploit Failed:Unknown' % domain
                content += '%s\tExploit\tFailed:Unknown' % domain
            else:
                print 'Exploit Success:%s\t\t%s' % (x, str(res))
                content = '%sExploit\tSuccess:%s\t\t%s' % (domain, x, str(res))
        sql = '''update job_status set status=%s,content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)''' % (
            '1', content)
        print sql
        db.execute_ddl_sql("safecat_jobs", sql)
    def scanOneHost(self, target):
        # 数据库记录
        content = ''
        db = DBHelper()
        sql = "insert into job_status (status, path) values(%d, '%s')" % (
            0, file_name)
        db.excute_ddl_sql('safe_jobs', sql)

        # print('[+]Start scanning in mode single...')
        print('[+]开始单个主机扫描,请稍后....')
        res = self.exp.exploit(target)
        if not res:
            print('%s Exploit Failed:Unknown' % target)
            content += '%s\tExploit\tFailed:Unknown' % target
        else:
            print('Exploit Success:%s\t\t%s' % ('x', str(res)))
            content = '%sExploit\tSuccess:%s\t\t%s' % (target, 'x', str(res))

        content = content.replace('\n', ' ')
        # 直接先查询本表再更新在mysql会报错,只能在加一层刷新 http://blog.csdn.net/z_youarethebest/article/details/53785487
        sql = "update job_status set status=%d, content='%s' where id=(select tmp.id from (select id from job_status order by id desc limit 1)tmp)" % (
            1, content)
        print(sql)
        db.excute_ddl_sql('safe_jobs', sql)
import json
import requests
import time
import urllib
import re

import config
# from info_extraction import extract_names, extract_email_addresses
from sqlhelper import DBHelper
from google.appengine.api import mail

db = DBHelper()

TOKEN = config.token

URL = "https://api.telegram.org/bot{}/".format(TOKEN)

available_tables = ['1', '2', '3', '4', '5']

confirm_choices = ['yes', 'no']

details_dict = {"Booking Number": 0, "Name": 1, "Email": 2, "Table Number": 3}

help_message = '''/start : Starting conversation with Restaurant Table Reservation System \n
/help : Providing you with all the available commands and information about them \n
/retrieve: Get the table number you booked for \n
/receipt: Get the reciept for the order \n
/cancel: Cancel your confirmed booking \n'''

start_message = '''Welcome to Jumper Restaurant Table Reservation System. We will be helping you throughout the table reservation process.\n
Send /help if you need any other information.'''
Example #13
0
import webapp2
import json
import requests
import requests_toolbelt.adapters.appengine
import os
import traceback
from sqlhelper import DBHelper
from reservation_bot import handle_updates

requests_toolbelt.adapters.appengine.monkeypatch()

db = DBHelper()
db.setup()


class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Bot Initialized\n')


class DataInfoPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        cursor = db.conn.cursor()

        #Show databases
        self.response.write('\nDATABASES\n')
        cursor.execute('SHOW DATABASES')
        for r in cursor.fetchall():
            self.response.write('{}\n'.format(r))