Merhaba bu yazıyı forumda eğer hala (2026 Ocak ayında) kendini bu alanda geliştirmek isteyen ve öğrenmeye istekli kişilere ulaşmasını umduğum için yazıyorum. Bu alanda bilgili veya bilgisi bulunmayan herkes bu yazıyı rahatlıkla okuyabilir. Aklınıza gelecek Herhangi bir soruyu çekinmeden sorabilirsiniz. Elimden geldiğince mantığı ve ana fikirleri bahsederek sadece yapılanları değil yaklaşımlarımı da sizinle paylaşmaya çalışacağım. Uzun bir yazı olacak zamanınızı ayırdığınızdan emin olun.
Bugünkü anlatacağım hedef sistem bir "Panel" sitesi. Genelde bu tarz siteleri Yaşı Küçük/Bilgisiz Kişiler hazır script'ler bularak kurup internet üzerinde erişime açarlar. Ve bu sistemlerin genelde büyük bir kısmında da fazla derecede güvenlik zafiyetleri bulunur. Özellikle "sorgu" olarak adlandırılan işlem SQL ile DB üzerinde iletişime geçiceğinden bir numaralı favori açığımız her zaman SQLi (SQL İnjection) olacaktır. Biz de bunun bilincinde olarak ve bunu gözeterek teste devam edeceğiz.
Not: Siteyi ve kişileri tamamen sansürledim. Bu tarz kişilerin ekstra reklamını ve primini kasmak istemiyorum.

Ekranda gördüğünüz kısım hedef sitemizin ana sayfası. Aşağıdaki "İyi Çalışmalar" Tuşuna basıldıktan sonra Giriş sayfasına yönlendirmektedir bizi. Tabii bu giriş sayfası üzerinde SQLi ile Kullanıcı girişi BYPASS'ı tarzi teknikler denilebilir. Fakat ben her teste başladığım sırada direk olarak aksiyona geçilmeden önce hedef üzerinde "Bilgi Toplama" dediğimiz Enumeration adımlarımıza önem vermeyi tercih ederim. Yani sistemin mimarisini, şemasını anlayıp ve bilgileri elde ettikten sonra elimizdeki verilerle bir aksiyon almamız, kör bir aksiyondan çok daha etkili olacaktır.
1-Bilgi Toplama Aşaması
Hemen hali hazırda kolay bir erişim olayan tarayıcıma yüklediğim "Wappalyzer" eklentisi ile sistem üzerindeki teknolojilere göz gezdiriyorum. Enum hakkında çok daha fazlası var bu tarz durumlar için. Eğer isterseniz Enum için kullandığım teknikleri de başka bir yazıda bahsedebilirim.

Burada gördüğümüz ekranda aslında bizim için göze çarpan 2 durum var. Biri Cloudflare, diğeri ise PHP.
Panellerin hazır SC'lerden yapıldığını ve yüksek miktarlarda zafiyet barındırdığından bahsetmiştim PHP dilini gördükten sonra bu fikirim beni daha da doğru olduğuna ikna etti. Belli başlı giriş sayfasını da gördükten sonra tamamen internet sitesinin Hazır bir SC ile yayınlandığına emin gibiydim.
Peki Cloudflare ibaresi Neden önemli? Çünkü eğer bir WAF sorunu ile karşılaşır isek sistem üzerinde "Origin IP" yani sistemin internet üzerindeki Gerçek IP'si üzerinden erişim alabilirsek bu durumda Cloudflare'i tamamen aradan çıkarıp WAF korumasını tamamen atlatmış olacağız. İnternette "Origin IP finding" yazarsanız bu konuyla ilgili daha detaylı bilgilere ulaşabilirsiniz. (yazıyı uzatmamak adına buraları geçeceğim).

Daha sonrasında hali hazırda Hazır SC'ye sahip olduğu için aklıma dizin taraması atmak geldi ve ardından "dirsearch" tool'una verdiğim parametrelerle birlikte detaylı ve kapsamlı bir dizin taraması gerçekleştiriyorum. Windows üzerinde WSL terminal üzerinden veya da Kali Linuxta da kullanabirsiniz. Buradaki gördüğünüz ekran WSL. Windowsta terminal üzerinden linux kullanmanızı sağlar. Kullandığım buradaki distrom ise Kali-Linux.
"dirsearch -u "https://hedefsite.com/" -e php,asp,aspx,jsp,py,txt,conf,config,bak,backup,swp,old,db,sqlasp,aspx,aspx~,asp~,py,py~,rb,rb~,php,php~,bak,bkp,cache,cgi,conf,csv,html,inc,jar,js,json,jsp,jsp~,lock,log,rar,old,sql,sql.gz,sql.zip,sql.tar.gz,sql~,swp,swp~,tar,tar.bz2,tar.gz,txt,wadl,zip"

Tarama sonucunda dikkatimi çeken bir dizene göz atacağım. bu endpoint "/cgi-bin/printenv.pl". Önceki tecrübelerimden bu sitenin hazır sc olduğu ve panel sitesi olduğunu da göz önüne alırsak adresin genelde XAMPP uygulamalarında açık kaldığı ve bilgisayar ve sistem hakkında işe yarar bilgileri ifşa ettiğini biliyorum. Çünkü aşağıdaki fotoğraftaki gibi bilgiler bizi karşılamakta.

Artık Burada gördüğümüz bilgilerle anlıyoruz ki sitemiz Windows bilgisayar üzerinde çalışan bir XAMPP servisi. Artık buradan sonrası için işimiz baya kolay çünkü şu anda bütün olarak bir mimariyi görmüş durumdayız.
"SERVER_ADDR" alanında yazan değer sunucumuzun Origin IP'si. Yani yukarıda bahsettiğim Cloudflare Bypass durumunu artık yapabiliriz.
Örneğin sitemizin robots.txt'sine girelim;

Cloudflare buraları düzenlemiş şekilde tutuyor. ve burası değiştirilmiş olabilir.

Fakat Origin IP üzerinden gittiğizde Cloudflare'e dair korumalar tamamen kalkmakta.

Bu durumu Wappalyzer üzerinden de onaylayabiliriz.
Neyse test hakkından bahsetmeye devam edelim.
2-Aksiyon Alma

dizin taraması üzerinde "/market" adında bir uç nokta yakalıyorum.

Fakat ilgili endpointe gittiğimde beni sürekli olarak "Giris.jsp" yani giriş sayfasına yönlendiriyor. Kısacası Auth olmamı istiyor uygulama FAKAT ! Burada göze çarpan şey şu:
Uygulama "Location" headerı ile beni Girişe yönlendirmeye çalıssa da Content-Length üzerinde ve gelen HTML Cevabına baktığımızda sayfayı zaten yüklemekte! Yani biz eğer Location headerından kurtulur isek Auth Bypass yaparak bu panelde bir kullanıcımız olmadan erişim sağlayacağız.

Ve evet. Düşündüğümüz gibi BURP üzerinden giden isteğin cevabını tutarak ve ardından Location başlığını sildikten sonra sisteme erişmeyi başardık. BUUM bir kritik açığı şimdiden aldık bile. (Auth Bypass)
Bundan sonra tabii ki de hedefimiz SQL sorgularını yakalayıp bir SQLi denemekte.

Tabii bu sırada BURP'e proxy ayarları üzerinden match and replace kuralı koymayı unutmayın. çünkü bundan sonra sistem arkasına atacağımız bütün isteklerde tek tek Location Headerını silmek istemeyiz. Bunu otomatik olarak burp bizim için yapacak.

Burada klasik bir SQLi tespiti yapıyorum. Eğer tek tırnak ' işaretine hata veriyor ise ve aynı zamanda tek tırnağın yanına bir tane daha tırnak koyduğumuzda yani '' yaptığımızda hata dönmüyorsa. Evet çok büyük ihtimalle SQLi alacağımız fonksiyonu keşfetmişiz demektir.

Görüldüğü üzere ' işareti üzerine sunucu kendini yenileyemedi ve kayda tutulur bir yanıt alamadık.

