Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Взлом WordPress
Строим, ломаем, латаем
Геннадий Ковшенин
soulseekah
http://codeseekah.com
“Зарегистрированный пользователь
может совершить вход прямо на
сайте (не через wp-admin)...”
wp_signon, wp_set_auth_cookie
SELECT * FROM wp_users WHERE
user_login = “” OR SLEEP(10); # “;
SELECT * FROM wp_users WHERE
user_login = “evil0ne” OR 1=1; # “;
SELECT * FROM wp_users WHERE
user_login = “evil0ne” OR 1=0; # “;
SELECT * FROM wp_users WHERE
user_login = “evil0ne”
AND SUBSTRING((
SELECT user_pass FROM wp_users
WHERE user_login = "adm...
Схемы таблиц, данные, системные
функции
$wpdb→prepare, get_user_by
get_post, и т.д.
“Нужна регистрация на фронтэнде...”
extract( array( 'hello' => 1 ) );
echo $hello; // 1
extract( array( 'a' => 1 ), null, 'b' );
echo $a; // undefined
echo $b_a; // 1
“Хочу публичные странички – профили!”
document.cookie, jQuery(link).click(),
location.href =, и многое другое
esc_attr, esc_html, …
http://codeseekah.com/2012/03/13/wordpress-escape-functions/
“У нас на сервере 1С в сетке выгрузка
накладных, надо, чтобы на нашем сайте
можно было их посмотреть и скачать...”
2
wp-config.php, другой исходный код
объекты в wp_posts + attachments
sanitize_file_name
current_user_can, check_admin_referrer
(nonce), Settings API
https://codex.wordpress.org/Settings_API
“Завершить безопасную сделку по одному
щелчку мыши...”
Заставить заказчика пройти по ссылке ?complete=1
...напрямую, CSRF - iframe, src, или Location:
wp_create_nonce, wp_verify_nonce
https://codex.wordpress.org/WordPress_Nonces
“У каждого пользователя два внутренних
счета – заказчика и фрилансера. Можно
между ними перекидывать денежки без
проблем.”
Транзакции, межпроцессорные замки,
UPDATE WHERE, и т.д.
:(
;(
Пользовательский ввод
всегда считать опасным
https://codex.wordpress.org/Data_Validation
Изучать досконально WordPress API
Защитить любое действие 'nonce'ом
Бонус
или
“ой забыл в ТЗ указать, а добавь еще это...”
wp_handle_upload
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
Upcoming SlideShare
Loading in …5
×

Gennady kovshenin-wcrus2015-2

938 views

Published on

WordCamp Russia presentation (search for video on wordcamp.tv)

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Gennady kovshenin-wcrus2015-2

  1. 1. Взлом WordPress Строим, ломаем, латаем
  2. 2. Геннадий Ковшенин soulseekah http://codeseekah.com
  3. 3. “Зарегистрированный пользователь может совершить вход прямо на сайте (не через wp-admin)...”
  4. 4. wp_signon, wp_set_auth_cookie
  5. 5. SELECT * FROM wp_users WHERE user_login = “” OR SLEEP(10); # “;
  6. 6. SELECT * FROM wp_users WHERE user_login = “evil0ne” OR 1=1; # “;
  7. 7. SELECT * FROM wp_users WHERE user_login = “evil0ne” OR 1=0; # “;
  8. 8. SELECT * FROM wp_users WHERE user_login = “evil0ne” AND SUBSTRING(( SELECT user_pass FROM wp_users WHERE user_login = "admin"), 1, 1) = "$"; #'; “
  9. 9. Схемы таблиц, данные, системные функции
  10. 10. $wpdb→prepare, get_user_by get_post, и т.д.
  11. 11. “Нужна регистрация на фронтэнде...”
  12. 12. extract( array( 'hello' => 1 ) ); echo $hello; // 1
  13. 13. extract( array( 'a' => 1 ), null, 'b' ); echo $a; // undefined echo $b_a; // 1
  14. 14. “Хочу публичные странички – профили!”
  15. 15. document.cookie, jQuery(link).click(), location.href =, и многое другое
  16. 16. esc_attr, esc_html, … http://codeseekah.com/2012/03/13/wordpress-escape-functions/
  17. 17. “У нас на сервере 1С в сетке выгрузка накладных, надо, чтобы на нашем сайте можно было их посмотреть и скачать...”
  18. 18. 2
  19. 19. wp-config.php, другой исходный код
  20. 20. объекты в wp_posts + attachments sanitize_file_name
  21. 21. current_user_can, check_admin_referrer (nonce), Settings API https://codex.wordpress.org/Settings_API
  22. 22. “Завершить безопасную сделку по одному щелчку мыши...”
  23. 23. Заставить заказчика пройти по ссылке ?complete=1 ...напрямую, CSRF - iframe, src, или Location:
  24. 24. wp_create_nonce, wp_verify_nonce https://codex.wordpress.org/WordPress_Nonces
  25. 25. “У каждого пользователя два внутренних счета – заказчика и фрилансера. Можно между ними перекидывать денежки без проблем.”
  26. 26. Транзакции, межпроцессорные замки, UPDATE WHERE, и т.д.
  27. 27. :(
  28. 28. ;(
  29. 29. Пользовательский ввод всегда считать опасным
  30. 30. https://codex.wordpress.org/Data_Validation
  31. 31. Изучать досконально WordPress API
  32. 32. Защитить любое действие 'nonce'ом
  33. 33. Бонус или “ой забыл в ТЗ указать, а добавь еще это...”
  34. 34. wp_handle_upload

×