Les fichiers sources
Copie : Consulter la derniere version, si le site dynamique original
"www.trousperdu.org" est connecte *


( Reponse du 09/09/2023 08:20:06 UTC, par serveur :
    SERVER NAME : "www.trousperdu.org"
    SERVER_PORT : "80"
 Suite a la requete :
    HTTP_HOST : "www.trousperdu.org"
    REQUEST_URI : "/cgi-bin/viewsource.bin?/etc/ppp/controlchap.sh"
 Adresse du demandeur : "46.22.94.252" ) :


LE SOURCE DU FICHIER "/mnt/hda1/etc/ppp/controlchap.sh"
 ( du 07/09/2023 06:49:42 UTC ) :
-rwxr-xr-x 1 root root 11203 Sep 7 08:49 /mnt/hda1/etc/ppp/controlchap.sh
#! /bin/bash
# fichier executable de type bash unix 
#   copier par CPUPDATE Netstart   ...

#NC imcp.ba@trousperdu.org imcp.ba@free.fr IMCP Blandy Alain


#  ce petit pogramme en mode ligne de commande
# permet de verifier le protcole d'authentification chap md5 pppoe
# entre la box FAI a tester et le modem de transmission  
#
#  Il suffit d'enregistrer, avec un hub  les echanges entre ces deux periferiques,
# ( entre la box du fai et le modem )
# par un programme de dump pppoe  ..
# d'isoller plus particulierement les trames CHAP  (challeng et reponse ok)
# et de les passer en parametres d'appel a ce programme 
#
#  ce programme vous indiquera alors, si le mots de passe suppose,
# que le fai vous a donne, et vraiment utilise tel quel par la box
# (sans aucune modificationn malhonnete) !
#
#    A partir du vraie password il sera alors possible
#   de supprimer et remplacer entierement la box de ce fai la !

# MISE EN OEUVRE :
#
#    COPIER COLLER TEL QUEL CE SOURCE DANS UN FICHIER
#
#    RENDRE LE FICHIER EXECUTABLE : chmod +x ....
#
#    TAPPER LE NOM DU FICHIER EN LIGNE DE COMMANDE
#        sans aucun parametres
#         suivre les instructions du pg ...


#ECHO='/bin/echo'; #fonctionn globale (ne marche pas toujour)
ECHO='echo'; #fonction interne au shel(la sepcification -n -e "\x02" ne passe pas toujours)
  # afficher un caractere a partir de son code hexadecimal             !!!!!!!!!!!!!!!!!!!!!!!!
  #chaque version de sh n'est pas d'accord avec interpretation -n -e   !!!!!!!!!!!!!!!!!!!!!!!!
  # adapter la ligne precedante pour avoir la resultat voulu          !!!!!!!!!!!!!!!!!!!!!!!!
  # 'A'    a la commande suivante $ECHO -n -e "\x41"                   !!!!!!!!!!!!!!!!!!!!!!!!

OD='od -t x1';    #appel de octal dump affichage de controle (ou test) en hexa
MD5SUM='md5sum';  #appel de calcul hash md5 reponse en hexa minuscule : a adapter si SAH...

MG='<';   # > #MG est le caractere inferieur 
MD='>';   #   #MD est le caractere superieur

function controlhexa
{
 #verifis qu'un octet est bien represente par deux digit hexa 01 02 34
 stat=''; #global variable resultat lie a info
 
 local contid="`$ECHO -n -e \"\x$1\" | $OD | (read a b c; echo $b)`" ;  # affichage de controle en fead back
 if test "$contid" != "$1"; then 
   stat="$info incorrect byte digit format \"$1\" ";
 fi;
}

