Selamlar yine bu boş adam sizlere okumadan eline sağlık yazdırmaya getirdi.
Yada okuyup ta bir yerleri kırılacak (narin kişilersiniz ondan diyorum(!)) diye yorum atmayan tayfa sizde buradaysanız başlıyorum.
Hacı bak ben başkaları gibi makale tarzında yazmıyorum biliyorsunuz, sesli sohbette (platforum fark etmez dc,skype,tg...) da ekran açmış anlatıyor gibi anlatmaya çalışıyorum.
Boşu da yaptığımıza göre geçelim konuya ilk önce konuyu okuyan arkadaşların %79.99 unu SSTI ne olduğunu öğrenmeleri için şu konulara yönlendiriyorum.
https://www.turkhackteam.org/konular/client-side-template-injection-zaafiyeti-nedir-ssti.1996632/
https://www.turkhackteam.org/konular/ssti-nedir-bilgilendirme.2003713/
Oku yoksa ezber mantığıyla öğrencen, bi bildiğimiz var oku diyoz işte.
He şimdi ilk önce zafiyeti sayfamızı tanıyalım.
php ile yazmış olduğum bir kaç satır kod sonrası bizi bir klasik arama butonumuz karşılıyor.
İlk önce templatein back-end'de nasıl yazıldığını öğrenmek için çarpma işlemi yaptıracağım (klasik).
7*7 denediğim zaman sonuç yine ekrana 7*7 olarak döndü demek ki template enjekte edeceğimiz payloadın süslü parantezleri açılmamış.
Daha sonra süslülerimi açıp tekrar deniyorum.
Görüldüğü gibi hala bir sonuç alamadık, bir kere daha süslülerin içine almayı deniyorum.
Bu sefer görüldüğü gibi sonuç 49 olarak döndü, eee ne oldu şimdi, niye beyefendinin keyfine göremi süslü atıyon a** dediğinizi duyar gibiyim.
Hayır tabi ki keyfimize göre atmıyoruz.
Github Kaynak
Kafamıza göre de sadece {{}} den çıkmıyor ben twig şablonunu php ile kullandım onun sömürüsü bu şekilde oluyor, her dil için farklı payload ve seçenekler mevcuttur.
{{7*7}}
${7*7}
<%= 7*7 %>
${{7*7}}
#{7*7}
*{7*7}
Örneğin deki gibi, şimdi size verdiğim github üzerinden örnek bir payload deniyelim ve neler yapabiliyoruz test edelim.
Bu sayfa da da hem basit düzeyde nasıl tespit edebileceğimizi hemde nasıl içeriden dosya okumak veya bizim işimize gelen
komut çalıştırabilceğimizi söyliyen komutlar var birini alıp deniyorum.
Bu şekilde bir payload ile sunucuda whoami komutunu çalıştırdık.
Payload:"
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}
"
Peki bunun daha kolay yolu yok mu diyenler için var o da var
TPLMAP İÇİN TIKLA
TPLMAP İÇİN TIKLA
TPLMAP, SSTTI zafiyetlerini tespit ederken veya ettikten sonra bizim yerimize otomatik olarak sunucuda komut çalıştırmaya yarayan bir araçtır (xssmap bekliyorum az kaldı ***).
Onunda kullanımı için yabancı bir video bırakıyorum.
Onunda kullanımı için yabancı bir video bırakıyorum.
Kullanmış Olduğum Kaynak Kod:
PHP:
<!DOCTYPE html>
<html>
<head>
<title>SSTI ~ THT.ORG</title>
<style>
body {
background-color: #000;
color: #00ff00;
font-family: Arial, sans-serif;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-image: url('tht.png');
background-size: %100;
background-repeat: no-repeat;
background-position: center top;
}
form {
width: 300px;
padding: 20px;
border: 1px solid #00ff00;
border-radius: 10px;
background-color: #222;
box-shadow: 0 0 20px rgba(0, 255, 0, 0.5);
}
label {
color: #00ff00;
font-size: 18px;
font-weight: bold;
}
input[type="text"] {
width: 100%;
padding: 10px;
margin-left: -10px;
margin-bottom: 25px;
border: 1px solid #00ff00;
border-radius: 10px;
background-color: #444;
color: #00ff00;
}
input[type="submit"] {
width: 100%;
padding: 10px;
background-color: #00ff00;
color: #000;
border: none;
border-radius: 5px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s;
}
input[type="submit"]:hover {
background-color: #008c00;
}
#result {
margin-top: 20px;
color: #00ff00;
font-size: 18px;
font-weight: bold;
margin-left: 20px;
}
.attribution {
color: red;
font-size: 16px;
font-weight: bold;
position: absolute;
bottom: 0;
left: 0;
right: 0;
text-align: center;
}
</style>
</head>
<body>
<form action="" method="GET">
<label>Ara :</label><br><br>
<input type="text" name="name"><br><br>
<input type="submit" name="ara"><br><br>
</form>
<?php
if (isset($_GET['ara'])) {
$name = $_GET['name'];
include 'vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
try {
$loader = new Twig_Loader_String();
$twig = new Twig_Environment($loader);
$result = $twig->render($name);
echo '<div id="result">Sonuç : ' . $result . '</div>';
} catch (Exception $e) {
die('<div id="result">ERROR: ' . $e->getMessage() . '</div>');
}
}
?>
<div class="attribution"><h3>Coded by P4$A</h3></div>
</body>
</html>
- Bu kodda Twig şablon motoru kullanılıyor. Twig, metin tabanlı şablonları işlemek için kullanılır ve dinamik içerikleri oluşturmak amacıyla metni şablona dönüştürmek için kullanılır.
- Kullanıcının girdiği name değeri Twig şablonunun doğrudan bir parçası olarak kullanılıyor.
- Twig_Autoloader, Twig kütüphanesini otomatik olarak yüklemek için kullanılır. Ancak, bu kodda Twig_Autoloader'ın kayıt edilmeden önce Twig kütüphanesinin bulunduğu bir dosya yolunu kontrol etme veya Twig kütüphanesini güvence altına alma işlemi yapılmamış. Bu, potansiyel olarak saldırganların sunucuya zarar verebilecek Twig kodu yüklemelerine olanak tanır.
- Kullanıcı tarafından sağlanan name değeri, doğrudan Twig şablonunun işlenmesi için kullanılır. Yani, kullanıcının girdisi Twig şablonunun bir parçası haline gelir. Bu, kullanıcıların kontrol ettiği verilerin şablona dahil edilmesi anlamına gelir.
- Eğer bir saldırgan kötü niyetli bir Twig şablonunu name değişkeni aracılığıyla gönderirse, bu şablon sunucu tarafında çalıştırılabilir. Tıpkı yukarıda yaptığımız gibi.
Başlık ilgi çekici olsun diye yazdım .exe ile bir alakası yok olayın.




