.. | ||
ret2lib | ||
ebp2ret-ebp-chaining.md | ||
pointer-redirecting.md | ||
README.md | ||
ret2csu.md | ||
ret2dlresolve.md | ||
ret2esp-ret2reg.md | ||
ret2ret.md | ||
ret2shellcode.md | ||
ret2win.md | ||
rop-return-oriented-programing.md | ||
rop-syscall-execv.md | ||
srop-sigreturn-oriented-programming.md | ||
stack-pivoting-ebp2ret-ebp-chaining.md | ||
stack-shellcode.md |
Kujaa Kwa Stack
Jifunze kuhusu kuhack AWS kutoka mwanzo hadi mtaalamu na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
Ni Nini Kujaa Kwa Stack
Kujaa kwa stack ni udhaifu unapotokea programu inapoandika data zaidi kwenye stack kuliko ilivyotengewa kuhifadhi. Data hii ya ziada ita zifuta nafasi ya kumbukumbu inayopakana, ikisababisha uharibifu wa data halali, kuvuruga mtiririko wa udhibiti, na kwa uwezekano utekelezaji wa msimbo wa kudhuru. Tatizo hili mara nyingi hutokea kutokana na matumizi ya kazi zisizo salama ambazo hazifanyi ukaguzi wa mipaka kwenye data zinazoingia.
Tatizo kuu la kufuta huku ni kwamba viashiria vya EIP na EBP vya kurudi kwenye kazi iliyotangulia huhifadhiwa kwenye stack. Hivyo, mshambuliaji ataweza kuzifuta hizo na kudhibiti mtiririko wa utekelezaji wa programu.
Udhaifu huu kawaida hutokea kwa sababu kazi inafanya nakala ndani ya stack ya herufi zaidi kuliko kiwango kilichotengwa kwa hiyo, hivyo kuweza kufuta sehemu nyingine za stack.
Baadhi ya kazi za kawaida zenye udhaifu huu ni: strcpy
, strcat
, sprintf
, gets
, fgets
...
Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu:
void vulnerable() {
char buffer[128];
printf("Enter some text: ");
gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
Kupata Mafuriko ya Stack
Njia ya kawaida ya kupata mafuriko ya stack ni kutoa kuingia kikubwa sana cha A
s (k.m. python3 -c 'print("A"*1000)'
) na kutarajia Segmentation Fault
inayoashiria kwamba anwani 0x41414141
ilijaribiwa kufikiwa.
Zaidi ya hayo, mara baada ya kugundua kuwa kuna udhaifu wa Mafuriko ya Stack, utahitaji kupata ofseti mpaka iwezekane kubadilisha kidude cha EIP, kwa hili kawaida hutumika De Bruijn sequence. Ambayo kwa alfabeti iliyopewa ya ukubwa k na subsekwensi za urefu n ni mfululizo wa mzunguko ambapo kila subsekwensi inayowezekana ya urefu n inaonekana mara moja tu kama subsekwensi inayopatikana.
Kwa njia hii, badala ya kuhitaji kufikiria ni ofseti ipi inayobadilisha EIP kwa mkono, ni rahisi kutumia mojawapo ya mfululizo huu kama kujaza na kisha kupata ofseti ya byte ambazo mwishowe zilibadilisha hiyo.
Inawezekana kutumia pwntools kwa hili:
from pwn import *
# Generate a De Bruijn sequence of length 1000 with an alphabet size of 256 (byte values)
pattern = cyclic(1000)
# This is an example value that you'd have found in the EIP/IP register upon crash
eip_value = p32(0x6161616c)
offset = cyclic_find(eip_value) # Finds the offset of the sequence in the De Bruijn pattern
print(f"The offset is: {offset}")
au GEF:
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
Kudukua Maburuzi ya Stack
Wakati wa kudukua (ukiwa na ukubwa wa kutosha), utaweza kubadilisha thamani za mengine variables ndani ya maburuzi mpaka ufikie EBP na EIP (au hata zaidi).
Njia ya kawaida ya kutumia udhaifu huu ni kwa kubadilisha kielekezi cha EIP ili wakati wa kumaliza kazi mtiririko wa udhibiti utaelekezwa mahali ambapo mtumiaji alipendekeza kwenye kielekezi hiki.
Hata hivyo, katika mazingira mengine labda kubadilisha thamani za baadhi ya variables kwenye maburuzi inaweza kuwa ya kutosha kwa udanganyifu (kama katika changamoto rahisi za CTF).
Ret2win
Katika aina hii ya changamoto za CTF, kuna kazi ndani ya faili ya binary ambayo haijawahi kuitwa na unahitaji kuipiga ili ushinde. Kwa changamoto hizi unahitaji tu kupata kielekezi cha kubadilisha EIP na kupata anwani ya kazi ya kupiga simu (kawaida ASLR itakuwa imelemazwa) ili wakati kazi yenye udhaifu inaporudi, kazi iliyofichwa itaitwa:
{% content-ref url="ret2win.md" %} ret2win.md {% endcontent-ref %}
Shellcode ya Maburuzi
Katika hali hii, mkaidi anaweza kuweka shellcode kwenye maburuzi na kutumia EIP iliyodhibitiwa kwenda kwenye shellcode na kutekeleza kanuni za mkaidi:
{% content-ref url="stack-shellcode.md" %} stack-shellcode.md {% endcontent-ref %}
ROP
Mbinu hii ni mfumo msingi wa kukiuka kinga kuu kwa mbinu ya awali: Maburuzi yasiyoweza kutekelezwa. Na inaruhusu kutekeleza mbinu zingine kadhaa (ret2lib, ret2syscall...) ambazo mwishowe zitatekeleza amri za kupindukia kwa kutumia maagizo yaliyopo kwenye binary:
{% content-ref url="rop-return-oriented-programing.md" %} rop-return-oriented-programing.md {% endcontent-ref %}
Aina za kinga
Kuna kinga kadhaa zinajaribu kuzuia udanganyifu wa udhaifu, zitazame hapa:
{% content-ref url="../common-binary-protections-and-bypasses/" %} common-binary-protections-and-bypasses {% endcontent-ref %}
Jifunze kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au fuata sisi kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.