function controlchalleng #applique la procedure de controle des rfc
{

# soit les parmetres en entre 

# idhexa='02'
# challenghexa='968f04a ... '; #(sur paires de caractere hexa minuscule) le challeng transmis par ISP
# reponse='30cc4 ...';         #en hexa minuscule !!!!! la reponse donne par la box
# pass='huburoi';              #le password suppose

#les parametre en entre globaux ne sont pas modifie par cette fonction

#sortie : 
# variable globale code
#                       0 : pour password ok
#                       1 : password incorrect
#                   autre : erreur programme

 
echo --------------------------------
echo --------------------------------
#  mise ne forme des data du dump  !!!!!

# la transmission en CHAP se fait en binnaire ( rfc1994 ):
#Description    1 byte 	     1 byte     2 bytes      1 byte             Variable          variable
#Challenge      Code = 1     ID         Length 	     Challenge Length   Challenge value   Name
#Response       Code = 2     ID         Length 	     Response Length    Response value    Name
#Success        Code = 3     ID         Length                    Message 	
#Failure        Code = 4     ID         Length                    Message 

# mais l'outil de dump le represente en haxadecimal

# on donne les parametres d'appels au programme directement dans le format de dump !!!

code='99'; #unknow erreur

# on doit le transcoder le ${MG}challengenhexa${MD}  en notation \xy compatible echo -E

echo  " Soit le challeng : "
echo -E "[CHAP Challenge id=0x$idhexa  ${MG}$challenghexa${MD}, ...";


  # mise en forme et controle des data : identite

  local stat='identite vide';
  local info='Dans la champ identite :'; #en cas erreur hexa

  controlhexa $idhexa;
  if test "$stat" != ''; then #malformed string identite

     echo "
  $stat
    ( Deux digits hexa Minuscules attendus ( un octet ) !)
      Arret du sous programme de controle 
";
     code='2';
     return;

  fi;

  # mise ne forme des data : challeng

  stat='challeng vide';  # un automate qui reponds a un challeng
                         # ne devrais pas accepte un challeng trop court
                         # et limiter le nombre essai
                         # ( en cas de spoofing fai )


  info='Dans la string de challeng :'  #en cas erreur hexa dans controlhexa

  local result=''; #variable a mettre a jour sous format compatible echo \xFE\xFD
  local str="$challenghexa"; #copie restante a explorer

  while true; do # extraire la string par groupe de deux caracteres

    local HE="`expr substr \"$str\" 1 2`";  #extraire les deux premier digit        !!!!!
    if test "$HE" == ''; then break ; fi;  #fin de string

    controlhexa $HE;  if test "$stat" != ''; then break ; fi; #verifier format deux a deux

    result="${result}\x${HE}"; #format compatible echo \xFE                  !!!!!
    str="`expr substr \"$str\" 3 200`"; #pour continuer assembler le reste de la ligne   !!!!!

    #normalement il y a un nombre pair de caracteres dans la string

  done;
  if test "$stat" != ''; then #malformed string challenghexa

   echo "
  $stat
    ( suite de paires de digits hexa Minuscules attendus !)
      Arret du sous programme de controle 
";
     code='3'; #return code
     return;

  fi;

 
$ECHO -n -e $result | $OD ;  # affichage de controle puisque tous va bien


echo --------------------------------

#soit le password :
#
#  il peut y avoir un pb si le pass est binaire,
# a cause de cette faiblesse, bien souvant les fai chossisent
# d'utiliser comme password une string genneree par un base64
# ( ce qui conduit a avoir des chiffres et des lettres minuscules et maguscules,
#   bien verifier alors, les zero les lettres O o  les un les i les 1 .... )

echo " Soit le password \"$pass\" :";
$ECHO -n -E "$pass" | $OD ;  # affichage de controle en octal

echo --------------------------------

# on fabrique une reponse composite ( pasword avant challend ! )

echo " On fabrique une string composite, 
en concatenant  : id , le_secret  et le_challeng : "
$ECHO -n -e "\x${idhexa}${pass}${result}"  | $OD ;  # affichage de controle en octal


echo --------------------------------

echo " On calcule le hash md5 de la string composite ";

#######################################
# il suffit d'une seule ligne :
hach="`$ECHO -n -e \"\x${idhexa}${pass}${result}\" | $MD5SUM |( read a b; echo $a)`";  #calcul effectif  !!!!!
# on constate qe le sel ou le challeng est apres le password
#######################################
#  Dans les controles chap ppp c'est le concentrateur qui fait le boulot
# en utilisant souvant un serveur de signature de type Radius 
# le FAI ne fait que renseigner au prealable le serveur de signature 
# ( au moins une fois en souscrivant abonnement ) !


# et on transmettre sont hach a isp

echo " Et on transmet la reponse CHAP calculee : "
echo "    [CHAP Response id=0x$idhexa ${MG}$hach${MD}, ...";

echo --------------------------------

echo " Qui devrais etre egal a   ${MG}$reponse${MD} ?"


if test "$hach" == "$reponse"; then
  echo -e "LE PASSWORD TESTE EST LE BON !!!!!!!!!!!\a\a\a";
  code='0';
else
  echo "LE PASSWORD TESTE N'EST LE BON ???? ";
  code='1';
fi;

echo --------------------------------
echo --------------------------------

}


