条件竞争漏洞
条件竞争漏洞概述条件竞争原理 生活类比理解:想象去银行取钱,银行柜台只有一个窗口办理取款业务,有很多人排队取钱。正常情况下,工作人员会按顺序办理业务。但如果没有维持好秩序,有几个人同时挤到窗口前,都递上银行卡说要取钱,这时候就可能乱套了。在计算机程序里,也有类似情况。程序就像银行的业务处理系统,不同的操作请求就像排队取钱的人,当多个操作请求(线程)同时去访问和修改同一个资源(比如共享变量、文件、数据库记录 ),而且没有合理的控制顺序和保护机制时,就会出现条件竞争。 技术原理:在程序运行中,开发者一般希望代码按顺序一条一条执行。但在多线程或多进程的环境下,服务器会并发处理多个请求。如果没有使用合适的同步机制(像锁,它能保证同一时间只有一个线程能访问某个资源 ),这些并发的线程就可能同时操作共享资源,导致结果不可预测。比如两个线程同时读取一个变量的值,然后都对这个值进行修改再写回去,最后保存的值可能不是预期的,因为它们互相干扰了。 条件竞争漏洞的利用 以文件上传为例: 有些网站允许用户上传文件,服务器会先检查文件是否符合要求(比如只允许上传图片格式文件...
php文件上传
文件上传相关函数知识笔记 fputs() 如下代码: <?php $file = fopen("test.txt","w"); echo fputs($file,"Hello World. Testing!"); fclose($file); ?> 输出21,即这个字符串包含的字符数(包括空格和标点符号)为 21 ,fputs() 函数执行后返回 21 ,echo 语句将这个返回值输出。
php特性入门
in_array函数漏洞 如题:(ctfshow web99) .ktdcwdwzqjkt{zoom: 50%;} 这里rand(1,$i)是在从1到$i之间随机选择一个数输出。 关于in_array函数的机制: 格式:bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ),即首位参数为需查询的数值,第二个参数为目标数组,最后一个参数为是否为严格比较。 这里没有设置$strict即是否为严格比较的值,默认为FALSE,即非严格比较。如输入2.php,根据 PHP 类型转换规则 ,从字符串转换为数值时,'2.php' 会被转换为...
关于文件包含的一些问题辨析
有关文件包含的一些问题辨析1. $file这个变量到底被赋予了什么值 这是一道例题,首先我们知道文件包含的解题中,一些协议至关重要 由超全局变量$_GET或者$_POST得到的值,一般会赋予给一个变量,而这个变量的具体值,取决于这个协议的内容: file://协议 这个协议一般指定文件路径直接打开文件,比如?file=file:///etc/passwd,或者?file=file:///var/www/html/index.php,此时后者就会把index.php文件的值直接赋予给$file变量, php://协议 但是如果我输入的是?file=php://input,那么$php这个变量的值就是php://input。 2.include函数的辨析include函数会根据$file的值来处理内容。如果$file是普通文件路径,它会包含文件内容;如果$file是 PHP 流包装器,它会处理流中的内容。在 CTF 题目中,通过巧妙利用php://协议等流包装器,可以绕过一些限制来获取目标文件(如flag.php)的内容。 3. 关于ctfshow...
langchain的runnables相关学习
处理链(Pipeline)详细解释 它就是一个工具,用于把组件按顺序连接起来,让数据依次通过这些组件的处理,使用管道符|来连接各个部件。 RunnablePassthrough基本介绍 RunnablePassthrough 是 LangChain 里的一个基础组件,它的主要作用是在处理链中传递数据,并且可以给数据添加额外的信息。简单来说,它能让数据原封不动地通过,同时可以在这个过程中对数据进行一些修改或者补充。 RunnablePassthrough.assign 详细解释 功能: RunnablePassthrough.assign 方法的作用是给输入的数据添加新的键值对。在处理链里,它可以用来为后续的组件提供必要的参数。 比如: from langchain_core.runnables import RunnablePassthrough # 创建一个简单的字典作为输入数据 input_data = {"name": "Alice"} # 使用 RunnablePassthrough.assign...
pydantic库学习
字段(Field) 基本定义: 在 pydantic 模型里,字段指的是类中定义的属性,它们代表了数据模型的各个组成部分。每个字段都有特定的数据类型和可能的验证规则。在 CaseStage 类中,以下这些就是定义的字段: 1234preparation_stage : List[str]#preparation就是字段setup_stage : List[str]execution_stage : List[str]post_stage : List[str] 这些字段规定了 CaseStage 实例所应包含的数据结构。例如,preparation_stage 字段要求其值是一个字符串列表,用来存储刷单准备阶段的行为。 原始名称(Original Name) 基本定义: 原始名称即字段在类定义中所使用的名称。在 CaseStage 类里,preparation_stage、setup_stage、execution_stage 和 post_stage...
个人学习感悟
关于python库的学习 在学习的时候是缺什么学什么,不是一口气把库里面的东西走完,包括re这种自带的小库
3.30有关川大ctf交流
基本培养路线介绍 Web方向研究 深度实战研究,并非科研研究。 Web入门 buuctf直接针对wp进行解决 照着题目里面的php问题进行学习 前端语言只用看懂 中期 平时把代码审计作为一个大方向。 入门SRC漏洞,先挖高校漏洞。 有关内网渗透 以上为推荐网站 以及hackthebox 国际赛:ctftime根据权重选择难度。 后期 主要是个人研究工具 WP的来源 PWN资源 ctfwiki PWN相关内容 做题: buuctf Linux使用wsl即可 直接看X86汇编语言 打公开赛的赛题,国际赛 师傅的问题 AWD的Web题一定要快速找到后门,不需要很高的web知识,比较好去稳定排名 在赛场上不好一个个处理靶机。 对框架的定位,快速了解系统框架,得知漏洞点。在github的CMS进行研究。 团队: 两个web一个pwn。 其他问题 不要在配置环境花费太多时间 自己开发工具,实用性是不是会更高? 主要工具用于渗透方向。 国安 运气成分比较大 老师理解就是,对专业要求不是很高。 先了解具体时间。 省厅
关于pwn的思考
基本材料 一、推荐什么教程,哪些书适合由浅入深地入门?个人之前只对web方面的漏洞有很浅的认识,对pwn一无所知 具体基础有: 简单sql注入,命令执行,文件包含,文件上传,代码审计,爆破,且仅限于ctfshow对应类别的前30道。 当前情况是: 暑假会有大型比赛,到时候必须要有拿得出手的水平,时间紧迫。 二、推荐哪个题库 三、推荐哪些比赛比较适合新人练手? 学习路线 个人简单了解了pwn,发现其需要的基础相当多,想向师兄们请教以下问题: Linux如何学习,由于它是一种操作系统,个人认为这种系统是要越用越熟练而非单纯记忆指令,可以如何更好提升linux水平呢,如何应用呢?目前个人尝试在电脑上安装双系统,(拟定为Arch Linux)。 关于汇编学习,需要学习到哪个程度,有没有必要使用类似于图灵完备(Turning Complete)这样的游戏软件从电脑硬件底层开始了解机器语言,进而深入了解汇编语言,目前本人正在使用VS...
c语言标准库及其函数
<stdio.h>scanf()函数概述 scanf是 C 语言中的一个标准库函数,主要用于从标准输入流(一般指键盘)读取格式化的输入数据 ,并将其存储到程序中指定的变量中。 关于scanf()在读取的时候,占位符、后方变量地址、以及输入数据时的格式”一一对应”的规则: 占位符格式scanf 函数的占位符格式用于指定要读取的数据类型,常见的占位符有: %d:用于读取十进制整数,对应的数据类型是 int。 %f:用于读取单精度浮点数,对应的数据类型是 float。 %lf:用于读取双精度浮点数,对应的数据类型是 double。 %c:用于读取单个字符,对应的数据类型是 char。 %s:用于读取字符串(以空白字符分隔),对应的数据类型是字符数组。 %x 或 %X:用于读取十六进制整数,对应的数据类型是 int。 %o:用于读取八进制整数,对应的数据类型是 int。 传递变量地址的格式 在 scanf 函数中,需要传递变量的地址,以便将读取的数据存储到相应的变量中。对于基本数据类型的变量,需要使用取地址运算符 &...