Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
07 ноября 2016, 11:09
2
+2
Все нормальные дополнения будут работать без проблем с любым префиксом и папками, ибо они получается из системных настроек и констант.

Проблемы могут быть только с собственными сниппетами, которые хардкодят префикс вот так
$res = $modx->query("SELECT * FROM modx_users WHERE...");
вместо
$res = $modx->query("SELECT * FROM {$modx->config['table_prefix']}_users WHERE...");
или даже
$res = $modx->query("SELECT * FROM {$modx->getTableName('modUser')} WHERE...");
это если есть xPDO модель для этой таблицы
Василий Наумкин
07 ноября 2016, 09:27
2
+1
$modx->event->returnedValues
и будет пустым, пока туда кто-то что-то не запишет.

Держи рабочий пример из платного msDiscount
case 'msOnGetProductPrice':
		if ($modx->context->key == 'mgr') {return;}
		/**
		 * Counts discount of current product for current user, based on rules in msDiscount component
		 * New price must be set in $modx->event->returnedValues['price']
		 *
		 * @var msProductData $product Object with product properties
		 * @var array $data Array with product properties. Can be empty!
		 * @var float $price Current price of product
		 */
		if (!isset($modx->event->returnedValues['price'])) {
			$modx->event->returnedValues['price'] = $price;
		}
		// Get link to product price
		$price = & $modx->event->returnedValues['price'];
		$new_price = $msDiscount->getNewPrice($product->id, $price);
		if ($new_price !== false) {
			$price = $new_price;
		}
		break;
Обрати внимание, что в событии доступны 3 параметра: $product, $data и собственно $price
Василий Наумкин
07 ноября 2016, 09:09
+3
Кошмар какой!


Предлагаю написать про это отдельный топик, наверняка многие не в курсе. И да, на modhost.pro по умолчанию для всех сайтов прописано правило
location ~* ^/core/ {
    deny                all;
}
Василий Наумкин
06 ноября 2016, 18:25
+1
Может поэтому в Eloquent есть отдельно Raw expressions?

Вообще, грусть-тоска. Я наивно полагал, что работа через xPDO меня как-то защищает. Очевидно, это всё в прошлом и нужно пересматривать все свои дополнения.

Спасибо за PR в pdoTools!
Василий Наумкин
06 ноября 2016, 18:18
0
Хороший вопрос.

Надеюсь, что результат выполнения запроса увидеть никак нельзя, но я уже ни в чём не уверен.
Василий Наумкин
06 ноября 2016, 16:12
+1
Ясно.

Не нужно указывать имя пользователя как число, а потом использовать его в качестве username вместо id в адресе своей страницы. У меня конечно много разных проверок, но до такого я не додумался.

Исправлено.
Василий Наумкин
06 ноября 2016, 15:52
+1
Давно стоит, но я же в админке авторизован — так что не катит для 100% проверки.
Василий Наумкин
06 ноября 2016, 15:49
0
Не могу повторить.

Что именно ты делаешь, опубликовываешь или сохраняешь?
Василий Наумкин
06 ноября 2016, 15:01
0
У ms2Gallery есть параметры &parents и &resources, которые работают аналогично pdoResources.

Ну и &showLog, вроде, тоже есть.
Василий Наумкин
06 ноября 2016, 09:56
0
В общем, произвёл взлом чужого сайта в личных целях, молодец.

Хоть бы сообщество ломал, а не магазин, который приносит доход и тебе, в том числе.
Василий Наумкин
06 ноября 2016, 09:54
+2
Сережа, ты по-русски не понимаешь?

Еще раз: на момент публикации моего комментария не было известно, что для эксплуатации уязвимости не нужен вход в админку.

Достаточно было дописать в заметке, что уязвимость можно эксплуатировать хоть откуда, и всё. Я не просил её доказывать, я не отмахивался от неё. Мы её и по почте обсудили с Николаем — и там он тоже не сказал, что доступ в админку уже не нужен.

Наверное, это недоработка Николая, что он недостаточно рассказал о серьёзности проблемы.

P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
И что, блин? Это вообще теперь не имеет никакого смысла, если любой сайт можно сломать хоть откуда, если у него стандартный префикс таблиц.

Более того, префикс таблиц теперь приравнивается к паролю супер-админа, его нужно хранить за семью печатями! Вот что нужно было написать, а не как сейчас.

Но если ты считаешь, что я отмахнулся от проблемы и повёл себя как мудак — твоё право. У меня нет желания это обсасывать второй день подряд.

С моей стороны вопрос решен, дальше дело за ребятами из MODX.
Василий Наумкин
06 ноября 2016, 09:11
+1
Да я вроде тоже не предлагал демонстрировать это на моих проектах, не правда ли?

Но Николая это не остановило.
Василий Наумкин
06 ноября 2016, 08:53
0
Кстати, на тот момент считалось, что доступ в админку необходим и мой способ вполне себе работает.

А вот чуть позже Николай залез без админки, и сразу на рабочий проект и написал UPD2 у себя в заметке.

И еще кстати — в текущей заметке этого UPD2 до сих пор нет. Как считаешь, большая ли разница, когда для эксплуатации уязвимости нужен доступ в админку, а когда нет?

Но а так да, всё один в один, прям идентичные ситуации.
Василий Наумкин
05 ноября 2016, 23:35
+2
Большую красную кнопку внизу не видно?
Василий Наумкин
05 ноября 2016, 19:12
0
Ну, иначе высокое руководство не считало те дыры — дырами, и отмахивались, мол так и задумано.
Пришлось доказывать на их же сайте.

И, насколько я помню, Евгений еще далеко не всё показал. Не удивлюсь, если и про сегодняшний баг он давно в курсе, просто стимула рассказывать авторам MODX больше нет.