跨站脚本漏洞那些事(4)----应用场景篇(2)(仅供作为理解原理)

1.XSS键盘记录案例演示

       什么是跨域?

http://     www  .  xyz.com    :  8080    /   script/test.js

协议      子域名      主域名         端口          资源地址

当协议,主机(主域名,子域名),端口中的任意一个不相同时,称为不同域

不同域之间请求数据的操作,就是跨域

如下所示:  1:http://www.xyz.com:8080/script/test.js     端口不相同

                    2: http://www.xyz.com:8081/script/test.js

                    3:http://www.xyz.com:8080/script/test.js  子域名不相同

                    4: http://client.xyz.com:8080/ script/test.js

                     5:https://www.xyz.com:8080 /script/test.js  协议不同

                     6: http://www.xyz.com:8080/script/test.js

跨域:同源策略

         出于安全考虑,所有的浏览器都约定了“同源策略”,根据同源策略规定,两个不同域名之间 不能使用JS进行相互操作、例如:x.com域名下的javascript并不能操作y.com域下的对象。

如果想要进行跨域操作,需要管理员进行特殊的配置

例如通过:header("Access-Control-Allow-Origin:x.com")指定。

           为什么会需要同源策略?

试想一个场景1:A登录了淘宝,攻击者向A发送一个恶意链接urlb:http://www.盗你cookie.com

如果没有同源策略,那么:urlb上的JS可以操作A的内容(例如:获取cookie等)

有了同源策略,就限制了这种情况。

场景2: 一个恶意站点A上使用了<iframe src = "B站点登录页面">,发送该恶意urL到攻击对象,攻击对象登录后如果没有同源策略,则A上的JS可以获取B站点的登录信息。

实验演示如下:

嵌入JS代码:每次访问时远程调用JS代码,会进行键盘记录(部分代码如下:pikachu靶场)

运行跨域的设置

2:XSS盲打

不管3721,往里面插入XSS代码,然后等待,可能会有惊喜

由于是都断,可能安全考虑不太严格,当管理员登录时,就会被X。

输出:

分析:输入之后前端看不到输出,只有后台的管理员可以看,也就是管理员登录后台以后,后台的界面会把我们的输入进行输出。这种是不是就没问题?意味着后台的管理员会被X到。

模拟以管理员的身份登录后台:

这种危害很大:

攻击者可以在前端注入一段盗取cookie的js脚本,当管理员登录后台之后,攻击者可以直接把后台管理员的登录信息的cookie获取到,从而可以伪造管理员身份登录后台。(登录后台,权限比较大,可以做很多事情,获取更多的隐私信息)

3. *********XSS绕过*************

在实际的生产过程中,有很多系统或多或少的会去做一些安全措施,但是这些安全措施,有可能由于程序员的逻辑不是很严谨,导致这些安全措施只是起到了部分作用,但是还是可以被绕过的。

分析:

  1. 前端绕过:指的就是我们的安全措施不要再前端做,例如,在第一个反射型的XSS上面,输入的时候会受到限制,最多只能输入20个字符,但是20个字符,这个安全措施时通过前端标签的属性实现的,这个时很容易被绕过的。总结:前端只能辅助,实质性的安全措施是不能交给前端的。
  2. 大小混合:在后台对输入进行过滤的话,很多时候会有两种思路。第一种就是对你输入里面的内容进行正则匹配,发现不满足的条件的输入会被直接过滤掉。第二种对你输入的一整串内容用一些查找的函数进行查找,如果有的话也会被过滤。一般来说,正则是区分大小写的,如果过滤措施里面只对小写做了处理,我们可以通过大写或者大小写混写的这种输入来绕过措施,因为大小写混合的输入在输出到前端的时候,仍然会被正常的执行
  3. 拼凑,所谓拼凑是说后台的逻辑如果是对于里面的script标签去进行替换的话,但是一般的替换逻辑是,只会替换一次。
  4. 使用注释来进行干扰,

XSS绕过---过滤-----编码

演示如下:

提交之后,我们发现,刚才输入的script标签被干掉了,猜测,是否意味着后台对我们的输入的script标签进行了过滤呢?

查看源码

尝试利用大小写混合的方式进行绕过。

提交之后,如下图所示:

上图说明,后端只是对小写的script进行了过滤。

查看后端代码:

PHP里面提供的一个对特殊字符进行转义的函数

演示如下:

查看源码:

进行了编码:如上图所示:

发现单引号没有被处理(利用这点构造payload)

构造payload

********成功绕过:

后端源码:使用了默认的,并没有对单引号和双引号都做处理

建议是使用下图这个:

***************防范措施*************************

查看后端源码:

查看页面源码:

href里面做输出的话应该如何处理?

1:href里面一般是写超链接的,所以在输入的时候只允许

*************************************************

查看页面源码:

构造Payload

后端源码

参考:I春秋

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值