3 # Copyright 2015 by Jan Vales <jan@jvales.net> (Someone <someone@somenet.org>)
4 # send me your changes. credit author(s). do not publish. share alike.
5 # to be done: find a suitable licence text.
19 dbconnstring = "host=127.0.0.1 port=5432 dbname=flagbot user=flagbot password=flagbotpw"
21 def login(force = False):
23 if force == True or team is None:
24 team = ictf.iCTF().login('georg@iseclab.org','8u6kNdUcsxE6sEkT')
25 print("login(): logged in.")
28 print("getTargets() starting...")
32 service_list = team.get_service_list()
33 service_names = [s['service_name'].encode("ascii") for s in service_list]
35 pprint.pprint(service_names)
37 for service in service_names:
39 # print("getTargets() getting for:"+service)
40 targets = team.get_targets(service)
41 for target in targets['targets']:
43 dbconn = psycopg2.connect(dbconnstring)
45 cur.execute("INSERT INTO flag_ids (service, team, host, port, flag_id) VALUES (%s, %s, %s, %s, %s)",
46 (service, target['team_name'], target['ip_address'], target['port'], target['flag_id']))
48 except psycopg2.DatabaseError as e:
50 # print 'getTargets()Error %s' % e
51 # print "getTargets() Unexpected error:", sys.exc_info()[0]
54 except psycopg2.DatabaseError as e:
55 print 'getTargets()Error %s' % e
58 except Exception as e:
59 print 'getTargets()Error %s' % e
60 print "getTargets() Unexpected error:", sys.exc_info()[0]
62 except Exception as e:
63 print 'getTargets() Error %s' % e
64 print "Unexpected error:", sys.exc_info()[0]
68 gettargetth = threading.Timer(0.5, getTargets)
70 print("getTargets(): ended")
73 print("submitFlag(): starting...")
78 dbconn = psycopg2.connect(dbconnstring)
79 cur = dbconn.cursor(cursor_factory=psycopg2.extras.DictCursor)
80 cur.execute("SELECT * from flags where status = 0 or status = 3 order by random() limit 50")
81 print "submitFlag() submitting " + str(cur.rowcount) + " flags"
82 for row in cur.fetchall():
84 result = team.submit_flag([row['flag']])
86 if "correct" in result:
87 cur.execute("UPDATE flags SET submitted = date_trunc('second', NOW()), "
88 "status = %s, srvresponse = %s WHERE fid = %s",
89 (1, result, row['fid']))
91 elif "already" in result:
92 cur.execute("UPDATE flags SET submitted = date_trunc('second', NOW()), "
93 "status = %s, srvresponse = %s WHERE fid = %s",
94 (2, result, row['fid']))
96 elif "notactive" in result:
97 cur.execute("UPDATE flags SET submitted = date_trunc('second', NOW()), "
98 "status = %s, srvresponse = %s WHERE fid = %s",
99 (2, result, row['fid']))
101 elif "incorrect" in result:
102 cur.execute("UPDATE flags SET submitted = date_trunc('second', NOW()), "
103 "status = %s, srvresponse = %s WHERE fid = %s",
104 (2, result, row['fid']))
108 pprint.pprint(result)
109 cur.execute("UPDATE flags SET submitted = date_trunc('second', NOW()), "
110 "status = %s, srvresponse = %s WHERE fid = %s",
111 (3, result, row['fid']))
114 except psycopg2.DatabaseError as e:
117 except Exception as e:
119 print "Unexpected error:", sys.exc_info()[0]
123 except psycopg2.DatabaseError as e:
128 submitth = threading.Timer(0.5, submitFlags)
129 submitth.setDaemon(True)
131 print("submitFlag(): ended")
134 print "*** starting ..."
135 dbconn = psycopg2.connect("host=127.0.0.1 port=5432 dbname=flagbot user=flagbot password=flagbotpw")
136 cur = dbconn.cursor()
137 cur.execute("CREATE TABLE IF NOT EXISTS flag_ids ("
138 "service character varying(64) NOT NULL,"
139 "team character varying(64) NOT NULL,"
140 "host character varying(10) NOT NULL,"
141 "port character varying(10) NOT NULL,"
142 "flag_id character varying(128) NOT NULL,"
143 "received timestamp without time zone NOT NULL DEFAULT date_trunc('second'::text, now()),"
144 "handed_out timestamp without time zone,"
145 "status integer NOT NULL DEFAULT 0,"
146 "CONSTRAINT flag_ids_pkey PRIMARY KEY (service, flag_id)"
148 cur.execute("CREATE TABLE IF NOT EXISTS flags ("
149 "fid serial NOT NULL,"
150 "flag character varying(32) NOT NULL,"
151 "service character varying(32),"
152 "flag_id character varying(128),"
153 "submitter character varying(32),"
154 "received timestamp without time zone NOT NULL DEFAULT date_trunc('second'::text, now()),"
155 "submitted timestamp without time zone,"
156 "status integer NOT NULL DEFAULT 0, "
157 "srvresponse character varying(128),"
158 "CONSTRAINT flags_pkey PRIMARY KEY (fid),"
159 "CONSTRAINT flags_flag_key UNIQUE (flag)"
165 print "Connected to DB + tables created"
167 # start one other thread
168 submitth = threading.Timer(1.0, submitFlags)
169 submitth.setDaemon(True)
174 if __name__ == "__main__":
175 def signal_handler(signal, frame):
176 print 'SIG received. exitting!'
178 signal.signal(signal.SIGINT, signal_handler)