- Module parse failed: Unexpected token m in JSON at position 0 while parsing near ‘module.exports = «<\. ' #64
- Comments
- jgcmarins commented Feb 12, 2019
- Expected Behavior
- Actual Behavior
- How Do We Reproduce?
- alexander-akait commented Feb 12, 2019
- jgcmarins commented Feb 12, 2019
- swapnildalvi2002 commented Dec 5, 2019
- RezaZR commented Apr 24, 2020 •
- HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
- Содержание статьи
- warning
- Разведка
- Точка входа
- Закрепление
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
- mongoexport — issue with JSON query (extended JSON — Invalid JSON input)
- Почему rest_framework не хочет парсить json?
- Hack The Box. Прохождение JSON. Уязвимость в Json.Net и LPE через SeImpersonatePrivilege
- Разведка
- Entry point
Module parse failed: Unexpected token m in JSON at position 0 while parsing near ‘module.exports = «<\. ' #64
Comments
jgcmarins commented Feb 12, 2019
|
Expected Behavior
To load load this json file:
Actual Behavior
How Do We Reproduce?
The text was updated successfully, but these errors were encountered:
alexander-akait commented Feb 12, 2019
Use raw-loader. /my-awesome-project/app.json (exclude first ! )
jgcmarins commented Feb 12, 2019
swapnildalvi2002 commented Dec 5, 2019
Any solution on this I am also facing same issue
when use raw-loader!
var enUs = require( ‘raw-loader. /../data/translations/en-US.json’ );
ERROR:
\SyntaxError: Unexpected token e in JSON at position 0 while parsing near ‘export default «<\n
And when use json-loader!
var enUs = require( ‘json-loader. /../data/translations/en-US.json’ );
ERROR
SyntaxError: Unexpected token m in JSON at position 0 while parsing near ‘module.exports = <"m
RezaZR commented Apr 24, 2020 •
Any solution on this I am also facing same issue
when use raw-loader!
var enUs = require( ‘raw-loader. /../data/translations/en-US.json’ );
ERROR:
\SyntaxError: Unexpected token e in JSON at position 0 while parsing near ‘export default «<\n
And when use json-loader!
var enUs = require( ‘json-loader. /../data/translations/en-US.json’ );
ERROR
SyntaxError: Unexpected token m in JSON at position 0 while parsing near ‘module.exports = <"m
I’m having the same issue here. Any solution?
Источник
HTB Time. Захватываем машину с Linux через уязвимость в парсере JSON
Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Адрес машины — 10.10.10.214, я всегда добавляю их в / etc/ hosts , чтобы обращаться по имени.
Сканируем порты при помощи Nmap. Команда ниже проведет сканирование в два этапа — сначала общее, затем по найденным портам — со скриптами.
Находим два открытых порта: 22 (служба SSH) и 80 (веб‑сервер Apache). На SSH нам пока что ловить нечего, поэтому сразу отправляемся «пробивать» веб.
Точка входа
И на первой же странице нас встречает поле ввода с подписью ONLINE JSON BEAUTIFIER & VALIDATOR, из чего делаем вывод, что сайт парсит и выводит текст в формате JSON.
Главная страница сайта http://time.htb
При поиске точки входа лучше тестировать все поля ввода на обработку «нежелательных» символов. Они могут выполнять роль служебных для той или иной технологии, и поэтому, если программист не позаботился о специальной обработке, они могут вызывать ошибки или другие сбои в приложении. Я провел небольшой тест — скормил одну и ту же строчку валидаторам разных типов. Ответ получился разным, а это значит, что обработка пользовательского ввода происходит по‑разному.
Реакция двух типов валидаторов на строку qwe
Во втором случае мы получаем полноценный текст ошибки:
Validation failed: Unhandled Java exception: com.fasterxml.jackson.core. JsonParseException: Unrecognized token ‘qwe’: was expecting (‘true’, ‘false’ or ‘null’)
Скорее, это связано с тем, что приложение еще не доведено до ума, поэтому и присутствует пометка Beta. Именно сюда нам и нужно давить. Так как перед нами парсер JSON, давай посмотрим, как он реагирует на служебные последовательности‑типы [ ] и < >. В ответ на такие запросы мы тоже получим разные ошибки для разных последовательностей.
Реакция валидатора
Validation failed: Unhandled Java exception: com.fasterxml.jackson.databind.exc. MismatchedInputException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
Validation failed: Unhandled Java exception: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id ‘qwe’ as a subtype of [simple type, class java.lang.Object]: no such class found
Анализ ошибок полезен тем, что помогает определить используемую технологию. Это расширяет наше представление о том, как внутри устроено приложение. В первом и во втором случае исключение генерирует Java, а пакет называется com. fasterxml. jackson. databind. exc . Отлично, мы определили, что там внутри! Осталось поискать в интернете уязвимости, которые уже нашли в этой программе.
Для популярных технологий есть хорошо документированные эксплоиты, к тому же не в одном варианте. В нашем случае достаточно запроса jackson databind vulnerability , и Google находит уязвимость, которая может предоставить удаленное выполнение кода (RCE). Также получаем ее идентификатор (2019-12384) в базе данных общеизвестных уязвимостей информационной безопасности (CVE).
Поиск задокументированных уязвимостей в технологии Jackson Databind
Для уязвимостей с CVE на GitHub несложно найти эксплоит. Повторяем запрос и ищем готовый код. Первая же ссылка ведет нас к полному описанию процесса эксплуатации.
Поиск эксплоитов для CVE-2019-12384
Закрепление
Выбранная нами уязвимость заключается в том, что злоумышленник может использовать десериализацию для удаленного выполнения кода. Дело в том, что внутри пакета рекурсивно вызываются все сеттеры с ключом, содержащимся внутри подобъекта, а именно setUrl( String url) . После этого этапа полный объект снова сериализуется в объект JSON. При этом все поля сериализуются напрямую, если геттер не определен, или через явный геттер. Когда вызывается getConnection( ) , создается база данных. Но мы можем создать соединение с удаленной базой данных.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник
mongoexport — issue with JSON query (extended JSON — Invalid JSON input)
I have started learning MongoDB recently. Today the instructor taught us the mongoexport command. While practicing the same, I face a typical issue which none of the other batchmates including the instructor faced. I use MongoDB version 4.2.0 on my Windows 10 machine.
If I use mongoexport for my collection without any -q parameter to specify any filtering condition, it works fine.
However, whenever I specify the JSON query as -q (or —query) it gives an error as follows.
The same error persists in all the different flavors I had attempted with for the query.
I had even attempted with a different query condition on the ’empId’ as -q <'empId':'1001'>But no luck. I keep getting the same error.
As per one of the suggestions given in the StackOverflow website, I tried with the following option but getting a different error.
The error is : ‘query ‘[39 123 101 109 112 73 100 58 49 48 48 49 125 39]’ is not valid JSON: json: cannot unmarshal string into Go value of type map[string]interface <>‘.
I am really not sure what is missing here ? Tried with a bit of Googling and also gone through the official MongoDB documentation of the mongoexport — but no luck.
The employee collection in my system looks like the follows with 3 documents.
Update
As suggested by @NikosM, I have saved the query in a .json file (query.json) and tried the same mongoexport command with the new approach. Still, no luck. Same Marshal error.
Any help on this will be highly appreciated.
Источник
Почему rest_framework не хочет парсить json?
Есть функция, которая принимает json
Код запущен на серваке на порту 8080 и прописан адрес такого вида h t t p://example:8080
И прикол в том что, если отправлять запрос непосредственно с сайта(на кнопку повесил адрес метода, то все работает и json парсится), а если я отправляю запрос через pycharm или postman, получаю такую ошибку
В чем может быть проблема?
- Вопрос задан более трёх лет назад
- 408 просмотров
from rest_framework.parsers import JSONParser
@csrf_exempt
def user_update(request):
if request.method == ‘POST’:
try:
data = JSONParser().parse(request)
token = data[‘token’]
first_name = data[‘first_name’]
last_name = data[‘last_name’]
photo = data[‘photo’]
user = UserProfile.objects.get(token=token)
user.first_name = first_name
user.last_name = last_name
user.photo = photo
user.confirmed = True
user.save()
return JSONResponse( <
‘success’: user.confirmed,
‘first_name’: user.first_name,
‘last_name’: user.last_name,
‘photo’: user.photo
>)
except KeyError:
return JSONResponse( <
‘success’: False,
‘code’: ’99’,
‘notice’: ‘Invalid token’
>)
Вот, как описал выше работает с сайта, а с утилит парсинг валится(
Источник
Hack The Box. Прохождение JSON. Уязвимость в Json.Net и LPE через SeImpersonatePrivilege
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье эксплуатируем уязвимость в Json.Net и посмотрим, как повысить свои привилегии до SYSTEM, если мы имеем право SeImpersonatePrivilege.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ 🙂
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Разведка
Данная машина имеет IP адрес 10.10.10.158, который я добавляю в /etc/hosts.
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
Далее нужно собрать больше информации об известных портах. Для того используем nmap с параметром -А.
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
Зайдем посмотреть, что на вебе. В итоге загружается страница, и потом только нас перебрасывает на страницу авторизации.
Можно было бы это обойти, но admin:admin позволяют нам зайти.
На самом сайте ничего интересного нет, и в попытках найти хоть что-то, цепляемся за куки.
То есть значение Password — это MD5 от пароля admin.
Далее ничего интересного. Открыв Burp и перехватив запрос, можно обнаружить интересный HTTP-заголовок.
И на данном этапе я завис, пока мне не подсказали “поломать значение”. Очевидно, что в таких случаях нужно добиваться ошибок и смотреть реакцию API в трех состояниях: верно, неверно и ошибка. Но я почему-то это упустил.
Entry point
И далее было обнаружено, что если в странном заголовке HTTP будут передаваться поломанные данные (удалить часть символов), то сервер выдает ошибки. Ниже приведены данные, которые возвращает сервер при нормальном значении заголовка и при удалении от одного до четырех символов.
Интересную ошибку мы получаем в последнем случае. Так как происходит десереалиация объекта JSON, мы можем проэксплуатировать это с помощью ysoserial. Будем использовать гаджет ObjectDataProvider для Json.Net и выполним команду ping для проверки предположения уязвимости.
Теперь включим tcpdump с фильтром протокола ICMP, чтобы отлавливать ping.
При перехвате запроса меняем заголовок.
И получаем тот пинг, который заказывали.
Теперь нужно проделать то же самое с нагрузкой метерпретер. Для начала сгенерируем нагрузку и откроем листенер.
Теперь откроем локальный SMB сервер с которого будет запускаться нагрузка.
Теперь снова сериализуем нужные данные, в качестве команды запускаем нашу нагрузку с нашего сервера.
Видим успешное подключение к серверу SMB и успешно загруженную сессию метерпретера.
И читаем файл пользователя.
Первым делом смотрим информацию о пользователе, под которым мы работаем.
У пользователя включена привилегия SeImpersonatePrivilege (право «Олицетворять клиента после проверки подлинности»). Как говорит Microsoft:
Присвоение пользователю права «Олицетворять клиента после проверки подлинности» разрешает программам, запущенным от имени данного пользователя, олицетворять клиента. Использование данного параметра предотвращает олицетворение неавторизованными серверами клиентов, подключающихся к этим серверам с помощью процедур RPC или именованных каналов.
Дело в том, что мы можем поднять свои права до SYSTEM. Полное исследование можно глянуть тут. Данной уязвимости подвержены следующие привилегии:
- SeImpersonatePrivilege
- SeAssignPrimaryPrivilege
- SeTcbPrivilege
- SeBackupPrivilege
- SeRestorePrivilege
- SeCreateTokenPrivilege
- SeLoadDriverPrivilege
- SeTakeOwnershipPrivilege
- SeDebugPrivilege
Давайте сгенерируем еще одну нагрузку и запустим для нее листенер.
Для эксплуатации будем использовать Juicy Potato. Но в качестве параметра нужно указать CLSID учетной записи для целевой системы, его возьмем также с репозитория. Но сначала глянем, что за система.
И теперь смотрим CLSID.
Загрузим файлы на целевой хост.
Теперь запускаем Juicy Potato и указываем ему с помощью чего будет создан процесс (CreateProcessWithTokenW или CreateProcessAsUser, параметр -t), файл процесса (-p), порт для прослушивания (-l), и CLSID (-c).
Процесс успешно создан, и мы видим созданную сессию метерпретер.
И получаем учетную запись SYSTEM.
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Источник