kernel.dll

HackForum

kernel.dll#
Nevite nahodou nekdo, jak najit knihovnu kernel.dll v pameti?? Vim ze existujou uz hotova reseni, ale nemuzu porad pochopit jak to funguje (neco o SEHu, nebo tak neco :))... Teoreticky by mel bejt na adrese 0x77F60000, ale to neni jisty... Nemate tedy nekdo zkusenosti s psanim shellcodu pod win??? Dik za kazdou radu

----------
Když nejde o život, tak o hovno de...

Charles Bukowski - kdo zna, ten vi :)
(odpovědět)
BabCA SjEs | E-mail | ICQ 40645219212.4.2007 15:13
re: kernel.dll#
Zalezi co potrebujes.Vetsinou na psani exploitu a pod potrebujes napr. z kernelu nejaky jmp esp,call,pop/pop/ret sekvenci nebo tak.K tomu ti postaci program findjpm2,das mu jako argument knihovnu a registr a hleda.Kdyby jsi chtel pomoct s fuzzingem a exploitaci,napis sem,ozvu se ti na icq.(btw kdyz das v olidbg attach a vyberes si program kterej zkoumas a pak das view a prozkoumas volby co to ma tak tam jedna zobrazuje vsechny knihovny i kernel,adresy atd..)
(odpovědět)
Anonymik | E-mail13.4.2007 11:34
re: kernel.dll#
De o to ze umisteni kernelu je vzdycky jiny. To uz sem si zjisti u me to je nekde na adrese 0x77c8XXXX, ja bych potreboval pomoci assembleru urcit tudle adresu, jelikoz dalsi adresi funkci se daji najit pomoci funkce v tydle knihovne (myslim ze GetProcAddres), nebo rvnou zavolat pomoci LoadModule... Pokud bych psal nejakej exploit, nebo vir kterej se nhrava do pameti na jinym pocitaci nez na mim byl problem v nalezeni tydle funkce. Jinak jestli mas chut tak by si mi s exploitaci mohl pomoci, byl bych moc vdecen. :)
(odpovědět)
babca | 80.188.22.*16.4.2007 12:41
re: kernel.dll#
anonymik ozvi sa mi plz na
284-848-285
(odpovědět)
j0e | 84.47.124.*16.4.2007 14:17
re: kernel.dll#
konecne nejake zajimave a poradne tema (za poslednich par tydnu :) ) a tipci si to dou resit na icq :(
(odpovědět)
karcinom | 213.192.63.*16.4.2007 23:57
re: kernel.dll#
Tak mezi lidem ( [link] ) kolují dva postupy - jeden
mov eax, 77F10000h
loop: cmp dword ptr [eax], 00905A4Dh
je found
dec eax
jmp loop
found:
hledá pod adresou 77F10000h MZ signaturu - pokud se ale v prohledávané oblasti vyskytne začátek (MZ signatura) jiného kódu, tak je nalezený začátek falešný.
Viděl jsem i kombinaci,kde se na začátku neplnil eax hodnotou 77f1000h, ale použil se PEB (process environment block). PEB leží na adrese 0x7FFDF000 a obsahuje pointery na haldy pro heap managr a další systémová DLL, která mají být zapisovatelná v uživatelském režimu:
xor eax, eax
mov eax, dword ptr fs:[eax+30h]
test eax, eax
js short jump1
push esi
mov eax, dword ptr ds:[eax+0Ch]
mov esi, dword ptr ds:[eax+01Ch]
lods dword ptr ds:[esi]
mov eax, dword ptr ds:[eax+8h]
pop esi
ret
jump1: mov eax, dword ptr ds:[eax+34h]
add eax, 7Ch
mov eax, dword ptr ds:[eax+3Ch]
ret
Na začátku si nasaje PEB, testuje typ kernelu (test eax,eax na 95 dá signed short), pak dle jádra prochází zpětně nody seznamu nahraných modulů. Jde zkrátit až na 16 bajtů (pro NT jádro):
xor eax, eax
add eax, fs:[eax+30h]
mov eax, [eax + 0ch]
mov esi, [eax + 1ch]
lodsd
mov eax, [eax + 08h]
Při využití SEH (structured exception handling) jedna metoda prochází seznam výjimek až k poslednímu pointeru na handler (následující pointer má hodnotu 0xffffffff) a od něj pak po 64 kilo blocích hledá MZ signaturu kernelu. Vychází z toho, že poslední v seznamu výjimek bude výjimka handlovaná zřejmě samotným kernelem.
push esi
push ecx
xor ecx, ecx
mov esi, fs:[ecx]
loop3: lodsd
xchg esi, eax
cmp [esi], ecx
jns loop3
lodsd
lodsd
loop2: dec eax
xor ax, ax
cmp word ptr [eax], 0x5a4d
jne loop2
pop esi
Kromě SEH a PEB metod jsem viděl popsanou ještě topstack metodu, která vychází z toho, že 1c bajtů od vrcholu zásobníku v TEB se nachází návratová hodnota dovnitř kernelu. Pak stejně jako předtím hledá MZ signaturu kernelu ve skocích po 64 kilech:
push esi
xor esi, esi
mov esi, fs:[esi + 0x18]
lodsd
lodsd
mov eax, [eax - 0x1c]
loop1:
dec eax
xor ax, ax
cmp word ptr [eax], 0x5a4d
jne loop1
pop esi
(odpovědět)
guguma | 195.113.79.10/10.0.10.*17.4.2007 1:25
re: kernel.dll#
Takze pokud to chapu: Kernel lezi vzdycky na nejake vyšší adrese (0x77XXXXXX), vymezuje se oblast, kde ma nekde přiblizne lezet a pak se uz jenom hledá urcita signatura pro kernel. Problem je v tom, ze se tam muze nachazet i neco jineho nez kernel...

Proto je jeste PEB kterej bsahuje ukazatele, mimo jine, i na systemove knihovny. Prochozej se zase adresy a hleda se zase kernel, kterej tam urcite je. Problem z kodem je, ze instrukci mov eax, dword ptr fs:[eax+30h] mi jeste nesezral zadnej assembler (fasm, nasm, masm) kvuli tomu fs:.

O zbytku nic nevim :(

Jinak shrnuti:

Urcit pribliznou adresu pomoci PEB, SEHu, nebo jinym zbusobem a hledat signaturu. Nejvetsi problem je s instrukci fs: ktera se "neda prelozit" :)

Tak super zase sem o neco chytrejsi :). Pokud jsou dalsi napady sem s nimi :)