Fakat iki tane '' koyduktan sonra sorgumuz başarılı hale geldi. Bu durum tamamen SQL Syntax'ı ile alakalı daha detaylı bilgileri internet üzerinde bulabilirsiniz. Ve bu da bizi 2. Kritik zafiyetimiz olan SQLi olduğuna ikna ediyor. (SQLi)
3-Exploit
Artık sistem üzerinde SQLi bulduk ve tek yapmamız gerek bi SQLi'yı kullanarak sistem üzerine erişim alabilmek. Yaaaaniii SHELL almak. RCE alacağız.
Hedef sistemde SQLi ile RCE alabilmek için hedef veritabanı üzerinde belli başlı bilgileri bilmemiz gerekiyor. Bunlardan biri tablo sayısı. Çünkü SELECT sorgusu atacağımız bir tablonun üzerince shell komudumuzu yazarak onu bilgisayar üzerinde bir dosya çıktısı almamız gerekiyor. Yani anlayacağınız teorik olarak shell alma dediğimiz olayı gerçekleştirmemiz gerekmekte.

Tablo sayısını öğrenmem için SQL üzerinde ORDER BY komudunu kullanıyorum yanına yazdığınız sayı ise tablo sayısı bunu brute force atarak veya deneme yanılma yaparak elde edebilirsiniz gördüğünüz üzere 12 sayısına sorgu başarılı döndü. Fakat bunu "test' ORDER BY 13#" yapıyor olsaydım hata verecekti. Çünkü DB üzerinde 13 tane tablo yok. yani hata verdiği yere kadar gidin ve kaç tane tablo sayısı olduğunu öğrenin. Hemen ardından;

Tespit ettiğimiz tablo sayısı kadar null selectliyerek devam ediyoruz. Peki neden Null yazdık tablo isimlerine? Çünkü biz tabloların integer (sayısal) mı yoksa string mi değer aldığını bilmiyoruz. bunun için null vererek devam ettik.
Şimdi sıra artık RCE komudumuzu yazmakta. Hedef sistemin PHP ile çalıştığını ve Windowsta XAMPP serivisi ile yayın yaptığını tespit etmiştik. Biz de bu sisteme bir PHP CMD shell atacağız.
SQL'de INTO OUTFILE komudu ile sistem üzerinde belirttiğimiz bir adrese dosya oluşturabilmekteyiz. Bunları kısa bir araştırma yaparak siz de kolayca ulaşabilirsiniz veya yapay zekaya da başvurabilirsiniz bu tarz yerlerde. Şimdi elde ettiğimiz bilgileri birleştirelim.

12 tane tablo vardı ve 12 tane null yazmıstık. O null olan yerlerden birine PHP Shellcode'umuzu yazıyoruz. sonrasında SELECT işleminin devamına da INTO OUTFILE işlemimizi ekliyoruz. Burada önemli olan nokta yazacağınız dizinin sizin erişebileceğiniz bir alan olması yani şundan bahsediyorum.
XAMPP servisini kendi bilgisayarımıza kurduğumuzda veya bunu internet üzerinde sorguladığımızda WEB sayfasının arayüzünün XAMPP klasörünün altındakı "Htdocs" klasörü olduğunu görüyoruz. Yani bizim etkileşime geçtiğimiz bütün bu sayfalar sistem , internet sitesi "C:\Xampp\htdocs\" içerisinde. Biz de Shell'imizi tam olarak buraya yükleyeceğiz.
Komudu çalıştırıyoruz ve...

