La completissima guida al sommergibile più famoso della rete

                                                       SubSeven 2.2

Hosted by www.Geocities.ws

                                                                                   by luca29t

>>>home page<<<

>>>subseven 2.2 client<<<

>>>subseven 2.2 editserver normalmode<<<

>>>subseven 2.2 editserver advancedmode<<<

>>>subseven 2.2 sin<<<

>>>come si presenta il subseven 2.2 ?<<<

>>>come rimuovere il server 2.2 ?<<<

>>>spoofing del server 2.2<<<

>>>ip<<<

>>>telnet<<<

>>>proxy<<<

>>>ftp<<<

>>>more pc info<<<

>>>netstat<<<

>>>guida a e-icon<<<

>>>irc e bot<<<

>>>cgi<<<

>>>firewall<<<

>>>fakemail<<<

>>>link<<<

 

 

 

 

 

informazioni prese qua e la dalla rete.

 

CGI

CGI (Common Gateway Interface) e' un insieme di comandi e di variabili di memoria attraverso cui il server web puo' comunicare con altre applicazioni e programmi autonomi.

CGI permette ad un web server di comunicare con altri programmi in esecuzione sul server stesso. Per esempio, utilizzando CGI il web server puo' chiamare programmi esterni fornendo in input dei dati in modo esplicito (per esempio tramite un form in una pagina web) oppure implicito (per esempio tramite gli header HTTP).

CGI e' la tecnologia piu' diffusa dal lato server, e al giorno d'oggi praticamente ogni server web ne prevede il supporto. E' utilizzato comunemente per i contatori, i libri degli ospiti, per i giochi e le interazioni con i database in generale.

Un programma CGI puo' essere scritto praticamente in qualunque linguaggio di programmazione, anche se i linguaggi piu' utilizzati sono C/C++ e Perl. Perl e' particolarmente indicato in quanto e' un linguaggio di alto livello e interpretato: cio' rende i programmi scritti in Perl facilmente portabili da una piattaforma all'altra, soddisfacendo un requisito fondamentale per Internet. D'altra parte, la flessibilita' e complessita' di Perl fanno si' che il codice, se non opportunamente commentato, sia difficile da capire da parte di un altro autore o di un lettore.

 

 

Che siginifica CGI?

 CGI significa Common Gataway Interface.

Con la parola "Common" si intende che CGI può essere usato da molti linguaggi di programmazione e può interagire con molti tipi diversi di sistemi operativi e macchine.

La parola "Gateway" suggerisce che la forza dei CGI non sta in quello che può fare in sé e per sé, ma nell'accesso potenziale che offre ad altri sistemi, che possono essere magari database o generatori grafici.

Interface significa semplicemente che CGI fornisce un mezzo ben definito per richiamare le sue caratteristiche -- in altre parole, che potete scrivere programmi che lo usano.

 

Che cosa è uno script?

Molto semplicemente, uno script è un programma! La differenza fra i due termini praticamente è solo semantica. Tradizionalmente, i documenti eseguibili compilati (binari) sono chiamati programmi, e i programmi interpretati sono chiamati script.

Nel contesto dei CGI, la distinzione è diventata ancora più sottile di prima. Le parole sono spesso usate come sinonimi (anche in questo sito).

 

Perchè dovrei mettere uno script sulle mie pagine?

Innanzitutto, per invogliare la lettura, diciamo subito che con i programmi/script CGI si possono fare delle cose davvero magiche. E' possibile creare grafici al volo partendo da dei dati, accedere a database e ottenere risultati in un attimo, implementare cose di grande effetto sul vostro sito tipo guestbook, chat o counter, ed è perfino possibile semplificare il vostro lavoro (se siete webmaster).

