Basiese Binêre Exploitasiemetodologie

Reading time: 8 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

ELF Basiese Inligting

Voordat jy begin om enigiets te exploiteer, is dit interessant om 'n deel van die struktuur van 'n ELF binêre te verstaan:

ELF Basic Information

Exploitasiemetodes

Exploiting Tools

Stap Overflow Metodologie

Met soveel tegnieke is dit goed om 'n skema te hê wanneer elke tegniek nuttig sal wees. Let daarop dat dieselfde beskermings verskillende tegnieke sal beïnvloed. Jy kan maniere vind om die beskermings te omseil in elke beskermingsafdeling, maar nie in hierdie metodologie nie.

Beheer van die Stroom

Daar is verskillende maniere waarop jy die stroom van 'n program kan beheer:

  • Stap Oorloë wat die terugwysers vanaf die stap of die EBP -> ESP -> EIP oorskry.
  • Mag nodig wees om 'n Heelgetal Oorloë te misbruik om die oorloop te veroorsaak.
  • Of via Arbitraire Skrywe + Skryf Wat Waar na Uitvoering.
  • Formaat stringe: Misbruik printf om arbitraire inhoud in arbitraire adresse te skryf.
  • Array Indeksasie: Misbruik 'n swak ontwerpte indeksasie om sekere arrays te kan beheer en 'n arbitraire skrywe te verkry.
  • Mag nodig wees om 'n Heelgetal Oorloë te misbruik om die oorloop te veroorsaak.
  • bof na WWW via ROP: Misbruik 'n bufferoorloop om 'n ROP te konstrueer en in staat te wees om 'n WWW te verkry.

Jy kan die Skryf Wat Waar na Uitvoering tegnieke vind in:

Write What Where 2 Exec

Ewige Lusse

Iets om in ag te neem is dat gewoonlik net een eksploit van 'n kwesbaarheid mag nie genoeg wees om 'n suksesvolle eksploit uit te voer, veral omdat sommige beskermings omseil moet word. Daarom is dit interessant om 'n paar opsies te bespreek om 'n enkele kwesbaarheid verskeie kere exploiteerbaar te maak in dieselfde uitvoering van die binêre:

  • Skryf in 'n ROP ketting die adres van die main funksie of na die adres waar die kwesbaarheid voorkom.
  • Deur 'n behoorlike ROP-ketting te beheer, mag jy in staat wees om al die aksies in daardie ketting uit te voer.
  • Skryf in die exit adres in GOT (of enige ander funksie wat deur die binêre gebruik word voordat dit eindig) die adres om terug na die kwesbaarheid te gaan.
  • Soos verduidelik in .fini_array, stoor 2 funksies hier, een om die kwesbaarheid weer aan te roep en 'n ander om __libc_csu_fini aan te roep wat die funksie van .fini_array weer sal aanroep.

Exploitasiedoelwitte

Doel: Roep 'n Bestaande funksie aan

  • ret2win: Daar is 'n funksie in die kode wat jy moet aanroep (miskien met 'n paar spesifieke parameters) om die vlag te verkry.
  • In 'n gereelde bof sonder PIE en canary hoef jy net die adres in die terugadres wat in die stap gestoor is, te skryf.
  • In 'n bof met PIE, sal jy dit moet omseil.
  • In 'n bof met canary, sal jy dit moet omseil.
  • As jy verskeie parameters moet stel om die ret2win funksie korrek aan te roep, kan jy gebruik maak van:
  • 'n ROP ketting as daar genoeg gadgets is om al die parameters voor te berei.
  • SROP (in die geval jy hierdie syscall kan aanroep) om baie registers te beheer.
  • Gadgets van ret2csu en ret2vdso om verskeie registers te beheer.
  • Via 'n Skryf Wat Waar kan jy ander kwesbaarhede (nie bof nie) misbruik om die win funksie aan te roep.
  • Punteer Herlei: In die geval die stap punte na 'n funksie wat gaan aangeroep word of na 'n string wat deur 'n interessante funksie (system of printf) gaan gebruik word, is dit moontlik om daardie adres te oorskry.
  • ASLR of PIE mag die adresse beïnvloed.
  • Ongeïnitialiseerde veranderlikes: Jy weet nooit.

