Files

src/mail.src
  • Mission = {}
  • // type : enum [academic_record]
  • // is_completed : boolean
  • // info : map
  • Mission.attrs = ["type", "is_completed"]
  • Mission.init = function(mail)
  • self.mail = mail
  • self.inbox = mail.inbox
  • self.meta_mail = mail.inbox.meta_mail
  • self.is_completed = false
  • if self.mail.content.indexOf("customer is satisfied") then
  • self.is_completed = true
  • end if
  • self.set_type
  • end function
  • Mission.set_type = function
  • // also code smell
  • if self.mail.content.indexOf("academic record") then
  • self.type = "academic_record"
  • else if self.mail.content.indexOf("police record") then
  • self.type = "police_record"
  • end if
  • end function
  • Mission.info = function
  • // code smell
  • if self.type == "academic_record" then
  • return self.get_academic_record_info
  • else if self.type == "police_record" then
  • return self.get_police_record_info
  • end if
  • end function
  • Mission.get_academic_record_info = function
  • info = {}
  • info.remote_ip = self.mail.content[self.mail.content.indexOf("remote ip of the victim is"):][27:].split(char(10))[0][3:-4]
  • info.database_ip = self.mail.content[self.mail.content.indexOf("database is located is"):][23:].split(char(10))[0][3:-4]
  • info.student = self.mail.content[self.mail.content.indexOf("modify belongs to"):][19:].split(char(10))[0][3:-5]
  • info.subject = self.mail.content[self.mail.content.indexOf("modify the subject"):][19:].split(" ")[0][3:-4]
  • info.skip = false
  • info.database_port = null
  • router = get_router(info.remote_ip)
  • for port in router.used_ports
  • if router.port_info(port).indexOf("students") != null then
  • info.database_port = port.port_number
  • if port.is_closed == true then
  • info.skip = true
  • end if
  • end if
  • end for
  • if info.database_port == null then
  • info.skip = true
  • end if
  • return info
  • end function
  • Mission.get_police_record_info = function
  • info = {}
  • info.remote_ip = self.mail.content[self.mail.content.indexOf("remote ip of the victim is"):][27:].split(char(10))[0][3:-4]
  • info.convicted = self.mail.content[self.mail.content.indexOf("modify belongs to"):][19:].split(char(10))[0][3:-5]
  • info.skip = false
  • info.database_port = null
  • if self.mail.content.indexOf("client wants to delete the charge") then
  • info.type = "delete"
  • info.charge = self.mail.content[self.mail.content.indexOf("delete the charge of"):][21:].split(" ")[0][3:-5]
  • else if self.mail.content.indexOf("client wants to add the charge") then
  • info.type = "add"
  • info.charge = self.mail.content[self.mail.content.indexOf("add the charge of"):][18:].split(" ")[0][3:-4]
  • info.year = self.mail.content[self.mail.content.indexOf("in the year"):][12:].split(" ")[0][:-1]
  • else
  • info.type = "edit"
  • info.charge = self.mail.content[self.mail.content.indexOf("modify the charge of"):][21:].split(" ")[0][3:-4]
  • info.change = self.mail.content[self.mail.content.indexOf("date of the crime is"):][21:].split(char(10))[0]
  • end if
  • router = get_router(info.remote_ip)
  • for port in router.used_ports
  • if router.port_info(port).indexOf("criminals") != null then
  • info.database_port = port.port_number
  • if port.is_closed == true then
  • info.skip = true
  • end if
  • end if
  • end for
  • if info.database_port == null then
  • info.skip = true
  • end if
  • return info
  • end function
  • Mail = {}
  • // id : string
  • // from : string
  • // subject : string
  • // content : string
  • Mail.attrs = ["id", "from", "subject"]
  • Mail.init = function(inbox, str)
  • self.inbox = inbox
  • self.meta_mail = inbox.meta_mail
  • self.id = str[str.indexOf("MailID: "):][8:].split(char(10))[0]
  • self.from = str[str.indexOf("From: "):][6:].split(char(10))[0]
  • self.subject = str[str.indexOf("Subject: "):][9:].split(char(10))[0]
  • self.content = self.meta_mail.read(self.id)
  • self.content = self.content[self.content.indexOf("Subject: "):].split(char(10))[1:].join(char(10))
  • end function
  • Mail.is_mission = function
  • return self.subject == "Mission Contract"
  • end function
  • Mail.mission_type = function
  • if self.is_mission == false then return null
  • if self.content.indexOf("academic record") then
  • return "academic_record"
  • end if
  • end function
  • Mail.is_mission_complete = function
  • if self.is_mission == false then return null
  • if self.content.indexOf("customer is satisfied") then
  • return true
  • end if
  • return false
  • end function
  • Mail.mission_info = function
  • if self.is_mission == false then return null
  • // code smell
  • if self.mission_type == "academic_record" then
  • return self.get_academic_record_mission_info
  • if self.is_mission == true then
  • self.mission = new Mission
  • self.mission.init(self)
  • end if
  • end function
  • Mail.get_academic_record_mission_info = function
  • info = {}
  • info.remote_ip = self.content[self.content.indexOf("remote ip of the victim is"):][27:].split(char(10))[0][3:-4]
  • info.database_ip = self.content[self.content.indexOf("database is located is"):][23:].split(char(10))[0][3:-4]
  • info.student = self.content[self.content.indexOf("modify belongs to"):][19:].split(char(10))[0][3:-5]
  • info.subject = self.content[self.content.indexOf("modify the subject"):][19:].split(" ")[0][3:-4]
  • return info
  • Mail.is_mission = function
  • return self.subject == "Mission Contract"
  • end function
  • Inbox = {}
  • Inbox.init = function(email, password)
  • self.meta_mail = mail_login(email, password)
  • if self.meta_mail isa string then exit(self.meta_mail)
  • end function
  • Inbox.list = function
  • mails = self.meta_mail.fetch()
  • for i in mails.indexes
  • m = new Mail
  • m.init(self, mails[i])
  • mails[i] = m
  • end for
  • return mails
  • end function
  • Inbox.missions = function
  • f = function(o)
  • return o.is_mission == true
  • end function
  • missions = self.list.select(@f)
  • f = function(o)
  • return o.mission
  • end function
  • missions = missions.map(@f)
  • f = function(o)
  • return o.type
  • end function
  • missions = missions.lsort(@f)
  • return missions
  • end function
  • Inbox.grouped_missions = function()
  • missions = {}
  • for m in self.missions
  • if missions.hasIndex(m.type) == false then
  • missions[m.type] = []
  • end if
  • missions[m.type].push m
  • end for
  • return missions
  • end function