Diky



----------
Když nejde o život, tak o hovno de...

Charles Bukowski - kdo zna, ten vi :)
(odpovědět)
BabCA SjEs | E-mail | ICQ 40645219217.4.2007 10:08
re: kernel.dll#
dword ptr fs:[eax+30h]
lze zapsat přímo pomocí:
db 0x64, 0x8B, 0x40, 0x30
(odpovědět)
guguma | 195.113.79.10/10.0.10.*17.4.2007 15:17
re: kernel.dll#
to sem si taky precet, ale zajimalo by mne co to ma priblizne za vyznam :), to fs 8)
(odpovědět)
babca | 80.188.22.*18.4.2007 13:09
re: kernel.dll#
Muze mi nekdo vysvetlit rozdil mezi:
< xor eax,eax >
< xor ax,ax >
(...viz predchozi prispevky) ....díky Petr
(odpovědět)
petrofff | 89.102.211.*18.4.2007 16:42
re: kernel.dll#
snad odpovím dobře, v asm zběhlý zrovna nejsem ;-)

ax je vlastně půlka registru eax. Takže když vynuluješ registr eax, vynuluješ i ax, i druhou půlku eax. Když vynuluješ ax, druhá půlka eax zůstane nevynulovaná.

Jestli to mám špatně, opravte mě prosím

----------
Get enlightened!
(odpovědět)
mr.Crow | E-mail | Website18.4.2007 17:02
re: kernel.dll#
Je to už dávno,co jsem dělat v asembleru - tehdy byly 16bit registry (ds,cs,ax...) a půlky ax <=> al | ah Takže půlky eax <=> ax | ???
(odpovědět)
petrofff | 89.102.211.*18.4.2007 17:19
re: kernel.dll#
půlky ax se pořád označují jako al, ah.... ta druhá půlka eax se prostě nejmenuje nijak...

----------
Get enlightened!
(odpovědět)
mr.Crow | E-mail | Website18.4.2007 18:52
re: kernel.dll#
fs:
neslyšel nikdy o segment registrech? Je jich celkem 6, fs je jeden z nich.
Mají soužit k adresování segmentů, např. ds adresuje data segment, ale v praxi se používají spíš jako indexregistry, protože i při jejich použití je stále možné spouštět kód v datovém segmentu stejně jako přistupovat do kódového segmentu jako k datům (prostě x86 není harvardská architektura, ale von Neumann, a segment registry to nezmění).
Čili jde o adresaci do oblasti pointerované fs s offsetem, který za fs následuje.
(odpovědět)
guguma | 195.113.79.10/10.0.10.*19.4.2007 8:21

Zpět
 
 
 

 
BBCode