Bir saldırganın veritabanı kimlik bilgilerinizi, SSH anahtarlarınızı veya tüm kod tabanınızı okumak için ihtiyaç duyduğu tek şey, sağlanmamış bir dosya yoludur.
<p>Bu, PHP ve Laravel uygulama güvenliği üzerine bir dizi makalenin sekizincisi.</p>
<p>Şu ana kadar şunları ele aldık:</p>
<ul>
<li>PHP günlüklerinde SQL enjeksiyon girişimlerini tespit etmek</li>
<li>URL kodlamasının neden çoğu PHP güvenlik kontrolünü körleştirdiği</li>
<li>Sonsuz URL çözme ile ilgili kod çözme bombası problemi</li>
<li>Parametreleştirilmiş sorguların SQL enjeksiyonuna yönelik tek gerçek çözüm olduğu</li>
<li>Laravel'de XSS önleme ve <code>{!! !!}</code> güvenli ve hacklenmiş arasındaki çizgi</li>
<li>Saldırganların uygulamanızı nasıl keşfettiği ve bunun nasıl istismar edilebileceği</li>
<li>Dosya yükleme güvenliği - sahte dosya</li>
</ul>
<p>Bu serideki her makale aynı prensibi takip ediyor - saldırıyı anlamadan onu durdurmaya çalışmayın.</p>
<p>Path traversal (yol geçişi) da bunun dışında değil. PHP uygulamalarında en sessiz tehlikeli güvenlik açığından biridir çünkü tamamen meşru görünen özelliklerin arkasında gizlenir: dosya indirme, şablon yükleme, doküman görüntüleyicileri.</p>
<h3>Path Traversal Nedir?</h3>
<p>Path traversal, bir saldırganın dosya yolunu manipüle ederek uygulamanızın sunmayı hedeflediği dizin dışındaki dosyalara erişim sağladığı bir saldırıdır.</p>
<p>Saldırı, <code>../</code> kullarak, herhangi bir işletim sisteminde "bir üst dizine çık" anlamına gelir. Birden fazla <code>../</code> sırasını zincirleme kullanarak, bir saldırgan dizin ağacında yukarı doğru tırmanarak uygulamanızın asla erişmemesi gereken dosyalara ulaşabilir.</p>
<p>Bu saldırının gerçekleştirilebilmesi için bir giriş yapmaya ihtiyaç yoktur. Özel araçlar gerektirmez. Sadece bir sağlanmamış dosya yoluna ve bir tarayıcıya ihtiyaç vardır.</p>
<h3>Saldırı Sade Bir Dille</h3>
<p>Uygulamanızın bir dosya indirme özelliği var:</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code>$filename = $_GET['file'];$filepath = ‘/var/www/storage/files/’ . $filename;
readfile($filepath);
<p>Meşru bir kullanıcı gönderir:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>file=document1.pdf</code></pre>
</div>
<p>Yol şu şekilde olur:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>/var/www/storage/files/document1.pdf</code></pre>
</div>
<p>Temiz. Beklenilen. Güvenli.</p>
<p>Bir saldırgan gönderir:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>file=../../config/database.php</code></pre>
</div>
<p>Yol şu şekilde olur:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>/var/www/storage/files/../../config/database.php</code></pre>
</div>
<p>Ve bunun sonucu:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>/var/www/config/database.php</code></pre>
</div>
<p>Veritabanı kimlik bilgileriniz sunucudan dışarı çıktı.</p>
<h3>Daha Üst Düzene Tırmanma</h3>
<p>Bir saldırgan uygulama dizininizle kalmaz. Daha da yükseğe tırmanır:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>file=../../../etc/passwd</code></pre>
</div>
<p>Bu, şu şekilde çözülür:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>/etc/passwd</code></pre>
</div>
<p>Unix benzeri sistemlerde, <code>/etc/passwd</code> genellikle herkesin okuyabileceği bir dosyadır ve yerel kullanıcı hesaplarını listeler. Buradan bir saldırgan, kullanıcıları eşleyebilir, yetki seviyelerini tanımlayabilir ve sonraki adımlarını planlayabilir.</p>
<p>Daha tehlikeli hedefler:</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>../../../var/www/.env — Laravel ortam dosyanız../../../proc/self/environ — sunucu ortam değişkenleri
../../../var/log/apache2/access.log — sunucu erişim günlükleri
../../../home/ubuntu/.ssh/id_rsa — SSH özel anahtarı


