Alap hack módszerek teoretikai oldala...
Hogy meg a legkezdőbb kezdő számára is érthető legyen,
írtam egy kis bevezetőt UNIXba:
UNIX:
Szóval a UNIX alapja a többfelhasználos stabilitás...
Namost...minden felhasználónak(user) van egy LOGIN neve(login name), egy jelszava
(password), egy UID -je...egy GID -je...egy home könyvtára(home directory)...
A root a rendszer főnöke...neki mindenhez joga van...
Miert??...jó kérdés...
Hát azért, mert a UID -je 0...
UID = User ID
Ha ez nulla, akkor isten vagy a rendszeren...
De általában a felhasználóké más...
Persze a root akárkinek adhat 0 UID -t...
Hogyan?...hat úgy, hogy a /etc/passwd file -ban lecseréli a UID számodat 0 ra...
A felhasználónak nincsenek jogai...
A felhasználónak van egy száma(UID)...
A fileokban és a directorokban van a csoda...
A file -nak vannak úgynevezett permissions...
Így néz ki:
-rwxrwxrwx owner group filename
Ebből a fontos rész a -rwxrwxrwx , az owner, és a group...
Az első - karakter az jelzi, hogy FILE...ha d lenne, akkor directory, ha l akkor
link stb. stb.
az r betű az olvasás engedély...a w az írási engedély...a x pedig végrehajtási
(execute) engedély...
az első három rwx azt jelenti, hogy ezek a OWNER (vagyis a file tulajdonosa) engedélyei...
A file ownere azt csinál vele amit akar...
A második a GROUP...
Ez egy...csoport UID...
Van egy csoport, aminek beállíthatod a GID -jet pl 111 -re és a group neve
"hackerek" -re lenne beállítva, akkor ezt a file -t csak azok tudnak olvasni,
akik a hackerek groupban volnának...és persze az owner(file tulaj)
és a root...
-rw-r----- <- az owner és a root írni tud bele és olvashatja, a groupban
levo emberek csak olvasni tudjak...
A harmadik mezőt úgy hívják NOBODY...
Vagyis senki...azaz bárki csinálhat vele mindent, ami a 3. mezőben meg van engedve...
Vagyis ha pl. a /etc/passwd permission -jai:
-rw-rw-r-- <- akkor nincs gond...
De általában a system file -oknak az ownerja root...a groupja is...
De ha -rw-rw---- <- akkor baj van...
Ilyenkor muszáj UID 0 -t, vagy GID 0 -t szereznünk...
Itt jön a dolog szépsége...
-------------------------------------------------------------------------------
Ha a file-nak az ownerje pl. ROOT és a root engedélyeinél az x helyett egy "s"
betűt látsz, akkor az a program SUID ROOT...
A SUID azt jelenti, SET UID....és a root...tehát SET ROOT UID...
Vagyis a file(program) executalásnál felveszi az owner UID -jet...
Vagyis ha az owner root, akkor UID 0 -val fog futni...
Például, hogyha...
Tegyük fel, hogy ennek a filenak az ownere root:
-rwsr-xr-x <- ez azt jelenti, hogy ha jól megnézed, lefuttathatja a NOBODY,
Szóval...ha lefuttatja, akkor a programnak root uid -je lesz...
Vagyis ha te a file -ba bele tudnál keríteni egy "cat /etc/passwd" parancsot,
Akkor meg is lenne...
Csakhogy ilyen sosincs...
Ezért kell tálalnod egy olyan programot, aminek hibája van, és SUID root...
Vagyis...
Például...sendmail...
Tudni kell róla, hogy !!!!!!!suid root!!!!!!!, és hogy nobody is futtathatja...
Néhány verziója tartalmaz olyan hibát, hogy ha rossz típusú
file -nevet adsz meg neki, vagyis egy olyan file -t amiben olyan adatok vannak,
amit nem tud azonosítani, akkor kiírja azokat a sorokat a képernyőre, és
melle ír valami ilyesmit: "unknown control line"
Gondolkozz csak el rajta...
Milyen érdekesen fel lehetne ezt használni...
A config file -t a "-C" paraméterrel definiálod...
például:
senmdail -C sendmail.configfile
De van egy érdekes ötletünk:
Mivan ha ezt írom be neki??:
sendmail -C /etc/passwd
Örömünkre pl. ezt latjuk:
/etc/passwd: line 1: unknown control line "root:e15LU2L6FLhxB:0:0:root:/root:/bin/bash"
/etc/passwd: line 2: unknown control line "bin:*:1:1:bin:/bin:"
/etc/passwd: line 3: unknown control line "daemon:*:2:2:daemon:/sbin:"
/etc/passwd: line 4: unknown control line "adm:*:3:4:adm:/var/adm:"
/etc/passwd: line 5: unknown control line "lp:*:4:7:lp:/var/spool/lpd:"
/etc/passwd: line 6: unknown control line "sync:*:5:0:sync:/sbin:/bin/sync"
/etc/passwd: line 7: unknown control line "shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown"
/etc/passwd: line 8: unknown control line "halt:*:7:0:halt:/sbin:/sbin/halt"
/etc/passwd: line 9: unknown control line "mail:*:8:12:mail:/var/spool/mail:"
/etc/passwd: line 10: unknown control line "news:*:9:13:news:/var/spool/news:"
/etc/passwd: line 11: unknown control line "uucp:*:10:14:uucp:/var/spool/uucp:"
/etc/passwd: line 12: unknown control line "operator:*:11:0:operator:/root:"
/etc/passwd: line 13: unknown control line "games:*:12:100:games:/usr/games:"
/etc/passwd: line 14: unknown control line "gopher:*:13:30:gopher:/usr/lib/gopher-data:"
/etc/passwd: line 15: unknown control line "ftp:*:14:50:FTP User:/home/ftp:"
/etc/passwd: line 16: unknown control line "nobody:*:99:99:Nobody:/:"
/etc/passwd: line 17: unknown control line "user:pH1j.C9qFtqxz:500:500:user,user,user,user,:/home/user:/bin/bash"
No local mailer defined
QueueDirectory (Q) option must be set
A legújabb verziókban mar nem muxik, mert kijavítottak a hibát és
ha user futtatja, akkor azt hiszem megnézi, hogy root e...ha nem root,
akkor csinál egy olyan húzást, hogy "setuid(uid);" namost ez a suid programunk
UID -jet átváltoztatta az uid UID -re...vagyis ha az uid -d 111, akkor mar
nem root uid -vel fog futni a többi CODE, hanem a sajátoddal...
Buffer overflow:
Szóval, itt arról van szó, hogy...
Allokálsz, vagyis kijelzel egy memória helyet az adataidnak:
Egy egyszerű C program:
#include
char buffer[200]; <- itt adod meg, hany byte fer bele...
void main()
{
strcpy(buffer,"kecske"); <- Belehelyezem a kecske szavat a bufferbe...
printf("%s",buffer); <- Megnézem a buffer tartalmat...
}
Most beletetten a strcpy <-vel a buffer -ba 6 byte -ot(a kecske szavat)...
De mivan ha többet teszek bele??? (például gets(buffer);)
Kicsordul a buffer...
Namost...
Vannak úgynevezett REGISTER -ek...
Az egyik a legfontosabb a mi esetünkben...
Az IP vagy úgy is hívják EIP...
Ebben van egy szám, ami azt jelzi, melyik következő
parancsot futtassa a memóriában...
Ha ezt átírjuk, azt futtatunk le a memóriában, amit akarunk...
Vagyis...addig toltjuk a buffert, vagyis mar nem a buffer,
csak innen indult ki...szóval addig toltjuk, amíg el nem jutunk az EIP -ig...
aztan beleirjuk a szamot, ahol folytatodik a buffer az EIP utan...
Így néz ki vázlatosan:
buffer EIP
| | | |
414141414141414141414141414141414141414141414141412000909090909090909090
| | |
1234 1244 stb. stb. pl. 2000
Vagyis ahogy eléri a buffer az eip -t...belehelyezi a 2000 -es számot,
azt a memória helyet, ahol folytatódik a buffer az eip után...
tehát most nem valamilyen program fog futni, hanem a 0x90 -NOP
Ami azt jelenti, hogy NO processz, vagyis nem csinál semmit,
nade ide behelyezhetsz egy olyan parancsot, hogy:
execl("/bin/sh",NULL); <- ezt természetesen át kell alakítanod hexre...
Ezzel lefuttatod a shellt, és ha a program, amiben a buffer volt SUID root,
akkor a shell is suid root lesz, vagyis az uid -d 0...
Ez csak egy egyszerű vázlat volt, pontosabban elmagyarázni assembler tudás nélkül nehéz lenne...
Nem biztos, hogy érthető volt a memória pointacio, elmagyarázom külön:
Például van 10 darab üres helyed, amibe tehetsz barmit...
De csak egy byte -nyit...
Az így fog kinézni:
ABCDEFGHI J
||||||||| |
123456789 10
Az elsőben egy A betű van, vagyis 0x41 hexben...
A másodikban B, vagyis 0x42 hexben...
és az 1,2,3...10...ezek voltak a mutatok, mert te az 5. pohárba is tehetsz külön
valamit...és az 5 az a memory pointer, úgy mint az előző abrakon
az 1234,1244 vagy a 2000...
Remelem ebből meg lehetett érteni...
Így például lehetséges olyan hiba is, ami szinte kizárt, mert ennyire azért
nem hülyék a programatorok, de volt mar rá példa....
szóval pl. az ftp -nél...
Be kell jelentkezned a username: meg a password: -nél...
Tehát...tételezzük fel, hogy a programatorok az username -re feltételeztek, hogy
nem lesz nagyobb, mint 100 byte, és nem kontrolalja le a program nem e nagyobb a kívánt adat...
Ilyenkor lehúzod a programot felinstallálod, lepróbálod, hányadik byte a bufferban
az eip, aztán felteszed a shellt...
És kész az exploit...
Felteszed a lábad az asztalra, leindítod...
És egyáltalán nincs semmi accod az adott gépen, és ha a futó ftp program root
jogokkal fut, akkor te szép csendben ROOT vagy.
És szinte semmit sem kell hozza csinálnod...
És a leggyönyörűbb az ilyen dolgokban az, hogy nem logol semmi:)
Mert nem futtattad a /bin/login -t...tehát nem fut le sem a .bash_history <- vagyis...
Nem logol semmi parancsot, amit kiadtál...
A "w" parancsra ami megnézi, milyen felhasználok vannak fent nem reagál,
mert amint mar mondtam nem használtál logint...
És ekkor...
Csak egyetlen mód van arra, hogy valaki gyanút fogjon...
"netstat"
Megmutatja az összes tcp/ip kapcsolatot...
Vagy tcpdump...
Esetleg meg akkor, ha egy speciális software van a gépen, ami logol minden
tcp/ip packetot...
De ki fogna gyanút, hogy te mittomén lehúzol valami freeware -t...
És különben is...
Minden root istennek hiszi magát és azt hiszi a gépe törhetetlen...
Csakhogy teved:)
Következő hack tipp:
Van például egy program ami megengedi, hogy végtelen sok username -et és
passwordot probalhass ki rajta...
Így csinálsz egy programot, ami kipróbálja az összes lehetséges passwordot...
Ha szó, hát legyen:
aaaaa
aaaab
aaaac
...
...
bbbbb
bbbbc
...
Satöbbi...
Szóval ez egy másik módszer, de baj van, ha nem válaszol, hogy jó e az username,
mert ha nem válaszol, akkor képzelheted, a világ összes legjobb számítógépe törne
meg a jelszót az username -al együtt 2 év alatt...
Szóval valahogy meg kell tudnunk, hogy van e olyan username, amit keresünk...
Akkor kipróbáljuk a FINGER daemont...
Az ritkán, mondjuk 20% abban van...
Ha nincs, akkor...
Sendmail...
Van egy olyan parancs, hogy VRFY (verify)...
Ez megmutatja, létezik e olyan felhasználó, akinek a mail -t akarom küldeni...
Tehát...
VRFY aaaa
VRFY aaab
VRFY aaac
satöbbi:)
Így egyszerűbb...
Na mar most, ha nem vagy a legprimitívebb segg akit valaha láttam,
megértetted ezeket, és eltulajdonítottad az alap teóriákat, amikkel be lehet
kerülni egyes helyekre...
Ismétlem, ez semmi óriási kézikönyv, csak az alap TEORIAK vannak itt...
Szerző a „jó nép” a kíváncsiság, meg az idő… :)
A text megírásához kellett:
Kb. 2 óra nyugalom, 2 csomag piros Marlboro, 3 sor(Gambrinus), (hozzáteszem, nem vagyok nyugodt és nem is cigizek, ja és a sör sem az esetem!:)
És egy pici tapasztalat...
|