0


XSS漏洞常见攻击方式

1.危害

都是通过js脚本来实现的浏览器内核版本也会影响到js代码的实现

  • 1、钓鱼欺骗
  • 2、网站挂马
  • 3、身份盗用
  • 4、盗取网站用户信息
  • 5、垃圾信息发送
  • 6、劫持用户Web行为
  • 7、XSS蠕虫

2.原理

XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、、等各种方式使得用户浏览这个页面时,触发对被攻击站点的http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过script 来发起的,因此被称为Cross Site Script。攻击Yahoo Mail 的Yamanner 蠕虫是一个著名的XSS 攻击实例。YahooMail 系统有一个漏洞,当用户在web 上察看信件时,有可能执行到信件内的javascript 代码。病毒可以利用这个漏洞使被攻击用户运行病毒的script。同时Yahoo Mail 系统使用了Ajax技术,这样病毒的script可以很容易的向Yahoo Mail 系统发起ajax 请求,从而得到用户的地址簿,并发送病毒给他人。

3 .分类

3.1反射型

反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性。

3.2存储型

存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。

3.3DOM型

从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

4.攻击方式

4.1反射型

攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞

4. 2存储型

这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意

4.3DOM型

用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞

5.绕过

5.1手动绕过

在介绍手动绕过之前必须先介绍一些编码方式

  1. 浏览器解析页面的过程:

html文档解析(DOM Tree) =》 浏览器发送获取嵌入在html中的对象
=》css解析 =》遇到JS解析,其他解析就停止

  1. 编码: 2.1 url编码:**%加上该字符串的ASSCALL2.2 html编码:HTML实体编码: 以&开头,分号结尾的。 例如“<”的编码是“&lt” 字符编码:8进制或者16进制ASCALL或者Unicode编码,前面再加上&#**2.3 JS编码:1.三个八进制数字,如果不够个数,前面补0,例如“<”编码为“\074” 2.两个十六进制数字,如果不够个数,前面补0,例如“<”编码为“\x3c” 3.四个十六进制数字,如果不够个数,前面补0,例如“<”编码为“\u003c” 4.对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)

5.2XSS平台绕过

6.解决方案

1.过滤输入的字符包括"’" ““” “<” “>” "on"等
2.对输入到页面的数据进行相应的编码转换,包括HTML实体编码,JS编码等

7.自己写靶场学习

1. 创建数据库

createdatabase loophole;use loophole;createtable storage
(
    id intauto_increment,
    name char(10)notnull,
    message char(100)notnull,primarykey(id))comment'xss存储型表';#自动增加的键必须为主键

2.在PHPstudy等web环境下建立如下文件

1. reflect.php

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>XSS利用输出环境构造代码</title></head><body><h1>请输入你想显示的字符串</h1><form action="" method="get"><input type="text" name="xss_input_name" placeholder="请输入字符串"><input type="submit"><img src="1" onerror="alert(xss)"></form><br><!--<pre><h1>解题答案</h1>
    普通型:  --><!-- 复杂型:'"><img src="" οnerrοr="alert(123)"><img src="'--><!--</pre>--><?phpif(isset($_GET['xss_input_name'])){// echo $_GET["xss_input_name"] => 无任何过滤的xssecho'<input type="text" value="'.$_GET["xss_input_name"].'">';// => 需要让input标签闭合,并且输出或者执行注入的js代码($_GET["xss_input_name"])}else{echo'<input type="text" value="请输入">';}?></body></html>

2.storage.php

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>存储型XSS</title><style>
        div{
            width:300px;
            margin: auto;
            background-color:rgb(red, green, blue);}
        table {
            width:400px;
            border-collapse: collapse;
            text-align: center;
            margin: auto;}

        table th,
        table td {
            border:1px solid;
            padding:5px;}

        table thead {
            background-color: lightcyan;}

        table caption {
            font-size: larger;
            margin-bottom:8px;}

        body>p {
            display: flex;}

        p>a {
            text-decoration: none;
            color:#555;
            border:1px solid;
            padding:5px 10px;
            margin:10px 2px;}.active {
            background-color: seagreen;
            color: white;
            border:1px solid seagreen;}</style></head><body><div><h1>请输入留言类容</h1><form action="" method="POST"><label for="name">名字:</label><input type="text" name="name" id="name"><br><label for="message">留言:</label><textarea name="message" id="message" cols="30" rows="10" placeholder="请输入留言"></textarea><input type="submit"></form></div><?phpif(isset($_POST['message'])){$sql=<<<SQL
        insert into storage(name,message) values (?,?);
        SQL;
        $db = new PDO('mysql:dbname=loophole', 'root', '901026yk');
        $stmt = $db->prepare($sql);
        $arr = [$_POST['name'], $_POST['message']];
        $stmt->execute($arr);
        $db = null;
    }
    $sql = <<<SQL
    select * from storage;
SQL;$db=newPDO('mysql:dbname=loophole','root','901026yk');$stmt=$db->prepare($sql);$stmt->execute();$result=$stmt->fetchAll();$html="
<table>
<caption>留言表</caption>
<thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>message</th>
    </tr>
</thead>
<tbody>
";foreach($resultas$items){extract($items);$html.="
    <tr>
        <td>$id</td>
        <td>$name</td>
        <td>$message</td>
    </tr>
  ";}$html.=" </tbody>
</table>";echo$html;?></body></html>

3.dom_xss.html

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>XSS利用DOM树</title></head><body><script>functionshow(event){const input = event.target;if(event.key =='Enter'){let div = document.querySelector('.first');// p.innerText = input.value;=>这样不会执行XSS代码
                div.textContent = input.value
                console.log(input.value);
                input.value =null;}}</script><div><h6>显示的类容如下:</h6><divclass="first"></div></div><div><h6>请输入你想显示的类容:</h6><inputtype="text"placeholder="请输入类容"onkeydown="show(event)"></div></body></html>

8.靶场答案

8.1reflect.php

输入

'"><img src="" onerror="alert(123)"><img src="'

构造html代码形成闭环,就可以进行xss攻击了

8.2storage.php

存储型xss,输入

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

即可

8.3dom_xss.html

这个不建议使用

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

进行XSS攻击,因为页面不会解析

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

,只会把

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

当作文本,所以不会执行js代码,使用

<img src="" onerror="alert(123)">

即可

标签: web安全

本文转载自: https://blog.csdn.net/qq_53568983/article/details/127164445
版权归原作者 The-Back-Zoom 所有, 如有侵权,请联系我们删除。

“XSS漏洞常见攻击方式”的评论:

还没有评论