cli/academicMissions.src
  • import_code("/home/me/h/src/utils.src") // exports map.inspect, p
  • import_code("/home/me/h/libs/list.src") // exports list utils and map utils
  • import_code("/home/me/h/libs/disk.src") // exports Disk, Block
  • import_code("/home/me/h/libs/nmap.src") // exports Nmap, Service
  • import_code("/home/me/h/libs/scan.src") // exports Scan
  • import_code("/home/me/h/libs/json.src") // exports Json
  • import_code("/home/me/h/src/rndIP.src") // exports rnd_ip
  • import_code("/home/me/h/src/mail.src") // exports Mail, Inbox
  • import_code("/home/me/h/libs/optionSelector.src") // exports option_selector
  • import_code("/home/me/h/src/machine.src") // exports Machine, MachineService, depends on Scan, Nmap , Json, rnd_ip
  • import_code("/home/me/h/src/shell.src") // extend map
  • TABLEATTACK_SCRIPT = get_shell.host_computer.File(home_dir + "/Config/tableAttack.src")
  • EMPTY_LOG_PATH = home_dir + "/Config/emptyLog"
  • PASSWORDS_DISK = new Disk
  • PASSWORDS_DISK.init(home_dir + "/Config", "passwords")
  • EXPLOITS_DISK = new Disk
  • EXPLOITS_DISK.init(home_dir + "/Config", "exploits")
  • ENTRIES_DISK = new Disk
  • ENTRIES_DISK.init(home_dir + "/Config", "entries")
  • Machine.metaxploit = include_lib("/lib/metaxploit.so")
  • Scan.metaxploit = include_lib("/lib/metaxploit.so")
  • get_shell.host_computer.touch(home_dir + "/Config", "sites.txt")
  • SITES_FILE = get_shell.host_computer.File(home_dir + "/Config/sites.txt")
  • Command = {}
  • Command.academicMissions_sig = {}
  • Command.academicMissions_sig["description"] = "Reads your email to find academic missions and format them"
  • Command.academicMissions_sig["args"] = ["email*", "password*"]
  • Command.academicMissions_sig["options"] = []
  • Command.academicMissions = function(args = [], options = {})
  • inbox = new Inbox
  • inbox.init(args[0], args[1])
  • for m in inbox.list
  • p m
  • p m.is_mission
  • p m.mission_type
  • p m.is_mission_complete
  • p m.mission_info
  • end for
  • end function
  • import_code("/home/me/h/libs/thor.src") //depends on Listlib, exports Thor
  • Thor.init(Command, "academicMissions")
