Lab Erişimi İçin: https://tryhackme.com/room/protocolsandservers
Bu oda, aşağıdaki gibi birkaç yaygın protokolü öğretmek için oluşturulmuştur ve network alanında temellerinizi atmanıza yardımcı olacaktır.
1) HTTP
2) FTP
3) POP3
4) SMTP
5) IMAP
Her protokol ile ilgili her görev, düşük seviyede neler olduğunu anlamamıza yardımcı olacak şekilde tasarlanmıştır ve genellikle şık bir Grafik Kullanıcı Arayüzü (GUI) tarafından gizlenir. Yukarıdaki protokolleri kullanarak basit bir Telnet istemcisi ile “speak” ve GUI istemcimizin kaputun altında neler yaptığını tam olarak anlayacağız. Amacımız, protokol komutlarını ezberlemek değil, protokolün çalışırken nasıl davrandığını daha yakından incelemektir.Ayrıca, bazı güvenlik açıklarını da tartışacağız. Özellikle, şifrelerin açık metin olarak gönderilmesine odaklanacağız.
[Soru 1.1] Aşağıdaki görevleri yerine getirmeye devam ederken AttackBox'ı ve sanal makineyi başlatmanızı öneririz. Daha iyi uygulama ve öğrenme deneyimi için Telnet üzerinden farklı hizmetlere bağlanabilirsiniz.
Cevap: Cevaba gerek yok.
Telnet Protokolü Nedir ve Nasıl Çalışır?
Telnet protokolü, başka bir bilgisayarın sanal terminaline bağlanmak için kullanılan bir uygulama katmanı protokolüdür. Telnet kullanarak, bir kullanıcı başka bir bilgisayara giriş yapabilir ve terminaline (konsol) erişerek programları çalıştırabilir, toplu işlemleri başlatabilir ve sistem yönetim görevlerini uzaktan gerçekleştirebilir.
Telnet protokolü nispeten basittir. Bir kullanıcı bağlandığında, kullanıcı adı ve şifre istenir. Doğru kimlik doğrulamanın ardından kullanıcı, uzak sistemin terminaline erişim sağlar. Ne yazık ki, Telnet istemcisi ile Telnet sunucusu arasındaki bu iletişimin tamamı şifrelenmemiştir, bu da onu saldırganlar için kolay bir hedef haline getirir.
Telnet sunucusu, gelen bağlantıları dinlemek için Telnet protokolünü kullanarak port 23 üzerinde çalışır. Ancak, hedef sanal makinede Telnet portu açık değildir. Aşağıdaki örneği inceleyelim. Bir kullanıcı, Telnet sunucusu olan telnetd’ye bağlanıyor. Adımlar şu şekildedir:
- İlk olarak, giriş ismi (kullanıcı adı) istenir. Kullanıcının “frank” girdiğini görebiliriz.
- Ardından, şifre istenir, “D2xc9CgD”. Şifre ekranda gösterilmez; ancak gösterim amacıyla burada belirtilmiştir.
- Sistem, giriş bilgilerini kontrol ettikten sonra bir karşılama mesajı gösterir.
- Ve uzak sunucu ona bir komut istemi verir, frank@bento:~$. $ işareti bunun bir root terminali olmadığını gösterir.
Pentester Terminal:
pentester@TryHackMe$ telnet 10.10.207.50
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
Ubuntu 20.04.3 LTS
bento login: frank
Password: D2xc9CgD
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-84-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri 01 Oct 2021 12:24:56 PM UTC
System load: 0.05 Processes: 243
Usage of /: 45.7% of 6.53GB Users logged in: 1
Memory usage: 15% IPv4 address for ens33: 10.10.207.50
Swap usage: 0%
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
0 updates can be applied immediately.
*** System restart required ***
Last login: Fri Oct 1 12:17:25 UTC 2021 from meiyo on pts/3
You have mail.
frank@bento:~$
Telnet, uzak sistemin terminaline hızla erişim sağlamış olsa da, tüm veriler açık metin olarak iletildiği için uzaktan yönetim için güvenilir bir protokol değildir. Aşağıdaki şekilde, Telnet tarafından üretilen trafiği yakaladık ve şifreyi bulmak çok kolaydı. Şekilde, bilgisayarımız ile uzak sistem arasında değiş tokuş edilen ASCII verileri gösterilmektedir. Kırmızı metin, uzak sisteme gönderdiğimiz metindir, mavi metin ise uzak sistemden gelen yanıttır. Kullanıcı adı geri gönderildi (terminalimizde göstermek için yankılandı), ancak şifre gönderilmedi. Başka bir deyişle, birisi bizi yazarken izliyor olsa bile, şifre karakterlerini ekranda göremez.
Telnet artık güvenli bir seçenek olarak kabul edilmemektedir, özellikle de ağ trafiğinizi yakalayan birisi kullanıcı adlarınızı ve şifrelerinizi kolayca bulabilir ve bu da onlara uzak sisteme erişim sağlar. Güvenli alternatif ise SSH’dir ve bunu bir sonraki bölümde ele alacağız.
[Soru 2.1] Varsayılan parametrelerle telnet komutu hangi bağlantı noktasına bağlanmaya çalışacaktır? Cevap: 23
HTTP Protokolü Nedir ve Nasıl Çalışır?
Hypertext Transfer Protocol (HTTP), web sayfalarını aktarmak için kullanılan protokoldür. Web tarayıcınız, web sunucusuna bağlanır ve HTML sayfaları, resimler gibi dosyaları istemek ve formları göndermek, çeşitli dosyaları yüklemek için HTTP kullanır. World Wide Web (WWW) üzerinde gezindiğiniz her an, kesinlikle HTTP protokolünü kullanıyorsunuzdur.
Aşağıdaki resim, bir istemcinin web sunucusundan index.html adlı HTML sayfasını istemesini ve web sunucusunun bu sayfayı sağlamasını göstermektedir. Ardından, istemci bir resim (logo.jpg) ister ve web sunucusu bu resmi gönderir.
Örnek:
İstemci, index.html adlı HTML sayfasını talep eder.
Web sunucusu, bu sayfayı istemciye gönderir.
İstemci, logo.jpg adlı resmi talep eder.
Web sunucusu, bu resmi istemciye gönderir.
HTTP, web sayfalarının ve multimedya içeriklerinin tarayıcınızda görünmesini sağlayan temel protokoldür. Bu protokol sayesinde web üzerinde gezinti yapabilir ve çeşitli içeriklere ulaşabilirsiniz.
HTTP Protokolüyle İletişim Kurma
HTTP, verileri açık metin olarak (şifrelenmemiş) gönderir ve alır; bu nedenle, Telnet (veya Netcat) gibi basit bir araç kullanarak bir web sunucusuyla iletişim kurabilir ve “web tarayıcısı” gibi davranabilirsiniz. Buradaki ana fark, web tarayıcısının sizin için yaptığı HTTP ile ilgili komutları manuel olarak girmeniz gerektiğidir.
Aşağıdaki örnekte, bir web sunucusundan nasıl sayfa talep edebileceğimizi göreceğiz; ayrıca, web sunucusunun sürümünü keşfedeceğiz. Bunu gerçekleştirmek için Telnet istemcisini kullanacağız. Telnet, basit bir protokol olduğu ve iletişim için açık metin kullandığı için tercih edilmiştir. Web tarayıcısı yerine Telnet kullanarak web sunucusundan bir dosya isteyeceğiz. Adımlar şu şekilde olacaktır:
Öncelikle, telnet 10.10.207.50 80 komutunu kullanarak 80 numaralı porta bağlanıyoruz.
Ardından, GET /index.html HTTP/1.1 yazarak index.html sayfasını veya GET / HTTP/1.1 yazarak varsayılan sayfayı almak istiyoruz.
Son olarak, host: telnet gibi bir değer girip Enter tuşuna iki kez basmamız gerekiyor.
Aşağıdaki konsol çıktısında, talep ettiğimiz sayfanın yanı sıra web tarayıcısı tarafından genellikle gösterilmeyen birçok bilgiyi geri aldık. Eğer talep ettiğimiz sayfa bulunamazsa, 404 hatası alırız.
Pentester Terminal
pentester@TryHackMe$ telnet 10.10.207.50 80
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
GET /index.html HTTP/1.1
host: telnet
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Wed, 15 Sep 2021 08:56:20 GMT
Content-Type: text/html
Content-Length: 234
Last-Modified: Wed, 15 Sep 2021 08:53:59 GMT
Connection: keep-alive
ETag: "6141b4a7-ea"
Accept-Ranges: bytes
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to my Web Server</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
</head>
<body>
<h1>Coming Soon<h1>
</body>
</html>
HTTP Protokolü Kullanarak Sayfa İsteği
Özellikle dikkat çekici olan, kullanıcının ihtiyaç duyduğu sayfayı almak için yalnızca birkaç komut yazması gerektiğidir: GET /index.html HTTP/1.1
ve ardından host: telnet
.
HTTP protokolünü kullanmak için bir HTTP sunucusuna (web sunucusu) ve bir HTTP istemcisine (web tarayıcısı) ihtiyacımız var. Web sunucusu, talep eden web tarayıcısına belirli bir dosya seti “sunacaktır”.
HTTP sunucuları için üç popüler seçenek şunlardır:
- Apache
- Internet Information Services (IIS)
- Nginx
Apache ve Nginx, ücretsiz ve açık kaynaklı yazılımlardır. Ancak, IIS kapalı kaynaklı bir yazılımdır ve lisans için ödeme yapılması gerekir.
Mevcut birçok web tarayıcısı vardır. Yazım sırasında, en popüler web tarayıcıları şunlardır:
- Google Chrome
- Microsoft Edge
- Mozilla Firefox
- Apple Safari
Web tarayıcıları genellikle ücretsiz olarak yüklenebilir ve kullanılabilir; ayrıca, teknoloji devleri, tarayıcıları için daha yüksek pazar payı elde etmek için rekabet halindedir.
[Soru 3.1] Ekteki sanal makineyi başlatın. AttackBox terminalinden, Telnet kullanarak MACHINE_IP 80’e bağlanın ve flag.thm dosyasını alın. Ne içeriyor?
1 – Telnet aracılığıyla hedefin makinesine erişin
Enter: telnet 80
2 – “flag.thm” dosyasına bağlanın
Enter: GET /flag.thm
HTTP/1.1 3.
Enter: host: telnet
sonra enter enter yapın
Cevap THM{e3eb0a1df437f3f97a64aca5952c8ea0}
yada bir başka yöntem ile netcat’le yapabilirdik.
The Home Of Cyber Security
Dosya Transfer Protokolü (FTP)
Dosya Transfer Protokolü (FTP), farklı sistemlere sahip farklı bilgisayarlar arasında dosya transferini verimli hale getirmek için geliştirilmiştir.
FTP de verileri düz metin clear text olarak gönderir ve alır; bu nedenle, bir FTP sunucusuyla iletişim kurmak ve bir FTP istemcisi gibi davranmak için Telnet (veya Netcat) kullanabiliriz. Aşağıdaki örnekte, şu adımları gerçekleştirdik:
- Telnet kullanarak bir FTP sunucusuna bağlandık. FTP sunucuları varsayılan olarak 21 numaralı portu dinlediğinden, Telnet istemcimize varsayılan Telnet portu yerine 21 numaralı porta bağlanmayı belirtmemiz gerekti.
- Kullanıcı adını sağladık.
USER frank
komutunu kullandık. - Şifreyi sağladık.
PASS D2xc9CgD
komutunu kullandık. - Doğru kullanıcı adı ve şifreyi sağladığımız için giriş yaptık.
- Ek bilgi sağlamak için bazı komutlar kullandık. Örneğin,
STAT
komutu ek bilgi sağlar.SYST
komutu, hedef sistemin türünü gösterir (bu durumda UNIX).PASV
komutu modu pasife geçirir.
FTP’nin iki modu olduğunu belirtmekte fayda var:
- Aktif Mod: Aktif modda, veriler FTP sunucusunun 20 numaralı portundan gönderilen ayrı bir kanal üzerinden gönderilir.
- Pasif Mod: Pasif modda, veriler bir FTP istemcisinin 1023 numaralı portunun üzerindeki bir porttan gönderilen ayrı bir kanal üzerinden gönderilir.
TYPE A
komutu dosya transfer modunu ASCII’ye değiştirirken, TYPE I
komutu dosya transfer modunu ikili (binary) moda değiştirir. Ancak, dosya transferi için ayrı bir bağlantı oluşturduğu için Telnet gibi basit bir istemci kullanarak dosya transferi gerçekleştiremeyiz.
pentester@TryHackMe$ telnet 10.10.207.50 21
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
USER frank
331 Please specify the password.
PASS D2xc9CgD
230 Login successful.
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (10,10,0,148,78,223).
TYPE A
200 Switching to ASCII mode.
STAT
211-FTP server status:
Connected to ::ffff:10.10.0.1
Logged in as frank
TYPE: ASCII
No session bandwidth limit
Session timeout in seconds is 300
Control connection is plain text
Data connections will be plain text
At session startup, client count was 1
vsFTPd 3.0.3 - secure, fast, stable
211 End of status
QUIT
221 Goodbye.
Connection closed by foreign host.
Aşağıdaki görsel, FTP kullanarak gerçek bir dosya transferinin nasıl gerçekleştirileceğini göstermektedir. Bu görselde işleri basit tutmak için, FTP istemcisinin varsayılan olarak 21 numaralı portu dinleyen bir FTP sunucusuna nasıl bağlantı başlattığına odaklanalım. Tüm komutlar kontrol kanalından gönderilecektir. İstemci bir dosya talep ettiğinde, aralarında başka bir TCP bağlantısı kurulacaktır. (Veri bağlantısının/kanalının kurulmasının ayrıntıları bu odanın kapsamı dışındadır.)
FTP ile Dosya Transferi Gerçekleştirme
FTP üzerinden veri transferinin karmaşıklığını göz önünde bulundurarak, bir metin dosyasını indirmek için gerçek bir FTP istemcisi kullanalım. Dosyayı almak için sadece birkaç komuta ihtiyacımız oldu. Başarıyla giriş yaptıktan sonra, çeşitli FTP komutlarını yürütmek için ftp> istemini aldık. Dosyaları listelemek ve dosya adını öğrenmek için ls
komutunu kullandık; ardından, dosya metin dosyası (ikili değil) olduğundan ascii
moduna geçtik. Son olarak, get DOSYA_ADI
komutu, istemci ve sunucunun dosya transferi için başka bir kanal oluşturmasını sağladı.
pentester@TryHackMe$ ftp 10.10.207.50
Connected to 10.10.207.50.
220 (vsFTPd 3.0.3)
Name: frank
331 Please specify the password.
Password: D2xc9CgD
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,20,30,148,201,180).
150 Here comes the directory listing.
-rw-rw-r-- 1 1001 1001 4006 Sep 15 10:27 README.txt
226 Directory send OK.
ftp> ascii
200 Switching to ASCII mode.
ftp> get README.txt
local: README.txt remote: README.txt
227 Entering Passive Mode (10,10,0,148,125,55).
150 Opening BINARY mode data connection for README.txt (4006 bytes).
WARNING! 9 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
4006 bytes received in 0.000269 secs (14892.19 Kbytes/sec)
ftp> exit
221 Goodbye.
FTP Sunucuları ve İstemcileri
FTP sunucuları ve FTP istemcileri, FTP protokolünü kullanarak iletişim kurarlar. Kendi FTP dosya sunucunuzu barındırmak isterseniz, çeşitli FTP sunucu yazılımlarından birini seçebilirsiniz. Örnekler arasında şunlar bulunur:
- vsftpd
- ProFTPD
- uFTP
FTP istemcileri için, Linux sistemlerinde yaygın olarak bulunan konsol FTP istemcisinin yanı sıra, FileZilla gibi GUI (Grafik Kullanıcı Arayüzü) ile birlikte gelen bir FTP istemcisi de kullanabilirsiniz. Bazı web tarayıcıları da FTP protokolünü destekler.
FTP, giriş bilgilerini, komutları ve dosyaları açık metin olarak gönderdiği için FTP trafiği saldırganlar için kolay bir hedef olabilir.
[Soru 4.1] FTP istemcisi kullanarak sanal makineye bağlanıp bayrak dosyasını bulmaya çalışın. Bayrak nedir?
ilk olarak ftp’ye bağlanın
şimdi bakalım
şimdi dosyalara sahibiz.
cat komutu ile okuyalım.
Cevap: THM{364db6ad0e3ddfe7bf0b1870fb06fbdf}
Email Services and Components
E-posta, İnternet üzerinde en sık kullanılan hizmetlerden biridir. E-posta sunucularının çeşitli yapılandırmaları vardır; örneğin, e-posta sisteminizi yalnızca yerel kullanıcıların birbirleriyle e-posta alışverişi yapmasını sağlayacak şekilde yapılandırabilirsiniz ve İnternet erişimi olmayabilir. Ancak, burada İnternet üzerinden birbirine bağlı farklı e-posta sunucularının olduğu daha genel bir yapılandırmayı ele alacağız.
İnternet üzerinden e-posta iletimi için aşağıdaki bileşenler gereklidir:
- Mail Submission Agent (MSA) – E-posta Gönderim Aracısı:
Bu bileşen, bir e-posta istemcisinden (Mail User Agent – MUA) gelen e-posta mesajını alır ve Mail Transfer Agent’a (MTA) iletmek üzere hazırlar. Gönderici e-posta sunucusuna mesajı iletmekle sorumludur. - Mail Transfer Agent (MTA) – E-posta Taşıma Aracısı:
MTA, e-posta mesajlarını alır ve hedef e-posta sunucusuna iletir. Bu bileşen, e-postaların doğru alıcıya ulaşmasını sağlamak için kullanılır. E-posta, bir MTA’dan diğerine gönderilir ve bu süreçte genellikle bir dizi sunucu üzerinden geçer. - Mail Delivery Agent (MDA) – E-posta Teslimat Aracısı:
MDA, e-posta mesajlarını hedef alıcının posta kutusuna teslim eder. Bu bileşen, e-postaları alıcı kullanıcıların yerel posta kutularına yerleştirir. Alıcı e-posta sunucusunda çalışır ve e-posta teslimatını yönetir. - Mail User Agent (MUA) – E-posta Kullanıcı Aracısı:
MUA, kullanıcıların e-posta göndermesine ve almasına olanak tanır. Bu, kullanıcıların e-postalarını yazdığı, okuduğu ve yönettiği uygulamadır. E-posta istemcileri (örneğin, Outlook, Thunderbird) bu kategoride yer alır.
Aşağıdaki şekil, bu dört bileşeni daha iyi anlamanızı sağlayacak ve e-posta sistemlerinin nasıl çalıştığını gösterecektir.
Email Transmission Steps and Protocols
E-posta alıcının gelen kutusuna ulaşana kadar aşağıdaki beş adımdan geçer:
- Mail User Agent (MUA): Bir e-posta istemcisi, gönderilmek üzere bir e-posta mesajına sahiptir. MUA, mesajını göndermek için bir Mail Submission Agent (MSA) ile bağlantı kurar.
- Mail Submission Agent (MSA): MSA, mesajı alır, hataları kontrol eder ve ardından Mail Transfer Agent (MTA) sunucusuna aktarır. Genellikle MSA ve MTA aynı sunucuda barındırılır.
- Mail Transfer Agent (MTA): MTA, e-posta mesajını alıcının MTA’sına iletir. MTA aynı zamanda bir MSA olarak da işlev görebilir.
- Mail Delivery Agent (MDA): Tipik bir kurulumda, MTA sunucusu aynı zamanda bir MDA olarak da işlev görür.
- Mail User Agent (MUA): Alıcı, e-postayı MDA’dan alır ve kendi e-posta istemcisini kullanarak e-postayı toplar.
Bu adımları daha iyi anlamak için şu analojiyi düşünebilirsiniz:
- Siz (MUA): Posta göndermek istiyorsunuz.
- Posta ofisi çalışanı (MSA): Postayı kontrol eder ve yerel postane (MTA) kabul eder.
- Yerel postane (MTA): Postanın varış yerini kontrol eder ve doğru ülkenin postanesine (MTA) gönderir.
- Postane (MTA): Postayı alıcı kutusuna (MDA) teslim eder.
- Alıcı (MUA): Düzenli olarak posta kutusunu kontrol eder, yeni postayı fark eder ve alır.
E-posta Protokolleri
E-posta sunucuları ile iletişim kurmak için protokoller kullanırız. Bu protokoller:
- Simple Mail Transfer Protocol (SMTP): Bir MTA sunucusu ile iletişim kurmak için kullanılır. SMTP, tüm komutların şifrelenmeden gönderildiği açık metin kullanır. Bu nedenle, basit bir Telnet istemcisi kullanarak bir SMTP sunucusuna bağlanabilir ve bir e-posta istemcisi (MUA) olarak mesaj gönderebiliriz. SMTP sunucusu varsayılan olarak 25 numaralı portu dinler. Temel SMTP iletişimini görmek için Telnet kullanarak bağlanır ve
helo hostname
komutunu girerek e-postayı yazmaya başlarız.
Bir HTTP sunucusuyla iletişim kurmak için bir protokol takip etmemiz gerektiği gibi, bir MTA ve MDA ile iletişim kurmak için de e-posta protokollerine güvenmemiz gerekir. Protokoller şunlardır:
- SMTP (Simple Mail Transfer Protocol): MTA sunucusu ile iletişim kurmak için kullanılır.
- POP3 (Post Office Protocol 3) veya IMAP (Internet Message Access Protocol): E-postaları almak için kullanılır.
Bu görevde SMTP’yi açıklayacağız ve POP3 ile IMAP’i sonraki görevlerde detaylandıracağız.
pentester@TryHackMe$ telnet 10.10.207.50 25
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
220 bento.localdomain ESMTP Postfix (Ubuntu)
helo telnet
250 bento.localdomain
mail from:
250 2.1.0 Ok
rcpt to:
250 2.1.5 Ok
data
354 End data with .
subject: Sending email with Telnet
Hello Frank,
I am just writing to say hi!
.
250 2.0.0 Ok: queued as C3E7F45F06
quit
221 2.0.0 Bye
Connection closed by foreign host.
Helo’dan sonra, göndereni ve alıcıyı belirtmek için mail from:, rcpt to: komutlarını veriyoruz. E-posta mesajımızı gönderirken, data komutunu veririz ve mesajımızı yazarız. . (ya da daha basit bir ifadeyle Enter . Enter) komutunu veririz. SMTP sunucusu şimdi iletiyi kuyruğa alır. Genel olarak konuşursak, SMTP komutlarını ezberlememize gerek yoktur. Yukarıdaki konsol çıktısı, tipik bir posta istemcisinin SMTP kullandığında ne yaptığını daha iyi açıklamaya yardımcı olmayı amaçlamaktadır.
Post Office Protocol version 3 (POP3), bir Mail Delivery Agent (MDA) sunucusundan e-posta mesajlarını indirmek için kullanılan bir protokoldür. E-posta istemcisi, POP3 sunucusuna bağlanır, kimlik doğrulaması yapar ve yeni e-posta mesajlarını indirir, ardından (isteğe bağlı olarak) bu mesajları sunucudan siler.
Aşağıdaki örnek, bir POP3 oturumunun Telnet istemcisi üzerinden nasıl görüneceğini göstermektedir. İlk olarak, kullanıcı POP3 sunucusuna varsayılan port 110 üzerinden bağlanır. E-posta mesajlarına erişim sağlamak için kimlik doğrulaması gerekir; kullanıcı, kullanıcı adı USER frank ve şifre PASS D2xc9CgD girerek kimlik doğrulaması yapar. STAT komutunu kullanarak +OK 1 179 yanıtını alırız; RFC 1939’a göre, STAT komutuna verilen olumlu yanıt +OK nn mm formatındadır, burada nn gelen kutusundaki e-posta mesajlarının sayısını ve mm gelen kutusunun boyutunu oktet (byte) cinsinden belirtir. LIST komutu, sunucudaki yeni mesajların bir listesini sağlar ve RETR 1, listedeki ilk mesajı alır. Bu komutları ezberlememize gerek yoktur; ancak, böyle bir protokolü anlamamıza yardımcı olur.
Pentester Terminal
pentester@TryHackMe$ telnet 10.10.207.50 110
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
+OK 10.10.207.50 Mail Server POP3 Wed, 15 Sep 2021 11:05:34 +0300
USER frank
+OK frank
PASS D2xc9CgD
+OK 1 messages (179) octets
STAT
+OK 1 179
LIST
+OK 1 messages (179) octets
1 179
.
RETR 1
+OK
From: Mail Server
To: Frank
subject: Sending email with Telnet
Hello Frank,
I am just writing to say hi!
.
QUIT
+OK 10.10.207.50 closing connection
Connection closed by foreign host.
Yukarıdaki örnek, komutların açık metin olarak gönderildiğini göstermektedir. Telnet kullanarak kimlik doğrulama yapmak ve bir e-posta mesajını almak yeterli olmuştur. Kullanıcı adı ve şifre açık metin olarak gönderildiğinden, ağ trafiğini izleyen herhangi bir üçüncü taraf bu kimlik bilgilerini çalabilir.
Genel olarak, e-posta istemciniz (MUA) POP3 sunucusuna (MDA) bağlanır, kimlik doğrulaması yapar ve mesajları indirir. POP3 protokolü kullanılarak yapılan iletişim şık bir arayüzün arkasında gizli olsa da, Telnet oturumunda gösterildiği gibi benzer komutlar kullanılacaktır.
Varsayılan ayarlarına göre, e-posta istemcisi mesajı indirdikten sonra siler. Varsayılan davranış, e-postaları başka bir e-posta istemcisinden tekrar indirmek isterseniz değiştirilebilir. POP3 ile birden fazla istemci üzerinden aynı e-posta hesabına erişmek genellikle uygun değildir çünkü okunan ve okunmayan mesajların takibi zorlaşır. Tüm posta kutularını senkronize tutmak için IMAP gibi diğer protokolleri göz önünde bulundurmamız gerekir.
POP3 bağlantı noktasından VM’ye (Makine_IP) bağlanın. Kullanıcı adı frank ve parola D2xc9CgD kullanarak kimlik doğrulaması yapın. STAT’a aldığınız yanıt nedir?
POP3 bağlantı noktasından VM’ye (10.10.207.50) bağlanın. Kullanıcı adı frank ve parola D2xc9CgD kullanarak kimlik doğrulaması yapın. STAT’a aldığınız yanıt nedir?
CEVAP: +OK 0 0
POP3 üzerinden 10.10.207.50’de indirilebilecek kaç e-posta iletisi var?
CEVAP: 0
Internet Message Access Protocol (IMAP), POP3’ten daha gelişmiş bir protokoldür. IMAP, e-postalarınızı birden fazla cihazda (ve e-posta istemcisinde) senkronize tutmanıza olanak tanır. Başka bir deyişle, e-postalarınızı akıllı telefonunuzda okundu olarak işaretlediğinizde, bu değişiklik IMAP sunucusunda (MDA) kaydedilir ve posta kutunuzu senkronize ettiğinizde dizüstü bilgisayarınıza yansıtılır.
Örnek IMAP komutlarına bir göz atalım. Aşağıdaki konsol çıktısında, Telnet kullanarak IMAP sunucusunun varsayılan portuna bağlanıyoruz ve ardından LOGIN username password komutuyla kimlik doğrulaması yapıyoruz. IMAP, her komutun yanıtı takip edebilmek için rastgele bir dize ile başlamasını gerektirir. Bu nedenle, c1, c2 ve benzeri etiketler ekledik. Sonra LIST “” “*” komutuyla e-posta klasörlerimizi listeledik ve EXAMINE INBOX komutuyla gelen kutumuzda yeni mesaj olup olmadığını kontrol ettik. Bu komutları ezberlememiz gerekmez; ancak, e-posta istemcisi ile IMAP sunucusu arasındaki iletişimin neye benzediğini daha iyi anlamanız için bu örneği sağlıyoruz.
pentester@TryHackMe$ telnet 10.10.207.50 143
Trying 10.10.207.50...
Connected to 10.10.207.50.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc. See COPYING for distribution information.
c1 LOGIN frank D2xc9CgD
* OK [ALERT] Filesystem notification initialization error -- contact your mail administrator (check for configuration errors with the FAM/Gamin library)
c1 OK LOGIN Ok.
c2 LIST "" "*"
* LIST (\HasNoChildren) "." "INBOX.Trash"
* LIST (\HasNoChildren) "." "INBOX.Drafts"
* LIST (\HasNoChildren) "." "INBOX.Templates"
* LIST (\HasNoChildren) "." "INBOX.Sent"
* LIST (\Unmarked \HasChildren) "." "INBOX"
c2 OK LIST completed
c3 EXAMINE INBOX
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS ()] No permanent flags permitted
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 631694851] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
c3 OK [READ-ONLY] Ok
c4 LOGOUT
* BYE Courier-IMAP server shutting down
c4 OK LOGOUT completed
Connection closed by foreign host.
IMAP’in giriş bilgilerini açık metin olarak gönderdiği açıktır; örneğin, LOGIN frank D2xc9CgD komutunda görüldüğü gibi. Ağı izleyen biri, Frank’in kullanıcı adını ve şifresini öğrenebilir.
IMAP tarafından kullanılan varsayılan bağlantı noktası nedir?
CEVAP: 143