pikachu平台之xss漏洞

反射型xss(get)

原理

传递的参数直接存在页面代码中,而且没有过滤

流程

打开页面
pikachu平台之xss漏洞_第1张图片
发现有长度限制,F12进行修改 。
pikachu平台之xss漏洞_第2张图片
输入特殊字符,检查是否有过滤
pikachu平台之xss漏洞_第3张图片
发现并没有过滤,而且直接在页面代码中了
pikachu平台之xss漏洞_第4张图片存在xss漏洞,尝试输入,发现有长度限制,用F12修改后。
pikachu平台之xss漏洞_第5张图片

反射型xss(post)

xss(post)攻击的基本原理
pikachu平台之xss漏洞_第6张图片
方便起见,都用本地了

攻击者127.0.0.1
受害者127.0.0.1
漏洞服务器127.0.0.1

先尝试登陆,默认admin/123456
pikachu平台之xss漏洞_第7张图片
接下来修改post.html,诱使被攻击者点击链接,访问该页面,进而触发自动提交表单,获取其cookie。
pikachu平台之xss漏洞_第8张图片
诱使被攻击者点击链接http://192.168.171.129/pikachu/pkxss/xcookie/post.html
当被攻击者点击之后,其cookie等信息自动提交到接受服务器。
pikachu平台之xss漏洞_第9张图片
攻击成功!

存储型xss

原理:
存储型XSS和反射型XSS形成的原因是一样的,不同的是存储型XSS下攻击者的可以将脚本注入到后台存储起来,构成更加持久的危害
我们在pikachu尝试留言
pikachu平台之xss漏洞_第10张图片
发现可能存在存储型xss漏洞
输入
提交之后
pikachu平台之xss漏洞_第11张图片
pikachu平台之xss漏洞_第12张图片
发现有存储型xss漏洞,刷新就会弹出,攻击成功!

XSS案例:钓鱼攻击

pikachu平台之xss漏洞_第13张图片
我们这里用一个Basic认证去做这个钓鱼攻击
实验机器
为了方便我们都用本地了,理论上一样的

攻击者127.0.0.1
受害者127.0.0.1
漏洞服务器127.0.0.1

修改pikachu里的\htdocs\pikachu\pkxss\xfish\fish.php
pikachu平台之xss漏洞_第14张图片

我们在一个存在XSS漏洞的页面上面嵌入一个恶意请求,当用户打开这个页面时
这个页面就会像攻击者的服务器发送请求,这个请求会返回一个Basic认证的头部 这时候会弹出一个提示框,要求受害者输入账号密码,从而盗取用户的账号密码
使用上面的存储型xss
在留言上添加
pikachu平台之xss漏洞_第15张图片
tips:这里一直后台看不到,仔细检查后发现根本没有跳转到xfish.php,再仔细看fish.php,发现连接多了个空格,删掉后可正常跳转。
后台查看

pikachu平台之xss漏洞_第16张图片
攻击成功!

XSS案例:键盘记录

先了解一下什么是跨域:
直接拿老师的

实验流程:

修改pikachu\pkxss\rkeypress\rk.js,标红处改为接受服务器地址
pikachu平台之xss漏洞_第17张图片
rk.js 是攻击代码,我们可以把这个 js 文件放到我们的恶意站点上,然后通过有 XSS 漏洞的页面去调用
这个文件可以记录用户的键盘操作,然后异步发送给攻击者,但是这个违背了同源策略,因为我们攻击者的机器和漏洞服务器的主机是不一样的,AJAX的请求默认情况下是不能跨域的,这个请求默认情况下是会失败的
/var/www/html/pikachu/pkxss/rkeypress 中 rkserver.php 注释掉下面的代码
pikachu平台之xss漏洞_第18张图片
在存储型xss漏洞平台留言板输入,但是会提示这个
pikachu平台之xss漏洞_第19张图片

DOM型XSS

DOM可以理解为访问HTML的标准接口,DOM里面会把我们的HTML分成一个DOM树
传送门
pikachu平台之xss漏洞_第20张图片
我们可以以这棵树为入口,通过DOM的某些方法对树进行操作,比如对标签的添加、改变和删除等等, DOM这个东西相当于在前端提供了一个通过JS去对HTML进行操作的接口。
查看前端代码,发现输入的内容会被拼接到,对应标签中,存在dom性的xss,我们只需要精心构造payload,闭合前面就行。 pikachu平台之xss漏洞_第21张图片
尝试'>
pikachu平台之xss漏洞_第22张图片
造成DOM型XSS的原因是前端的输入被DOM给获取到了,通过DOM又在前端输出,跟反射型和存储型比起来,它是不经过后台交互的。
攻击成功!

DOM型XSS-X

打开网页
pikachu平台之xss漏洞_第23张图片
查看网页源码
pikachu平台之xss漏洞_第24张图片
关键代码

 var str = window.location.search;
 var txss = decodeURIComponent(str.split("text=")[1]);
 var xss = txss.replace(/\+/g,' ');

函数从url里搜索目标标签,并用' '代替'+',接下来又是拼接了,和上文的domxss同理。
构造'>
点击之后
pikachu平台之xss漏洞_第25张图片
攻击成功!

XSS之盲打

XSS盲打不是攻击类型,而是一个攻击场景
pikachu平台之xss漏洞_第26张图片
pikachu平台之xss漏洞_第27张图片
我们输入的内容并不会出现在前端,我们输入构造的payload,当管理员登陆后台查看的时候,会触发这个payload,进而攻击成功。
pikachu平台之xss漏洞_第28张图片
之后打开后台管理员界面。

http://127.0.0.1/pikachu/vul/xss/xssblind/admin_login.php

用户名密码 admin/123456,登进去就会弹出。
pikachu平台之xss漏洞_第29张图片
攻击成功!

XSS之过滤

xss漏洞经过这么多年,已经有了很多的保护措施,比如特殊字符过滤。

转换的思路
 - 前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
 - 大小写,比如<SCRIPT>aLeRT(111)</sCRIpt>。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。
 - 双写(拼凑),`pt>alert(111)pt>`。后台可能把<script>标签去掉换,但可能只去掉一次。
 - 注释干扰,`pt>alert(111)ript>`。加上注释后可能可以绕过后台过滤机制。
编码的思路

核心思路:

 1. 后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定过滤
 2. 当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行.
 3. 编码应该在输出点被正常识别和翻译,不能随便使用编码。

例子:

将alert('xss')进行URL编码,可以执行吗?
<img src=x onerror=alert%28%27xss%27%29>

它并不会执行,因为属性标签并不会正常解析这些编码

<img src=x onerror=alert('xss')>
将alert('xss')进行HTML编码
<img src=x onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x78;&#x73;&#x73;&#x27;&#x29;>

当它输出到前端的时候,浏览器会对这个编码进行翻译,从而弹窗

XSS绕过的姿势很多,取决于你的思路和对前端技术的掌握程度,我们在皮卡丘平台上,输入下面的内容看一下后台会怎么处理。
pikachu平台之xss漏洞_第30张图片
发现script被过滤了。
使用大小混合
pikachu平台之xss漏洞_第31张图片
攻击成功!
使用其他payload试一下
pikachu平台之xss漏洞_第32张图片
攻击成功!!

XSS之htmlspecialchars

htmlspecialchars()PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是

& 成为 &amp
" 成为 &quot
' 成为 &#039
< 成为 &lt
> 成为 &gt
可用引号类型
ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号

在pikachu中查看
出了点问题。。。

XSS常见防范措施

总的原则:输入做过滤,输出做转义

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

XSS之href输出

pikachu平台之xss漏洞_第33张图片
查看关键源码:
pikachu平台之xss漏洞_第34张图片
可以看出,我们输入内容后,先进行判断是否为www.baidu.com,如果不是进行htmlspecialchars($_GET['message']);,同理上面的漏洞,我们需要构造一个没有被过滤的特殊字符,构造如下javascript:alert("ppsuc!!!")
pikachu平台之xss漏洞_第35张图片
攻击成功!

如果要对 href 做处理,一般有两个逻辑:
 1.输入的时候只允许 http 或 https 开头的协议,才允许输出。
 2. 其次再进行htmlspecialchars处理

XSS之js输出

打开网页
pikachu平台之xss漏洞_第36张图片
查看关键源码
pikachu平台之xss漏洞_第37张图片
pikachu平台之xss漏洞_第38张图片
可以看出,在对ms进行判断的的时候,我们可以构造出闭合,payload如下

'
                    
                    

你可能感兴趣的:(作业)