cli/missions.src
  • import_code("/home/me/h/src/utils.src") // exports map.inspect, p
  • import_code("/home/me/h/libs/list.src") // exports list utils and map utils
  • import_code("/home/me/h/libs/disk.src") // exports Disk, Block
  • import_code("/home/me/h/libs/nmap.src") // exports Nmap, Service
  • import_code("/home/me/h/libs/scan.src") // exports Scan
  • import_code("/home/me/h/libs/json.src") // exports Json
  • import_code("/home/me/h/src/rndIP.src") // exports rnd_ip
  • import_code("/home/me/h/src/mail.src") // exports Mail, Inbox, Mission, depends on list utils
  • import_code("/home/me/h/libs/optionSelector.src") // exports option_selector
  • import_code("/home/me/h/src/machine.src") // exports Machine, MachineService, depends on Scan, Nmap , Json, rnd_ip
  • import_code("/home/me/h/src/shell.src") // extend map
  • TABLEATTACK_SCRIPT = get_shell.host_computer.File(home_dir + "/Config/tableAttack.src")
  • EMPTY_LOG_PATH = home_dir + "/Config/emptyLog"
  • PASSWORDS_DISK = new Disk
  • PASSWORDS_DISK.init(home_dir + "/Config", "passwords")
  • EXPLOITS_DISK = new Disk
  • EXPLOITS_DISK.init(home_dir + "/Config", "exploits")
  • ENTRIES_DISK = new Disk
  • ENTRIES_DISK.init(home_dir + "/Config", "entries")
  • Machine.metaxploit = include_lib("/lib/metaxploit.so")
  • Scan.metaxploit = include_lib("/lib/metaxploit.so")
  • get_shell.host_computer.touch(home_dir + "/Config", "sites.txt")
  • SITES_FILE = get_shell.host_computer.File(home_dir + "/Config/sites.txt")
  • Command = {}
  • Command.missions_sig = {}
  • Command.missions_sig["description"] = "Reads your email to find academic missions and format them"
  • Command.missions_sig["args"] = ["email*", "password*"]
  • Command.missions_sig["options"] = [{["-s", "--delete-skip"]: "deletes missions with skip marked as true"}]
  • Command.missions_sig["options"].push {["-d", "--delete-completed"]: "deletes completed missions"}
  • Command.missions = function(args = [], options = {})
  • inbox = new Inbox
  • inbox.init(args[0], args[1])
  • if options["-d"] == true then
  • for m in inbox.missions
  • if m.is_completed == true then
  • m.meta_mail.delete(m.mail.id)
  • end if
  • end for
  • end if
  • missions_group = inbox.grouped_missions
  • for key in missions_group.indexes
  • print "===================<b>" + key + "</b>====================="
  • for mission in missions_group[key]
  • if mission.info.skip == true and options["-s"] == true then
  • mission.meta_mail.delete(mission.mail.id)
  • continue
  • end if
  • print "---------------------------"
  • for o in mission.info
  • print o.key + ": " + o.value
  • end for
  • end for
  • end for
  • end function
  • import_code("/home/me/h/libs/thor.src") //depends on Listlib, exports Thor
  • Thor.init(Command, "missions")