#EXEMPLE D'UTILISATION

echo -n "
Programme $0
 de controle d'un challeng CHAP MD5 

    Avant tous verifier que sur la ligne suivante apparais un \"A\" tous seul

       \"";
$ECHO -n -e "\x41";
echo '"

        ( sinon raparametrer le source ECHO de ce programme )
';

if test "$1" == ''; then  #help de demonstration
 
 idhexa='02'; # sur deux caracteres hexa

 challenghexa='968f04a89a76b9e83f418b8151fd7597'; # en hexa pair

 reponse='9b5ba81b5d0c7e207663ed6e0268db74';

echo "

   HELP

   Ce programme en ligne de commande 

 qaund on lui donne un challeng de type :

   #rcvd [CHAP Challenge id=0x${idhexa} ${MG}${challenghexa}${MD}, name = \"99-031-002\"]

 connaisant le password suppose, il calcule ou verifis la reponse :

   #sent  [CHAP Response id=0x${idhexa} ${MG}${reponse}${MD}, name = \"R-PAP-tagada_17292@fai.net\"]

 le format est compatible avec un dump pppoe :

  on peut en mode debug de pppd
  recuperer les info dans les fichier /var/log/syslog  
   (grep \\\\[CHAP /var/log/syslog )

  idem  avec tcpdump -i eth0 -n |grep -i chap

   (voir aussi ethereal)

 si la reponse ne correspond pas, alors le password teste n est pas le bon !

    RQ : octet id doit etre rentree sur la forme de deux caracteres  hexa  (un octet)
               01 ou 02  ou  03 ....
            en cas de challengs multiples sur une cession donne
            id permet de differentier les questions et les reponses

  rfc1994 


    Ce petit programme permet de verifier sur un dump de la liaison
   que le password que vous a fournis le FAI
   et celui utiliser effectivement par sa box
   sont strictement identiques (pas de prefix ni de suffixe ....)
   et suivent la rfc1994
    A partir de la vous pourrez gerrer directement les ppp
   a supprimer la box du FAI pour mettre la votre !


   EXEMPLE EN COURS :

";



pass='EXPRESSION FAVORITE DU PERE UBU   EN SIX LETTRES';  #pass='m....e';

#appel de demo pour ewpliquer le fonctinnement

controlchalleng ;  #appel de demo

echo "

usage 
$0   'codeid' 'challenghexa' 'reponse' 'passwordatester' ;

#pour introduire des caracteres bizzares dans le password utiliser les \` \`

";    


else #appel normal hors help


  idhexa="$1";  # a donner sur deux caracteres hexa  idhexa='02'

  challenghexa="$2"; #challenghexa='968f04a ... '; #sur paires de caractere hexa

  reponse="$3";  #reponse='30cc4 ...';

  pass="$4";   #pass='huburoi';

  controlchalleng;



fi;

# dans tous les cas

echo "Ligne de commande equivalente a cet exemple (en copier coller):

$0 '$idhexa' '$challenghexa' '$reponse' '$pass' ;

"

exit $code;  #pour mettre a jour la variable shell $?


#  ceci n'est qu'un exemple de programme
# que vous pouvez faire evoluer ...

   #  Du fait que controlchalleng ne modifis pas les parametres d'appel
   # on peut ameliore le programme et faire une boucle d'appel
   # qui fait une recurence d'appel de controlchalleng
   # sur des variantes du mots de pass (prefixe suffixe  ...)
   # et qui s'arrete des que c'est ok (code retour egal a 0)

      # for i in a b c d aa az ; do #generre les variantes
        # pass="$i$4"; controlchalleng; if test "$code" == '0'; then break; fi
      # done

   #  On peut aussi envoyer des defis succesifs a la box ....

   #   ou aussi l'isoller totalement du modem
   #   et ne lui transmettre que les defis CHAP
   #   en simulant le protcole PADT 
   #   et en retournant ces reponses a la bs !


#    Mais le plus simple, si le mot de passe
#   que vous a transmis votre FAI, n'est pas le bon,
#   et de changer de FAI !!!


# IMCP Blandy Alain imcp.ba@free.fr   http://www.trousperdu.org


Adresse du demandeur : "46.22.94.252"

NC imcp.ba@trousperdu.org imcp.ba@free.fr IMCP Blandy Alain
Statistiques