Benutzer:Angorastuhl/WomenRootingPaper

Aus LaborWiki
Wechseln zu: Navigation, Suche

von XaitaX, zur Sicherheit mal hierhergestellt :-)

|=---------------------=[ The ultimate w0men r00ting paper]=------------------=|
|=----------------------------------------------------------------------------=|
|=-----------------------=[ xaitax | sticky bit | DocFX ]=--------------------=|
|=----------------------------------------------------------------------------=|


0x01 Vorwort
0x02 Der Scan der zu r00tenden host-Ess
0x03 Der Source fuer den Scan
0x04 Der Host-ess r00t
0x05 Das r00t Exploit incl. Description


|- 0x01 - Vorwort

Hey Leute, hier endlich das langersehnte w0mens r00ting pap3r. Da eine
unglaublich grosse Nachfrage besteht, wollen wir euch nun endlich mal einen
grossen Einblick in die Welt des Frauen r00ten zeigen und geben. Leider koennen
wir euch keine praktischen Beispiele geben, aber das schafft ihr auch mit
unserer step-by-step Anleitung. ;) Es ist aus lauter Mitleid und Einsicht in
euch von xaitax, DocFX und sticky bit in einer laengeren Phase, dank
Urlaubsverzoegerungen(ok, ja es war Faulheit :P), in voller Hingabe geschrieben
wurden. Aber kommt als Mann niemals auf die Idee nach dieser Anleitung bei
jemandem Gleichgeschlechtlichen einzur00ten. ;) Das koennte braune Konsequenzen
nach sich ziehen. Und das wollen wir dann doch nicht riskieren. Der sogenannte
_Black Hole Bug_. Ein bekannter und immer weiter verbreiteter Vulnerability.


|- 0x02- Der Scan der zu r00tenden Box

Nun als erstes muessen wir uns ueberlegen bei welcher Box wir einr00ten wollen.
Dazu muessen wir mehrere Vorgaenge vornehmen. Als erstes sollten wir in ein
Board gehen, auch wenn wir da evtl. 10 Byte Eintritt bezahlen muessen. Aber da
dort eine Menge Traffic herrscht, haben wir sicherlich mehr Erfolg als sonst wo.
Als erstes muessen wir das Layout checken, denn erst dann koennen wir anfangen
die Host-ess'en zu scannen. Wenn man sich mehrere Layer anschaut trifft man auf
die diversesten Host-ess'en. Wir sollten uns genau umschauen in welchen
Kategorien wir auf die meissten Host-ess'en treffen koennten. Moeglicherweise
wirst du auch auf diverse *.mid Sounds aus allen Ecken treffen. Um auf das Board
zu kommen werden wir das entsprechende POP6 Protokoll nutzen.