Doel: RCE

Via shellcode, as nx gedeaktiveer is of meng shellcode met ROP:

  • (Stap) Shellcode: Dit is nuttig om 'n shellcode in die stap te stoor voordat of nadat die terugwyser oorgeskryf word en dan na dit te spring om dit uit te voer:
  • In enige geval, as daar 'n canary, in 'n gereelde bof sal jy dit moet omseil (lek).
  • Sonder ASLR en nx is dit moontlik om na die adres van die stap te spring aangesien dit nooit sal verander nie.
  • Met ASLR sal jy tegnieke soos ret2esp/ret2reg moet gebruik om daarheen te spring.
  • Met nx, sal jy 'n paar ROP moet gebruik om memprotect aan te roep en 'n bladsy rwx te maak, om dan die shellcode daar te stoor (byvoorbeeld deur read aan te roep) en dan daarheen te spring.
  • Dit sal shellcode met 'n ROP-ketting meng.

Via syscalls

  • Ret2syscall: Nuttig om execve aan te roep om arbitraire opdragte uit te voer. Jy moet in staat wees om die gadgets te vind om die spesifieke syscall met die parameters aan te roep.
  • As ASLR of PIE geaktiveer is, sal jy dit moet oorwin om ROP gadgets van die binêre of biblioteke te gebruik.
  • SROP kan nuttig wees om die ret2execve voor te berei.
  • Gadgets van ret2csu en ret2vdso om verskeie registers te beheer.

Via libc

  • Ret2lib: Nuttig om 'n funksie van 'n biblioteek (gewoonlik van libc) soos system met 'n paar voorbereide argumente (bv. '/bin/sh') aan te roep. Jy moet die binêre laat laai die biblioteek met die funksie wat jy wil aanroep (libc gewoonlik).
  • As statisch gecompileer en geen PIE, sal die adres van system en /bin/sh nie verander nie, so dit is moontlik om dit staties te gebruik.
  • Sonder ASLR en weet die libc weergawe wat gelaai is, sal die adres van system en /bin/sh nie verander nie, so dit is moontlik om dit staties te gebruik.
  • Met ASLR maar geen PIE, weet die libc en met die binêre wat die system funksie gebruik, is dit moontlik om ret na die adres van system in die GOT met die adres van '/bin/sh' in die parameter te gaan (jy sal dit moet uitfigure).
  • Met ASLR maar geen PIE, weet die libc en sonder die binêre wat die system :
  • Gebruik ret2dlresolve om die adres van system op te los en dit aan te roep.
  • Omseil ASLR en bereken die adres van system en '/bin/sh' in geheue.
  • Met ASLR en PIE en nie weet die libc: Jy moet:
  • Omseil PIE.
  • Vind die libc weergawe wat gebruik word (lek 'n paar funksie adresse).
  • Kontroleer die vorige scenario's met ASLR om voort te gaan.

Via EBP/RBP

  • Stap Pivoting / EBP2Ret / EBP Chaining: Beheer die ESP om RET te beheer deur die gestoor EBP in die stap.
  • Nuttig vir off-by-one stap oorloë.
  • Nuttig as 'n alternatiewe manier om EIP te beheer terwyl jy EIP misbruik om die payload in geheue te konstrueer en dan daarheen te spring via EBP.

Verskeie

  • Punteer Herlei: In die geval die stap punte na 'n funksie wat gaan aangeroep word of na 'n string wat gaan gebruik word deur 'n interessante funksie (system of printf), is dit moontlik om daardie adres te oorskry.
  • ASLR of PIE mag die adresse beïnvloed.
  • Ongeïnitialiseerde veranderlikes: Jy weet nooit.

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks