- 博客(46)
- 收藏
- 关注
原创 C++ 虚函数与抽象类深度解析 | 吃透多态核心,解锁 OOP 进阶技能
虚函数:在基类中使用virtual关键字声明的成员函数,允许子类重写该函数,最终实现运行时多态(动态绑定)。virtual关键字必须写在基类函数返回值前,声明虚函数;子类重写时,virtual可省略(编译器自动继承虚属性),推荐显式书写 + C++11 的 override 关键字,编译器校验重写合法性,杜绝手写错误;虚函数仅能是类的普通成员函数,不能是 static 静态函数、全局函数。// 基类声明虚函数public:virtual 返回值类型 函数名(参数列表) {
2025-12-31 00:21:29
588
原创 C++核心知识点梳理:类型兼容、多继承与虚基类
简单说,只要需要基类对象的地方,都能用其公有派生类对象“无缝衔接”。基类指针/引用指向子类对象时,只能访问基类定义的成员,无法直接调用子类特有成员(需强制类型转换,但不推荐);“切片操作”:子类对象赋值给基类对象时,仅复制基类部分成员,子类特有数据会被“截断”;该原则是多态实现的基础,后续虚函数的核心应用依赖此特性。
2025-12-14 00:30:01
960
原创 关于C++递归函数和指针部分
递归是 C++ 中强大的编程工具,它以 “自我调用” 的形式将复杂问题拆解为简单子问题。掌握递归的关键在于理解终止条件和递归关系,同时也要注意其潜在的栈溢出和重复计算问题。数据类型 * 变量名;数据类型:指针指向的变量的数据类型(可以是基本类型、构造类型甚至void类型)。:表示这是一个指针变量,而非普通变量。变量名:用户自定义的标识符。// 定义int型指针ip,用于存储int变量的地址int *ip;// 定义float型指针fp,用于存储float变量的地址float *fp;
2025-10-31 17:59:37
999
原创 我的C++学习初体验与心得
学习第1章面向对象与C++基础时,我了解到C++是面向对象的编程语言,封装、继承、多态这些特性让程序设计有了全新的思路,就像给代码搭建了一个个功能明确的“积木块”。但我有信心,只要保持这份学习的热情和脚踏实地的态度,我一定能在C++的学习之路上走得更远,未来能用C++写出更复杂、更有价值的程序。作为一名C++新手学生,这段时间的学习让我对这门编程语言有了从陌生到逐渐熟悉的认知,也积攒了不少学习心得,过程中编写的一些简单代码更是让我对知识的理解愈发深刻。cout << "请输入两个整数:" << endl;
2025-10-09 19:38:46
321
原创 [HZNUCTF 2023 preliminary]flask
我们需要让用户输入一个字符串,对其进行反转操作,然后将反转后的字符串进行 Base64 编码,最后输出反转后的字符串。
2024-08-28 18:33:31
672
原创 [HZNUCTF 2023 preliminary]ppppop
然后我们反序列化构造pop链,通过A类来触发B类中的__call从而实现任意命令,执行后的回显在class B的__call 魔术方法里,我们需要让func和arg成为我们需要的变量。这段 PHP 代码定义了两个类 A 和 B,并包含了一些对用户输入进行处理的逻辑。整体来看,代码中可能存在安全风险,尤其是在处理用户输入的 payload 时进行反序列化操作。由于序列化中的b代表着Boolean,所以我试着把0改为1。点进去之后是一片空白。
2024-08-28 16:26:33
1095
原创 [HZNUCTF 2023 preliminary]pickle
它从请求的参数中获取名为 filename 的值,然后将这个值中的 “flag” 替换为 “?如果这个字节串不是合法的序列化对象,或者在反序列化过程中出现问题,可能会引发错误。pickle:Python 的对象序列化和反序列化模块,可以将 Python 对象转换为字节流进行存储或传输,也可以从字节流中恢复对象。(‘o’+‘s’).system(‘env | tee a’)”,):这里返回一个元组,包含两个元素。接着使用 .replace(b’os’, b’') 将解码后的字节串中的 os 替换为空字节串。
2024-08-27 22:35:47
611
原创 [FSCTF 2023]ez_php2
这段代码主要定义了四个类(Rd、Poc、Er、Ha),并通过检查 $_GET 参数来决定是否进行反序列化操作。如果存在特定的 $_GET 参数,则尝试反序列化其值,否则输出 “You are Silly goose!开始找链子,入口在Ha里面。使得其触发__call方法,然后给start赋值[‘POC’=>‘1111’]然后value就成为了system,修改$Flag就可以修改执行的命令了。进入if语句,然后通过其中的var1触发__set方法。首先我们审计这段代码。
2024-08-22 21:57:51
573
原创 [SWPUCTF 2023 秋季新生赛]UnS3rialize
这段 PHP 代码定义了四个类(NSS、C、T、F),并通过判断是否有特定的 GET 参数来进行反序列化操作。整体功能似乎是通过反序列化用户传入的数据来执行一系列操作,包括输出特定信息和可能执行系统命令,同时也存在一些条件判断以控制输出结果。pop链梳理完再看看wakeup的绕过,用的fast-destruct。然后就是访问不存在属性,往前推到T.__toString()从后往前推,出口是NSS.__invoke()的命令执行。再往前推到F.__destruct()调用此方法往前推到C.__get()
2024-08-22 21:29:00
884
原创 [FSCTF 2023]ez_php1
这段代码通过接收两个 GET 参数和一个 POST 参数来进行一系列的逻辑判断和输出。主要目的是在满足特定条件下输出不同的提示信息,可能涉及到一个简单的挑战或游戏。得到新的提示:P0int.php,我们直接访问/P0int.php,
2024-08-20 17:35:37
428
原创 [CISCN 2023 华北]ez_date
[CISCN 2023 华北]ez_date点开之后是一串php代码: <?phperror_reporting(0);highlight_file(__FILE__);class date{ public $a; public $b; public $file; public function __wakeup() { if(is_array($this->a)||is_array($this->b)){
2024-08-20 16:23:56
594
原创 [HGAME 2023 week1]Classic Childhood Game
点开之后页面如图所示:打开调试器,查看js文件:将这几个js文件都查看之后,最后在 Events.js 文件的结尾找到突破口:这是一个解码的函数,我们直接在控制台调用 mota() 函数,得到本题的flag:由此得到本题的flag为:
2024-08-14 16:52:39
276
原创 [LitCTF 2023]作业管理系统
接着我们访问shell.php文件,然后将命令 system(“cat /f*”);在最底部我们发现了默认账户:admin 密码:admin。然后我们登陆进去,由此界面,我们联想到文件上传漏洞。
2024-08-14 16:35:15
406
原创 [GDOUCTF 2023]hate eat snake
接着在控制台执行,开始调用函数,再按一下空格,得到flag。发现判断过关的条件是getScore>60。我们ctrl+f查找if判断过关的语句。
2024-08-13 18:58:14
322
原创 [LitCTF 2024]exx
这段是文档类型定义(DTD),其中定义了一个名为 XXE 的外部实体,其值通过 SYSTEM 关键字从指定的文件系统路径(file:///flag)获取。引用了之前定义的外部实体 XXE,试图获取指定文件的内容。2,服务器端请求伪造(SSRF):使攻击者能够发起服务器端的请求,访问内网服务。这里展示了如何使用jQuery发起AJAX请求,并处理XML格式的请求和响应。3,拒绝服务(DoS):通过外部实体消耗服务器资源,导致服务不可用。1,数据泄露:允许攻击者读取服务器上的敏感文件。
2024-08-12 21:49:20
492
原创 [LitCTF 2024]SAS - Serializing Authentication
最后,我们需要使用base64_encode()函数将序列化后的字符串进行Base64编码。然后,我们需要使用serialize()函数将User对象序列化成一个字符串。首先,我们需要创建User类的一个实例,并使用指定的用户名和密码进行初始化。
2024-08-12 21:28:51
403
原创 [LitCTF 2024]百万美元的诱惑
由 if 语句我们自然联想到数组绕过,PHP 中的 md5() 函数允许使用数组作为该函数的参数,md5() 函数对于任何数组都将返回 NULL。因为没有过滤掉 $, (), ~ 关键字符,所以我们可以利用这几个来完成任何数字的构造。对于取反运算符,即正数 a 的取反可以看作 -(a+1),而负数 -a 的取反则是a-1。代码告诉了我们 flag 在 12.php 里,所以我们只需要让变量等于 12 即可。并且我们构造数字12时,需要绕过以下字符。
2024-08-11 01:57:48
297
原创 [LitCTF 2024]一个....池子?
SSTI是服务器端模板注入,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。{{}}包裹我们的恶意代码会在渲染的时候被渲染解析。我们向回声池中输入{{2*2}}我们在平常的测试中最常用的就是{{}},测试是否将花括号中的值是否可控且被模板渲染。本题的标签是SSTI 我们先了解以下什么是SSTI。Flask默认使用的引擎为jinjia2。由此我们断定本题存在ssti漏洞。
2024-08-10 23:14:54
557
原创 [LitCTF 2024]高亮主题(划掉)背景查看器
例如,攻击者通过浏览器访问…/etc/passwd(此处较多…/),就可以读取Linux服务器根目录下的etc目录下的passwd文件的内容。和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。以上结合本题,我们打开HackBar构造传参数据,用较多的 …目录穿越是一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。由此可见这是一道文件包含题。此外,本题涉及到了目录穿越。
2024-08-10 19:12:16
888
原创 [LitCTF 2024]浏览器也能套娃?
SSRF漏洞产生的原因是服务端提供了能够从其他服务器应用获取数据的功能,比如从指定的URL地址获取网页内容,加载指定地址的图片、数据、下载等等。出现了相关的百度网页的页面。通过url地址分享网页内容功能处,由此我们想到了SSRF。
2024-08-10 18:31:06
477
原创 [SWPUCTF 2022 新生赛]funny_web
当某个数字被过滤时,可以给它增加小数位来绕过。所以我们可以传参一个小数如12345.5。这样就满足了num!=‘12345’ 并且intval(num)=12345 满足if 语句的条件。intval() 函数可以获取变量的整数值,常用于强制类型转换。
2024-08-09 14:56:14
528
1
原创 [FSCTF 2023]寻找蛛丝马迹
由此我们得到flag的四段:tH@t_y000 上面说第五段和苹果有关系,看到苹果我们联想到了 .DS_store 这里做一下简单的介绍:.DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性。由此我们找到了flag的第三段:oInT_oUt_。接着我们发现找不到flag的第四段,我们就知道剩下的flag没有藏在页面源码里。该页面中附有乱码,我们用火狐浏览器自带的修复乱码的工具进行修复。
2024-08-09 13:58:39
547
原创 [FSCTF 2023]webshell是啥捏
GET[‘外星人’]) 它会先执行这个函数,并将 $_GET[‘外星人’] 作为参数传递给这个函数,然后将函数的返回值作为要执行的 PHP 代码传递给 eval()。isset($_GET[‘外星人’]) 用于检查通过 URL 传递的名为 外星人 的 GET 参数是否被设置。php中变量与变量之间用点号连接表示拼接,题目拼接结果为passthru。eval() 函数会将传入的字符串当作 PHP 代码来执行。
2024-08-08 17:40:40
352
原创 [SWPUCTF 2022 新生赛]numgame
由此得知我们要利用的东西就是nss类,我们可以直接利用双冒号运算符去访问类中的方法,因为正则表达式中匹配到了n和c,但是用到的修饰符是/m多文本匹配,所以我们可以采用大小写看能否绕过。使用preg_match()函数对$_GET[‘p’]进行正则匹配,判断其是否含有字母n或c。如果匹配成功,就输出no并结束脚本的执行。这里解释一下:在编程语言中,双冒号运算符(::)用于访问类的成员,包括静态成员和非静态成员。函数用于调用一个回调函数。这里回调函数的名称由。的值调用对应的函数。
2024-08-08 17:18:10
516
原创 [GDOUCTF 2023]泄露的伪装
代码中的 file_get_contents 是一个读取文件内容函数,我们需要向参数cxk,传入ctrl。由此可得本题flag为:NSSCTF{670e2d60-38f6-48ea-8188-5424468a193c}根据题目标签中的“目录扫描” 我们打开kali linux 进行目录扫描。
2024-08-03 16:17:17
394
原创 [LitCTF 2023]1zjs
但我们需要将flag中的[]删掉,得到最终flag:NSSCTF{a9ddcb7a-5f47-48c5-965f-feb654e1aefd}根据题目中的提示:“js…” 我们打开调试器,找到了index.umd.js 文件。
2024-08-02 17:01:55
408
原创 [LitCTF 2023]Vim yyds
接着我们对php代码进行分析,从if语句中我们知道,当传入的password参数的值等于"Give_Me_Your_Flag"base64加密后的值时,可以通过cmd参数进行命令执行。然后我们下载该文件,然后将该文件拖入到kali linux 的桌面上,然后我们在kali linux 的空白处点击右键,选择在桌面打开终端,然后我们执行如下命令,用于恢复文件,得到index.php文件的源码。vim -r filename 恢复上次 vim 打开时崩溃的文件。
2024-08-02 16:44:52
468
原创 [LitCTF 2023]导弹迷踪
含义是:if (mLevel === 6) 表示如果变量 mLevel 的值等于 6 ,那么就返回 ‘GOT F|L|A|G {y0u_w1n_th1s_!我们发现了一个文件的命名为:main.js 我们盲猜这是主文件,点进去发现,main.js文件中多次调用了game.js文件内定义的函数。如果 mLevel 的值不等于 6 ,则通过 else 部分返回 ‘CLICK TO CONTINUE’ 这个字符串。由此可得本题flag为:NSSCTF{y0u_w1n_th1s_!
2024-08-01 17:45:16
614
原创 [LitCTF 2023]Ping
接着我们打开HackBar,发现地址是依靠command参数进行传递的。我们直接用管道符 | 拼接语句,尝试执行该命令。这段 JavaScript 代码定义了一个名为 check_ip 的函数,用于检查输入的字符串是否为有效的 IP 地址格式。由此可得本题flag为:NSSCTF{aa5983f7-af07-4174-87d0-3e9ee129aa22}由此可知,我们输入的字符串必须符合IPv4地址格式。然后我们继续执行命令寻找flag。127.0.0.1试试。
2024-08-01 16:59:30
452
原创 [SWPUCTF 2021 新生赛]PseudoProtocols
data:// 数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。代码的大概意思为:变量a用file_get_contents()函数,以只读的方式打开,如果内容等于’I want flag’的话,输出flag。并且我们发现url中有参数wllm,由题目标签php伪协议,我们尝试用php伪协议读取该文件。php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。
2024-07-31 18:41:40
410
原创 [第五空间 2021]WebFTP
发现有git泄露(Git泄露是指在使用Git版本控制系统时,由于配置不当或者操作失误,导致敏感信息(如密码、密钥、源代码等)被意外地上传到公开的代码仓库或者其他公开可访问的地方,从而被未授权的人获取到。-u的含义是指定url(URL 即统一资源定位符,它用来表示互联网上的某个资源地址,互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。-r的含义是递归目录(可扫描新扫描出的目录下的目录)。-e的含义是指定网站语言,一般用-e*即所有语言。-w的含义是指定字典。
2024-07-31 16:37:32
1520
原创 [NSSCTF 2022 Spring Recruit]easy C
代码意思是:输入flag存入数组a中,按位加1后与2亦或,得到新的数组b。所以我们的逆向思路为:将数组b按位与2亦或,再减1,得到的就是flag。运行之后得到本题flag:NSSCTF{easy_Re}
2024-07-30 22:05:06
440
原创 [SWPUCTF 2021 新生赛]babyrce
分析if语句代码的含义:用get传参url,如果url里没有“/ /”,则赋值给变量ip,然后通过shell_exec函数得到flag。否则,返回nonono。preg_match()函数用于正则匹配,正则表达式为"/ /",需要用空格绕过。这里我们需要用${IFS}/ 过滤空格。题目中涉及到了cookie,我们打开HackBar。点击cookie,接着我们看代码第四行。
2024-07-30 21:40:38
339
原创 [HNCTF 2022 Week1]easync
然后从其他的子目录中查找,从nothing中发现了半个flag。接着继续查找 ,发现从gift中发现了另一半的flag。发现flag 但查看后将结果提交 发现是假的flag。根据题目提示,打开虚拟机,直接nc一下。
2024-07-29 19:10:12
249
原创 [SWPUCTF 2021 新生赛]include
例如:php://filter/read=convert.base64-encode/resource=upload.php,表示读取 upload.php 的内容并进行 base64 编码。另外还有一些字符串过滤器,如 string.rot13(进行 rot13 转换)、string.toupper(将字符全部大写)、string.tolower(将字符全部小写)、string.strip_tags(去除空字符、html 和 php 标记后的结果)等。接着我们用PHP伪协议来解决本题。
2024-07-29 10:54:39
623
原创 [SWPUCTF 2022 新生赛]Does your nc work?
根据提示我们猜测flag在nss当中,我们使用cd命令跳转到nss的目录下,然后用ls命令查看nss目录下的子目录,我们看到了ctf.然后我们继续使用cd命令跳转到ctf的目录下,然后用ls命令查看ctf目录下的子目录,出现了flag的字样,然后我们用cat命令查看目录中的文本内容。由此可得本题flag:NSSCTF{c5676663-2019-4e0f-a864-5935cd2ecb4b}ls 查看当前目录下的文件列表。find 查找当前目录下的文件。echo 显示输出内容。cat 查看文本内容。
2024-07-25 01:08:40
419
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