加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

“黑客”必学攻击之“跨站脚本攻击”

发布时间:2018-12-15 04:47:39 所属栏目:评论 来源:信息安全我来讲你来听
导读:最近很多小伙伴们看了我的文章给我私信说能不能讲讲跨站脚本攻击技术,今天就以本篇文章详细讲解一下黑客常用的攻击手法跨站脚本攻击。 一、 什么是跨站脚本攻击? 官方定义:(Cross Site Scripting),为了不和(Cascading Style Sheets, )的缩写混淆,故将

其中1.js源码如下:

  1. window.open("http://admin:admin@192.168.1.1/userRpm/ChangeLoginPwdRpm.htm?oldname=admin&oldpassword=admin&newname=administrator&newpassword=password&newpassword2=password&Save=%B1%A3+%B4%E6"); 

下面我们试着用登陆,结果如图所示:

“黑客”必学攻击之“跨站脚本攻击”

可见密码已经修改成功!

七、如何防御"跨站脚本攻击"

防御XSS有一个原则:

宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区分数据和代码

既然是将数据给注入到代码里面变成可执行代码,那么我们就找出所有可能的地方,绝大多数XSS发生在MVC模式里面View层。

我们来看看过程:

“黑客”必学攻击之“跨站脚本攻击”

其中:A B C D E F 标记的地方则代表可能会产生XSS

我们分不同上下文来进行不同的编码函数,就可以很肯定的断绝在这些地方产生XSS,只要情况不特殊(特殊如:宽字节 base64编码等),就一定可以保证安全。

A: 后端》》》CSS

输出到CSS通常不会出现什么XSS,但是如果CSS里面有可能的用户完全可以控制的变量,如果我可以自定义 style 属性而且没过滤,或者可以直接控制某段CSS。

  1. <p style="background-image: url(javascript:alert(/xss/));">//同理<style>#id { background-image: url(javascript:alert(/xss/));}</style> 

这样就可以利用伪协议来实现。

解决方法:

对style属性里面的数据进行严格的检查,并且对于用户输出到xss里面的内容进行适当的CSS编码。

B: 后端》》》》Javascript

这种直接输出的js又不过滤简直就是老掉牙的xss漏洞。

  1. var x =""; 
  2. //如果假设用户可以控制x变量 
  3. //那么我输入 ";alert(/xss/);// 
  4. //那么这串代码会变成 
  5. var x ="";alert(/xss/);//"; //红色部分是用户输入的字符 
  6. //成功弹出 提示框,执行了额外的代码 

当然还有一堆方法实现各种xss,各种姿势。所以这种是最最最简单的xss也是最容易被利用的。

解决方法:

对其进行严格的JavascriptEncode,将某些字符转义,如 " 变成 " ,' 变成 ' 等等(不止这些) 防止用户逃脱你的 双(单)引号,也可以防止其他姿势注入。

C: Javascript》》》生成HTML元素或添加html元素属性

如 js 给

  1. <div> 

添加height 属性 变成

  1. <div height="200px"> 

对于这个时候,从js输出数据到属性或 innerHTML/document.write 等函数生成任何元素,都要视为一次可能的XSS输出。因为上下文已经不一样了,这次JavascriptEncode是不对的。否则你只能保证数据在js里面不会被注入,而在html的话,就不一定了。

解决方法:

应该使用 HTMLEncode 编码,保证你从js输出到HTML的元素和属性不会脱离你的控制。

D: Javascript》》》输出到HTML元素里面的事件 或其他任何动态执行js的地方

列如下列一段代码,如果foo是从js执行之后动态输出到html里面的。foo是用户可以控制的。

  1. <script>document.write("<img onload=' " + var + " '>");</script><img onload='alert("var");'> 

“黑客”必学攻击之“跨站脚本攻击”那么我完全可以跟上次一样,输入 ";alert(/xss/);//, 即使你第一次从后端到js使用了一次jsEncode,但是很遗憾,输出到html事件(write函数)后代码会转义回来,所以我依然执行了。

则会变成:

  1. <img onload='alert("";alert(/xss/);//");'> 

“黑客”必学攻击之“跨站脚本攻击”可以看见,当你加载完毕之后,恭喜执行我的恶意代码。

解决方案:

使用 JavascriptEncode,对事件里面的js代码进行编码。这里也必须视为一次可能的XSS输出。

E:后端 》》》》输出到HTML元素里面的事件 或其他任何动态执行js的地方

列简直可以视为跟D是一模一样的,所以你只需要理解D情况,那么这个也就自然可以理解了。

  1. <img onload='var'> 

“黑客”必学攻击之“跨站脚本攻击”如果var是后端直接未经过处理输出,则输入 ';alert(/xss/);// 则触发XSS

解决方法:

也是对var进行JavascriptEncode。

F:后端 》》》》生成HTML元素或添加html元素属性

与C情况也是一模一样。只是输出源不同了而已,原理模式都一样。

  1. <div> 
  2. $var 
  3. </div> 

如果$var是后端输出的,那么我可以输入

  1. <script>alert(/xss/)</script> 

“黑客”必学攻击之“跨站脚本攻击”

  1. <img scr='' onerror='alert(/xss/)'> 

总之这样很容易注入XSS。

解决方法:

对var变量进行HtmlEncode,那么我就无论如何也构建不了<>任何元素了。也就不可能有

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读