#!/usr/bin/perl # # GiBiLogic 29 gen 2011 # Questo script esegue un comando amministrativo Joomla collegandosi al sito via # WGET # Nell'ordine: # - richiede la pagina di login e reperisce il "token" casuale che viene # associato ad ogni form # - si autentica utilizzando tale token in aggiunta a utente e password # - richiama la pagina amministrativa vera e propria # # NOTE # ovviamente lo script non gestisce l'interazione per cui deve essere un URL che # esegue delle operazioni senza richiedere intervento utente ###################### ### CONFIGURAZIONE ### ###################### # opzioni generali $site = "http://www.gibilogic.com"; # inserire il proprio sito $username = "username"; $password = "password"; $tmp_folder = "/tmp"; # percorso temporaneo LOCALE, sul PC da cui viene eseguito lo script # pagine generiche da reperire per l'autenticazione $admin_url = $site . "/administrator/index.php"; $login_option = "--keep-session-cookies --save-cookies $tmp_folder/cookies.txt"; $login_result_page = $tmp_folder . "/login.html"; $admin_result_page = $tmp_folder . "/admin.html"; # pagina amministrativa specifica $task_url = $admin_url; $task_options = "--load-cookies $tmp_folder/cookies.txt --post-data=\"option=com_xvm&task=import\""; # inserire il comando amministrativo da eseguire $task_result_page = $tmp_folder . "/task.html"; ######################### ### FLUSSO PRINCIPALE ### ######################### # scarica la form di login print "\n\n*** Cancella la pagina di login e la riscarica...\n\n"; unlink( $login_result_page ); system( "wget -O $login_result_page $login_option $admin_url" ); print "\n\n*** Fatto.\n\n"; # la apre alla ricerca del codice necessario per il login print "\n\n*** Apertura pagina di login e reperimento del token...\n\n"; open( FILE, $login_result_page ) or die ("Can't open input file"); while ( ) { next unless /input type="hidden"/; @chunks = split; foreach $chunk ( @chunks ) { if ( $chunk =~ /(\w+)="(\w+)"/ ) { $field{$1} = $2; } } if ( $field{'value'} == 1 ) { $secret = $field{'name'} }; } print "\n\nFatto.\n\n"; # compila una nuova richiesta wget per accedere print "\n\n*** Compila una nuova richiesta wget per accedere...\n\n"; $admin_options = "--load-cookies $tmp_folder/cookies.txt --keep-session-cookies --save-cookies $tmp_folder/cookies.txt --post-data=\"username=$username&passwd=$password&option=com_login&task=login&$secret=1\""; unlink( $admin_result_page ); system ( "wget -O $admin_result_page $admin_options $admin_url" ); print "\n\nFatto.\n\n"; # compila una nuova richiesta wget per effettuare il lavoro print "\n\n*** Compila una nuova richiesta wget per effettuare il lavoro...\n\n"; unlink( $task_result_page ); system ( "wget -O $task_result_page $task_options $task_url"); print "\n\nFatto.\n\n";