Apache
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Apache sunucusunun hangi uzantıları çalıştırdığını kontrol edin. Onları aramak için şunu çalıştırabilirsiniz:
Ayrıca, bu yapılandırmayı bulabileceğiniz bazı yerler şunlardır:
Bu tür saldırılar Orange tarafından bu blog yazısında tanıtılmış ve belgelenmiştir ve aşağıda bir özet bulunmaktadır. "Confusion" saldırısı, temelde birlikte çalışan birçok modülün mükemmel bir şekilde senkronize olmamasını kötüye kullanır ve bunlardan bazılarını beklenmedik verileri değiştirmeye zorlamak, sonraki bir modülde bir zafiyete yol açabilir.
mod_rewrite
, r->filename
içeriğini ?
karakterinden sonra keser (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çar.
Yol Kısaltması
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 kötüye kullanmak mümkündür:
Yanıltıcı RewriteFlag Ataması
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 yol içinde kötü niyetli php kodu içeren farklı bir dosya türü (örneğin bir resim) yüklemek mümkündür:
Kullanıcının erişmemesi gereken dosyalara, erişimin reddedilmesi gereken yapılandırmalarla bile erişmek mümkündür:
Bu, varsayılan olarak PHP-FPM'nin .php
ile biten URL'leri alması nedeniyle, örneğin http://server/admin.php%3Fooo.php
ve PHP-FPM'nin ?
karakterinden sonraki her şeyi kaldırması nedeniyle, önceki URL'nin /admin.php
'yi yüklemesine izin verecektir, önceki kural bunu yasaklasa bile.
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.
CGI Kaynak Kodunu Açığa Çıkarma
Sonuna %3F eklemek, bir cgi modülünün kaynak kodunu açığa çıkarmak için yeterlidir:
PHP Kaynak Kodunu Açığa Çıkarma
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:
Önceki saldırının ana sorunu, varsayılan olarak dosya sistemine erişimin çoğunun Apache HTTP Server’ın konfigürasyon şablonunda reddedilmesidir:
Ancak, Debian/Ubuntu işletim sistemleri varsayılan olarak /usr/share
'e izin verir:
Bu nedenle, bu dağıtımlardaki /usr/share
içinde bulunan dosyaların istismar edilmesi mümkün olacaktır.
Bilgi Sızdırma için Yerel Gadget
websocketd ile Apache HTTP Server, /usr/share/doc/websocketd/examples/php/ altında dump-env.php scriptini 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 (örn., web.xml) açığa çıkarabilir:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
XSS için Yerel Gadget
LibreOffice yüklü Ubuntu Desktop'ta, yardım dosyalarının dil değiştirme özelliğinin istismar edilmesi 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.
LFI için Yerel Gadget
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:
/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
SSRF için Yerel Gadget
MagpieRSS'nin magpie_debug.php dosyasını /usr/share/php/magpierss/scripts/magpie_debug.php altında kullanarak, kolayca bir SSRF açığı oluşturulabilir ve daha fazla istismar için bir kapı sağlanabilir.
RCE için Yerel Gadget
Remote Code Execution (RCE) fırsatları geniştir; eski bir PHPUnit veya phpLiteAdmin gibi savunmasız kurulumlar ile istismar edilebilir. Bu, rastgele kod çalıştırmak için kullanılabilir ve yerel gadget manipülasyonunun geniş potansiyelini sergiler.
Ayrıca, bu klasörlerde yüklü 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:
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/
Ayrıca, sembolik bağlantıları istismar ederek Redmine'de RCE elde etmek mümkündü.
Bu saldırı, AddHandler
ve AddType
direktifleri arasındaki işlevsellik ö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
'a dönüştürür.
Ayrıca, Apache HTTP Server'da (server/config.c#L420
), ap_run_handler()
'ı çalıştırmadan önce r->handler
boşsa, sunucu r->content_type
'ı handler olarak kullanır, bu da AddType
ve AddHandler
'ı etkili bir şekilde aynı hale getirir.
bu konuşmada, bir istemci tarafından gönderilen yanlış bir Content-Length
'ın 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önetim sorunu nedeniyle, çift yanıtın r->content_type
'ı text/html
olarak üzerine yazmasına yol açıyordu.
ModSecurity, dönüş değerlerini düzgün bir şekilde yönetmediği için, PHP kodunu döndürür ve bunu yorumlamaz.
TODO: Orange bu zafiyeti henüz açıklamadı
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 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 Sunucu Tarafı Yönlendirmesi olarak işlenir ve işlenmelidir.
RFC 3875 (CGI hakkında spesifikasyon) Bölüm 6.2.2'de Yerel Yönlendirme Yanıtı davranışını tanımlar:
CGI scripti, bir Location başlık alanında yerel bir kaynak için bir URI yolu ve sorgu dizesi (‘local-pathquery’) döndürebilir. Bu, sunucuya belirtilen yolu kullanarak isteği yeniden işleme yapması gerektiğini gösterir.
Bu nedenle, bu saldırıyı gerçekleştirmek için aşağıdaki zafiyetlerden birine ihtiyaç vardır:
CGI yanıt başlıklarında CRLF Enjeksiyonu
Yanıt başlıklarının tam kontrolü ile SSRF
Örneğin, /server-status
yalnızca yerel olarak erişilebilir olmalıdır:
Content-Type
'ı server-status
olarak ayarlayıp Location başlığını /
ile başlatarak erişmek mümkündür.
Herhangi bir URL'deki herhangi bir protokole erişmek için mod_proxy
'ye yönlendirme:
Ancak, X-Forwarded-For
başlığı, bulut meta veri uç noktalarına erişimi engelleyecek şekilde eklenmiştir.
PHP-FPM'nin yerel Unix Domain Socket'ine erişerek /tmp/
dizininde bulunan bir PHP arka kapısını çalıştırın:
Resmi PHP Docker 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:
Check Docker PHP LFI Summary, written by Phith0n for the details of this technique.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)