xss漏洞的认知

**

xss漏洞的认知

**

XSS

同源策略

javaScript中的同源,需要对比 两者中的协议、域名、端口。三者完全相同才认为是同源的,否则即是来自不同源的内容。

Xss概念

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
用户提交的数据没有过滤,或者过滤不严格,输出到网页中 ,导致可以构造执行JS代码,或者修改网页内容。

Xss危害

•盗取用户或者管理员的Cookie
• XSS Worm
• 挂马(水坑攻击)
• 有局限性的键盘记录

Xss分类

• 反射型
非持久型XSS。XSS代码出现在URL参数或者请求中,浏览器发出请求时,参数值作为输入提交到服务器,服务器接受处理后参数值出现在响应的HTML中,最后浏览器解析执行了这段XSS代码。
• 存储型
又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。
• DOM
与反射型XSS和存储型XSS的差别是在于DOM XSS的代码不需要服务器解析响应的直接参与,触发XSS靠的是浏览器DOM解析器的解析,可以完全认为是客户端的事情。
• flash
利用的是网页上flash文件缺陷来执行js脚本,一般是反射型xss

Xss输出点位置

• 输出在标签外:需要可以构造标签
• 输出到标签中
如果输出在"双引号或者’单引号内部,需要能够闭合引号,如果不能
闭合引号,看能否在当前的标签属性中执行js代码
如果没有输出在"双引号或者’单引号内部,或者可以闭合引号,可以构造新属性,使用新的属性的值来执行JS代码,如事件属性

• 输出到Script标签中
@ 如果输出在"双引号或者’单引号内部,需要能够闭合引号,
@ 如果不能闭合引号,需要看当前变量能不能innerHTML或者document.write,插入到网页中,如果可以就可以构造XSS,如果没有,就不存在XSS(引号内部可以使用unicode编码, < 不能编码)
@ 如果输出"双引号或者’单引号内部,需要能够闭合引号,如果可以闭合引号,就可以直接传递进去js代码,使用注释符号,注释掉后面的js代码就可以构造XSS

Xss输出点位置
• 基于黑名单的过滤和基于白名单的过滤。
• 在cookie中加入httponly属性可以在一定程度上保护用户的cookie,减
少出现XSS时损失
• (1,apache2.2.x;2.注册网站,把攻击者自己的加了httponly的cookie
复制过去,补全信息)
• Flash XSS的修复需要对相应的flash进行修改或升级替换。

常用编码

URL编码:一个百分号和该字符的ASCII编码所对应的2位十六进制数字。

%23 . %2e + %2b ! %21
< %3c > %3e 空格 %20 & %26
( %28 ) %29 “ %22 ‘ %27

HTML编码
HTML实体编码:&开头,分号结尾 如“<”编码为“<”
HTML10进制: “<”编码为<
HTML16进制: “<”编码为<
JavaScript编码:js提供了四种字符编码的策略
1、三个八进制数,如果不够个数,前面补0,例如“<”编码为“\074”
2、两个十六进制数,如果不够个数,前面补0,例如“<”编码为“\x3c”
3、四个十六进制数,如果不够个数,前面补0,例如“<”编码为“\u003c”
4、对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)

xss漏洞测试方式

在<>中。xss漏洞如果输出在单引号或者双引号内需要能够闭合引号,如果不能闭合引号,就需要看能否在当前的标签中中执行js代码如果不能就不存在xss漏洞
列子:如果单引号被过滤了就试着直接进行js弹窗alert(1)如果不能执行js就不存在xss
用’去闭合能闭合就构造一个属性因为是input构造一个onfocus焦点的属性值后面加上js代码=‘alert(1)如果想自动获焦加上autofocus 12345’ autofocus οnfοcus='alert(1)
鼠标滑过:111’οnmοuseοver='alert(111)
方法二:单引号或者双引号被过滤使用<>判断使用unicode编码,八进制和十六进制都可以 注:<>在unicode不能转
弹窗的第二种方法: < img src=1 οnerrοr=alert()>
弹窗的第三种方法:< a href=“javascript:alert(1)”>click
先用’判断能否闭合. '能闭合就把value属性中的值进一步提升,让存在于input标签中通过js代码检测是否存在xss
对于多余标签的闭合使用//去注释掉 注: ’ or 1 #
$request既可以接受get也可以接受post传来的值
html实体编码:
支持十进制,十六进制和jsunicode
javascript(伪协议):
支持jsunicode,js八进制和就是十六进制
eval(),setTimeout(),setInterval()以上都是会将字符串当做js代码执行的函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值