backdoor CTF 2015: NONAME
Category: Exploit Points: 200 Author: Amanpreet Singh Difficulty: Solves: 25 Description:
Intrestingly enough, even though it was not expected, Chintu found a cool website to play with, though he can't get the flag. Can you? Visit this. Submit the SHA-256 hash of the flag obtained.
Gaylord : At first, (str (all-ns)) to get all namespaces. And then (clojure.repl/dir noname.people.admin) to see what inside. There is including flag and secret. Used (noname.people.admin/flag) to get the a half of the flag.
Chuymichxinhdep: However secret is a private variable variable, I used ((noname.people.admin/secret)) to obtain the other half of the flag. Problem solved.
backdoor CTF 2015: QR
Category: Misc Points: 70 Author: Abhay Bir Singh Rana Difficulty: Easy Solves: 84 Description:
Decode some QR codes at
nc hack.bckdr.in 8010
chuymichxinhdep:
from subprocess import Popen, PIPE i = 0 import socket sock = socket.socket() sock.connect(("hack.bckdr.in", 8010)) s= sock.recv(1024) print(s) while True: i=i+1 string = "" s= sock.recv(65535) data= s.replace("\x20\x20","0").replace("\xe2\x96\x88\xe2\x96\x88","1") file = open('qr','w') for line in data.split("\n"): string = string+line[1:len(line)-1]+"0"*(47-len(line))+"\n" file.write(string[46:len(string)-1-46]) file.close() output = Popen(["python", "sqrd.py", "qr"], stdout=PIPE).communicate()[0] print i, output.strip() sock.send(output.strip())
Convert the QR to binary only and use Strong QR to decode. After 50 submissions we've got the flag.
backdoor CTF 2015: RAPIDFIRE
Category: Misc Points: 500 Author: Amanpreet Singh Difficulty: TODO Solves: 0 Description:
I am enjoying it really. Are you?
nc hack.bckdr.in 8007
. Submit the SHA-256 hash of the flag obtained.
Chuymichxinhdep: Just use a brilliant source code from gaylord.
import socket, hashlib, time, requests from geopy import GoogleV3 import re import shelve import omdb host = '128.199.107.60' port = 8008 rep_countrycode = False def fib(n): i = h = 1 j = k = 0 while (n > 0) : if (n%2 == 1) : # when n is odd t = j*h j = i*h + j*k + t i = i*k + t t = h*h h = 2*k*h + t k = k*k + t n = int(n/2) return j def get_country(place_name): gapi = shelve.open('googly_cache', writeback=True) try: wat = place_name.encode('base64') except UnicodeEncodeError: wat = u' '.join(place_name).encode('utf-8').strip().encode('base64') if (wat in gapi): print('[*] Found in shelf') loc = gapi[wat] else: print('[*] Request from GGAPI') loc = geolocator.geocode(place_name).raw gapi[wat] = loc gapi.sync() gapi.close() for comp in loc['address_components']: if 'country' in comp['types']: if rep_countrycode: return comp['short_name'] # TODO: not short_name but something else else: return comp['long_name'] def get_release(movie_name): gapi = shelve.open('moviee_cache', writeback=True) try: wat = movie_name.encode('base64') except UnicodeEncodeError: wat = u' '.join(movie_name).encode('utf-8').strip().encode('base64') if (wat in gapi): print('[*] Found in shelf') loc = gapi[wat] else: print('[*] Request from OMDB') s = omdb.title(movie_name) loc = s['year'] gapi[wat] = loc gapi.sync() gapi.close() return loc def read_until(wat): buf = '' while not (wat in buf): buf += sock.recv(1) return buf def read_for_fun(sz): d = '' while (sz > 0): tmp = sock.recv(sz) sz -= len(tmp) d += tmp return d # init connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) geolocator = GoogleV3() pii = requests.get('http://www.angio.net/pi/digits/pi1000000.txt').text # read & answer while True: s = sock.recv(8192) if ('code is in CAPS' in s): rep_countrycode = True if (s == ''): sleep(10) print(s) n = 'wat' res = n if ('sum' in s): n = int(re.findall(r'first\ (\d+)\ ', s)[0]) if ('odd' in s): res = n * n elif ('fibonacci' in s): res = fib(n+2) - 1 elif ('natural number' in s): res = (n * (n + 1) // 2) res = str(res) elif ('prime' in s): n = int(re.findall(r'the\ (\d+)(st|nd|rd|th)', s)[0][0]) + 1 n = str(n) page = requests.get('http://numbersofprime.com/prime/' + n) res = re.findall(r'', page.text)[1] res = res.replace(',', '') res = res.strip() elif ('md5' in s): n = re.findall(r'of\ (.*)\n', s)[0] res = hashlib.md5(n).hexdigest() elif ('pi' in s): n = int(re.findall(r'the\ (\d+)(st|nd|rd|th)', s)[0][0]) res = pii[n+1] elif ('fibonacci' in s): n = int(re.findall(r'the\ (\d+)(st|nd|rd|th)', s)[0][0]) res = str(fib(n)) elif ('binary' in s): n = int(re.findall(r'of\ (\d+)\ in', s)[0]) res = bin(n)[2:] elif ('country' in s): n = re.findall(r'of\ (.*)\n', s)[0] res = get_country(n) elif ('release year' in s): n = re.findall(r'of\ (.*)\n', s)[0] res = get_release(n) print '[*] n = ', n print '[*] res = ', res sock.sendall(res+'\n')
I added pycountry to get the alpha-2 code of country. After 199 submissions we will get the flag. Not a fun challange because of slow server and too many stupid questions.
-chuymichxinhdep.
BabyPhD.