https://hedefsite.com/deneme123.jsp?cmd=dir adresine gittiğimizde gördüğümüz üzere ?cmd=dir parametresi üzerinden de gördüğümüz kadarı ile hedef sistemde başarılı birşekilde komut çalıştırabiliyoruz. (RCE) Artık bundan sonrası tamamen bizim hayal gücümüz.
isterseniz tüm dosyaları silin. İsterseniz Winrar ile istediğiniz bir klasörü rar layın ve htdocsun altına kopyaladıktan sonra o dosyayı indirin. Vs. Vs. artık bilgisayardasınız.
Burada dataları ve dosyaları nasıl çekeceğiniz konusunun üstünde çok fazla durmayacağım. Çünkü bu durum tamamen etik dışı bir hareket. Bu tarz sistemleri hak ettiği şekilde deface ederek ve ilgil yerlere ulaştırarak halletmeyi daha uygun buluyorum.
Umarım faydalı olmuştur bu seferlik benden bu kadar.
Bugünkü anlatacağım hedef sistem bir "Panel" sitesi. Genelde bu tarz siteleri Yaşı Küçük/Bilgisiz Kişiler hazır script'ler bularak kurup internet üzerinde erişime açarlar. Ve bu sistemlerin genelde büyük bir kısmında da fazla derecede güvenlik zafiyetleri bulunur. Özellikle "sorgu" olarak adlandırılan işlem SQL ile DB üzerinde iletişime geçiceğinden bir numaralı favori açığımız her zaman SQLi (SQL İnjection) olacaktır. Biz de bunun bilincinde olarak ve bunu gözeterek teste devam edeceğiz.
Not: Siteyi ve kişileri tamamen sansürledim. Bu tarz kişilerin ekstra reklamını ve primini kasmak istemiyorum.

Ekranda gördüğünüz kısım hedef sitemizin ana sayfası. Aşağıdaki "İyi Çalışmalar" Tuşuna basıldıktan sonra Giriş sayfasına yönlendirmektedir bizi. Tabii bu giriş sayfası üzerinde SQLi ile Kullanıcı girişi BYPASS'ı tarzi teknikler denilebilir. Fakat ben her teste başladığım sırada direk olarak aksiyona geçilmeden önce hedef üzerinde "Bilgi Toplama" dediğimiz Enumeration adımlarımıza önem vermeyi tercih ederim. Yani sistemin mimarisini, şemasını anlayıp ve bilgileri elde ettikten sonra elimizdeki verilerle bir aksiyon almamız, kör bir aksiyondan çok daha etkili olacaktır.
1-Bilgi Toplama Aşaması
Hemen hali hazırda kolay bir erişim olayan tarayıcıma yüklediğim "Wappalyzer" eklentisi ile sistem üzerindeki teknolojilere göz gezdiriyorum. Enum hakkında çok daha fazlası var bu tarz durumlar için. Eğer isterseniz Enum için kullandığım teknikleri de başka bir yazıda bahsedebilirim.

Burada gördüğümüz ekranda aslında bizim için göze çarpan 2 durum var. Biri Cloudflare, diğeri ise PHP.
Panellerin hazır SC'lerden yapıldığını ve yüksek miktarlarda zafiyet barındırdığından bahsetmiştim PHP dilini gördükten sonra bu fikirim beni daha da doğru olduğuna ikna etti. Belli başlı giriş sayfasını da gördükten sonra tamamen internet sitesinin Hazır bir SC ile yayınlandığına emin gibiydim.
Peki Cloudflare ibaresi Neden önemli? Çünkü eğer bir WAF sorunu ile karşılaşır isek sistem üzerinde "Origin IP" yani sistemin internet üzerindeki Gerçek IP'si üzerinden erişim alabilirsek bu durumda Cloudflare'i tamamen aradan çıkarıp WAF korumasını tamamen atlatmış olacağız. İnternette "Origin IP finding" yazarsanız bu konuyla ilgili daha detaylı bilgilere ulaşabilirsiniz. (yazıyı uzatmamak adına buraları geçeceğim).

Daha sonrasında hali hazırda Hazır SC'ye sahip olduğu için aklıma dizin taraması atmak geldi ve ardından "dirsearch" tool'una verdiğim parametrelerle birlikte detaylı ve kapsamlı bir dizin taraması gerçekleştiriyorum. Windows üzerinde WSL terminal üzerinden veya da Kali Linuxta da kullanabirsiniz. Buradaki gördüğünüz ekran WSL. Windowsta terminal üzerinden linux kullanmanızı sağlar. Kullandığım buradaki distrom ise Kali-Linux.
"dirsearch -u "https://hedefsite.com/" -e php,asp,aspx,jsp,py,txt,conf,config,bak,backup,swp,old,db,sqlasp,aspx,aspx~,asp~,py,py~,rb,rb~,php,php~,bak,bkp,cache,cgi,conf,csv,html,inc,jar,js,json,jsp,jsp~,lock,log,rar,old,sql,sql.gz,sql.zip,sql.tar.gz,sql~,swp,swp~,tar,tar.bz2,tar.gz,txt,wadl,zip"

