Le Thu, 20 Jan 2005 19:40:16 +0100
JusTiCe8 <[EMAIL PROTECTED]> a �crit:

> Bonsoir,
> 
> Fran�ois Boisson a �crit :
> 
> >Bonjour,
> >
> >
> >[...]
> >unlink ($RACINE.$PASS.".old");
> >rename $RACINE.$PASS , $RACINE.$PASS.".old";
> >rename $RACINE.$PASS_TMP , $RACINE.$PASS;
> >chown 0,0,$RACINE.$PASS;
> ># chmod 0600,$RACINE.$PASS;
> >chmod 0644,$RACINE.$PASS;
> >
> >o� $RACINE = "/etc", $PASS="passwd" et $PASS_TMP="passwd1".
> >[...]
> >  
> >
> une id�e comme �a :
> 
> si (justement) passwdl est vide (pour une raison lambda), le rename va
> agir comme ilf aut et donc, /etc/passwd sera... vide lui aussi. Ce qui
> expliquerai la "disparition" de passwd1.

Dans ce cas, le script aurait �t� utilis� et je l'aurais retrouv� dans
les logs d'apache, je rerecherche...

Bingo...!

172.207.33.240 - - [19/Jan/2005:17:50:49 +0100] "GET
/cgi-bin/script_pwd.cgi?user=default&old_pwd=default&new_pwd=http://www
.google.fr/search%3f<balisexss>%22%27&new_pwd_ver=default HTTP/1.1" 200
242

�a concorde, par contre je viens de reproduire tel que les diff�rents
appels(il y en a eu 5) au script perl et n'ai eu aucune erreur. Donc
effectivement, l'erreur vient de l� mais je ne vois pas comment elle a
pu arriver. (Le script est en fin de message pour les perlophiles)

> 
> Pour la pauvre machine ( ;) ) sauvagement �teinte, l'usage des magic 
> syskey aurait �t� plus appr�ci�e par celle ci (si activ�es dans la
> conf noyau). Ou une extinction � distance.
> 

Pour l'extinction � distance, sans passwd, pas de connexion possible,
sinon j'aurai directement r�gl� le pbm. Quant aux magic syskey, je n'y
pense jamais au moment de la configuration du noyau mais c'est une bonne
id�e.


Fran�ois Boisson

---- script Perl pour les amateurs -----
use Time::Local;

print "Content-type: text/html\n\n";

# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

foreach $pair (@pairs)
{
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $FORM{$name} = $value;
}
$RACINE="/etc/";
# $PASS = "shadow";
# $PASS_TMP = "shadow1";
$PASS="passwd";
$PASS_TMP = "passwd1";
$user = $FORM{'user'};
$new_pwd = crypt($FORM{'new_pwd'}, "FB");
$old_pwd = $FORM{'old_pwd'};

print "<HTML>";
print "<HEAD>";
print "<TITLE>Conclusion </TITLE>";
print "</HEAD>";
print "<BODY>";
print "<FONT SIZE=4>";
print "<HR>";

print "<LI>Utilisateur = $user<BR></LI>\n";
print "<HR>";
# attend une �ventuelle fin
while (-e "/tmp/__script_pwd") {
}
#Path securit�
$ex_path = $ENV{"PATH"};
$ENV{"PATH"} = "/bin:/usr/bin";

#let'sgo 1) drapeau
system("touch /tmp/__script_pwd");

open(FIN,">".$RACINE.$PASS_TMP) || die("M'enfin ! Y a un bug !");
open(DEB,$RACINE.$PASS);
$heure = localtime();
$logger = "Appel script_passwd a $heure\n";
open(LOG,">>/var/log/motdepasse.log");
print LOG $logger;
close(LOG);
$logger = "Appel sans succes\n";
while(<DEB>) {
    if (m/^$user:/) {
        $ligne = $_;
        ($qui , $mot ,$fin) = ($ligne =~ /([^:]+):([^:]+):(.*)/);
# print "<LI>",$qui;
# cas d'un changement de mot de passe
        $heure = localtime();
        if ($mot ne "!") {
        $cle = substr ($mot,0,2);
        print "<LI>",crypt($old_pwd,$cle),"<BR></LI>\n";
        $logger = "Changement pour $qui a $heure\n";
    }
# sinon utilisateur sans mot de passe
        else { print "<LI>Creation d'un mot de passe (circonstances
enregistrees)<BR></LI>\n"; 
          print "<LI> origine: machine $ENV{'REMOTE_ADDR'} heure
$heure<BR></LI>\n";
       $logger = "Creation pour $qui par$ENV{'REMOTE_ADDR'} a $heure\n";
              }
        if ((($mot eq crypt($old_pwd,$cle)) || ($mot eq"!")) && 
           ($FORM{'new_pwd'} eq $FORM{'new_pwd_ver'})) {       
    print "<LI>Changement de mot de passe de",$user,"<BR></LI>\n";      
     $logger = "OK: ".$logger;
            print FIN $qui,":",$new_pwd,":",$fin,"\n";
        }
        else { print FIN $ligne;}
    }
    else { print FIN };
}
print "<LI>Si il y a eu changement de mot de passe, cela est ecrit
ci-dessus sinon refaire la manoeuvre<BR></LI>";
 close(FIN);
close(DEB);
# affichage environnement
open(LOG,">>/var/log/motdepasse.log");
print LOG $logger;
close(LOG);
#print "<HR>";
#while (($key,$val) = each %ENV) {
#    print "<LI>$key =$val<BR></LI>\n";}

print "<HR>";
unlink ($RACINE.$PASS.".old");
rename $RACINE.$PASS , $RACINE.$PASS.".old";
rename $RACINE.$PASS_TMP , $RACINE.$PASS;
chown 0,0,$RACINE.$PASS;
# chmod 0600,$RACINE.$PASS;
chmod 0644,$RACINE.$PASS;
#$ex_path = $ENV{"PATH"};
#$ENV{"PATH"} = "/bin:/usr/bin";
#while (($key,$val) = each %ENV) {
#    print "<LI>$key =$val<BR></LI>\n";}

#print "<HR>";

chdir "/var/yp";
system ("make > /dev/null");
# OK, c'est bon
unlink "/tmp/__script_pwd";
$ENV{"PATH"} = $ex_path;
print "</FONT>";
print "</BODY>";
print "</HTML>";

Répondre à