|- 0x03 - Der Source fuer den Scan

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


   #include <communication.h>
   #include <clothes.h>
   #include <smilefaces.h>
   #include <money.h>
   #include <alkohol.h>

   #ifdef _HASCAR_
     #include <drivingskills.h>
   #else
     #include <bike.h>
     #include <????.h><-oepnv
   #endif


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

   class Person {
    private:
     char[64] name;
     short unsigned int age;
     bool male;
     float PromilAlk; ?????????????
     int Money;
     void WalkToLocation(CLocation aLocation);
    public:
     CLocation Location;
     CClothes clothes;
     int GetAge();
     int GetMoney(int count);
     void PrepareNight();
     bool ConnectBBS(CBBS board);
   }


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

   void Person::WalkToLocation(CLocation aLocation)
   {
    int i;
    SetWalkDirectory(aLocation,Location);
    while (aLocation!=Location) {
     MakeStep();
     if (PromilAlk>1) {???????????
      SetWalkDirection(WalkDirection+Random(PromilAlk));
     }
    }
   }


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

   int Person::GetAge()
   {
    if (male) {
     return age;
    } else {
     switch (age) {
      case 15..18: return age+2;
      case 24..40: return age-3;
      else return age;
     }
    }
   }


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

   int Person::GetMoney(int count)
   {
    Money-=count;
    return count;
   }


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

   void Person::PrepareNight()
   {
    CClothes cl;

    TakeShower(this);
    DryHair(this);
    StyleHair(this);
    ShaveFace(this);
    me.clothes=SelectClothes(this,QUALITY_REALLY_GOOD);
   }


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

   bool Person::ConnectBBS(CBBS board)
   {
    if (age<18) {
     if (!(SendMessage(MOMS_HANDLE,
                      this,
                      board.Handle,
                      PLEASE_LET_ME_GO_TONIGHT) == IS_OK)) {
      return false; // shit happens.
                            // hope it'll work tomorrow
     }
    }
   #ifdef _HASCAR_
    DriveToLocation(board);
   #else
    CBike b;
    if (b.CheckForPuncture) {
     GoByBike(BBS);
    }else{
     if (Money>50) {
      GoByBus(BBS);
     }else {
      WalkToLocation(BBS);
     }
    }
   #endif
    while (Friends.Location!=BBS) { Delay(10); }
    if (age<21) {
     try {
      Duck();
      Hide(BEHIND_FRIENDS);
      WalkToLocation(BBS.Entrance);
     } except {
      return false;  // fuckin keeper...
     }
    } else {
     WalkToLocation(BBS.Keeper);
     Say("hi, isn't it a nice day today?");
     Smile();
     if (WaitForAnswer()!=ERR_TIMEOUT){
       Chat(BBS.Keeper);
       // this is better for a good connection...
     }
     WalkToLocation(BBS.Entrance);
    }
    if (!Pay(BBS.Entrance)) return false; //not enough money

    return true; // yeah! connected....
   }


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

   int Main()
   {
    CBBS b;
    CPerson me; // ha! this is me!
    // ------------- you have to customize this part! -----------
    // if you dont have your own values the program properly crashes!
    me.name="Dade";
    me.age=21;
    me.male=true;
    me.PromilAlk=0;
    me.Location=Home;
    me.Money=100;
    b.Name="Metropol";
    // -----------------------------------------------------------
    me.PrepareNight();
    if (!b.Exists()) {
     return 1; // Err, board not found
    }
    if (!me.ConnectBBS(b)) {
     return 2; // Err, unable to connect
    }
    b.KeepClothes(me.UnncessarryClothes, me.GetMoney(1));
    me.Chat(Friends);
    me.WalkToLocation(BBS.NextChair);
    me.LookAt(OBJECT_ALL);
    if (Similar(Answer,"What are u stearing at?")) {
     Say("oh, nothing. just wondering if the dj will ever play good musik");
     me.TurnAround();
    }
    if (!me.male) {
     return 3; // Err, female objects are currently not supported
    }
    BBS.AddBoy(me);  // now i'm available
    int i;
    CPerson* Girl,MyGirl,tmp;
    MyGirl = 0;
    for (i=0; i<BBS.GirlCount; i++) {
     Girl=&BBS.Girl[i];
     me.LookAt(*Girl);
     if (!(me.IsNotUgly() && Girl->IsGoodLooking)) {
      continue;
     }
     tmp=BBS.GetNearestObject(Girl->Location);
     if (tmp->male) { // fuck, properly she is alredy busy :-(
      if (me.Braveness==EXTREME_LARGE) {
       continue;
      }
     }
     switch(Girl->Location){
      case(BBS.Bar):
       CDrinks[2] c;
       me.WalkToLocation(BBS.Bar);
       c = me.Buy(Bar.Drink,me.GetMoney(4),2);
       me.Give(*Girl,c[0]);
       me.Drink(c[1]);
       me.Chat(*Girl);
       me.Ask("Wanna dance?");
       if (!(Similar(Girl->Answer,"Sure!"))) {
        me.Say("My friend said, youre a great dancer!*smile*");
        //me.Say("so, i want u to prove it...");
        if (Similar(Girl->Answer,RST)) {
         continue;
        }
       }
       break;
      case(BBS.DancFloor):
       break;
      case(BBS.Toilet):
       // not yet implemented
       break;
      else // not yet implemented
       break;
     }
     // Girl->WalkToLocation(BBS.DanceFloor);    // :-( Err, NoAccess
     me.WalkToLocation(BBS.DanceFloor);
     me.WaitForObject(*Girl);
     if (Girl->Location != me.Location) {
      continue;
     }
     me.Put(me.CellNumber,Girl->CellPhone);
     me.Dance();
     me.LookAt(*Girl);
     me.Dance();
     if (Girl->LooksAtObject(me)) {
      me.Dance(*Girl);
      me.Whisper("u r so beautiful");
      me.keepDancin();
     } else {
      continue;
     }
     me.Take(Girl->Hand);
     me.WalkToLocation(BBS.Sofa);
     do {
      CDrinks[2] c;
      c = me.Buy(Bar.Drink,me.GiveMoney(4),2);
      me.Give(*Girl,c[0]);
      me.Drink(c[1]);
      me.Chat(*Girl);
     } until ((me.PromilAlk>1) && (Girl->PromilAlk>1.5));
     me.Kiss(*Girl);
     MyGirl=Girl;
    }
    if (MyGirl!=0) {
     // and here u can do what ever u wanna do... cause u r the winner....


    } else {

     // loooser

     me.WalkToLocation(Home);
    }
   }


|- 0x04 - Der Hostess-r00t

Um eine Host-ess zu rooten nuetzen wir das auf allen Host-essen implementierte
POP6 Protokoll, normaler Weise ist dieses jedoch nicht unter Verwendung, bzw.
fuer oeffentlichen Gebrauch freigegeben.

Also was tun?

Nun der Trick an der Sache ist folgender, ueber ein anderes Protokoll, welches
auf der Host-ess fuer oeffentliche Kommunikation freigegeben ist, speisen wir
Sequenzen ein, die den im Hauptprozessor verankerten Wunsch zur Erstellung von
geforkten Prozessen (auch wenn wir die normalerweise nicht wollen!) und damit
der effizientern Aufteilung der Rechenlast so wie dem Aufrecht erhalten der
Berechnungen. Der Aufruf solcher Forking-Prozess-Einleitenden-Operationen ist
ein im BIOS fast jeder Host-ess gespeichertes Feature, das standardmaessig
ausgeliefert wird. Selbst wenn der Administrator einer Host-ess von der Gefahr
dieses Features weiss, kann er es fast nie abstellen und oft nur schlecht
eindaemmen.

Und wie machen wir das jetzt genau?

Anzunehmen ist, dass bei den meissten Hostessen das HTP (Human Talk Protocol)
implementiert und oeffentliche Daemons frei gegeben sind. In der Praxis ist das
zu 99% Prozent der Fall.
Jetzt kommt die Arbeit. Wir muessen also nun unser "Opfer" genau ueberpfuefen.
Das ist leider von Host-ess zu Host-ess sehr sehr unterschiedlich, einigen
wenigen soll sogar der blosse Wunsch zum Protokollwechsel auf POP6 auf der HTP
Ebene genuegen um den POP6 Demon zu starten und gut "geoelt" frei zu geben, auch
wenn dies in der Praxis eher selten der Fall sein duerfte. Dies ist auch eine
nicht unbedingt zu empfehlende Vorgehensweise, denn oft fangen
Host-ess'en-interne Firewalls diese Anfrage ab und loggen euch als potenziellen
r00t'er. Das dann jede Kommunikation mit der Host-ess geblockt wird sollte klar
sein.
Wichtig ist, dass ihr euch nun eine gute Strategie ueberlegt. Sendet dazu
einfach ein paar unverbindliche Anfragen auf Files unterschiedlicher Typen,
moeglichst breit gefaechert (tut so als seit ihr ein Mann von Welt-Weit-Web),
und findet heraus auf welche Typen die Host-ess besonders arbeitsintensiv
reagiert, leider ist es in der Praxis oft schwer zu erkennen, denn einige Typen
reagieren auf gewuenschte Anfragen mit schnellerer Berechnung, andere leider mit
langsamerer Berechnung, da sie noch einige Pruefroutinen dran haengen. Aber der
Einsatz eines Host-ess'en Scanners (Listing 0.0) sollte hier Klarheit bringen.
Habt ihr einen Filetyp erkannt auf den eure Wunsch Host-ess spezialisiert ist,
solltet ihr Interesse an diesem Typ zeigen und evtl. auch Files diesen Typs
anbieten. Werdet dabei aber nicht einseitig, auch ein paar andere Filetypen, oft
verwendet wird z.B. *.joke, sollte immer dabei sein, um ein einfrieren der
sowohl fuer eure Maschiene als auch die des Objektes arbeitsintensiven Prozesse
zu verhindern. Auch hier sollte der Scanner Klarheit geben koennen wie
die Auslastung auf dem Host gerade ist, und ob ihr noch Einen drauf legen
koennt/muesst.
Auch ist u. U. der Einsatz anderer Protokolle ausser dem HTP notwendig, aber das
solltet ihr inzwischen von eurer Host-ess wissen.
Bei manchen Host-ess'en kann der Anteil der zu sendenden Files allerdings derbe
in die Resourcen gehen, besonders wenn es eine hartnaeckige Host-ess ist oder
der Admin hinterlistig ist. Vom verschicken von Hardware raten wir ab, das
fuehrt oft zu nichts und ist nur dazu da eure Maschiene auszuschlachten, ihr mue
sst hier halt abwaegen was was wert ist. Stellt die Host-ess nun selbststaendig
Anfragen an eure Daemons ist es eigentlich schon fast geschafft. Wir haben jetzt
eine Layer3 bis Layer4 Kommunikation mit der Host-ess machen koennen. Dieses ist
allerdings noch nicht das was wir wollen, denn wir wollen ja Layer2 oder gar 0.
;)
Jetzt kommt der in Listing 0.0 gezeigte Exploit zum Einsatz, vorher ist es
allerdings noch ratsam abzuwarten bis alle anderen Verbindungen der Host-ess
geschlossen (evtl. sind da auch grad andere am r00ten, das koennte boese enden.
Vorher checken!) sind und ihr euch in einer gesicherten Umgebung befindet, denn
das erhoeht die Erfolgschancen, aber wer'n Abenteuer sucht, bitte!
Dieser Exploit, wohl gemerkt nur eine Basis Version schickt nun unter HTP
Sequenzen an die Host-ess, welche normalerweise ungefiltert in die CPU gehen und
im Hintergund von oben erwaehnten BIOS-Feature ueberwacht werden.
Ob das BIOS nun auf einen solchen Arbitary-Code reagiert haengt von den
Sequenzen ab und auf welchem Layer der Kommunikation ihr euch befindet. Um hier
gute Strategien zu entwickeln bedarf es viel Erfahrung, welche Sequenzen was
bewirken koennen. Springt das BIOS auf den Code an, so wird es im Hauptprozessor
den POP6 einspeisen und euch auf den Pprotokollwechsel aufmerksam machen. Der
Exploit verbindet euch nun mittels POP6 auf den Port 1 (bei f Typen!) und voila,
ihr seid drinnen! Nach ein wenig hin und her koennt ihr dann euer Zeug da
lassen, mehr oder weniger, denn um die leider weit verbreiteten geforkten
Child-Prozesse zu vermeiden benutzt der Exploit einen Schutz-Mechanismus, der
diese und noch andere Nebeneffekte verhindert, allerdings ist der ultimative
Zugriff damit nicht moeglich. Naeheres dazu aber in der Anleitung des Exploits.
Ob ihr nun eine Layer0 oder nur eine Layer1 oder 2 Verbindung hattet ist schwer
zu sagen, auch hier kommt es wieder auf die Erfahrung an, manche BIOS'e in den
Host-ess'en sind so eingestellt, dass sie einen solchen Zugriff nur auf Level0
zulassen, manche auch auf 1 oder 2 ...
Solltet ihr eine Layer1 und Layer0 Verbindung erreicht haben, d.h. ihr werdet
danach getrustet und je nach Host-ess evtl. der einzige Kommunikationspartner
fuer POP6, haben wollen koennt ihr versuchen die I-Love-You Backdoor einzubauen,
naeheres dazu in Listing 0.0. Bedenkt aber dabei, dass ihr dann evtl. nur noch
fuer POP6 Kommunikation mit dieser einen Host-ess zu gebrauchen seid, denn
manche Host-ess'en reagieren mit zuruecksetzen der Verbindung auf Layer3 oder
gar hoeher, wenn sie eine POP6 Kommunikation von euch zu anderen Host-essen
heraus finden. Auch ist diese Backdoor nur auf der HDD gespeichert und wie das
mit Magnetspeichern so ist, da ist leider nichts auf Dauer.