Tarama sonucunda dikkatimi çeken bir dizene göz atacağım. bu endpoint "/cgi-bin/printenv.pl". Önceki tecrübelerimden bu sitenin hazır sc olduğu ve panel sitesi olduğunu da göz önüne alırsak adresin genelde XAMPP uygulamalarında açık kaldığı ve bilgisayar ve sistem hakkında işe yarar bilgileri ifşa ettiğini biliyorum. Çünkü aşağıdaki fotoğraftaki gibi bilgiler bizi karşılamakta.

Artık Burada gördüğümüz bilgilerle anlıyoruz ki sitemiz Windows bilgisayar üzerinde çalışan bir XAMPP servisi. Artık buradan sonrası için işimiz baya kolay çünkü şu anda bütün olarak bir mimariyi görmüş durumdayız.
"SERVER_ADDR" alanında yazan değer sunucumuzun Origin IP'si. Yani yukarıda bahsettiğim Cloudflare Bypass durumunu artık yapabiliriz.
Örneğin sitemizin robots.txt'sine girelim;

Cloudflare buraları düzenlemiş şekilde tutuyor. ve burası değiştirilmiş olabilir.

Fakat Origin IP üzerinden gittiğizde Cloudflare'e dair korumalar tamamen kalkmakta.

Bu durumu Wappalyzer üzerinden de onaylayabiliriz.
Neyse test hakkından bahsetmeye devam edelim.
2-Aksiyon Alma

dizin taraması üzerinde "/market" adında bir uç nokta yakalıyorum.

Fakat ilgili endpointe gittiğimde beni sürekli olarak "Giris.jsp" yani giriş sayfasına yönlendiriyor. Kısacası Auth olmamı istiyor uygulama FAKAT ! Burada göze çarpan şey şu:
Uygulama "Location" headerı ile beni Girişe yönlendirmeye çalıssa da Content-Length üzerinde ve gelen HTML Cevabına baktığımızda sayfayı zaten yüklemekte! Yani biz eğer Location headerından kurtulur isek Auth Bypass yaparak bu panelde bir kullanıcımız olmadan erişim sağlayacağız.

Ve evet. Düşündüğümüz gibi BURP üzerinden giden isteğin cevabını tutarak ve ardından Location başlığını sildikten sonra sisteme erişmeyi başardık. BUUM bir kritik açığı şimdiden aldık bile. (Auth Bypass)
Bundan sonra tabii ki de hedefimiz SQL sorgularını yakalayıp bir SQLi denemekte.

Tabii bu sırada BURP'e proxy ayarları üzerinden match and replace kuralı koymayı unutmayın. çünkü bundan sonra sistem arkasına atacağımız bütün isteklerde tek tek Location Headerını silmek istemeyiz. Bunu otomatik olarak burp bizim için yapacak.

Burada klasik bir SQLi tespiti yapıyorum. Eğer tek tırnak ' işaretine hata veriyor ise ve aynı zamanda tek tırnağın yanına bir tane daha tırnak koyduğumuzda yani '' yaptığımızda hata dönmüyorsa. Evet çok büyük ihtimalle SQLi alacağımız fonksiyonu keşfetmişiz demektir.

Görüldüğü üzere ' işareti üzerine sunucu kendini yenileyemedi ve kayda tutulur bir yanıt alamadık.

