Взлом WordPressСтроим, ломаем, латаем
Геннадий Ковшенинsoulseekah
http://codeseekah.com
“Зарегистрированный пользователь может совершить вход прямо на сайте (не через wp-admin)...”
wp_signon, wp_set_auth_cookie
SELECT * FROM wp_users WHEREuser_login = “” OR SLEEP(10); # “;
SELECT * FROM wp_users WHEREuser_login = “evil0ne” OR 1=1; # “;
SELECT * FROM wp_users WHEREuser_login = “evil0ne” OR 1=0; # “;
SELECT * FROM wp_users WHEREuser_login = “evil0ne”
AND SUBSTRING((SELECT user_pass FROM wp_usersWHERE user_login = "admin"),
1, 1) = "$"; #'; “
Схемы таблиц, данные, системные функции
$wpdb→prepare, get_user_byget_post, и т.д.
“Нужна регистрация на фронтэнде...”
extract( array( 'hello' => 1 ) );echo $hello; // 1
extract( array( 'a' => 1 ), null, 'b' );echo $a; // undefinedecho $b_a; // 1
“Хочу публичные странички – профили!”
document.cookie, jQuery(link).click(), location.href =, и многое другое
esc_attr, esc_html, …
http://codeseekah.com/2012/03/13/wordpress-escape-functions/
“У нас на сервере 1С в сетке выгрузка накладных, надо, чтобы на нашем сайте можно было их посмотреть и скачать...”
wp-config.php, другой исходный код
объекты в wp_posts + attachmentssanitize_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