Javascript注入技巧


Posted in Javascript onJune 22, 2007

作者: kostis90gr
翻译: 黯魂[S.S.T]
本文已发表于《黑客防线》6月刊,版权属于《黑客防线》及脚本安全小组,转载请保持文章完整性,谢谢 :)

这份指南仅仅是出于报告目的,如果任何人把它用于违法目的,我不负责任.

通过使用javascript注入,用户不用关闭网站或者把页面保存在他的PC上就可以改变网站中的内容.这是由他的浏览器的地址栏完成的.

命令的语法看上去像这样:

Copy code
javascrit:alert(#command#)

比方说如果你想看到在网站http://www.example.com里面的一个警告框,那么首先在地址栏输入URL(www.example.com),当页面加载完之后,清空URL并输入javascrit:alert("Hello World")作为一个新的URL.这样将弹出一个警告框显示Hello World.可是,一些人会用这个技巧改变页面内的几乎任何内容.例如一个图片.让我们设想有一个网站的logo图片.通过查看页面源代码(可以使用浏览器中的"查看源代码"做到),我们发现一句HTML代码:

Copy code
<IMG Name="hi" src="hello.gif">

得到信息:有一个图片被命名为hi,且源文件为hello.gif.我们想要改变它为bye.jpeg并存储到我们的站点http://www.mysite.com上.所以我们的图片的完整URL是http://www.mysite.com/bye.jpeg 要使用javascript注入,我们需要在地址栏中输入:

Copy code
javascript:alert(document.hi.src="[url]http://www.mysite.com/bye.jpeg"[/url])

你将看到一个提示框说http://www.mysite.com/bye.jpeg,并且在那之后图片将会被改变.注意虽然那些变化只是暂时的!如果你刷新页面或者再次进入,你造成的变化将丢失,因为你改变的不是服务器上的站点,而是你PC上的.

使用同样的方法,我们可以查看或改变变量的值.比如我们在网站中找到这样一些源代码:

Copy code
<SCRIPT LANGUAGE="JavaScript"> 
var a="test" 
</SCRIPT>

意思是给变量a赋值test.为了查看变量的值,我们将输入:

Copy code
javascript:alert(a)

然后为了把它从test改为hello,则输入:

Copy code
javascript:alert(a="hello")

但是javascript注入主要用来改变表单的属性.下面是我们已有的部分代码:

Copy code
<form name="format" action="send.php" method="post"> 
<input type="hidden" name="mail" value="[email]someone@somewhere.com[/email]"> 
<input type="text" name="name"> 
<input type="submit" value="submit"></form>

我们想要表单发送到我们的邮箱,而不是代码中的邮箱someone@somewhere.com,这个想法可以被这个命令完成:

Copy code
javascript:alert(document.format.mail.value="[email]me@hacker.com[/email]")

到现在你已经知道我总是按层次来讲述,下面我们就从大到小开始:
1)从document开始
2)输入我们想要改变的对象名(比如document.hi.src)或者它所属的属性并且重新赋值(比如document.format.mail.value)
3)最后结束于我们想要改变的特征(比如源路径:document.hi.src,或者变量值:document.format.mail.value)
4)用"."号分隔单词.
5)当我们想要改变特征值的时候,使用"="号和新的特征值.
*注意:当新的特征值为字符串时需要使用双引号""括起来(比如:document.format.mail.value="me@hacker.com")如果我们想要把它变为一个变量的值,则不需要使用双引号"".比如我们想改变变量a的值,使其等于变量b的值,会输入javascript:alert(a=b).

但是,大多数页面中的属性都没有名字,例如:

Copy code
<form action="send.php" method="post"> 
<input type="hidden" name="mail" value="[email]someone@somewhere.com[/email]"> 
<input type="text" name="name"> 
<input type="submit" value="submit"></form>

在这个代码中,表单没有名字.利用上面的所有信息,命令可能看上去像这样:

Copy code
javascript:alert(document. .mail.value="[email]me@hacker.com[/email]")

在这种情况下我们将不得不计算所有的表单来发现这个表单的序号.我会用一个例子来讲解:

<form action="send.php" method="post">  
<input type="text" name="name">  
<input type="submit" value="submit"></form>  
<form action="send.php" method="post">  
<input type="hidden" name="mail" value="someone@somewhere.com">  
<input type="text" name="name">  
<input type="submit" value="submit"></form>  
<form action="send.php" method="post">  
<input type="text" name="name">  
<input type="submit" value="submit"></form>

在以上代码中我们看见了3个表单,但是我们只对第二个感兴趣.因此我们想要的表单序号就是2.千万别忘记我们是从1开始计算的,我们说1,2,3,4...但是在javascript中却是从0开始计算的.它是0,1,2,3...所以真正的表单序号是1,不是2.通常我们要先找到表单序号再减一.

我们将用这个序号来补全我们的命令:

javascript:alert(document.forms[1].mail.value="me@hacker.com")

像这样,你就能改变没有名字的图片或者链接了.
对于图片:

javascript:alert(document.images[3].src="#你想改变的目标图片URL#") 

对于链接: 
javascript:alert(document.links[0].href="http://www.undug.net/#你想改变的目标链接#")

最后,我们可以用这个技巧编辑cookies.

下面的命令由triviasecurity.net的Dr_aMado所编写,但是我修改了一点以至于在用户编辑它之前就能显示cookie.你只需要复制它们到地址栏:

javascript:alert(window.c=functiona(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length);c=c.substring(1,((c.indexOf(";")>-1)?c.indexOf(";") :c.length));nc=unescape(c).replace(v,nv);document.cookie=n+"="+escape(nc);return unescape(document.cookie);});alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),prompt("Change this value:",""),prompt("with this:","")));

作为结束,我必须强调我们所做的改变仅仅是在用户端!就像是把网站保存在了你的PC上,然后修改它.尽管如此,使用这个技巧你仍然可以欺骗一个页面(例如cookies)或者通过一个页面的安全验证.例如一些页面会检测用户从哪发送的数据.如果数据从http://www.test.com/form.php发送到http://www.test.com/check.php,check.php可能会检测数据是否是从http://www.test.com/form.php上的表单发送的.除此之外,如果你打算登录一个页面中你自己的javascript代码,通过使用一些像这样的技巧,你将能够改变类似不变的图片!可是你需要用到比这里讲到的更深层次的知识.

要是有任何问题和建议,请发邮件给我:kostis90gr@gmail.com

Javascript 相关文章推荐
window.dialogArguments 使用说明
Apr 11 Javascript
ko knockoutjs动态属性绑定技巧应用
Nov 14 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
javascript瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
如何基于JavaScript判断图片是否加载完成
Dec 28 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
Stop SQL Server
Jun 21 #Javascript
用jscript启动sqlserver
Jun 21 #Javascript
List all the Databases on a SQL Server
Jun 21 #Javascript
Display SQL Server Version Information
Jun 21 #Javascript
Display SQL Server Login Mode
Jun 21 #Javascript
List the Stored Procedures in a SQL Server database
Jun 20 #Javascript
用jscript实现列出安装的软件列表
Jun 18 #Javascript
You might like
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
python 整数越界问题详解
2019/06/27 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
python开发入门——列表生成式
2020/09/03 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
运动会表扬稿大全
2014/01/16 职场文书
我的老师教学反思
2014/05/01 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
六五普法学习心得体会
2016/01/21 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android