Linux重定向符绕过
基本概念 关于重新定向符详细解释可参考该篇文章:Linux重定向 简单来说,重新定向符的作用为: 分为覆盖写入以及追加写入两种写入方式,分别用两种符号表示:<,<< 尖的头头代表输出/输入的对象,判断输出输入流,另一侧,符号的”嘴部”后的数据,我们可以判断该数据/指令是用于输出指令还是用于对一个对象进行输入的准备材料。通过这样的判断,我们可以来区分该重定向是输入还是输出。 具体实例可以看我放的博客传送门。 关于错误重定向:典型代码有: 122>&12>>&1 从上到下分别是覆写和追加标准错误输出到标准输出,这里都是在对输出流进行操作。 以web42为例 如下图: .hfqentnfnpnq{zoom:33%;} 该题中有源码: 1>/dev/null 2>&1 这段代码的含义就是将指令写入/dev/null路径之下,并且将标准错误输出流重定向到标准输出流。 相关原理“空设备符”在 Linux 中,/dev/null...
命令执行:或运算符脚本绕过
基本概念 基本思路:首先关注该题过滤的符号: 12345678910<?phpif(isset($_POST['c'])){ $c = $_POST['c'];if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){ eval("echo($c);"); }}else{ highlight_file(__FILE__);}?> 可见该题未过滤或符号|和空格。所以我们可以使用或运算符|,利用url编码的字符通过或运算符计算获取目标字符,进而实现绕过正则匹配。 关于eval执行的机制:如下代码也可以被eval执行: 12$a =...
python进程:threading库
Event类简述 简单概述:实例化的Event类本质上就是一个布尔值,但是,这个布尔值自带很多方法,可以灵活地改变自身的bool值,通过自生布尔值的改变,来控制一些如循环这样的进程的运行情况。 它可以作为全局变量,用于对多个线程进行协调 我们常常将其与threading.Threading(target=function)进行结合,它的值可以在function中进行变换控制function的运行情况,同时就控制了线程的运行情况。 常用类方法介绍 其常用方法的基本介绍:threading.Event 对象内部维护了一个布尔标志,初始值为 False。线程可以通过调用 set() 方法将标志设置为 True,通过 clear() 方法将标志重置为 False,使用 is_set() 方法检查标志的当前状态,以及使用 wait() 方法让线程阻塞,直到标志变为 True。 set()将 Event 对象内部的标志设置为 True。所有正在等待这个事件的线程将被唤醒。 123456789101112131415import threadingevent =...
文件上传:配置文件绕过
基本概念.htaccess和.user.ini文件
联合注入
基本概念关于查询的基本概念SELECT 后面是字段 在 SQL 中,SELECT 语句后面跟的是字段(列名)。SELECT 语句的作用是从表中选取指定的列的数据。例如: 1SELECT column1, column2 FROM table_name; 这里 column1 和 column2 就是表 table_name 中的字段,该语句会从 table_name 表中选取 column1 和 column2 这两列的数 据。最终呈现的结果是一个二维数据集,每一行代表一条记录,每一列对应一个字段。 GROUP_CONCAT() 里主要是字段,但也可以是表达式 GROUP_CONCAT() 函数通常用于将分组后的某列的多个值连接成一个字符串。它里面一般写的是字段名,不过也可以是一个合法的 SQL 表达式。 1SELECT GROUP_CONCAT(column_name) FROM table_name; 这里 column_name 是表中的一个字段,GROUP_CONCAT() 会把 column_name...
技术路径a开发指南
各阶段数据库构建 如图所示,对于一条原文本,通过关键词筛选系统的处理,我们可以得到如下格式的json文件 123456 { "准备阶段": ["公司以诈骗为目的,冒充正规机构"], "事前阶段": ["通过虚假宣传吸引客户"], "实施阶段": ["使用欺骗手段与客户沟通", "伪造身份信息", "诱导客户购买服务或产品"], "事后阶段": []} 这部分开发人员的工作很简单: 为了方便对接主程序,开发人员采用只有10条(即10个案子)如上json格式数据的一个记录各阶段关键词的json文件。比如这样的文件: 123456789101112131415161718192021[{ "准备阶段": ["公司以诈骗为目的,冒充正规机构"], "事前阶段":...
base64以及十六进制加密绕过
以web102为例,代码如下: 123456789101112131415161718<?php highlight_file(__FILE__);$v1 = $_POST['v1'];$v2 = $_GET['v2'];$v3 = $_GET['v3'];$v4 = is_numeric($v2) and is_numeric($v3);if($v4){ $s = substr($v2,2); $str = call_user_func($v1,$s); echo $str; file_put_contents($v3,$str);}else{ die('hacker');}...
多函数命令执行绕过
详细文本可看:@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: .xjfvwcjenasj{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 上传组件的核心配置参数,格式为简化的...