This page looks best with JavaScript enabled

Hack The Box - RouterSpace

RouterSpace presenta una aplicación android la cual nos permitió descubrir una vulnerabilidad Command Injection en la API utilizada por esta lo que nos dio acceso a la máquina. Escalamos privilegios tras identificar la version de sudo y el CVE-2021-3156.

Nombre RouterSpace box_img_maker
OS

Linux

Puntos 20
Dificultad Facil
IP 10.10.11.148
Maker

h4rithd

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[4.4, 4.3, 6.2, 3.8, 5.7],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[3, 7, 6, 4, 3],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

Recon

nmap

nmap muestra multiples puertos abiertos: http (80) y ssh (22).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Nmap 7.91 scan initiated Sat Feb 26 23:42:44 2022 as: nmap -sS -sVC -p- -oN nmap_scan 10.129.142.119
Nmap scan report for 10.129.142.119 (10.129.142.119)
Host is up (0.11s latency).
Not shown: 65533 filtered ports
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-43104
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 71
|     ETag: W/"47-HnqVeZEDd5RFdLo0yVWG8nQgfnM"
|     Date: Sat, 26 Feb 2022 23:49:51 GMT
|     Connection: close
|     Suspicious activity detected !!! {RequestID: M i2T e BPYFjg }
|   GetRequest:
|     HTTP/1.1 200 OK
|     X-Powered-By: RouterSpace
|     X-Cdn: RouterSpace-75328
|     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: Sat, 26 Feb 2022 23:49:48 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-41118
|     Allow: GET,HEAD,POST
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 13
|     ETag: W/"d-bMedpZYGrVt1nR4x+qdNZ2GqyRo"
|     Date: Sat, 26 Feb 2022 23:49:49 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
[.. snip ..]

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Feb 26 23:50:13 2022 -- 1 IP address (1 host up) scanned in 449.69 seconds

Web Site

Realizando una solicitud con curl vemos en los Headers “RouterSpace”, al investigar esta “tecnologia” no encontramos nada relacionado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 π ~/htb/routerspace ❯ curl -sI http://10.129.142.119/
HTTP/1.1 200 OK
X-Powered-By: RouterSpace
X-Cdn: RouterSpace-95320
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: Sat, 26 Feb 2022 23:55:41 GMT
Connection: keep-alive

El sitio web presenta una aplicación para realizar una conexión con routers, se muestra un boton a la dirección de descarga de la app.

image

Android APP

Analisis Estático

Apktool

Iniciamos descargando la aplicación RouterSpace.apk, y con apktool decompilar el apk y obtener los recursos de la aplicación.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
➜  routerspace apktool d RouterSpace.apk 
I: Using Apktool 2.4.0-dirty on RouterSpace.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/sckull/.local/share/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
➜  routerspace l -lah RouterSpace
total 44K
drwxrwxr-x   9 sckull sckull 4.0K mar  2 20:35 .
drwxrwxr-x   3 sckull sckull 4.0K mar  2 20:35 ..
-rw-rw-r--   1 sckull sckull 1.2K mar  2 20:35 AndroidManifest.xml
-rw-rw-r--   1 sckull sckull 3.7K mar  2 20:35 apktool.yml
drwxrwxr-x   3 sckull sckull 4.0K mar  2 20:35 assets
drwxrwxr-x   8 sckull sckull 4.0K mar  2 20:35 kotlin
drwxrwxr-x   6 sckull sckull 4.0K mar  2 20:35 lib
drwxrwxr-x   3 sckull sckull 4.0K mar  2 20:35 original
drwxrwxr-x 141 sckull sckull 4.0K mar  2 20:35 res
drwxrwxr-x  11 sckull sckull 4.0K mar  2 20:35 smali
drwxrwxr-x   3 sckull sckull 4.0K mar  2 20:35 unknown
➜  routerspace

Observamos el archivo AndroidManifest.xml, el cual puede contener información de paquetes, elementos, servicios, activities, etc. Se muestra en este caso:

  1. El nombre del paquete de la aplicación “package=“com.routerspace””.
  2. El Activity “android:name=“com.routerspace.MainActivity””.
  3. Permisos, el único permiso que se muestra: “android:name=“android.permission.INTERNET””.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="30" android:compileSdkVersionCodename="11" package="com.routerspace" platformBuildVersionCode="30" platformBuildVersionName="11">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application android:allowBackup="false" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name="com.routerspace.MainApplication" android:roundIcon="@mipmap/ic_launcher" android:theme="@style/AppTheme">        
        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.routerspace.MainActivity" android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Si analizamos los archivos vemos que unicamente se muestran archivos .smali que contienen el “codigo fuente” de la aplicación, pero existe otra herramienta que nos permite leer de manera más ’entendible’ el código.

