起因:突然觉得不该把人生全压在考研之上,毕竟万一没考上。。那就只能社招了,就当学点课外东西,休闲放松。
下面开始正题:
一.XSS由来:
我刚开始的时候很奇怪,为什么叫XSS,因为跨站脚本攻击英文是Cross Site Script,那不应该是CSS吗,后来查了一下是为了和三剑客(HTML,CSS,JS)里的CSS相互区别,所以就叫XSS了。
顾名思义:在web安全里,XSS通常是通过网页标记语言(通常是HTML)注入修改了网页,插入脚本,破坏原有正常的功能。可能是只能搞自己当前的网页,也可能是可以攻击所有用户的,举个例子:比如一个能提交评论没有做任何安全措施的网站,当一个用户上传了一个恶意的脚本作为评论并且通过服务端,其他任何用户都可以加载这个评论,在加载这个评论时候,就执行了这个恶意的脚本。导致所有用户都。。你懂得。
二.前置技能:
1.扎实的JavaScript功底,还会一些像隐式转换这种的,基本上是用最短的JS,实现最多的功能那种。
2.当然还要对Web间的各种数据交互,开发过程有一定的了解。
3.脑洞。脑洞一定要大。
三.XSS分类:
根据效果分大致可以分成两类:
1.反射型:
说定义就不说了,举个例子,就是需要把用户的数据反射给浏览器,一般可以放一个钓鱼网站让别人来点,从而获取一些数据。显然这个东西是Non-persistent的。
其中有一个特殊的,经常被单独讨论,叫做基于DOM的XSS攻击。
JS学的不错的话应该知道什么意思了,就是修改DOM节点的XSS攻击。
2.存储型:
这种顾名思义,就是把攻击脚本存到服务器去,让他人在无意中浏览这段脚本时候被攻击到。这种显然比上种来说是persistent的。
四.攻击角度:
1.登陆凭证劫持攻击:
原理
做过网站的应该都知道,我们与后台交互一般都是使用一个凭证的,这个凭证,可能是cookie中保存的,可能是storage存的,也可能是放在header里的一个token令牌,如果没有作额外的校验的话,外人一旦得到这个token,是可以直接绕开登陆这个过程进入用户操作的。
具体
凭证具体在哪,在控制台打出这个就有了,拿百度举例。
怎么用得到的cookie登陆
向请求的地方把cookie替换,然后会返回对应HTML代码,将这个代码复制到本地打开即可。
如何预防
常用做法用HttpOnly,还有的和IP绑定等等操作。
被上述预防之后还能这个劫持还有意义吗
这个问题其实是肯定的。。矛盾在马克思主义唯物辩证法下可是发展的动力啊。。就算我不能直接用这个凭证绕过登陆,我就不能直接用请求去操作吗?用过postman做开发接口测试的人应该都懂。。只要构造一个适当的请求,还是可以进行一些操作的,比如举个简单的例子:
假设我已经获得了一个人QQ邮箱的凭证,我可以先用自己的邮箱删除一个邮件,在Chrome的控制台的Network里看到发请求的各种操作。
然后用postman还是自己写JS还是别的什么工具都无所谓,直接把凭证替换,构造对应的参数就可以删掉了。
也许有人会说,那怎么要删的邮件id呢。。
这个其实也简单。。正常登陆进去,邮件id也是前端发请求,后台发给前端的,我们之间可以通过构造这个请求获取到一系列的邮件id。。甚至可以用查看邮件详情的接口,获取到对应的邮件内容,从而窃取相关内容。
当然了,实际不是那么简单的这是理想化的状态。
这篇就这么多了,下次有机会继续。