Fakat iki tane '' koyduktan sonra sorgumuz başarılı hale geldi. Bu durum tamamen SQL Syntax'ı ile alakalı daha detaylı bilgileri internet üzerinde bulabilirsiniz. Ve bu da bizi 2. Kritik zafiyetimiz olan SQLi olduğuna ikna ediyor. (SQLi)
3-Exploit
Artık sistem üzerinde SQLi bulduk ve tek yapmamız gerek bi SQLi'yı kullanarak sistem üzerine erişim alabilmek. Yaaaaniii SHELL almak. RCE alacağız.
Hedef sistemde SQLi ile RCE alabilmek için hedef veritabanı üzerinde belli başlı bilgileri bilmemiz gerekiyor. Bunlardan biri tablo sayısı. Çünkü SELECT sorgusu atacağımız bir tablonun üzerince shell komudumuzu yazarak onu bilgisayar üzerinde bir dosya çıktısı almamız gerekiyor. Yani anlayacağınız teorik olarak shell alma dediğimiz olayı gerçekleştirmemiz gerekmekte.

Tablo sayısını öğrenmem için SQL üzerinde ORDER BY komudunu kullanıyorum yanına yazdığınız sayı ise tablo sayısı bunu brute force atarak veya deneme yanılma yaparak elde edebilirsiniz gördüğünüz üzere 12 sayısına sorgu başarılı döndü. Fakat bunu "test' ORDER BY 13#" yapıyor olsaydım hata verecekti. Çünkü DB üzerinde 13 tane tablo yok. yani hata verdiği yere kadar gidin ve kaç tane tablo sayısı olduğunu öğrenin. Hemen ardından;

Tespit ettiğimiz tablo sayısı kadar null selectliyerek devam ediyoruz. Peki neden Null yazdık tablo isimlerine? Çünkü biz tabloların integer (sayısal) mı yoksa string mi değer aldığını bilmiyoruz. bunun için null vererek devam ettik.
Şimdi sıra artık RCE komudumuzu yazmakta. Hedef sistemin PHP ile çalıştığını ve Windowsta XAMPP serivisi ile yayın yaptığını tespit etmiştik. Biz de bu sisteme bir PHP CMD shell atacağız.
SQL'de INTO OUTFILE komudu ile sistem üzerinde belirttiğimiz bir adrese dosya oluşturabilmekteyiz. Bunları kısa bir araştırma yaparak siz de kolayca ulaşabilirsiniz veya yapay zekaya da başvurabilirsiniz bu tarz yerlerde. Şimdi elde ettiğimiz bilgileri birleştirelim.

12 tane tablo vardı ve 12 tane null yazmıstık. O null olan yerlerden birine PHP Shellcode'umuzu yazıyoruz. sonrasında SELECT işleminin devamına da INTO OUTFILE işlemimizi ekliyoruz. Burada önemli olan nokta yazacağınız dizinin sizin erişebileceğiniz bir alan olması yani şundan bahsediyorum.
XAMPP servisini kendi bilgisayarımıza kurduğumuzda veya bunu internet üzerinde sorguladığımızda WEB sayfasının arayüzünün XAMPP klasörünün altındakı "Htdocs" klasörü olduğunu görüyoruz. Yani bizim etkileşime geçtiğimiz bütün bu sayfalar sistem , internet sitesi "C:\Xampp\htdocs\" içerisinde. Biz de Shell'imizi tam olarak buraya yükleyeceğiz.
Komudu çalıştırıyoruz ve...

https://hedefsite.com/deneme123.jsp?cmd=dir adresine gittiğimizde gördüğümüz üzere ?cmd=dir parametresi üzerinden de gördüğümüz kadarı ile hedef sistemde başarılı birşekilde komut çalıştırabiliyoruz. (RCE) Artık bundan sonrası tamamen bizim hayal gücümüz.
Burada dataları ve dosyaları nasıl çekeceğiniz konusunun üstünde çok fazla durmayacağım. Çünkü bu durum tamamen etik dışı bir hareket. Bu tarz sistemleri hak ettiği şekilde deface ederek ve ilgil yerlere ulaştırarak halletmeyi daha uygun buluyorum.
Umarım faydalı olmuştur bu seferlik benden bu kadar.
Bu içeriği görmek için giriş yapın.