Certe volte potreste aver bisogno di mettere delle informazioni dinamiche (informazioni che non sono costanti) nei documenti HTML. Queste possono essere semplici informazioni, come un contatore che mostra la scritta "Sei il xxx visitatore!", ma possono essere anche molto più elaborate, come motori di ricerca o animazioni. Per ottenere questo genere di risultati dalle vostre pagine web avrete bisogno degli script CGI (anche se per certe cose potete usare anche JavaScript, ma questo è un altro discorso!)

Che cosa è il Perl? Perchè molti lo usano per fare CGI?

"Il Perl è un linguaggio interpretato ottimizzato per scandire file di testo, estrarre informazioni da questi file di testo e stampare i risultati basati su queste informazioni. La maggior parte delle applicazioni CGI hanno a che fare in qualche modo con la manipolazione di dati e con l'accesso a programmi e applicazioni esterne. Il Perl mette a disposizione strumenti che rendono questi compiti molto facili."

 

Perchè dovrei usare un CGI anzichè JavaScript?

CGI e Java sono fondamentalmente diversi, e per la maggior parte dei casi NON intercambiabili, ovvero ciò che può fare uno, l'altro non fa. CGI è un protocollo per eseguire programmi su un server WWW. Anche se Java può essere usato in questo modo, e ha perfino un API standard (servlet, che invece è un'alternativa a CGI), il ruolo principale di Java sul web è per programmi dalla parte del client (gli applet).

In certi casi i due possono essere combinati in una singola applicazione: per esempio un applet Java per definire una regione d'interesse da una mappa geografica, insieme a uno script CGI per processare una query per l'area definita.

 

In quali casi è meglio usare il C++ per scrivere un programma CGI?

Nel caso in cui si abbia già familiarità con il primo. In effetti le differenze non sono moltissime e il motivo per cui la scelta ricade più spesso sul Perl è perchè si trovano un maggior numero di risorse scritte in questo linguaggio, perchè ha delle magnifiche capacità di manipolazione dei testi, e perchè ha un enorme supporto di moduli, sulla rete.

Di cosa ho bisogno per installare un CGI?

Per poter installare un CGI sulle proprie pagine è necessario avere un server proprio (se le vostre pagine web non risiedono su un server vostro, non disperate e leggete poco più sotto!).

Non è richiesto l'uso di Unix, ma averlo installato sul proprio server aiuta parecchio visto che si tratta, al momento, della piattaforma più matura e meglio supportata per le applicazioni sul Web.

Per la maggior parte degli script, è necessario possedere un interprete Perl installato sul proprio server.

Le richieste specifiche variano da script a script, e generalmente vengono riportate nei file readme di ogni pacchetto CGI.

Certamente fa comodo avere un'infarinatura dei sistemi Unix e magari conoscere anche un minimo di Perl, ma noi siamo qui per aiutarvi in questo!

Posso installare un CGI anche se non ho un server mio?

Fortunatamente si. Se le vostre pagine sono ospitate su siti che offrono spazio gratuito e non potete usare CGI, esistono sempre gli script eseguiti in remoto, in altre parole i programmi risiedono su server che processano le informazioni per voi e rimandano il risultato all'utente.

In cambio del servizio, molti programmatori chiedono di inserire un'inserzione pubblicitaria vicino allo script o di pagare una quota, ma esistono anche molti programmi gestiti in remoto totalmente gratuiti e privi di pubblicità. In questo modo, molte tipologie di script possono essere usate anche senza possedere un server.

Per ulteriori informazioni, consultate la sezione di "Programmi in remoto".

 

Sono disponibili spazi Web gratuiti che supportino CGI?

Sempre fortunatamente, la risposta è si. Esistono svariati siti che offrono gratuitamente spazio web e insieme il ieno supporto per i CGI. Ecco qui elencati alcuni di questi siti:

Virtual Avenue

Hypermart

Affari.TO

Prohosting (senza alcun banner ma a pagamento!)

F2s (senza alcun banner ma a pagamento!)

Posso usare un compilatore Perl per scrivere/testare i miei script su Windows?

Si, esistono svariati compilatori disponibili gratuitamente su Internet per quasi tutti i sistemi. Con questi è possibile provare gli script che programmate. Tuttavia per poter testare uno script per il web è necessario installare un web server tipo IIS o Apache.

 

Dove trovo un compilatore di Perl?

Ci sentiamo di consigliarvi ActiveState: sul sito si trovano le versioni basate su Perl 5.6.0 per Windows 32, per Linux e per Solaris.

 

Cos'è la directory cgi-bin?

Un server è generalmente configurato in modo da eseguire gli script che sono posti nella directory "cgi-bin". Comunque, l'amministratore del server può anche cambiare i file di configurazione del server, in modo da poter fare eseguire gli script con certe estensioni (come .cgi, .pl) da ovunque.

 

Che significa l'errore 500?

Solitamente si ha un errore 500 per i seguenti motivi:

Quando lo script non contiene la linea "#/usr/local/bin/perl" che indica dove è posto l'interprete Perl nel disco rigido del server, o quando il percorso specificato non è valido (può essere posto anche sotto un'altra directory, quindi attenzione!).
Quando la prima linea dell'output dallo script non è un header HTTP valido (per esempio: "Content-type: text/html"), o quando non c'è una linea vuota dopo i dati dell'header.
Quando c'è un errore di sintassi nel vostro script. Per controllare, provate a eseguirlo dalla shell dei comandi.

Cosa sono i permessi dei file?

I sistemi Unix sono progettati per più utenti e includono provvedimenti per proteggere il vostro lavoro dall'accesso non autorizzato da altri utenti del sitema. I permessi di un file determinano chi può fare cosa con i vostri programmi, dati e directory. Il comando che configura tutto ciò è chmod (mentre il corrispettivo per visualizzare *quali* sono i permessi di un file è il comando ls). I web server solitamente funzionano come user "nobody". Il che significa che, tranne nel caso di bug molto seri (tipo quelli trovati in certe versioni delle estensioni Frontpage), i vostri file sono assolutamente al sicuro da danni attraverso il webserve. Significa anche che potreste dover fare dei cambiamenti per attivare l'accesso ai file da parte del server in un contesto CGI.

Top

 

Cosa vuol dire User Nobody/Setuid?

Ci sono due modi di eseguire i CGI:

- di default, si eseguono come user webserver (nobody). Per la maggior parte degli scopi, questo è il modo più sicuro, dal momento che i dati sono protetti dal sistema operativo dagli accessi non autorizzati attraverso possibili bug nel vostro CGI. Comunque, quando il CGI deve scrivere su un file, quel file deve risultare scrivibile da ogni utente sul sistema, ed è quindi completamente sprotetto.

- setuid, si eseguono sotto il vostro proprio userid. Questo significa che i file scritti dal vostro CGI possono essere al sicuro. D'altra parte, qualsiasi bug nel vostro CGI possono compromettere ora *tutti* i programmi e i dati sul vostro server. Come precauzione di sicurezza elementare, gli script non possono essere eseguiti da setuid dalla maggior parte dei Sistemi Operativi.

Un terzo modo col quale non dovreste *mai* permettere di eseguire i CGI è:

- come root o setuid root, possono essere eseguiti da qualsiasi utente. Ciò può risultare estremamente pericoloso, dal momento che qualsiasi bug potrebbe compromettere l'intero server, inclusi i file di ogni utente. Fortunatamente solo l'amministratore del sistema può installare programmi setuid root. Se siete fortemente interessati alla sicurezza, assicuratevi che nessun programma del genere (in particolare le estensioni di Frontpage) sia installato.

Top

 

Che permessi dovrei assegnare ai miei CGI?

Alcuni modi che possono essere utili in un tipico contesto CGI sono:

* Programmi CGI, 0755

* File di dati che devono essere leggibili dai CGI, 0644

* Directory di dati usati dai CGI, 0755

* File di dati che devono essere scrivibili dai CGI, 0666 (i dati non hanno nessuna sicurezza!)

