一、XSS跨站脚本攻击简介
什么是XSS
XSS 又叫 CSS,全称跨站脚本攻击。它是指攻击者往 web 页面或 url 里插入恶意 JavaScript 脚本代码且应用程序对用户输入的内容没有过滤,那么当正常用户浏览该页面时,嵌入在 web 页面的恶意 JavaScript 脚本代码会被执行,从而达到恶意攻击正常用户的目的。
漏洞位置
数据交互与输出的地方,比如:输入框、URL等。
触发条件
漏洞产生的两个条件:
-
用户可以控制的输入点
-
输入能返回到前端的页面上被浏览器当成脚本语言解析执行
XSS大致分类
-
反射型XSS:它是非持久型,也叫一次性 XSS,参数型的跨站脚本
-
存储型XSS:它是将脚本代码写进数据库可以永久保存数据,危害最大
-
DOM型XSS:与反射性相似,但是 DOM 是树形结构,利用 DOM 标签
XSS危害
获取用户 cookie、键盘记录、xss gets hell、刷流量,执行弹窗广告、传播蠕虫病毒。
二、环境搭建
Pikachu:https://github.com/zhuifengshaonianhanlu/pikachu/archive/refs/heads/master.zip
在线环境:https://xss.haozi.me
三、漏洞利用
3.1、反射型XSS
- 反射型XSS:它是非持久型,也叫一次性 XSS,参数型的跨站脚本
进入测试平台 pikachu,选择 Cross-Site Scripting -> 反射型xss(get)。
在输入框输入 xss111,然后查看源代码发现直接将我们输入的数据插入进前端。
那么我们输入 JavaScript 的弹框语句。
<script>alert(/xss/)</script>
注:这里需要 F12 将 maxlength="20" 修改为 maxlength="100" 不然只能输入 20 个字符。
这时再次查看源代码,可以看到已经将我们的恶意语句插入前端所以导致了 XSS 漏洞。
当然单单弹框肯定是没用的,我们还可以将 Cookie 弹出。
<script>alert(document.cookie)</script>
此时就已经将当前 Cookie 以弹框的方式显示出来了,但现在有个问题作为攻击者现在弹出的 Cookie 是自己的用户也没用啊又不是其他用户的。
别着急后面会写到利用 XSS 平台获取其他用户的 Cookie。
3.2、存储型XSS
- 存储型XSS:它是将脚本代码写进数据库可以永久保存数据,危害最大
进入测试平台 pikachu,选择 Cross-Site Scripting -> 存储型xss。
在留言板输入 XssTest,可以看到下方会将我们输入的内容显示。
这个数据是会一直保留在数据库中,每次我们加载这个页面时数据库都会将这个 XssTest 给输出到留言列表中。
那么就可以将 JavaScript 代码插入到数据库中,这样每次加载页面都会将数据库的内容提取出来并输出。
<script>alert(/xss/)</script>
3.3、DOM型XSS
- DOM型XSS:与反射性相似,但是 DOM 是树形结构,利用 DOM 标签
进入测试平台 pikachu,选择 Cross-Site Scripting -> DOM型xss。
既然 DOM 型和 HTML 有关系,那么查看源代码找到相应的位置。
黄色框框分别对应的是输入框和按钮的代码,在红色框框的 JavaScript 代码中 str 变量 GET 接收了一个 text 名的数据也就是我们输入框输入的数据,然后会将我们输入的数据放入 HTML 的 A 标签中。那么我们只需要将 A 标签去进行一个闭合就会导致 XSS 的产生。
这里将 HTML的 A 标签单独复制出来构造 XSS 语句: "<a href='"+str+"'>what do you see?</a>"
"<a href=''><img src="#" onmouseover="alert('xss')">'>what do you see?</a>"
最终构造的 XSS 语句为:
'><img src="#" onmouseover="alert('xss')">
3.4、搭建XSS平台接收Cookie
(1)搭建XSS平台
下载地址:mirrors / trysec / bluelotus_xssreceiver · GitCode
将下载的压缩包解压到网站根目录下,这里我解压到 WWW\XSS_platform 下。
启动 Apache 服务。
访问浏览器本地 XSS_platform 目录进行安装。
这里的配置和密码根据自己的情况去设定。
设置完成后提交。
访问后台 http://192.168.2.6/XSS_platform/login.php 进行登录。
登录后点击 "我的JS" 新建一个接收 cookie 的 js,插入 default 模板。
修改模板内容中的 website 变量值。
这样子就搭建完成了。
(2)获取目标cookie
在利用刚刚设置的 js 文件生成 payload。
复制此 payload 粘贴到存在 xss 漏洞的地方,这里插入到 pikachu 中的 xss 存储型。
当有人访问该页面就会将 coookie 发送到我们的 xss 平台上。