Kaan-nın yazdığı chat pluginində bunu aşkarladım.
Problemin kökü orda başlayır ki,switch,case statementlərində GET-lə gələn zaproslar nə sessiya ilə,nə də user level ilə secure olunmur.
Secure olunmursa deməli chata avtorizasiya olmayan və ya administrativ accesi olmayan şəxs primitiv kiçik loop içərisində handle edərək,istər müəyyən id aralığı ilə istərsə də sonsuz şəkildə (Kod:
while(1)
)yazılanları silməklə dolayı yolla table-ni truncate eləməyə müvəffəq olacaq )
exp:
Kod:
http://localhost/seditio/plug.php?e=chat&d=0&c=delete&id=silmek istediyin commentin id-si
Kodların original vəziyyəti
Kod:
if (!empty($c))
{
switch ($c)
{
case 'quit':
$sqltmp = sed_sql_query("DELETE FROM sed_chat_online WHERE chat_online_userid='".$usr['id']."'");
sed_chat_addline(0, "Quits: ".sed_cc($usr['name']));
sed_redirect("index.php");
exit;
break;
case 'delete':
sed_cc($cfg['plugin']['chat']['minleveladmin']);
if (is_int($f) && $f>0) { $id = $f; }
$sqltmp = sed_sql_query("DELETE FROM sed_chat WHERE chat_id='".$id."'");
sed_redirect("index.php?e=chat&cmd=edit&d=".$d);
exit;
break;
case 'topic':
//sed_minlevel($cfg['plugin']['chat']['minleveladmin']);
$sqltmp = sed_sql_query("UPDATE $db_config SET config_value='".addslashes($f)."'WHERE config_owner='plug' AND config_cat='chat' and config_name='topic'");
sed_chat_addline(0, "New topic set by ".sed_cc($usr['name'])." : ".sed_cc($f));
sed_redirect("index.php?e=chat&d=".$d);
exit;
break;
default:
break;
}
}
Görüldüyü kimi
Kod:
case 'delete':
sed_cc($cfg['plugin']['chat']['minleveladmin']);
if (is_int($f) && $f>0) { $id = $f; }
$sqltmp = sed_sql_query("DELETE FROM sed_chat WHERE chat_id='".$id."'");
sed_redirect("index.php?e=chat&cmd=edit&d=".$d);
exit;
break;
hər hansı şərt olmadan birbaşa sorgunu bazaya ötürüb kommenti bazadan silə bilərik.
Bu pluginin instalyasiya olunduğu bütün saytlarda keçərlidir hal-hazırda.
Fixsasiyasın aşağıda göstərirəm nə qədər gec deyil modifikasiya edin pluginə
Qeyd:orda yalnız leveli 5 yəni administrator lar üçün yazmışam siz modifikiasiya edib məsələn
Kod:
if($levelcheck['user_maingrp']==5 || $levelcheck['user_maingrp']==3 $levelcheck['user_maingrp']==2 )
şəklində də dəyişdirə bilərisiniz
Kod:
case 'delete':
$uid = $usr['id'];
$levelcheck = mysql_fetch_array(sed_sql_query("select user_maingrp from sed_users where user_id='$uid'"));
if($levelcheck['user_maingrp']==5){
sed_cc($cfg['plugin']['chat']['minleveladmin']);
if (is_int($f) && $f>0) { $id = $f; }
$sqltmp = sed_sql_query("DELETE FROM sed_chat WHERE chat_id='".$id."'");
sed_redirect("index.php?e=chat&cmd=edit&d=".$d);
exit;
break;
}else{
die("<script>alert('Sayta giris etmemisiniz,ve ya sizin bunu etmeye icazeniz yoxdur')</script>");
}
Və alt sətirdə
Kod:
case 'topic':
//sed_minlevel($cfg['plugin']['chat']['minleveladmin']);
$sqltmp = sed_sql_query("UPDATE $db_config SET config_value='".addslashes($f)."'WHERE config_owner='plug' AND config_cat='chat' and config_name='topic'");
sed_chat_addline(0, "New topic set by ".sed_cc($usr['name'])." : ".sed_cc($f));
sed_redirect("index.php?e=chat&d=".$d);
exit;
break;
Kod:
//sed_minlevel($cfg['plugin']['chat']['minleveladmin']);
hissəni bağlamaq məsləhətdir,error verir ve saytin serverdeki path-ı ortada qalır.seditionun yeni versiyalarında bu funksiya artıq daxil edilməyib.
Kod:
/plug.php?e=chat&d=0&c=topic
url-u yoxlayaraq funkisyanın skriptdə olub olmadığını yoxlaya bilərsiniz
pluginin seditio.az dakı original yükləmə linki
http://hotfile.com/dl/136300087/f5e5ffb/chat_by_local_seditio.az.rar.html