# cat blog >> /dev/brain 2> /proc/mind
cat blog >> /dev/brain 2> /proc/mind
# cat mission_03.py import itertools def base4to10(num): result = 0 ln = len(num) - 1 for i in num: result += int(i) * (4 ** ln) ln -= 1 return result def ascii_string(s): for i in s: if ord(i) < 32 or ord(i) > 126: return False return True with open('huffman.code') as f: bd = f.read()[:-1] values = ['0', '1', '00', '01', '10', '11', '000', '001', '010', '011', '100', '101', '110', '111'] for i in itertools.permutations(values, 4): tree = { i[0]: '0', i[1]: '1', i[2]: '2', i[3]: '3', } code = '' result = '' for d in bd: code += d if code in tree: result += tree[code] code = '' try: decv = base4to10(result) hexv = hex(decv)[2:].replace('L', '') ascv = hexv.decode('hex') if ascii_string(ascv) and len(ascv) > 4: print 'tree =', tree print 'result =', result print 'dec =', decv print 'bytes =', hexv print 'ascii =', ascv[::-1] print except: pass # python mission_03.py tree = {'11': '1', '0': '2', '100': '0', '101': '3'} result = 3231202120213111211131203001031030012101202131112031322131303001323130113211313131312111030030013010300120213011212030012101031 dec = 26860288614901905570716094189682157357950360778336264927367113021610209076301 bytes = 3b6262756576304d30646275637a77307b71797777654c30713062716630644d ascii = Md0fqb0q0Lewwyq{0wzcubd0M0veubb; tree = {'11': '1', '0': '3', '100': '0', '101': '2'} result = 2321303130312111311121302001021020013101303121113021233121202001232120112311212121213111020020012010200130312011313020013101021 dec = 21010374883428224108739011194252932925839770786883498221738205492211234141257 bytes = 2e7373657567204920747365726f66206e616d66667548206120736177207449 ascii = It was a Huffman forest I guess.
cat mission_03.py
python mission_03.py
# url='http://videos.pentesteracademy.com.s3.amazonaws.com/videos/wap-challenges/http-forensics2.pcap' # wget --quiet --output-document=http-forensics2.pcapng $url # editcap -F libpcap -T ether http-forensics2.pcapng http-forensics2.pcap # tshark -nr http-forensics2.pcap | grep octet 15 9.678371 192.168.1.13 -> 67.159.60.66 HTTP 1155 POST /upload_fileapi.php?3529945644=0&file=0&startpos=0&r=0.5286034531386509 HTTP/1.1 (application/octet-stream) 63 27.056300 192.168.1.13 -> 67.159.60.61 HTTP 1161 POST /upload_fileapi.php?7792025787=0&file=0&startpos=0&r=0.3998272621670734 HTTP/1.1 (application/octet-stream) 116 46.865880 192.168.1.13 -> 67.159.60.29 HTTP 1161 POST /upload_fileapi.php?4000038131=0&file=0&startpos=0&r=0.9503461291640495 HTTP/1.1 (application/octet-stream) 182 67.593167 192.168.1.13 -> 84.39.117.75 HTTP 1160 POST /upload_fileapi.php?5200689443=0&file=0&startpos=0&r=0.02202681328946554 HTTP/1.1 (application/octet-stream) # cat solution.py #!/usr/bin/python import itertools import scapy.all as scapy import zipfile import os pcap = scapy.rdpcap("http-forensics2.pcap") zip = [] for frame in pcap: if 'octet-stream' in frame[scapy.Raw].load: zip.append(frame[scapy.Raw].load.split('\r\n')[-3]) i = 0 perms = itertools.permutations(zip, len(zip)) for p in perms: zfn = str(i) + '.zip' zf = open(zfn, 'wb') for ostream in p: zf.write(ostream) zf.close() if zipfile.is_zipfile(zfn): try: zf = zipfile.ZipFile(zfn, 'r') zf.extractall() print zf.namelist() os.exit() except: os.remove(zfn) pass i += 1 # ./solution.py ['split-file/', 'split-file/pass'] # cat split-file/pass 12wsdqwe32109
url='http://videos.pentesteracademy.com.s3.amazonaws.com/videos/wap-challenges/http-forensics2.pcap'
wget --quiet --output-document=http-forensics2.pcapng $url
editcap -F libpcap -T ether http-forensics2.pcapng http-forensics2.pcap
tshark -nr http-forensics2.pcap | grep octet
cat solution.py
./solution.py
cat split-file/pass
# cat combgen #!/usr/bin/python # Combinatoric generator from sys import argv from itertools import combinations, permutations, product f=argv[1] r=int(argv[2]) n=argv[3::] def doprint(r): for i in r: for j in i: print j, print def calc_combination(n,r): fr=1 for i in range(0,r): fr=fr*(i+1) return calc_permutation(n,r)/fr def calc_permutation(n,r): ln=len(n) lnr=ln-r fn=1 for i in range(0,ln): fn=fn*(i+1) fnr=1 for i in range(0,lnr): fnr=fnr*(i+1) return fn/fnr def calc_product(n,r): ln=len(n) return ln**r def help(): print "Usage: combgen <combination|permutation|product> <r> <n>" if f == 'combination': print "Combinations = ",calc_combination(n,r) doprint(combinations(n,r)) elif f == 'permutation': print "Permutations =",calc_permutation(n,r) doprint(permutations(n,r)) elif f == 'product': print "Products =",calc_product(n,r) doprint(product(n,repeat=r)) else: help()
cat combgen