- A hozzászóláshoz be kell jelentkezni
- 5581 megtekintés
Hozzászólások
Vagyugye a 10.11 El capitan beta sem sebezheto, ha valakinek arra van ingerenciaja.
Eleg kinos egy sebezhetoseg ez.
- A hozzászóláshoz be kell jelentkezni
miért kínos?
- A hozzászóláshoz be kell jelentkezni
Ez a kód milyen nyelven van?
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Swiftnek tűnik.
- A hozzászóláshoz be kell jelentkezni
Milyen szögből?
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
ránézésre és a loc_ alapján valami visszafejtett assembly kód, bár ezt gondolom sejtetted.
"Belépés díjtalan, kilépés bizonytalan."
"Vajon mit várok a sorstól, ha hányok az édestől, és izzadok a sóstól."
- A hozzászóláshoz be kell jelentkezni
Azt már a rax-ból is, csak még sosem láttam asm kódban 'if'-et és '='-t.
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Objective-C, teljesen mechanikusan generálva gépi kódból.
Például az utolsó pár sor, az igazából
objc_msgSend() hívások sorozata, ami ugye az Objective-C nyelv metódushívások megvalósítása.
Itt tulajdonképpen egy NSTask példányt hoznak létre.
Az rbx=*objc_msgSend; sortól kezdve szerintem ezt csinálják a sorok:
1. [NSTask alloc]
2. [NSTask init]
3. [NSTask arrayWithObjects:/var/tmp/se10395.sh]
4. [NSTask setArguments:]
5. [NSTask launch]
6. [NSTask autorelease]
Ez csak annyit csinál, hogy elindítja a /var/tmp/se10395.sh alatt lévő scriptet.
A scriptben van a lényeg, a script tartalma meg a fenti NSString konstansban látható.
- A hozzászóláshoz be kell jelentkezni
Az világos, hogy Objective-C kódokat hívogat, de az gyanús, hogy a kód nem Objective-C legalábbis nem hallottam olyanról, hogy ott közvetlenül lehetne a regisztereket piszkálni.
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Ezek nem regiszterek :) Csak éppen olyan változónevek, amik a regiszterek neveinek felelnek meg.
Értsd: a bináris azt csinálná, hogy rbx-be tesz egy címet stb.
És ezt meg C-ben leírod úgy, hogy void* rbx = *objc_msgSend;
Itt ezek változónevek és nem regiszterekbe pakolás megy :)
Java meg JS kódot is írhatsz, ahol a változóidat rax,rbxnek meg eflagsnek nevezed el.
- A hozzászóláshoz be kell jelentkezni
Szegény ember decompilere... :)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Pont annyira lehet, mint ANSI C-ben azzal ugyanis visszafele kompatibilis (csak minek irnal C kodot Objective-C-ben)
- A hozzászóláshoz be kell jelentkezni
Hát ez ez, hogy már ott se lehet...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Szerinted miért ilyen módon van kódolva?
- A hozzászóláshoz be kell jelentkezni
Mármint mi? Ez egy eléggé buta decompiler eredménye, nincs ez kódolva, csak a decompile során nem állt elő az Objective-C sytax sugar.
- A hozzászóláshoz be kell jelentkezni
Ennél egyszerűbb exploit, ami ugyanezt csinálja: https://gist.github.com/szhu/816822de3f171e6ce15c
A lényeg, ha jól értem:
1. A stderror-ra általában hibaüzeneteket küldünk.
2. A dyld a stderrorra kiírt stringeket kiírja a saját stderrorjára. Azonban a DYLD_PRINT_TO_FILE környezeti változóval az stderrorra kiírt stringet kiírja bármelyik file-ba. És mivel a dyld root jogokkal fut, ezért bármelyik file-ba bármit kiírhatunk.
3. Az stderrorra kiírjuk, hogy ALL ALL=(ALL) NOPASSWD: ALL, mintha hibaüzenet lenne, majd a DYLD_PRINT_TO_FILE 2-es pontban leírt képességét kihasználva beírjuk a sudoers fileba.
4. sudo jogaink lesznek jelszó nélkül. A cikkben lévő példában ez VSInstallert indít el, a gistben lévő példában csak egy root jogokkal rendelkező shellt.
- A hozzászóláshoz be kell jelentkezni
Ezt már mindenki tudja, a cikk nem erről szól, amúgy python se kell hozzá :)
- A hozzászóláshoz be kell jelentkezni
Csak elméleti szinten talán ez is lehet megoldás...
chflags schg /etc/sudoers
- A hozzászóláshoz be kell jelentkezni