|- 0x05 - Das r00t Exploit incl. Description

#!/usr/bin/perle

use Con::Con;
use Socket;

$your_bunny = 'na wer wohl?';
$geschwaetz = 'was sie halt hoeren will...';

socket (F, PF_INET, WRD_STREAM, getprotobyname('htp'));
 connect (F, sockaddr_in(4, inet_aton($your _bunny)));

 while ($f !~ /switching protocol: pop6/){
     send (F, "$geschwaetz\r\n\") || die;
     $f = <F>;
}

close F;

socket (F, PF_INET, LIQ_STREAM, getprotobyname('pop6'));
 connect (F, sockaddr_in(1, inet_aton($your_bunny)));
 &Con::Con::DOM(1);
 send (F, "~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)~<)") || die;
 close F;
 print "\a";

exit;

# Zur Benutzung:
# Passt als erstes die Variablen in Zeile 6 und 7 auf eure Host-ess an.
# $your_bunny bekommt den Host-ess'ennamen des zu rootenden Objektes,
# $geschwaetz solltet ihr dem zu rootenden Objekt anpassen. Bei vielen
# Maschienen tut es die Zeichenfolge 'r0man+!5ch3523ux' aber das kann
# stark varieren. Fuer manche Objekte, z. B. SM-Host-essen, kann es sogar
# noetig sein, statt der ueblichen ASCII Zeichenfolgen handfeste Bitwerte
# mit BEAT-Sequenzen zu senden und ggf. ein anderes Protocol fuer den
# ersten Sendevorgang zu verwenden. Bei gut gesicherten Maschienen kann es
# vorkommen, das eine einzige Zeichenfolge nicht ausreicht, sondern diese
# immer wieder, evtl. sogar nach Challenge-Response Verfahren neu generiert
# werden muss. Ihr solltet also ueber eure Host-ess Bescheid wissen und
# immer bedenken, dies ist nur ein Basic-X-Ploit!!!
#
# Wichtig ist noch der Import des Con::Con::DOM-Moduls in Zeile 3 und
# der Aufruf seiner Subroutine DOM in Zeile 21.
# Dieses Modul ermoeglich eine sichere Verbindung. Dies dient vor allem
# dazu das evtl. unerwuenschte Loggen zu verhindern, bei dem u. A.
# Forking-Prozesse entstehen koennen, die euch Anhand eindeutiger
# DNS-Lookups als r00ter enttarnen koennen, und dann koennt ihr euch
# ewig und drei Tage um so 'nen scheiss Child-Prozess kuemmern.
# Ausserdem schuetzt euch diese Routine vor evtl. installierter Malware,
# die sich versuchen wird auf eurer Maschiene zu installieren.
# Nachteil ist allerdings, dass der Sandkasteneffekt der durch die Routine
# entseht. D. h. ihr bekommt nur einen virtuellen Schreibzugriff.
# Bei Maschienen mit denen ihr oeffters kommunizieren wollt solltet ihr
# daher unbedingt einen PILL-Driver installieren, und den Aufruf
# dieser Routine entfernen. Aber Vorsicht, leider sind nicht alle Host-ess'en
# mit diesem Treiber kompatibel und bevor ihr die ganze Maschiene kaputt
# macht...
#
# Naja was gibts noch, ach ja, dies ist ein X-Ploit fuer Typ f Host-essen,
# Wer es fuer Typ m Host-essen (es gibt keinen Port 1, also leicht zu
# erkennen) verwenden will sollte sich vorher nochmal in dieses Thema genau
# einlesen und den X-Ploit ggf. anpassen.
#
# OK, also nochmal dran denken, das ist nur ein Basic-X-Ploit und kackt
# uns nicht an wenn es nicht den gewuenschten Effekt hat.
#
# Also dann wenn ihr das alles begriffen habt und ihr euch sicher seid,
# dann ruft dieses Skript, wie es auf eurem OS ueblich ist, auf und feucht
# froehliches r00ten!
# X-Ploit ggf. anpassen.


|- 0x06 - Autoren

-| xaitax     - ah@primepage.de
-| sticky bit
-| DocFX      - DocFX@gmx.de

|- EOF