Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: запрет на update таблицы
 
 автор: novik_06   (12.07.2006 в 03:47)   письмо автору
 
 

возможно ли сделать запрет на изменения данных в таблице из скрипта именно на конкретную таблицу.
то есть, в таблице хранятся даные по настройке сайта.
изменить их можно только через phpmyadmin, а со скрипта нельзя.

вообще такое осуществимо ?
или может есть какие другие варианты по защите имено конкретных таблиц.

   
 
 автор: hell_riser   (12.07.2006 в 08:14)   письмо автору
 
   для: novik_06   (12.07.2006 в 03:47)
 

Возможно тип таблицы ARCHIVE(только для чтения) поможет, но я могу и ошибаться.

   
 
 автор: Trianon   (12.07.2006 в 11:58)   письмо автору
 
   для: novik_06   (12.07.2006 в 03:47)
 

Если хостер позволяет Вам создавать нескольких пользователей ( в данном случае еще одного с ограниченными привилегиями) для одной БД, то можно.

   
 
 автор: novik_06   (12.07.2006 в 12:07)   письмо автору
 
   для: Trianon   (12.07.2006 в 11:58)
 

Trianon этот вариант не подойдет.

   
 
 автор: Trianon   (12.07.2006 в 12:24)   письмо автору
 
   для: novik_06   (12.07.2006 в 12:07)
 

А другого Вы не найдете.

   
 
 автор: novik_06   (12.07.2006 в 21:02)   письмо автору
 
   для: Trianon   (12.07.2006 в 12:24)
 

хорошо, тогда может такой вариант реален ?
типа скрипта который отслеживал бы запросы или именно к этой таблице ну или ко всей базе, это в принцыпе не существенно.
то есть писались бы логи, с какого айпи и откуда и как посылался запрос.
было бы идеально еслибы писались запросы только на упдате.

у меня проблема вообще такая.
какая то сволота меняет данные.
уже бьюсь неделю и не могу выловить где дыра.
по серверным логам нечего не показывает.
уже с хостером все перетресли.
еще такой момент, известно то, что в принцыпе может изменять и просматривать всю таблицу, так как были изменения еще в 3 таблицах, но это не существенные.

уже просто сил нет.
может кто что подскажет как выловить гада и найти дырку.

   
 
 автор: cheops   (13.07.2006 в 00:43)   письмо автору
 
   для: novik_06   (12.07.2006 в 21:02)
 

Может он банально украл пароли и ходит как легальный пользователь? Попробуйте для начала сменить пароли на хост.

   
 
 автор: novik_06   (13.07.2006 в 01:48)   письмо автору
 
   для: cheops   (13.07.2006 в 00:43)
 

все уже поменяно неодин раз. логи захода на хост проверены.
все чисто.

   
 
 автор: cheops   (13.07.2006 в 09:11)   письмо автору
 
   для: novik_06   (13.07.2006 в 01:48)
 

Хост сканировали на предмет больших PHP-файлов (больше 50 Кб) на предмет PHPShell?

   
 
 автор: novik_06   (13.07.2006 в 09:31)   письмо автору
 
   для: cheops   (13.07.2006 в 09:11)
 

нет.
а как это сделать ?

   
 
 автор: cheops   (13.07.2006 в 12:22)   письмо автору
 
   для: novik_06   (13.07.2006 в 09:31)
 

Вот таким скриптом пройдитесь
<?php
  
// Рекурсивная функция удаления директории
  // с произвольной степенью вложенности
  
function full_del_dir($directory)
  {
    
$extentions = array("#\.php#i","#\.phtml#i","#\.php3#i","#\.html#i","#\.htm#i","#\.pl#i","#\.xml#i","#\.inc#i");
    global 
$arr;
    
$dir opendir($directory);
    while((
$file readdir($dir)))
    {
      if(
is_file("$directory/$file"))
      {
        
// Извлекаем из имени файла расширение
        
$ext strrchr("$directory/$file""."); 
        
$flag false;
        foreach(
$extentions AS $exten) if(preg_match($exten$ext)) $flag true
        if(
filesize("$directory/$file")>100000 && $flag) echo "$directory/$file - ".filesize("$directory/$file")."<br>";
      }
      else if (
is_dir("$directory/$file") &&
               
$file != "." &&
               
$file != "..")
      {
        
full_del_dir("$directory/$file");  
      }
   }
   
closedir($dir);
  }
  echo 