image

Jadx

Utilizamos jadx que permite generar código java a partir de un .apk o archivo .dex. Ejecutamos jadx-gui y nos presenta los diferentes recursos de la aplicación. Entre ellos encontramos el paquete “principal” de la aplicación. Sin embargo no encontramos código que nos indicara el funcionamiento y/o comportamiento de la aplicación, aunque se muestran distintas ’librerias’ de react.

image

Basados en lo último, intentamos analizar el codigo de la app como si de React Native se tratase, realizamos lo que se presenta en el siguiente post.

1
2
3
4
5
6
7
8
9
➜  assets l  
total 1.1M
drwxrwxr-x 3 sckull sckull 4.0K mar  2 20:35 .
drwxrwxr-x 9 sckull sckull 4.0K mar  2 20:35 ..
drwxrwxr-x 2 sckull sckull 4.0K mar  2 20:35 fonts
-rw-rw-r-- 1 sckull sckull 1.1M mar  2 20:35 index.android.bundle
➜  assets touch index.html
➜  assets echo '<script src="./index.android.bundle"></script>' > index.html 
➜  assets

Aún con ello no logramos obtener información completa, unicamente vemos un array que contiene información de manera desordenada.

image

Aunque podemos decir que realiza algun tipo de solicitud POST con información JSON a una API, al dominio y ruta routerspace.htb/api/v4/, aunque la ruta completa es desconocida. En el caso de tener el fichero index.android.bundle.map podríamos tener el código mucho más entendible.

1
var _0x379495 = ['EwCVL', 'ugPGw', 'Router\x20is\x20', '-Bold', 'data', '30158095HXLvSs', 'post', 'eAgent', 'http://rou', '10BrHGoD', 'gray', '80%', 'applicatio', 'white', 'ck\x20your\x20in', 'ternet\x20con', 'tb/api/v4/', 'Please\x20pro', 'Image', 'XvhFJ', '2111347AIyazK', 'v/check/de', 'vide\x20an\x20IP', 'working\x20fi', 'DKyDg', 'YnNsf', 'tzoEq', 'EKNxl', 'the\x20server', 'log', 'ne!.', 'NunitoSans', 'OgZoU', 'TouchableO', '32457sfggQZ', 'nection.', '[\x20RESPOND\x20', 'center', 'createElem', '__esModule', 'per', 'mGNnc', 'then', 'catch', 'contain', 'uAiCt', 'bottom', '42740dmWhFN', 'Text', 'ButtonWrap', 'OLDvc', 'Sorry\x20!', 'terspace.h', 'n/json', 'StyleSheet', '/router/de', 'darkgray', 'JHvFI', 'transparen', 'UWIVj', 'Please\x20che', 'SZqEq', 'default', 'HrHYj', 'Hey\x20!', 'monitoring', 'StatusBar', 'error', '1013605BwxVJG', '[\x20DEBUG\x20]\x20', 'defineProp', 'gUnlE', 'Unable\x20to\x20', '25%', 'pacity', 'ButtonText', 'gKQYs', '1006000MsdmAT', 'handleSubm', 'PpdRl', 'shxxV', 'ent', 'View', 'erty', 'show', 'Formik', 'Check\x20Stat', '0.0.0.0', '128BJBUSC', '6BAxhAU', '4584186MTHGwP', 'connet\x20to\x20', 'vESlr', 'GHjuW', '\x20Address.', 'container', 'create', 'RouterSpac', 'viceAccess', '72dIvHGU', 'info'];

Si intentamos buscar la ruta de la API completa no es posible, ya que la API detecta como actividad sospechosa cada una de las solicitudes y retorna un numero aleatorio de caracteres y espacios en blanco, por lo que es casi imposible realizar algun tipo de filtro (tamaño, palabras, lineas) ya sea con feroxbuster o ffuf.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 π ~/htb/routerspace ❯ feroxbuster -u http://routerspace.htb/api/v4/ -w $CM

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.3.3
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://routerspace.htb/api/v4/
 🚀  Threads               │ 50
 📖  Wordlist              │ /usr/share/wordlists/dirb/common.txt
 👌  Status Codes          │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
 💥  Timeout (secs)7
 🦡  User-Agent            │ feroxbuster/2.3.3
 💉  Config File           │ /etc/feroxbuster/ferox-config.toml
 🔃  Recursion Depth       │ 4
 🎉  New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
WLD        5l       12w       71c Got 200 for http://routerspace.htb/api/v4/0b4efbf6fd57496ba7ece4b21523e74a (url length: 32)
WLD        5l       13w       79c Got 200 for http://routerspace.htb/api/v4/9c99d7fc34f648f78ff70bdaecc7b8345a3c6f69d0b9468dabcb3586295d3f4c6c7c4ea5135f458f8f5853b795b41ff0 (url length: 96)
200        7l       14w       79c http://routerspace.htb/api/v4/.config
200        1l       10w       64c http://routerspace.htb/api/v4/_files
200        7l       10w       70c http://routerspace.htb/api/v4/.bash_history
200        5l       15w       78c http://routerspace.htb/api/v4/.forward
200        1l       14w       72c http://routerspace.htb/api/v4/.hta
200        1l       12w       66c http://routerspace.htb/api/v4/.cvs
200        6l       11w       72c http://routerspace.htb/api/v4/.history
200        7l       12w       75c http://routerspace.htb/api/v4/.git/HEAD
200        2l       12w       66c http://routerspace.htb/api/v4/.htpasswd
200        1l       12w       75c http://routerspace.htb/api/v4/.bashrc
200        3l       12w       68c http://routerspace.htb/api/v4/.listing
200        1l       11w       62c http://routerspace.htb/api/v4/.cvsignore
200        1l       11w       76c http://routerspace.htb/api/v4/.listings
200        6l       11w       70c http://routerspace.htb/api/v4/.htaccess
200        5l       13w       79c http://routerspace.htb/api/v4/.cache
200        3l       15w       76c http://routerspace.htb/api/v4/.ssh
200        3l       13w       73c http://routerspace.htb/api/v4/_archive
200        1l       12w       70c http://routerspace.htb/api/v4/_assets
200        5l       10w       71c http://routerspace.htb/api/v4/.mysql_history
200        6l       13w       75c http://routerspace.htb/api/v4/.sh_history
200        4l       12w       72c http://routerspace.htb/api/v4/.svn
200        5l       12w       76c http://routerspace.htb/api/v4/_backup
200        2l       12w       76c http://routerspace.htb/api/v4/.rhosts
200        1l       11w       70c http://routerspace.htb/api/v4/.subversion
200        2l       13w       70c http://routerspace.htb/api/v4/_borders
200        1l       14w       72c http://routerspace.htb/api/v4/.svn/entries
200        5l       13w       84c http://routerspace.htb/api/v4/_baks
200        2l       14w       74c http://routerspace.htb/api/v4/_cache
200        7l       11w       73c http://routerspace.htb/api/v4/_adm
200        6l       12w       73c http://routerspace.htb/api/v4/_catalogs
200        6l       14w       75c http://routerspace.htb/api/v4/.swf
200        3l       14w       74c http://routerspace.htb/api/v4/.web
200        4l       12w       71c http://routerspace.htb/api/v4/_code
200        2l       10w       64c http://routerspace.htb/api/v4/_admin
200        3l       13w       74c http://routerspace.htb/api/v4/@
200        1l       13w       74c http://routerspace.htb/api/v4/_
200        5l       10w       71c http://routerspace.htb/api/v4/.perf
200        4l       13w       78c http://routerspace.htb/api/v4/_ajax
200        3l       13w       76c http://routerspace.htb/api/v4/.profile
200        1l       11w       67c http://routerspace.htb/api/v4/_common
200        5l       11w       67c http://routerspace.htb/api/v4/.passwd
200        1l       14w       77c http://routerspace.htb/api/v4/_conf
200        1l       11w       66c http://routerspace.htb/api/v4/_db_backups
200        7l       11w       68c http://routerspace.htb/api/v4/_data
200        4l       12w       76c http://routerspace.htb/api/v4/_database
200        1l       11w       70c http://routerspace.htb/api/v4/_css
200        4l       12w       73c http://routerspace.htb/api/v4/_dummy
200        1l       10w       66c http://routerspace.htb/api/v4/_derived
^C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 π ~/htb/routerspace ❯ curl -s http://routerspace.htb/api/v4/users
Suspicious activity detected !!! {RequestID:  G W Xq  K hIub v }


 π ~/htb/routerspace ❯ curl -s http://routerspace.htb/api/v4/users
Suspicious activity detected !!! {RequestID:   tc2  5   N3 nu g oK N 8wH }




 π ~/htb/routerspace ❯