* Directory di dati usati dai CGI con accesso alla scrittura, 0777 (nessuna sicurezza)

* CGI che devono essere eseguiti da setuid, 4755

* File di dati per CGI setuid, 0600 o 0644

* Directory per dati usati da CGI setuid, 0700 o 0755

Top

 

Posso vedere un esempio pratico?

Ecco un esempio:

ls -ls script.cgi

1 -rwx------ 1 utentixyz 974 Oct 31 22:15 script.cgi

Dalla shell di Unix con il comando ls è possibile visualizzare i permessi di un file. Questo file ha dei permessi 0700, il che significa che nessuno (al di fuori di chi lo ha messo) può leggerlo, scriverlo o eseguirlo. Usando il comando chmod è possibile cambiare i permessi:

chmod 755 script.cgi

ls -ls script.cgi

1 -rwxr-xr-x 1 utentixyz 974 Oct 31 22:15 script.cgi

Così facendo si sono cambiati i permessi in modo che gli utenti del gruppo "utentixyz", come anche tutti gli altri utenti, hanno il permesso di leggere ed eseguire questo file

Perchè dovrei interessarmi della sicurezza dei CGI?

Eh già! Perchè interessarsene? Daltronde il server sta girando come user nobody, giusto? Significa che non si può fare niente di pericoloso per i dati, giusto? Sbagliato. Possono succedere molte cose pericolose in diverse circostanze, per esempio:

Inviare il file delle password all'hacker (se il file non è in modalità shadowed)
Inviare una mappa del file di sistema all'hacker
Inviare informazioni sul sistema all'hacker
Cancellare e/o alterare i file log del server
Impartire comandi che consumino massivamente le risorse del sistema

Top

A che genere di buchi nella sicurezza dovrei fare attenzione?

Innanzitutto bisogna fare attenzione a non esporre mai nessun data form alla shell. Seguono alcuni esempi di possibili buchi nella sicurezza:

open (COMMAND, "/usr/ubc/finger $form_user");

system ("/usr/ubc/finger/ $form_user");

@data = "usr/ucb/finger $form_user";

Un'altra cosa a cui occorre prestare mai attenzione è un riferimento di questo genere:

http://www.pincopalla.it/cgi-bin/perl.exe?esempio.pl

Anche all'occhio meno preparato in materia risulta chiato che se qualcuno cambiasse le ultime lettere in questo modo,

http://www.pincopalla.it/cgi-bin/perl.exe?-e+'format:%20c'

sarebbero guai per l'hard disk del server. Per evitare queste potenziali catastrofi ricordate di non tenere mai il file eseguibile del Perl sotto la directory "cgi-bin", mettendolo invece fuori dalla directory root del server.

Top

E' vero che i CGI scritti in Perl sono meno sicuri?

I programmi CGI sono soggetti a problemi di sicurezza indipendentemente dal linguaggio con il quale sono scritti! Tuttavia è vero che gli script compilati in C++ "rendono il lavoro più difficile" agli hacker; questo non significa che siano più sicuri, ma soltanto che richiedono una ricerca del codice sorgente da parte dell'hacker per poterli interpretare.

Top

Ho trovato un CGI molto bello sulla rete e vorrei installarlo. Come posso dire se è sicuro o meno?

Non si può mai dire definitivamente se uno script è sicuro o meno. La cosa migliore da fare, se conoscete anche minimamente il linguaggio nel quale è stato scritto, è capire cosa fa e come lo fa. Se invece non lo capite, provate a mostrarlo a qualcuno che conosca quel linguaggio. Cose a cui pensare quando si esamina uno script sono:

Quanto complesso è? Più un programma è lungo, e più sono le possibilità che dia problemi.
Legge o scrive file sul sistema?I programmi che leggono file possono inavvertitamente violare restrizioni d'accesso che avete configurato voi, o passare informazioni riservate sul sistema agli hacker. I programmi che scrivono file hanno il potenziale per modificare o danneggiare documenti, o, nel peggiore dei casi, introdurre "cavalli di troia" sul vostro sistema.
Interagisce con altri programmi sul vostro sistema? Per esempio, molti script CGI mandano risposte e-mail in risposta all'input di un form aprendo una connessione con il programma sendmail.
Sta operando in maniera sicura? Gira sotto privilegi suid (set-user-id)? Generalmente questa è una cosa molto pericolosa e gli script devono avere un'ottima ragione per farlo.
L'autore usa percorsi specifici nell'invocare programmi esterni? Fidarsi della variabile PATH per definire percorsi è una pratica poco consigliata.

Che cos'è SSI?

SSI (Server Side Include) è un valore variabile che un server può includere in un file HTML prima di mandare la pagina al richiedente (esempio pratico, un file con la data "Ultima modifica:"). Se state creando una pagina web, potete inserire una dichiarazione include nel file HTML come questa: Monday, 24-Jul-2000 11:31:36 EDT e il server otterrà la data dell'ultima modifica del file e la inserirà prima che il file HTML venga mandato al richiedente. LAST_MODIFIED è una delle diverse variabili di cui un sistema operativo può tenere traccia e che può essere richiamata da un server program. L'amministratore del server può mettere queste variabili in uso quando il sistema è configurato. Potete pensare a SSI come una versione limitata delle applicazioni CGI. Se si sta costruendo un sito e non si è l'amministratore del server, è una buona idea chiedere a quest'ultimo quali variabili possono essere usate e farsi aiutare nel mettere le dichiarazioni "include" appropriate nei propri file HTML.

Top

Che cos'è SQL?

SQL (Structured Query Language) è un linguaggio interattivo di programmazione standard per ottenere e per aggiornare informazioni in un database. Diversi prodotti database supportano SQL con estensioni proprietarie per il linguaggio standard. Le Queries prendono la forma di una linguaggio di comando che vi permette di selezionare, inserire, aggiornare e cercare la locazione dei dati

(spunto preso da http://cgi.webjuice.it/faq/index.php?p=cgi7)

 

Script CGI

Parleremo della CGI (Common Gateway Interface), ma prima di tutto devi sapere alcune cose sulle problematiche client/server. In altre parole devi sapere come i server ed i client si parlano l' un l' altro. Vediamo...

Conversazioni tra un client ed un server

Quando 'clicchi' su un link contenuto all' interno di una pagina web, forse non sai che il tuo browser inizia a chiaccherare con il server puntato da quel link. Un client e' qualsiasi programma software che puo' chiedere qualcosa ad un server (spesso anche lo stesso computer dove sta girando il client e' considerato client). Percio' il web browser e' un client. Un server e' qualsiasi programma software che gira su un computer collegato ad una rete in grado di rispondere alle richieste fatte dai client (spesso anche lo stesso computer dove gira il server e' considerato un server). Quando digiti un URL (Uniform Resource Locator) nel campo location del tuo browser, o quando clicchi su un link (link od URL sono la stessa cosa), stai puntando ad una certa pagina web contenuta all' interno di un dato computer. Un server web e' un programma software che gira ininterrottamente su una macchina, in attesa di richieste da soddisfare. Un server e' chiamato anche demone. Quando il server riceve una richiesta, cerca di soddisfarla. In altre parole, quando clicchi su un link, stai chiedendo (beh, e' il tuo browser che effettua la richiesta) una pagina web (documento). Il server riceve la tua richiesta e ricerca quella pagina, e, quando la trova, la consegna al browser web. I client ed i server parlano usando un particolare linguaggio: HTTP. HTTP sta per HyperText Transfer Protocol. Vediamo quest' URL: http://www.anyserver.com/anydirectory/anypage.html. Ci sono 4 parti:

  1. Il nome del metodo (o servizio)
  2. Il nome del server
  3. Un path opzionale
  4. Il nome della pagina web

Il nome del metodo puo' essere HTTP (web), FTP (FTP), NEWS (newsgroups), MAILTO (SMTP, Simple Mail Transfer Protocol, cioe' email) e cosi' via. Il nome del server indica il nome del computer dove si trova la pagina. Il path opzionale indica la directoty dove e' contenuta la pagina. Ed infine c'e' il nome della pagina.

Quando clicchi su http://www.anyserver.com/anydirectory/anypage.html, prima di tutto il tuo client (il browser web) attiva una connessione tra il tuo computer ed il server www.anyserver.com, richiedendo una pagina web di nome anypage.html. A questo punto il server riceve la richiesta e ricerca la pagina. Se il server la trova, la consegna al client, altrimenti invia un messaggio di errore molto noto: '404 not found'. Infine il server chiude la connessione.

L' HTTP e' un protocollo stateless, che significa che ogni richiesta fatta dal tuo client al server, richiede una nuova connessione. Ogni oggetto contenuto all' interno di una pagina web richiede una nuova connessione (a differenza di altri protocolli come FTP o Telnet, dove il client stabilisce una sola connessione e puo' effettuare parecchie richieste durante quella connessione). Percio' quando scarichi una pagina web che contiene parecchie immagini per esempio, il tuo client deve stabilire una nuova connessione per ogni oggetto che trova leggendo la pagina. Bene, durante una nuova richiesta il server non e' in grado di sapere nulla della precedente richiesta, e, difatti, non sa neppure chi ha fatto la precedente richiesta. Il nuovo protocollo HTTP (HTTP-NG o HTTP Next Generation, permette una connessione per piu' richieste, cosi', per esempio, puoi leggere una pagina web stabilendo solo una connessione. Cosi' una pagina web e' scaricata piu' velocemente). Dunque il server web e' solo un programma che gira ininterrottamente aspettando delle richieste. Quando una richiesta viene soddisfatta e la connessione viene chiusa, il server e' nuovamente pronto per nuove richieste. In altre parole il server web e' una specie di cameriere che obbedisce agli ordini dei client. Comunque il tuo browser puo' richiedere documenti HTML, immagini, suoni, video o...script. Solo che uno script non viene ricevuto ma viene ESEGUITO. Ed ora vediamo cosa sono questi script CGI. Uno script e' un programma che funge da interfaccia tra un client, un server web, il sistema operativo, le periferiche hardware o anche altri server. Per esempio, supponi che tu voglia effettuare ricerche all' interno di un database. Supponi di volerle fare utilizzando una interfaccia web (una form per esempio). Bene, il server che offre tale servizio, ha bisogno sicuramente di uno script CGI, infatti deve ricevere la tua richiesta (che di solito e' scritta usando il linguaggio umano) e tradurla secondo le regole del linguaggio di quel database. Pensa ad un motore di ricerca come Altavista per esempio. Lo script CGI riceve la tua interrogazione e la traduce secondo le regole del linguaggio del database di Altavista e ricerca il documento che hai richiesto. Quando trova qualcosa lo deve confezionare per mostrarlo all' interno di una pagina HTML (in altre parole, lo script CGI deve costruire una pagina web 'al volo' per mostrare i risultati della tua interrogazione).

Linguaggi usati

Puoi usare qualsiasi linguaggio di programmazione per costruire uno script CGI. Beh, ovviamente il linguaggio di programmazione che scegli deve essere supportato dal server. Per esempio, se il tuo server sta girando su un sistema Unix, potresti usare il linguaggio della shell Bourne, o potresti usare il linguaggio C. Se il tuo server sta girando su un Macintosh devi usare il linguaggio Applescript, e cosi' via. Comunque il linguaggio di programmazione piu' usato per scrivere degli script CGI e' sicuramente il PERL (PERL sta per Practical Extraction and Reporting Language).

 

 

                                                                                  

Hosted by www.Geocities.ws

1