Pwdec
merhabayın

Web Uygulamaları Güvenliği / Upload Açığı

Linkler
VM Link : https://www.vulnhub.com/entry/pentes…-pentester,71/
Github : https://github.com/D35m0nd142/LFISuite


Konular
:
» File Upload Açığı ile Shell Atma (php)
» File Upload Açığı ile Shell Atma (no php)
» Uygun Uzantı Bulma – Burp ile Çalışma
» File Upload Açığı Defans






Makineyi içeri aktar dedik ve kaliyle birlikte bridged seçtik. Makinede ifconfig yazarak veya netdiscover -i eth0 yazarak ip adresini öğrenebiliriz.Size tavsiyem /var/www/ klasörüne gidin ve açıklı dosyaları inceleyin kodlama dilleri bilmeniz burada işe yarayacak oradaki kodları okuyacaksınız ve yanlışı bulacaksınız.



Eğer web for pentester a domain yönlendirme yapmak istersek nano /etc/hosts yaparak (ctrl + x yapıp onaylamayı unutmayın) ve aşağıdaki gibi
ifconfig ile bulduğumuz ip nin yanına istediğiniz domaini yazabilirsiniz isterseniz fbi.gov yazın


Bu resim yeniden boyutlandırıldı, tam halini görmek için tıklayınız.


Yönlendirme başarılı.

Bu resim yeniden boyutlandırıldı, tam halini görmek için tıklayınız.




Upload Örnek 1

Upload Örnek 2

Uygun Uzantı Nasıl Bulunur :

Sonrası :
Bu resim yeniden boyutlandırıldı, tam halini görmek için tıklayınız.


Yazılı Anlatım :
* weevely aracını kullanarak bir backdoor yaptık ve örnek 1 de denedik ve direk shell attık.
* weevely = reverse-php-shell.php ile (pentestmonkey) ile aynı işi görmektedir.
* Örnek 2 de php yüklemeye izin vermedi ve bizde bir wordlist yaptık bu wordlistte dosya uzantılarını koyduk (payload)
* Daha sonra jpg hariç herşey işe yaradı resimde de gördüğünüz üzere değerlere bakarak bunu anladık.
wordlist.txt
Kod:
.php
.php3
.php4
.php5
.php7
.pht
.phps
.phar
.phpt
.pgif
.phtml
.phtm
.inc
.jpeg.php
.jpg.php
.png.php
.*.php



Önce bir upload açıklı php ortamını hazırlayalım.

dosya.php
Kod:
<html>
<head> <title>Dosya yükleme</title> <**** charset="utf-8">
</head>
<body>
<form enctype="multipart/form-data" action="dosyayukle2.php"  method="POST">
 
<table border="1" cellpadding="4" align="center">
<tr>
<td>Dosya seçiniz:</td>
<td><input type="FILE" name="RESIM"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Yukle"></td>
</tr>
</table>
</form>
</body>
</html>
dosyayukle.php
Kod:
<html>
<head>
<title>Dosya yükleme</title><**** charset="utf-8">
</head>
<body> <center>
<?php
$dizin = 'yuklenendosyalar/';
$yuklenecek_dosya = $dizin . basename($_FILES['RESIM']['name']);
 
if (move_uploaded_file($_FILES['RESIM']['tmp_name'], $yuklenecek_dosya))
{
    echo '<img src="logo.png" width="500"><br>';
echo "Dosya başarıyla yüklendi.<br>";
 
} else {
    echo "Dosya yüklenemedi!\n";
}
?>
</center>
</body>
</html>
dosyayukle2.php
Kod:
<?php
$boy=200;
$yol = "yuklenendosyalar/";
 
if (strlen($_FILES['RESIM']['name']))
 {
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$gecerli_formatlar = array("jpg","jpeg","png","gif");
$yeni_adi= array("");
 
$dosyaadi = $_FILES['RESIM']['name'];
$boyutu = $_FILES['RESIM']['size'];
echo "<p>" ;
 
if(strlen($dosyaadi))
{
list($txt, $uzanti) = explode(".", $dosyaadi);
$uzanti= strtolower($uzanti);
if(in_array($uzanti,$gecerli_formatlar))
{
if($boyutu<(2048*2048))
{
$yeni_adi = "Yuklenen_".str_replace(" ", "_", $txt).".".$uzanti;
$gecici = $_FILES['RESIM']['tmp_name'];
 
if(move_uploaded_file($gecici, $yol.$yeni_adi))
{
$dosya = $yol.$yeni_adi;
echo $dosya;
if ($uzanti=="jpg"  || $uzanti=="jpeg" )
$resim = imagecreatefromjpeg($dosya);  
 
if ($uzanti=="png")
$resim = imagecreatefrompng($dosya); 
 
if ($uzanti=="gif" )
$resim = imagecreatefromgif($dosya); 
 
$boyutlar = getimagesize($dosya);  
 
$resimorani = $boy / $boyutlar[0];  
$yeniyukseklik = $resimorani*$boyutlar[1];  
 
$yeniresim = imagecreatetruecolor($boy, $yeniyukseklik);
 
if ($uzanti=="png" || $uzanti=="gif")
{
imagecolortransparent($yeniresim, imagecolorallocatealpha($yeniresim, 0, 0, 0, 127));
imagealphablending($yeniresim, false);
imagesavealpha($yeniresim, true);
}
 
imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, $boy, $yeniyukseklik, $boyutlar[0], $boyutlar[1]);
$hedefdosya=$yol.$yeni_adi;
 
switch($uzanti) {
case "gif":
imagegif($yeniresim,$hedefdosya); 
break;
case "jpeg":
case "jpg":
imagejpeg($yeniresim,$hedefdosya,100); 
break;
case "png":
case "x-png":
imagepng($yeniresim,$hedefdosya);  
break;
 
chmod ($hedefdosya, 0755);
$resimsonuc.= "<center><img src='yuklenendosyalar/".$yeniresim."'  class='preview'></center> ";
} //switch
}
} else echo "Fotoğraf boyutu maks 4 MB olabilir, resminiz çok büyük..."; 
}else echo "Geçersiz dosya formati, JPG veya PNG formatında olmalıdır."; 
} else echo "Resim veya fotoğraf seçiniz..!";
 
 
}//post
}//dosya adı
 ?>
logo.png (isteğe göre)
Son olarak bir yuklenendosyalar klasörü açın ve ortam hazır.

dosyayukle.php zafiyetli olan dosyayukle2.php zafiyeti kapatılmış olan php dosyasıdır. Sizden ricam kodları inceleyin php biliyorsanız okuyun.

Video :
Share

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *