js注入 黑客之路必备!


Posted in Javascript onSeptember 14, 2016

最近刚出了新闻,阿里四名网络安全部门员工利用网页漏洞写js脚本抢月饼,于是兴致来了,想了解一下这个js脚本到底怎么写,各种刷单各种抢枪抢又是怎么实现的。 

什么是javascript注入攻击?

1.每当接受用户输入的内容并重新显示这些内容时,网站就很容易遭受 JavaScript 注入攻击。让我们研究一个容易遭受 JavaScript 注入攻击的具体应用程序。假设已经创建了一个客户反馈网站。客户可以访问网站并输入对产品的反馈信息。当客户提交反馈时,反馈信息重新显示在反馈页面上。
客户反馈网站是一个简单的网站。不幸的是,此网站容易遭受 JavaScript 注入攻击。
假设正在将以下文本输入到客户反馈表单中: 

<script>alert(“Attack!”)</script> 

此文本表示显示警告消息框的 JavaScript 脚本。在某人将此脚本提交到客户反馈表单后,消息Attack! 会在将来任何人访问客户反馈网站时显示。

2.还有一种就是在浏览器地址栏中输入一段js代码,用来改变页面js变量、页面标签的内容。 

使用Javascript注入,用户不需要关闭或保存网页就可以改变其内容,这是在浏览器的地址栏上完成的。命令的语法如下: 

javascript:alert(#command#)

例如,如果你想在http://www.example.com站点上看到一个alert警告框,那么首先在地址栏上输入URL并等待页面加载完成,然后删掉URL并输入: 

javascript:alert("Hello World")

作为新的URL。这将弹出一个“Hello World”警告框,使用这一技术几乎可以改变网页的任何内容,例如一张图片。假设有一张网站logo图片,我们通过查看页面源文件找到其中一段HTML代码: 

<IMG Name="hi" SRC="hello.gif">

图片被命名为“hi”,源文件是“hello.gif”,我们想要把它改成存储在我们站点(http://www.mysite.com)上的 “bye.jpeg”文件,因此图片完整的URL地址是http://www.mysite.com/bye.jpeg,使用Javascript注入, 我们只需要在地址栏上输入: 

javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg")

你将会看到弹出“http://www.mysite.com/bye.jpeg”alert警告,然后图片就被更改了。需要注意的是,这些更改只是暂时的!如果你刷新页面或者重新进入,你的更改将会消失,因为你只是在你的PC作了这些更改,而不是在网页服务器上。

使用同样的方法我们可以查看或更改变量的值,例如我们在网页上找到一段这样的代码: 

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

意思是变量a的值为“test”,现在我们输入: 

javascript:alert(a) 

然后我们将其值改为“hello”: 

javascript:alert(a="hello")

Javascript注入通常被用来更改表单属性,假设有一段这样的代码: 

<form name="format" 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>

我们想让表单发送到我们的邮箱,而不是someone@somewhere.com。可以使用如下命令: 

javascript:alert(document.format.mail.value="me@hacker.com")

•也许你已经注意到了这些命令的层次关系:
 •我们按照从左到右的顺序依次说明:
 •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")需要用双引号把它括起来。
 •如果我们想要把它作为一个变量的值,则不需要使用双引号""。例如我们想要将变量b的值赋予变量a,我们可以输入javascript:alert(a=b)。
 •但是,页面中的大部分标签都没有名字,比如: 

<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>

在这段代码中没有表单名,综合上面这些信息,可以使用此命令: 

javascript:alert(document. .mail.value="me@hacker.com")

在这种情况下我们必须统计并找出表单序号,下面是一个例子: 

<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")

•这样你就可以更改没有名字的图片或链接了,你可以把“forms”换成任何你想要的标签类型。对于图片就是 

javascript:alert(document.images[3].src="#the url of the picture you want#")

对于链接就是 

javascript:alert(document.links[0].href="#the url you want#")

 最后,我们可以用这个技巧来编辑cookies。下面的命令由triviasecurity.net的Dr_aMado编写,我只修改了一点点,让它在用户编辑之前显示出来。你只要把它们复制到地址栏就可以了:

javascript:alert(window.c=function a(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:","")))

//如果你想要手动更改你的cookie,可以使用下面这条命令:

javascript:alert(document.cookie)

这将显示你的当前cookie,假设是“userid=1”,如果你想把它改成“userid=2”,可以使用下列命令:

javascript:alert(document.cookie="userid=2")

最后我必须强调的是,所有的更改都只是在客户端!就像是把网页保存在你的PC上然后修改它。尽管如此,使用这一技巧你仍然可以欺骗页面(例如cookies)或绕过安全验证。例如一些网页会检测用户发送数据的位置,如果从http://www.test.com/form.php发送数据到http://www.test.com/check.php,check.php可能会检测数据是否来自http: //www.test.com/form.php上的表单。除此之外,如果你打算在页面中输入你自己的JavaScript代码,通过使用一些这样的技巧,你将能够更改图片并保持不变!

最后的最后,既然js注入这么可怕,我们自己写的网站有什么解决办法来防止js注入呢? 

方法一:

阻止 JavaScript 注入攻击的一种简单方法是重新在视图中显示数据时,用 HTML 编码任何网站用户输入的数据
如:<%=Html.Encode(feedback.Message)%>
使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 < 和 > 被替换为 HTML 实体,如 < 和 >。所以,当使用 HTML 编码字符串 <script>alert("Boo!")</script> 时,它将转换为 <script>alert("Attack!")</script>。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面。 

方法二:

除了在视图中显示数据时使用 HTML 编码数据,还可以在将数据提交到数据库之前使用 HTML 编码数据。 

StringEscapeUtils.escapeHtml("前台提交的数据"); 

通常,人们喜欢使用本教程中讨论的第一种方法,而不喜欢使用第二种方法。第二种方法的问题在于在数据库中最终会保留 HTML 编码的数据。换言之,数据库中的数据会包含奇怪的字符。这有什么坏处呢?如果需要用除网页以外的形式显示数据库数据,则将遇到问题。例如,不能轻易在 Windows Forms 应用程序中显示数据。

感谢网友分享:http://zxf-noimp.iteye.com/blog/1130771

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
jQuery实现列表的全选功能
Mar 18 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
AngularJS 模块化详解及实例代码
Sep 14 #Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 #Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 #Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 #Javascript
AngularJS 中的Promise --- $q服务详解
Sep 14 #Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 #Javascript
AngularJS equal比较对象实例详解
Sep 14 #Javascript
You might like
解析thinkphp基本配置 convention.php
2013/06/18 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
详解使用nvm安装node.js
2017/07/18 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Python3简单实例计算同花的概率代码
2017/12/06 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
问卷调查计划书
2014/01/10 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
倡议书范文格式
2014/05/12 职场文书
化学教育专业自荐信
2014/07/04 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
学生检讨书
2015/01/27 职场文书
暑假生活随笔
2015/08/15 职场文书
vue实现滑动解锁功能
2022/03/03 Vue.js
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库