###### tags: `Forensics` `CTF` # **YACTF 2022 - metapdf** ![](https://i.imgur.com/7QXYhT1.jpg) Есть некий файл, в нем спрятан флаг, давайте найдем его При открытии файла meta.pdf видим только следующее ![](https://i.imgur.com/mjNkOeE.png) Тут используются акроформы пдф, подробнее об этом - https://www.adobe.com/devnet-docs/acrobat/ios/ru/forms.html Скриптом на питоне попробуем распарсить акроформы из файла (https://pdfminersix.readthedocs.io/en/develop/howto/acro_forms.html): ``` from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdftypes import resolve1 from pdfminer.psparser import PSLiteral, PSKeyword from pdfminer.utils import decode_text data = {} def decode_value(value): # decode PSLiteral, PSKeyword if isinstance(value, (PSLiteral, PSKeyword)): value = value.name # decode bytes if isinstance(value, bytes): value = decode_text(value) return value with open("C:\\temp\meta_23a3365c.pdf", 'rb') as fp: parser = PDFParser(fp) doc = PDFDocument(parser) res = resolve1(doc.catalog) if 'AcroForm' not in res: raise ValueError("No AcroForm Found") fields = resolve1(doc.catalog['AcroForm'])['Fields'] # may need further resolving for f in fields: field = resolve1(f) name, values = field.get('T'), field.get('V') # decode name name = decode_text(name) # resolve indirect obj values = resolve1(values) # decode value(s) if isinstance(values, list): values = [decode_value(v) for v in values] else: values = decode_value(values) data.update({name: values}) print(name, values) ``` Получили вот такой результат: `amo9fltdO2pqPXtfX186KytqaiwkJCQkOighW10rIiIpW2pqXSxfXyQ6KytqaiwkXyRfOighW10rIiIpW2pqXSxfJF86KytqaiwkXyQkOih7fSsiIilbampdLCQkXyQ6KGpqW2pqXSsiIilbampdLF8kJDorK2pqLCQkJF86KCEiIisiIilbampdLCRfXzorK2pqLCRfJDorK2pqLCQkX186KHt9KyIiKVtqal0sJCRfOisramosJCQkOisramosJF9fXzorK2pqLCRfXyQ6Kytqan07amouJF89KGpqLiRfPWpqKyIiKVtqai4kXyRdKyhqai5fJD1qai4kX1tqai5fXyRdKSsoamouJCQ9KGpqLiQrIiIpW2pqLl9fJF0pKygoIWpqKSsiIilbamouXyQkXSsoamouX189amouJF9bamouJCRfXSkrKGpqLiQ9KCEiIisiIilbamouX18kXSkrKGpqLl89KCEiIisiIilbamouXyRfXSkramouJF9bamouJF8kXStqai5fXytqai5fJCtqai4kO2pqLiQkPWpqLiQrKCEiIisiIilbamouXyQkXStqai5fXytqai5fK2pqLiQramouJCQ7amouJD0oamouX19fKVtqai4kX11bamouJF9dO2pqLiQoamouJChqai4kJCsiXCIiKyJcXCIramouX18kK2pqLiQkXytqai4kJF8ramouJF8kXysiXFwiK2pqLl9fJCtqai4kJF8ramouXyRfKyJcXCIramouJF9fK2pqLl9fXysiXFwiK2pqLl9fJCtqai4kJF8ramouX19fK2pqLiRfJF8rIlxcIitqai5fXyQramouJCQkK2pqLl9fJCsoIVtdKyIiKVtqai5fJF9dK2pqLl8kK2pqLiRfJF8ramouJCRfJCsiXFwiK2pqLiRfXytqai5fX18rIj1cXCIramouJF9fK2pqLl9fXysiXFxcIlxcIitqai5fXyQramouJCQkK2pqLl9fJCtqai4kXyRfK2pqLiQkX18ramouX18ramouJCQkJCsieyIramouJF9fK2pqLiQkJCQramouJF9fXytqai5fJF8ramouJF8kJCtqai4kX18ramouJCRfJCtqai4kXyRfK2pqLiQkX18ramouXyQkK2pqLiRfJCtqai4kJCQramouJF8kJCtqai4kXyRfK2pqLl8kXytqai4kJF8ramouJF9fXytqai4kJCRfK2pqLl8kXytqai4kXyQkK2pqLiQkJF8ramouJF9fK2pqLiRfJCQramouJF8kK2pqLl9fJCtqai4kJF8ramouJCRfXytqai4kX19fK2pqLiRfJF8ramouJCRfXytqai5fX18ramouXyRfKyJ9XFxcIjtcXCIramouX18kK2pqLl8kXysiXFwiK2pqLl9fJCtqai4kJF8ramouJCRfK2pqLiRfJF8rIlxcIitqai5fXyQramouJCRfK2pqLl8kXysiXFwiK2pqLiRfXytqai5fX18rIlxcIitqai5fXyQramouJF8kK2pqLl9fXytqai4kJCRfKyghW10rIiIpW2pqLl8kX10rKCFbXSsiIilbamouXyRfXStqai5fJCsiXFwiK2pqLiRfXytqai5fX18rIj1cXCIramouJF9fK2pqLl9fXysiXFwiK2pqLl9fJCtqai4kJF8ramouX19fK2pqLiRfJF8rIlxcIitqai5fXyQramouJCQkK2pqLl9fJCsoIVtdKyIiKVtqai5fJF9dK2pqLl8kK2pqLiRfJF8ramouJCRfJCsiLlxcIitqai5fXyQramouJCRfK2pqLl8kJCtqai5fK2pqLiRfJCQrIlxcIitqai5fXyQramouJCRfK2pqLl8kJCtqai5fXysiXFwiK2pqLl9fJCtqai4kJF8ramouXyRfKyIoIitqai5fX18rIiwiK2pqLiRfXysiKTtcXCIramouJF9fK2pqLl9fXysiXFwiK2pqLl9fJCtqai5fJF8ramouJF8kXysoIVtdKyIiKVtqai5fJF9dK2pqLiQkJF8rIlxcIitqai5fXyQramouJCRfK2pqLl8kXytqai5fXysiKFxcIitqai5fXyQramouJF8kK2pqLl9fXytqai4kJCRfKyghW10rIiIpW2pqLl8kX10rKCFbXSsiIilbamouXyRfXStqai5fJCsiKTsiKyJcIiIpKCkpKCk7 Name Name` Очень похоже на кодировку base64. Пробуем декодить: ![](https://i.imgur.com/rCG0HDA.png) Получается странная последовательность, после гугления выясняется что это обфусцированный js. Вставляем в декодер: https://github.com/jacobsoo/Decoder-JJEncode ![](https://i.imgur.com/VDJACru.png) получаем флаг var payload = "**yactf{4f82b4dac357ba268e2be4b516c8ac02}**"; var hello = payload.substr(0,4); alert(hello);