hacktricks/binary-exploitation/basic-binary-exploitation-methodology
2024-05-05 22:31:04 +00:00
..
tools Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:31:04 +00:00
elf-tricks.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 05:51:42 +00:00
README.md Translated ['binary-exploitation/basic-binary-exploitation-methodology/R 2024-04-13 14:16:16 +00:00

Basiese Binêre Uitbuitingsmetodologie

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

ELF Basiese Inligting

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

{% content-ref url="elf-tricks.md" %} elf-tricks.md {% endcontent-ref %}

Uitbuitingshulpmiddels

{% content-ref url="tools/" %} tools {% endcontent-ref %}

Staprofloop Metodologie

Met so baie 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 in elke beskermingsafdeling te omseil, maar nie in hierdie metodologie nie.

Beheer van die Vloei

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

  • Stapeloorvloeiings deur die terugkeerpunt van die stapel of die EBP -> ESP -> EIP te oorskryf.
  • Mag dalk 'n Heeltaloorvloeiings moet misbruik om die oorvloei te veroorsaak
  • Of via Willekeurige Skrywe + Skryf Wat Waar na Uitvoering
  • Formaatreekse: Misbruik printf om willekeurige inhoud na willekeurige adresse te skryf.
  • Reeksindeksering: Misbruik 'n swak ontwerpte indeksering om sekere reekse te beheer en 'n willekeurige skrywe te kry.
  • Mag dalk 'n Heeltaloorvloeiings moet misbruik om die oorvloei te veroorsaak
  • bof na WWW via ROP: Misbruik 'n bufferoorvloei om 'n ROP te bou en in staat te wees om 'n WWW te kry.

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

{% content-ref url="../arbitrary-write-2-exec/" %} arbitrary-write-2-exec {% endcontent-ref %}

Ewige Lusse

Iets om in ag te neem is dat gewoonlik net een uitbuiting van 'n kwesbaarheid dalk nie genoeg wees om 'n suksesvolle uitbuiting uit te voer nie, veral as sekere beskermings omseil moet word. Daarom is dit interessant om oor sommige opsies te bespreek om 'n enkele kwesbaarheid verskeie kere uitbuitbaar te maak in dieselfde uitvoering van die binêre lêer:

  • Skryf in 'n ROP-ketting die adres van die main-funksie of na die adres waar die kwesbaarheid plaasvind.
  • Deur 'n behoorlike ROP-ketting te beheer, kan jy al die aksies in daardie ketting uitvoer
  • Skryf die exit-adres in GOT (of enige ander funksie wat deur die binêre lêer gebruik word voordat dit eindig) die adres om terug te keer na die kwesbaarheid
  • Soos verduidelik in .fini_array, stoor 2 funksies hier, een om die kwesbaarheid weer te roep en 'n ander om**__libc_csu_fini** te roep wat weer die funksie van .fini_array sal roep.

Uitbuitingsdoelwitte

Doel: Roep 'n Bestaande funksie aan

  • ret2win: Daar is 'n funksie in die kode wat jy moet aanroep (miskien met sekere spesifieke parameters) om die vlag te kry.
  • In 'n gewone bof sonder PIE en kanarie hoef jy net die adres in die terugkeeradres wat in die stapel gestoor is, te skryf.
  • In 'n bof met PIE, sal jy dit moet omseil
  • In 'n bof met kanarie, sal jy dit moet omseil
  • As jy verskeie parameters moet instel 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 (indien jy hierdie syscall kan aanroep) om 'n groot aantal register te beheer
  • Gadgets van ret2csu en ret2vdso om verskeie register te beheer
  • Deur 'n Skryf Wat Waar te gebruik, kan jy ander kwesbaarhede (nie bof nie) misbruik om die win-funksie aan te roep.
  • Aanwysers wat omleiding gee: In geval die stapel aanwysers bevat na 'n funksie wat aangeroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (stelsel of printf), is dit moontlik om daardie adres te oorskryf.
  • ASLR of PIE mag die adresse beïnvloed.
  • Ongeïnisialiseerde veranderlikes: Jy weet nooit.

Doel: RCE

Via skelkode, as nx gedeaktiveer is of skelkode met ROP gemeng word:

  • (Stapel) Skelkode: Dit is nuttig om 'n skelkode in die stapel te stoor voor of nadat die terugkeerpunt oorskryf is en dan daarnaar te spring om dit uit te voer:
  • In enige geval, as daar 'n kanarie** is, in 'n gewone bof sal jy dit moet omseil (leak)**
  • Sonder ASLR en nx is dit moontlik om na die adres van die stapel te spring aangesien dit nooit sal verander nie
  • Met ASLR sal jy tegnieke soos ret2esp/ret2reg nodig hê om daarna te spring
  • Met nx, sal jy 'n paar ROP moet gebruik om memprotect aan te roep en 'n paar bladsye rwx te maak, sodat jy dan die skelkode daar kan stoor (deur byvoorbeeld read te roep) en dan daarheen te spring.
  • Dit sal skelkode met 'n ROP-ketting meng.

Via syscalls

  • Ret2syscall: Nuttig om execve te roep om willekeurige bevele uit te voer. Jy moet in staat wees om die gadgets te vind om die spesifieke syscall met die parameters te roep.
  • As ASLR of PIE geaktiveer is, sal jy hulle 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 register te beheer

Via libc

  • Ret2lib: Nuttig om 'n funksie van 'n biblioteek (gewoonlik van libc) soos system te roep met voorbereide argumente (bv. '/bin/sh'). Jy het die binêre nodig om die biblioteek te laai met die funksie wat jy wil roep (gewoonlik libc).
  • As staties saamgestel en geen PIE, sal die adres van system en /bin/sh nie verander nie, so dit is moontlik om hulle staties te gebruik.
  • Sondef ASLR en met kennis van die gelaaide libc weergawe, sal die adres van system en /bin/sh nie verander nie, so dit is moontlik om hulle staties te gebruik.
  • Met ASLR maar geen PIE, met kennis van 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 param (jy sal dit moet uitfigure).
  • Met ASLR maar geen PIE, met kennis van die libc en sonder die binêre wat die system gebruik:
  • Gebruik ret2dlresolve om die adres van system op te los en dit te roep
  • Oorbrug ASLR en bereken die adres van system en '/bin/sh' in die geheue.
  • Met ASLR en PIE en sonder kennis van die libc: Jy moet:
  • Bypass PIE
  • Vind die libc weergawe wat gebruik word (leak 'n paar funksie adresse)
  • Kontroleer die vorige scenarios met ASLR om voort te gaan.

Via EBP/RBP

  • Stack Pivoting / EBP2Ret / EBP Chaining: Beheer die ESP om RET te beheer deur die gestoorde EBP in die stapel.
  • Nuttig vir af-een-stapel oorvloei
  • Nuttig as 'n alternatiewe manier om EIP te beheer terwyl EIP misbruik word om die lading in die geheue te konstrueer en dan daarna te spring deur EBP

Misc

  • Pointers Redirecting: In geval die stapel verwysings na 'n funksie bevat wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (system of printf), is dit moontlik om daardie adres te oorskryf.
  • ASLR of PIE mag die adresse affekteer.
  • Ongeïnisialiseerde veranderlikes: Jy weet nooit