javascript学习
声明 var变量声明,通俗来说会将变量上升到上级代码块的变量范围中。这里的上级代码块详细来说应该是当前函数作用域或者全局作用域,因为在 JavaScript 里,只有函数和全局作用域能够限制var变量的作用域,像if语句、for循环、while循环等代码块是无法限制的。比如:无法限制var作用域的情况: 1234if(true){ var x = 5;}console.log(x);//x的值为5 可以限制var作用域的情况: 12345678function example() { if (true) { var x = 5; // 实际上会被提升到函数顶部 } console.log(x); // 可以访问 x,输出 5}console.log(x); // 报错:ReferenceError(x 不在全局作用域,因为function将其限制) 函数函数定义与声明二者区别函数声明(Function Declaration)123function add(a, b) { ...
requests库笔记
详细系统知识可见菜鸟教程:requests库 同时传入GET和POST请求 错误范例: 123456import requests#略....response_post = requests.post(url,data = data)response_get = requests.get(url, params = params)#略.... 这样会让两个请求分次发送,比如以下后端代码: 123456$file = $_GET['file'];$content = $_POST['c'];if issert($_GET['file']){ printf($file); printf($content);} 如果按照第一个python脚本的请求发送方式,第一次只传达了get请求而未传递post请求,则$_content值为空。 正确范例: 1234import requestsresponse = requests.post(url, params=params,...
文件包含:伪协议加密绕过die函数
基础知识 rot13编码:即将字符化为ascii🐎后,将其增加13,重新使用chr化为字符,但是注意在实际编写代码的过程中别把超出范围的ascii🐎也给记下来。如下为简易的rot13转码脚本 1234567891011def rot_13(content): new_content = [] for s in content: if s.isalpha(): if s.islower(): new_content.append(chr((ord(s)-ord('a')+13)%26+ord('a'))) else: new_content.append(chr((ord(s)-ord('A')+13)%26+ord('A'))) else: new_content.append(s) return...
Linux重定向符绕过
基本概念 关于重新定向符详细解释可参考该篇文章:Linux重定向 简单来说,重新定向符的作用为: 分为覆盖写入以及追加写入两种写入方式,分别用两种符号表示:<,<< 尖的头头代表输出/输入的对象,判断输出输入流,另一侧,符号的”嘴部”后的数据,我们可以判断该数据/指令是用于输出指令还是用于对一个对象进行输入的准备材料。通过这样的判断,我们可以来区分该重定向是输入还是输出。 具体实例可以看我放的博客传送门。 关于错误重定向:典型代码有: 122>&12>>&1 从上到下分别是覆写和追加标准错误输出到标准输出,这里都是在对输出流进行操作。 关于为什么有时不写分号: 1ls -a >/dev/null 2>&1 我们需要明确,在这行代码中,2>&1也是命令的一部分,和前面的ls -a属于一部分,所以中间不需要分号分割。 通俗介绍重定向符 通俗解释在 Linux 等系统中,每个进程默认会有三个数据流:标准输入(stdin,文件描述符为...
命令执行:或运算符脚本绕过
基本概念 基本思路:首先关注该题过滤的符号: 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文件 两者均为服务区器配置文件。 可以利用.user.ini文件中的auto_prepend_file来指定以php方式解析的文件。 例题 以ctfshow154为例 该题首先使用之前的绕过方式,前端后端绕过都无法顺利将木马文件上传。
联合注入
基本概念关于查询的基本概念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[{ "准备阶段": ["公司以诈骗为目的,冒充正规机构"], "事前阶段":...