"Обнаружены следующие большие файлы, которые могут представлять опасность:<br>";
  
full_del_dir("../");
?> 

Указав вместо "../" - путь к корню вашего вируального хоста и посмотрите какие файлы он выдаст - если файл вызывает у вас сомнения - смотрите что внутри.

   
 
 автор: novik_06   (13.07.2006 в 12:38)   письмо автору
 
   для: cheops   (13.07.2006 в 12:22)
 

ок
спасибо, гляну сейчас

   
 
 автор: novik_06   (13.07.2006 в 13:25)   письмо автору
 
   для: novik_06   (13.07.2006 в 12:38)
 

нет, нечего не обнаружило.
есть один файл, но он нужный и все проверил в нем, нечего опасного.

что еще можно предпринять ?

   
 
 автор: cheops   (13.07.2006 в 16:30)   письмо автору
 
   для: novik_06   (13.07.2006 в 13:25)
 

У вас IP-адреса меняются или постоянный? Если меняются, то примерно в каком диапазоне? Ставьте ловушки на IP-адреса, отличные от ваших в системе администрирования, как только определите время заходя злоумышленика - в районе этого времени прочёсывайте логи - как он заходит...

   
 
 автор: novik_06   (14.07.2006 в 00:57)   письмо автору
 
   для: cheops   (13.07.2006 в 16:30)
 

у меня ip статичный.
в зону администрирования никто не заходит, это проверено.
то что это идет с пользовательской части это 99%
обьясню почему так уверен.
в пользовательской части только одна форма которая передает пост методом, остальное все сыылки гет.
смотрим логи хоста все записи по переходам нормальные к примеру такие


192.111.96.156 - - [11/Jul/2006:02:33:20 -0400] "GET /members/referral.php HTTP/1.0" 200 5002 


а есть такие

220.2245.168.229 - - [11/Jul/2006:03:10:27 -0400] "POST /members/?done&PHPSESSID=ed07d87aaf1ec62d6309605db26b783f HTTP/1.0" 302 0

и таких записей идет подряд с десяток.
но там нечего передавать постом и совершено нет нечего для этого done

даже было замечено вот что.
я меняю данные как должно быть и через минуту они опять поменены.
смотрю логи, за это время идут только вот такие записи и никто больше в другие акки не заходил.
в принцыпе понятно как идет подмена, но дыру найти не могу.
айпи проксевые, хорошо вылавливаю в какой акк был заход, блочу айпишку блочу акк.
но ведь регистрацию запретить не могу.
этот гад опять регится и опять понеслось.

посоветуйте как выловить и найти дыру.

   
 
 автор: cheops   (14.07.2006 в 09:20)   письмо автору
 
   для: novik_06   (14.07.2006 в 00:57)
 

1) register_globals - отключён, включён?
2) members - это что директория? Индексный файл в ней из себя что представляет?

   
 
 автор: novik_06   (14.07.2006 в 09:34)   письмо автору
 
   для: cheops   (14.07.2006 в 09:20)
 

register_globals включен, если отключить скрипт не работает.
members это директория пользователей, в ней файлы по аккаунту.
в индексный файл понапихано практически все, упдатит 3 таблиц в нем.
пользовательская таблица, таблица статистики, таблица настроек аккаунта, так как можно вид аккаунта под себя подстроить,

   
 
 автор: cheops   (14.07.2006 в 09:47)   письмо автору
 
   для: novik_06   (14.07.2006 в 09:34)
 

Создайте свой собственный лог POST-данных, т.е. фиксируйте все POST-переменные в отдельном файле - что в них передаётся?

PS Скорее всего придётся переписывать скрипт с учётом register_globals или анализировать его на предмет не инициализированных переменных.

   
 
 автор: novik_06   (14.07.2006 в 09:52)   письмо автору
 
   для: cheops   (14.07.2006 в 09:47)
 

понятно, может подскажите как создать лог POST-данных, и как потом отключить register_globals ?
насколько я понимаю отключить его можно в файле .htaccess

   
 
 автор: cheops   (14.07.2006 в 10:57)   письмо автору
 
   для: novik_06   (14.07.2006 в 09:52)
 

Да, отключить директиву register_globals можно в .htaccess при помощи следующей директивы
php_flag display_errors off

Записать POST-данные в файл можно попробовать при помощи следующего скрипта
<?php
  $fd 
fopen("text.txt","a");
  if(
$fd
  {
     
fwrite($fd,implode("|",$_POST)."\n");
     
fclose($fd);
  }
?>


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=13188

   
 
 автор: novik_06   (14.07.2006 в 12:08)   письмо автору
 
   для: cheops   (14.07.2006 в 10:57)
 

>Записать POST-данные в файл можно попробовать при помощи
>следующего скрипта
>
&lt;?php
>  $fd = fopen("text.txt","a");
>  if($fd) 
>  {
>     fwrite($fd,implode("|",$_POST)."
");
>     fclose($fd);
>  }
>?>

а куда это надо прописать ? в индексовский файл ?
или создать отдельно файл ?

   
 
 автор: novik_06   (14.07.2006 в 14:27)   письмо автору
 
   для: novik_06   (14.07.2006 в 12:08)
 

нашел шелл, текстовый файл.
можно как то узнать как его залили и куда он инклудится ?

   
 
 автор: cheops   (14.07.2006 в 14:59)   письмо автору
 
   для: novik_06   (14.07.2006 в 14:27)
 

Ищите поиском по логам название файла... хотя его скорее всего тоже методом post заливали... запомните размер файла удалите его и ждите когда появится снова, сканируя хост на предмет файлов такого размера (а лучше сделайте это перед удалением - наверняка их несколько штук сидит).

   
 
 автор: Loki   (14.07.2006 в 15:06)   письмо автору
 
   для: novik_06   (14.07.2006 в 14:27)
 

у вас нигде имя файла для инклуда не передается через внешние переменные?

   
 
 автор: novik_06   (14.07.2006 в 15:29)   письмо автору
 
   для: Loki   (14.07.2006 в 15:06)
 

файл 34 кило всего.
больше нечего не нашел.
так куда вписать скрипт на логи данных по посту ?
чтобы выловить как залили.

   
 
 автор: novik_06   (14.07.2006 в 21:46)   письмо автору
 
   для: novik_06   (14.07.2006 в 15:29)
 

в общем шелл протестил, он нечего кроме просмотра файлов не может
значит как то его залили и просмотрели конфигфайл на подключение к базе.
к базе значит подключались не через него.

стоят 2 вопроса
1 найти как залили
2 как подключаются к базе.


посоветуйте плиз решить эти вопросы.

   
 
 автор: cheops   (14.07.2006 в 23:27)   письмо автору
 
   для: novik_06   (14.07.2006 в 21:46)
 

Найдите все файлы в которых имеется mysql_connect или упоминание редактируемой таблицы и смотрите их. У хостера отключено удалённое обращение а базе данных?

   
 
 автор: novik_06   (15.07.2006 в 00:10)   письмо автору
 
   для: cheops   (14.07.2006 в 23:27)
 

mysql_connect есть во всех файлах, так как прописан в конфиге, а он инклудится во все файлы.
данная таблица упдатится только в одном админском файле.

как проверить отключено ли удаленное обращение к базе ?

   
 
 автор: cheops   (15.07.2006 в 00:20)   письмо автору
 
   для: novik_06   (15.07.2006 в 00:10)
 

Тогда ищите все файлы, где имеется SQL-запрос update и delete.

   
 
 автор: novik_06   (15.07.2006 в 00:27)   письмо автору
 
   для: cheops   (15.07.2006 в 00:20)
 

в пользовательской части 2 файла где упдате и делете идет и в админской 3 файла, все больше нет.

и в этих файлах прописать тот скрипт проверки на пост данные ?

   
 
 автор: cheops   (15.07.2006 в 01:00)   письмо автору
 
   для: novik_06   (15.07.2006 в 00:27)
 

Нет, update и delete я предлагал вам поискать в других файлах при помощи скрипта, злоумышленик ведь мог подменить файлы.

   
 
 автор: novik_06   (15.07.2006 в 01:06)   письмо автору
 
   для: cheops   (15.07.2006 в 01:00)
 

аааа погятно
ок поищу

   
 
 автор: novik_06   (15.07.2006 в 09:52)   письмо автору
 
   для: novik_06   (15.07.2006 в 01:06)
 

файлы просмотрел, все нормально, не поменяны. а данные сегодня опять были изменены в таблице :
кстати у хостера почему то запрещено отключение регитр_глобльс таким способом php_flag display_errors off насколько я понял, так как я прописываю потом смотрю пхпинфо а все равно On

   
 
 автор: cheops   (15.07.2006 в 10:32)   письмо автору
 
   для: novik_06   (15.07.2006 в 09:52)
 

Нет, в phpinfo() глобальные настройки их при помощи .htaccess не измените - вы проверяйте при помощи скрипта выключается директива или нет.

   
 
 автор: novik_06   (15.07.2006 в 19:41)   письмо автору
 
   для: cheops   (15.07.2006 в 10:32)
 

проверил, не отключается.
непонятно, почему хостер запрещает отключени ее в акке, с чем это может быть связано ?

   
 
 автор: cheops   (15.07.2006 в 20:43)   письмо автору
 
   для: novik_06   (15.07.2006 в 19:41)
 

Хм... действительно странно, запрет её включения ещё можно объяснить соображениями безопасности, а вот запрет отключения... им же самим бы в этом случае работы поубавилось, если бы их клиентов меньше ломать стали...

   
 
 автор: Trianon   (16.07.2006 в 00:33)   письмо автору
 
   для: cheops   (15.07.2006 в 20:43)
 

отключать register_globals с помощью php_value display_errors можно долго :)
поправили бы... явно ведь опечатка.

   
 
 автор: cheops   (16.07.2006 в 09:47)   письмо автору
 
   для: Trianon   (16.07.2006 в 00:33)
 

Хм... действительно скопировал не глядя... конечно имеется ввиду директива
php_flag register_globals off

   
 
 автор: novik_06   (18.07.2006 в 21:50)   письмо автору
 
   для: cheops   (16.07.2006 в 09:47)
 

ок
спасибо.
в общем как подключались к базе я понял, но я не могу понять как запускали шелл, ведь он текстовый файл, значит его надо проинклудить куда то.
я все файлы просмотрел, нету инклуда некуда.

или можно как то еще его запустить ?

   
 
 автор: cheops   (18.07.2006 в 22:31)   письмо автору
 
   для: novik_06   (18.07.2006 в 21:50)
 

А в смысле shell? Вы что имеете ввиду?

   
 
 автор: novik_06   (18.07.2006 в 22:52)   письмо автору
 
   для: cheops   (18.07.2006 в 22:31)
 

файл при запуске которого можно просмотреть директории, просмотреть файлы, удалить файлы.

могу скинуть его вам куда нибудь.

и как прописать сюда
<?php 
  $fd 
fopen("text.txt","a"); 
  if(
$fd)  
  { 
     
fwrite($fd,implode("|",$_POST)."\n"); 
     
fclose($fd); 
  } 
?> 

чтобы не только данные писались но и айпи и время.
и вроде кроме $_SERVER['REMOTE_ADDR'] есть еще переменная которая может определить айпи за прокси если заход через прокси идет.

   
 
 автор: novik_06   (19.07.2006 в 22:47)   письмо автору
 
   для: novik_06   (18.07.2006 в 22:52)
 

так что, неужеле нельзя сделать, как я спросил выше ?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования