多函数命令执行绕过
详细文本可看:@Traveler2000的博客:多层函数绕过过滤 对于get_defined_vars函数注解 我们的payloads如下,对于此题: 1234567891011<?php if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){ eval($c); } }else{ ...
超全局变量自动传参
自动创建$_GET参数 $_GET 数组自动填充:只要 URL 里有参数,比如我传入的payload:/?c=include$_GET[1]&1=php://......,此时$_GET 数组就会自动生成对应元素。比如这里 &1=php://...... ,1 是参数名,php://...... 是参数值 ,$_GET[1] 就会被自动定义为 php://...... 。这就像给 PHP 一个信号,让它把 URL 里的参数存到 $_GET 这个 “小仓库” 里,方便后续代码取用 。
文件上传:前端验证不可靠
前端验证指:javascript源码 如ctfshow例题web151: .mueoguknncqs{zoom: 50%;} 这里可以使用F12打开源码界面,发现如下代码: 12<button type="button" class="layui-btn" id="upload" lay-data="[url: 'upload.php', event: 'images', exts:'png']"> 这是一个经典的layui代码:语法以及特点如下: 1.基础结构: <button> 标签被 Layui 渲染为一个上传按钮。 class="layui-btn":Layui 的按钮样式。 id="upload":按钮的唯一标识符(可用于 JavaScript 操作)。 2.有关lay-data: 这是 Layui 上传组件的核心配置参数,格式为简化的...
bp资源池
Resource Pool 参数详解及其在条件竞争漏洞中的作用1. Resource Pool 的核心参数Resource Pool 用于控制攻击时的资源分配和请求节奏,以下是关键参数及其作用: a. 最大并发请求数(Maximum concurrent requests) 功能:控制同时发送的请求数量。 条件竞争中的作用: 高并发:设置较高的并发数(如 50~100),可同时触发大量请求,增加竞争条件的触发概率(例如:同时修改同一账户余额)。 默认值问题:默认的 10 并发可能不足以触发某些敏感竞争漏洞,需根据目标系统承载能力调整。 b. 请求延迟(Delay between requests) 功能:定义每次请求之间的间隔时间(单位:毫秒)。 条件竞争中的作用: 零延迟(0ms):禁用延迟,请求连续发送,最大化并发压力,适合测试服务器在高并发下的异常行为。 固定延迟(Fixed):若必须设置延迟,应尽可能小(如 10ms),避免因间隔过长导致竞争窗口关闭。 c. 随机延迟(Random variations) 功能:在固定延迟基础上增加随机波动(例如:固定...
文件上传疑点解析
...
条件竞争漏洞
条件竞争漏洞概述条件竞争原理 生活类比理解:想象去银行取钱,银行柜台只有一个窗口办理取款业务,有很多人排队取钱。正常情况下,工作人员会按顺序办理业务。但如果没有维持好秩序,有几个人同时挤到窗口前,都递上银行卡说要取钱,这时候就可能乱套了。在计算机程序里,也有类似情况。程序就像银行的业务处理系统,不同的操作请求就像排队取钱的人,当多个操作请求(线程)同时去访问和修改同一个资源(比如共享变量、文件、数据库记录 ),而且没有合理的控制顺序和保护机制时,就会出现条件竞争。 技术原理:在程序运行中,开发者一般希望代码按顺序一条一条执行。但在多线程或多进程的环境下,服务器会并发处理多个请求。如果没有使用合适的同步机制(像锁,它能保证同一时间只有一个线程能访问某个资源 ),这些并发的线程就可能同时操作共享资源,导致结果不可预测。比如两个线程同时读取一个变量的值,然后都对这个值进行修改再写回去,最后保存的值可能不是预期的,因为它们互相干扰了。 条件竞争漏洞的利用 以文件上传为例: 有些网站允许用户上传文件,服务器会先检查文件是否符合要求(比如只允许上传图片格式文件...
php文件操作函数
文件上传相关函数知识笔记 fputs() 如下代码: <?php $file = fopen("test.txt","w"); echo fputs($file,"Hello World. Testing!"); fclose($file); ?> 1234567891011* 输出`21`,即这个字符串包含的字符数(包括空格和标点符号)为 21 ,`fputs()` 函数执行后返回 `21` ,`echo` 语句将这个返回值输出。# `file_put_contents()`* 如以下代码: ```php file_put_contents($file,$content); 记住两个重要特性: 若目标文件没有创建,则该函数会自动创建一个目标文件 当不使用 $flags 参数或者没有使用 FILE_APPEND 标志时,file_put_contents 函数会覆盖文件原有的内容。如下: 123456789<?php// 要写入的文件路径$file =...
php特性入门(持续更新)
持续更新php特性知识in_array函数漏洞 如题:(ctfshow web99) .vrlluuvwanyy{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' 会被转换为...
关于文件包含的一些问题辨析
有关文件包含的一些问题辨析 $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。 include函数的辨析 其他几个也是一样的。 include函数会根据$file的值来处理内容。如果$file是普通文件路径,它会包含文件内容;如果$file是 PHP 流包装器,它会处理流中的内容。在 CTF 题目中,通过巧妙利用php://协议等流包装器,可以绕过一些限制来获取目标文件(如flag.php)的内容。 关于文件内容的包含:在...
langchain的runnables相关学习
处理链(Pipeline)详细解释 它就是一个工具,用于把组件按顺序连接起来,让数据依次通过这些组件的处理,使用管道符|来连接各个部件。 RunnablePassthrough基本介绍 RunnablePassthrough 是 LangChain 里的一个基础组件,它的主要作用是在处理链中传递数据,并且可以给数据添加额外的信息。简单来说,它能让数据原封不动地通过,同时可以在这个过程中对数据进行一些修改或者补充。 RunnablePassthrough.assign 详细解释 功能: RunnablePassthrough.assign 方法的作用是给输入的数据添加新的键值对。在处理链里,它可以用来为后续的组件提供必要的参数。 比如: from langchain_core.runnables import RunnablePassthrough # 创建一个简单的字典作为输入数据 input_data = {"name": "Alice"} # 使用 RunnablePassthrough.assign...