关于 XSS(跨站脚本漏洞)

关于 XSS (pikachu)

跨站脚本漏洞概述

XSS漏洞

  • XSS漏洞 一直被评估为web漏洞中危害较大的漏洞,在 OWASP TOP10的排名中一直属于前三的江湖地位。
  • XSS 是一种发生在 Web前端的漏洞,所以其危害的对象也主要是前端用户
  • XSS漏洞 可以用来进行钓鱼攻击、前端JS挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。

XSS(窃取cookie)攻击流程(略)

跨站脚本漏洞常见类型

危害:存储型 > 反射型 > DOM型

  • 反射型

交互的数据一般不会被存在数据库里面,一次性,所见即所得,一般出现在查询

  • 存储型

交互的数据会被存在数据库里面永久性存储一般出现在留言板,注册等页面

  • DOM型

不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型

XSS 漏洞形成的原因

形成XSS漏洞的主要原因是:程序对输入和输出的控制不够严格,导致:“精心构造” 的脚本输入后,在输到前端时被浏览器当作有效代码解析从而产生危害。

XSS 测试流程

TIPS:
1、一般查询接口容易出现,留言板容易出现存储型XSS
2、由于后台可能存在过滤措施,构造的 script 可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器);
3、通过变化不同的 script,尝试绕过后台机制。

基本的 XSS 操作

1、验证网页是否存在 XSS漏洞请添加图片描述

2、通过在验证框中输入 “特殊代码”,是否被执行

受到 字符限制可以在 前端源码(F12)中进行更改请添加图片描述
请添加图片描述

反射型 XSS(get)代码分析

靶场(pikachu)源码查看:
pikachu > vul > xss

请添加图片描述

在这$html='';
if(isset($_GET['submit'])){
    if(empty($_GET['message'])){
        $html.="<p class='notice'>输入'kobe'试试-_-</p>";
    }else{
        if($_GET['message']=='kobe'){
            $html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
        }else{
            $html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
        }
    }
}
[pikachu]XSS漏洞链接:http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&submit=submit

反射型跨站脚本漏洞值 get&post

GET 和 POST 典型区别: GET是以url方式提交数据; POST是以表单方式在请求体里面提交;

GET方式XSS漏洞更加容易被利用,一般的利用方式是将带有跨站脚本的URL伪装后发送给目标;
POST方式 由于是以表单方式提交,无法直接使用URL方式进行攻击,如何利用?

存储型XSS和DOM型XSS的解析

存储型XSS

存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称 “永久型” XSS

存储型XSS漏洞演示

  • 存储型XSS漏洞源码分析
$link=connect();
$html='';
if(array_key_exists("message",$_POST) && $_POST['message']!=null){
    $message=escape($link, $_POST['message']);
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);
    if(mysqli_affected_rows($link)!=1){
        $html.="<p>数据库出现异常,提交失败!</p>";
    }
}

while($data=mysqli_fetch_assoc($result)){
                        echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>删除</a>";
                    }

DOM型XSS

什么是DOM?

通过 JavaScript,可以重构整个 HTML 文档。您可以添加、移除,改变或重排页面上的项目。
要改变页面的某个东西,JavaScript 就需要获得对 HTML文档中所有元素进行访问的入口。这个入口,连同对 HTML元素进行添加、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)

DOM —— > 访问 HTML 的标准编程接口

DOM型XSS漏洞演示

  • DOM型XSS源码分析
    请添加图片描述
  • 构造闭合 payload
<a href='"+str+"'>what do you see?</a>

<a href='#' onclick="alert(11)">'>what do you see?</a>

#' onclick="alert(11)">    —— > 构造的payload

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值