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绕过*************
在实际的生产过程中,有很多系统或多或少的会去做一些安全措施,但是这些安全措施,有可能由于程序员的逻辑不是很严谨,导致这些安全措施只是起到了部分作用,但是还是可以被绕过的。
分析:
- 前端绕过:指的就是我们的安全措施不要再前端做,例如,在第一个反射型的XSS上面,输入的时候会受到限制,最多只能输入20个字符,但是20个字符,这个安全措施时通过前端标签的属性实现的,这个时很容易被绕过的。总结:前端只能辅助,实质性的安全措施是不能交给前端的。
- 大小混合:在后台对输入进行过滤的话,很多时候会有两种思路。第一种就是对你输入里面的内容进行正则匹配,发现不满足的条件的输入会被直接过滤掉。第二种对你输入的一整串内容用一些查找的函数进行查找,如果有的话也会被过滤。一般来说,正则是区分大小写的,如果过滤措施里面只对小写做了处理,我们可以通过大写或者大小写混写的这种输入来绕过措施,因为大小写混合的输入在输出到前端的时候,仍然会被正常的执行
- 拼凑,所谓拼凑是说后台的逻辑如果是对于里面的script标签去进行替换的话,但是一般的替换逻辑是,只会替换一次。
- 使用注释来进行干扰,
XSS绕过---过滤-----编码
演示如下:
提交之后,我们发现,刚才输入的script标签被干掉了,猜测,是否意味着后台对我们的输入的script标签进行了过滤呢?
查看源码
尝试利用大小写混合的方式进行绕过。
提交之后,如下图所示:
上图说明,后端只是对小写的script进行了过滤。
查看后端代码:
PHP里面提供的一个对特殊字符进行转义的函数
演示如下:
查看源码:
进行了编码:如上图所示:
发现单引号没有被处理(利用这点构造payload)
构造payload
********成功绕过:
后端源码:使用了默认的,并没有对单引号和双引号都做处理
建议是使用下图这个:
***************防范措施*************************
查看后端源码:
查看页面源码:
href里面做输出的话应该如何处理?
1:href里面一般是写超链接的,所以在输入的时候只允许
*************************************************
查看页面源码:
构造Payload
后端源码
参考:I春秋