React Decompiler

El comando react-native-decompiler nos muestra multiples archivos extraidos del fichero index.android.bundle, aunque no muestra el codigo entendible.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# npm install react-native-decompiler
# npx react-native-decompiler -i index.android.bundle -o output_routerspacebundle/
➜  assets ls output_routerspacebundle/
0.js    146.js  179.js   210.js  239.js   267.js   30.js    412.js   438.js   464.js  490.js   516.js   543.js   579.js  605.js  633.js  661.js  689.js  716.js
10.js   147.js  17.js    211.js  240.js   268.js   311.jsx  413.js   439.js   465.js  491.js   517.js   544.js   57.js   606.js  634.js  662.js  690.js  717.js
11.js   148.js  180.js   212.js  241.js   269.js   312.js   414.js   43.js    466.js  492.js   518.js   545.js   580.js  607.js  635.js  663.js  691.js  718.js
123.js  149.js  183.js   215.js  242.js   270.js   31.js    415.jsx  440.js   467.js  493.jsx  519.js   546.js   581.js  608.js  636.js  664.js  692.js  719.js
124.js  14.js   184.js   216.js  243.js   271.js   32.js    416.js   441.js   468.js  494.jsx  51.js    547.js   582.js  609.js  637.js  665.js  693.js  720.js
125.js  150.js  185.js   217.js  244.js   272.js   33.js    417.js   442.js   469.js  495.js   520.jsx  548.js   583.js  610.js  638.js  666.js  694.js  721.js
126.js  151.js  188.jsx  218.js  245.js   273.js   34.js    418.js   443.js   46.js   496.jsx  521.jsx  549.js   584.js  611.js  639.js  667.js  695.js  722.js
127.js  152.js  189.js   219.js  246.jsx  274.js   35.js    419.js   444.js   470.js  497.js   522.js   54.js    585.js  612.js  640.js  668.js  696.js  723.js
128.js  153.js  18.js    220.js  247.js   275.js   36.js    41.js    445.js   471.js  498.js   523.jsx  550.js   586.js  613.js  641.js  669.js  697.js  724.js
129.js  154.js  190.js   221.js  248.js   276.js   37.js    420.js   446.js   472.js  499.jsx  525.js   551.js   587.js  614.js  642.js  670.js  698.js  725.js
12.js   155.js  191.js   222.js  249.jsx  277.js   38.js    421.js   447.js   473.js  49.js    526.js   552.js   588.js  615.js  643.js  671.js  699.js  726.js
130.js  156.js  195.js   223.js  250.jsx  278.js   397.js   422.js   448.js   474.js  4.js     527.js   55.js    589.js  616.js  644.js  672.js  6.js    727.js
131.js  157.js  196.js   224.js  251.js   279.js   398.js   423.js   449.js   475.js  500.js   528.js   562.js   58.js   617.js  645.js  673.js  700.js  728.js
132.js  158.js  197.js   225.js  252.js   280.js   399.js   424.js   44.js    476.js  501.jsx  529.js   563.js   590.js  618.js  646.js  674.js  701.js  729.js
133.js  159.js  198.js   226.js  253.jsx  281.js   39.js    425.js   450.js   477.js  502.js   52.js    564.js   591.js  619.js  647.js  675.js  702.js  730.js
134.js  15.js   199.js   227.js  254.jsx  282.js   3.js     426.js   451.js   478.js  503.js   530.js   565.js   592.js  620.js  648.js  676.js  703.js  731.js
135.js  160.js  19.js    228.js  255.js   283.js   400.jsx  427.js   453.js   479.js  504.js   531.jsx  566.js   593.js  621.js  649.js  677.js  704.js  77.js
136.js  161.js  200.js   229.js  256.js   284.js   401.js   428.js   454.js   47.js   505.js   532.js   567.js   594.js  622.js  650.js  678.js  705.js  78.js
137.js  162.js  201.js   22.js   257.jsx  285.js   402.js   429.js   455.js   480.js  506.js   533.js   568.js   595.js  623.js  651.js  679.js  706.js  7.js
138.js  166.js  202.js   230.js  258.js   286.js   403.js   42.js    456.jsx  481.js  507.js   534.jsx  569.js   596.js  624.js  652.js  680.js  707.js  86.js
139.js  167.js  203.js   231.js  259.js   287.js   404.js   430.js   457.js   482.js  508.js   535.js   56.js    597.js  625.js  653.js  681.js  708.js  88.js
13.js   168.js  204.js   232.js  260.jsx  288.jsx  405.js   431.js   458.js   483.js  509.js   536.js   571.jsx  598.js  626.js  654.js  682.js  709.js  8.js
140.js  169.js  205.js   233.js  261.jsx  289.jsx  406.js   432.js   459.js   484.js  50.js    537.js   572.js   599.js  627.js  655.js  683.js  710.js  9.js
141.js  16.js   206.js   234.js  262.js   28.js    407.js   433.js   45.js    485.js  510.js   538.js   573.js   600.js  628.js  656.js  684.js  711.js  null.cache
142.js  170.js  207.js   235.js  263.js   290.jsx  408.js   434.js   460.js   486.js  511.js   539.js   574.js   601.js  629.js  657.js  685.js  712.js
143.js  171.js  208.js   236.js  264.js   291.jsx  409.js   435.js   461.js   487.js  512.jsx  53.js    575.js   602.js  630.js  658.js  686.js  713.js
144.js  177.js  209.js   237.js  265.js   292.js   40.js    436.js   462.js   488.js  513.jsx  540.js   577.js   603.js  631.js  659.js  687.js  714.js
145.js  178.js  20.js    238.js  266.js   293.js   410.js   437.js   463.js   48.js   514.js   542.js   578.js   604.js  632.js  660.js  688.js  715.js
➜  assets

Analisis Dinamico

Burpsuite

Configuramos burpsuite para capturar todo el trafico de la aplicación, en este caso la dirección de la interfaz vmnet8 o en el caso de dar algun problema de conexión en All interfaces.
image

Descargamos el certificado de burpsuite en la dirección y puerto a la escucha.
image

Genymotion

Descargamos el emulador Genymotion, y realizamos la instalación de este.

1
2
chmod +x genymotion-3.2.1-linux_x64.bin
./genymotion-3.2.1-linux_x64.bin

Iniciamos el emulador ejecutando el fichero genymotion en la carpeta de instalación o bien directamente desde el icono de ejecución.

1
2
3
4
5
➜  genymotion ls
completion        libEGL_translator.so            libGLES_V2_translator.so.1.0.0  libQt5Location.so.5            libQt5XcbQpa.so.5      plugins
[.. snip ..]
libdbus-1.so.3    libGLES_V2_translator.so.1.0    libQt5Gui.so.5                  libQt5Widgets.so.5             player
➜  genymotion ./genymotion

Tras registrar e ingresar con una cuenta, creamos un dispositivo. Utilizamos la versión 6 de Android (basado en certificate_unknown), como dispositivo el Google Nexus 5.
image

En la siguiente pantalla nos pide el Network Mode, en esta opción elegimos el adaptador al cual conectar nuestro dispositivo, en este caso el adaptador de VMWare al cual la máquina Kali está conectada y donde Burpsuite está a la escucha, en mi caso vmnet8.
image

Elegimos vmnet8 y damos a Install para crear el dispositivo virtual.
image

Al finalizar se mostrará un mensaje de instalación y el dispositivo listo.
image

Iniciamos el dispositivo con clic derecho > Start.
image

ADB

Genymotion en su carpeta de instalación contiene la herramienta adb la cual vamos a utilizar para comunicarnos con el dispositivo.

1
2
3
➜  genymotion ls tools/ 
aapt  adb  glewinfo  lib64
➜  genymotion

Certificado

Incialmente creamos la variable $adb con la dirección completa de adb, vemos que podemos listar los dispositivos, el nuestro en la lista.

1
2
3
4
5
6
7
8
➜  htb_routerspace export adb=$HOME/Downloads/genymotion/tools/adb
➜  htb_routerspace $adb devices
List of devices attached
192.168.56.104:5555     device

➜  htb_routerspace ls
cacert.der  RouterSpace.apk
➜  htb_routerspace

Para instalar el certificado cambiamos la extensión de este a .cer, y movemos el certificado a la carpeta sdcard/. Luego de ello creamos un PIN o Patron de bloqueo para el dispositivo.

1
2
3
4
➜  htb_routerspace mv cacert.der cacert.cer
➜  htb_routerspace $adb push cacert.cer sdcard/
cacert.cer: 1 file pushed. 0.1 MB/s (939 bytes in 0.013s)
➜  htb_routerspace

Finalmente en Configuraciones nos vamos a Security > Install from sdcard > Google Nexus 5 elegimos el certificado a instalar: cacert.cer, le damos un nombre, nos pedira ingresar el PIN o Patron de bloqueo.
image

Observamos en Trusted Credentials el certificado de Burpsuite.
image

Proxy

Finalmente configuramos el proxy en la configuración de Wifi.
image

Una alternativa para configurar el proxy utilizando adb.

1
2
3
4
5
#Enable proxy
$adb shell settings put global http_proxy 192.168.22.129:8080

#Disable proxy
$adb shell settings put global http_proxy :0

Tras configurar el Proxy vemos que podemos navegar por internet y capturar las peticiones con burpsuite.
image

RouterSpace

Instalamos la aplicación ejecutando $adb install RouterSpace.apk, vemos que la instalación fué exitosa.
image

La aplicación luego de la presentación muestra unicamente un boton.
image

Tras presionar el boton vemos que realiza una petición POST tipo json, con el atributo "ip" y la dirección "0.0.0.0" a la ruta de la API del dominio routerspace.htb, aunque no hay alguna respuesta ya que dicho dominio no está en el archivo /etc/hosts.
image

Command Injection

Tras agregar el dominio, vemos que la respuesta de la solicitud muestra la dirección "0.0.0.0".
image

Manipulando un poco la solicitud descubrimos que es posible inyectar comandos y vemos el resultado en la respuesta de la solicitud, en este caso id nos muestra el usuario y grupo paul.
image

User - Paul

Shell

Generamos una clave publica con ssh-keygen y la agregamos al archivo authorized_keys en /home/paul/.ssh.
image

Ingresamos por SSH logrando obtener una shell y la flag user.txt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 π ~/htb/routerspace ❯ ssh paul@routerspace.htb
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64)

[.. snip ..]
paul@routerspace:~$ whoami;id;pwd
paul
uid=1001(paul) gid=1001(paul) groups=1001(paul)
/home/paul
paul@routerspace:~$ ls
snap  user.txt
paul@routerspace:~$ cat user.txt
e796682e4394c54a68c1f793b98dfe78
paul@routerspace:~$

Privesc

Enumerando los ficheros suid vemos en la lista a sudo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
paul@routerspace:~$ find / -perm -4000 2>/dev/null | xargs ls -lah
-rwsr-sr-x 1 daemon daemon      55K Nov 12  2018 /usr/bin/at
-rwsr-xr-x 1 root   root        84K Jul 14  2021 /usr/bin/chfn
-rwsr-xr-x 1 root   root        52K Jul 14  2021 /usr/bin/chsh
-rwsr-xr-x 1 root   root        39K Mar  7  2020 /usr/bin/fusermount
-rwsr-xr-x 1 root   root        87K Jul 14  2021 /usr/bin/gpasswd
-rwsr-xr-x 1 root   root        55K Jul 21  2020 /usr/bin/mount
-rwsr-xr-x 1 root   root        44K Jul 14  2021 /usr/bin/newgrp
-rwsr-xr-x 1 root   root        67K Jul 14  2021 /usr/bin/passwd
-rwsr-xr-x 1 root   root        67K Jul 21  2020 /usr/bin/su
-rwsr-xr-x 1 root   root       163K Feb  3  2020 /usr/bin/sudo
-rwsr-xr-x 1 root   root        39K Jul 21  2020 /usr/bin/umount
-rwsr-xr-- 1 root   messagebus  51K Jun 11  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root   root        15K Jul  8  2019 /usr/lib/eject/dmcrypt-get-device
-rwsr-xr-x 1 root   root       463K Jul 23  2021 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root   root        23K May 26  2021 /usr/lib/policykit-1/polkit-agent-helper-1
paul@routerspace:~$

Tras verificar la version, observamos que es 1.8.31, vulnerable a CVE-2021-3156.

1
2
3
4
5
6
paul@routerspace:~$ /usr/bin/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:~$

Creamos los archivos necesarios para el CVE-2021-3156.

1
2
3
paul@routerspace:/dev/shm$ ls
exploit.c  Makefile  shellcode.c
paul@routerspace:/dev/shm$ 

Ejecutamos make y finalmente exploit, lo que nos dio una shell como root y la flag root.txt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
paul@routerspace:/dev/shm$ make
mkdir libnss_x
cc -O3 -shared -nostdlib -o libnss_x/x.so.2 shellcode.c
cc -O3 -o exploit exploit.c
paul@routerspace:/dev/shm$ ./exploit
# whoami;id
root
uid=0(root) gid=0(root) groups=0(root),1001(paul)
# cd /root
# ls
root.txt
# cat root.txt
e92e7e0e246b58e5cd99e00af92858c1
#
Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe