def test(self): from librairies.keys_wrapper import PublicKey import base64 key1_data = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP f19C6goN3bUGrrniwwIDAQAB -----END PUBLIC KEY-----""" key2_data = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP f19C6goN3bUGrrniwwIDBTy3 -----END PUBLIC KEY-----""" cipher1 = base64.b64_decode( "BzFd4riBUZdFuPCkB3LOh+5iyMImeQ/saFLVD+ca2L8VKSz0+wtTaL55RRpHBAQdl24Fb3XyVg2N9UDcx3slT+vZs7tr03W7oJZxVp3M0ihoCwer3xZNieem8WZQvQvyNP5s5gMT+K6pjB9hDFWWmHzsn7eOYxRJZTIDgxA4k2w=" ) cipher2 = base64.b64_decode( "jmVRiKyVPy1CHiYLl8fvpsDAhz8rDa/Ug87ZUXZ//rMBKfcJ5MqZnQbyTJZwSNASnQfgel3J/xJsjlnf8LoChzhgT28qSppjMfWtQvR6mar1GA0Ya1VRHkhggX1RUFA4uzL56X5voi0wZEpJITUXubbujDXHjlAfdLC7BvL/5+w=" ) result = self.attack( [PublicKey(key1_data), PublicKey(key2_data)], [ cipher1, cipher2, ], ) print(result) return result != (None, None)
def main(): if len(sys.argv) != 4: usage() master_key = open(sys.argv[1], 'rb').read() hudson_secret_key = open(sys.argv[2], 'rb').read() hashed_master_key = sha256(master_key).digest()[:16] o = AES.new(hashed_master_key, AES.MODE_ECB) secret = o.decrypt(hudson_secret_key) secret = secret[:-16] secret = secret[:16] credentials = open(sys.argv[3]).read() passwords = re.findall(r'<p(?:assword|rivateKey)>\{?(.*?)\}?</p(?:assword|rivateKey)>', credentials) # You can find the password format at https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/util/Secret.java#L167-L216 for password in passwords: p = b64_decode(bytes(password, 'utf-8')) # Get payload version payload_version = p[0] if payload_version == 1: print(decryptNewPassword(secret, p)) else: # Assuming we don't have a V2 payload, seeing as current crypto isn't horrible that's a fair assumption print(decryptOldPassword(secret,p))
def decode(data): """ base64 decode helper for jinja :param data: base64 encodeable bytes-object :type model: byte :returns: decodeed bytes-object :rtype: byte """ return b64_decode(data)
def decodes(data, code="ascii"): """ base64 decode helper for jinja taking string and returning string :param data: base64-encoded string which should be decoded :type model: string :param code: code to use for bytes en-/decoding (default: ascii) :type model: string :returns: decoded string :rtype: string """ return b64_decode(data.encode(code)).decode(code)
def decode(message_file): with open(message_file, 'r') as file_message: full_message = file_message.read() _, message_sig = full_message.split("&message=") message, _ = message_sig.split("&sig") url_parsed = unquote(message) if url_parsed[-2:] != "==": url_parsed += '=' decoded = b64_decode(url_parsed) decompressed = decompress(decoded) return json.loads(decompressed.decode('utf-8'))
def process_ser_log_parser(port): node_id = 0 role = '' with Serial(port, BAUDRATE) as ser: # discover node_id while True: _, module, content = LogParser.parse_log_line( ser.readline().decode()) if module is LogModule.MAIN: node_id = LogParser.parse_node_id(content) if node_id: break # discover role while True: _, module, _ = LogParser.parse_log_line(ser.readline().decode()) if module is LogModule.MASTER or module is LogModule.SLAVE: role = module print('node_id: {}, role: {}'.format(node_id, role.value)) break # collect reports csv_file = '{}.csv'.format('master' if role is LogModule.MASTER else 'slave-{}'.format(node_id)) b64_file = '{}.b64'.format('master' if role is LogModule.MASTER else 'slave-{}'.format(node_id)) with open('{}-{}'.format('rss', csv_file), 'w') as rss_csv, \ open('{}-{}'.format('acc', csv_file), 'w') as acc_csv, \ open('{}-{}'.format('rss', b64_file), 'w') as rss_b64, \ open('{}-{}'.format('acc', b64_file), 'w') as acc_b64: rss_writer = DictWriter(rss_csv, fieldnames=[ 'source_id', 'seq_num', 'time_stamp', 'rss_local', 'rss_remote' ]) acc_writer = DictWriter( acc_csv, fieldnames=[a.name.lower() for a in AccAxis]) rss_writer.writeheader() acc_writer.writeheader() # write field names while True: level, module, content = LogParser.parse_log_line( ser.readline().decode()) if level is LogLevel.REP: report_type, report_data = LogParser.parse_report(content) assert (isinstance(report_type, ReportType)) if report_type is ReportType.RSS: rss_b64.write('{}\n'.format(report_data)) rss_writer.writerow( LogParser.parse_rss(b64_decode(report_data))) else: acc_b64.write('{}\n'.format(report_data)) acc_writer.writerows( LogParser.parse_acc_xyz(b64_decode(report_data))) elif (module is LogModule.MASTER or module is LogModule.SLAVE ) and content == 'Process started': # restart detected, flush and terminate rss_csv.flush() acc_csv.flush() rss_b64.flush() acc_b64.flush() break