- 博客(173)
- 收藏
- 关注
原创 Base 编码家族:Base16 编码
Base 在 计算机编码系统 中则用于表示该编码系统所使用的字符集的大小。Base 描述了该系统的基数,而后面的数字表示这个 基数的具体值。这样的命名方法 直观地 告诉我们这个编码系统使用了多少种不同的字符来表示数据。Base16 编码是一种将二进制数据转换为文本表示的编码方式,它使用 16个字符中的一个 来表示 二进制数值中的 4 个二进制位。在 Base16 编码中,被用于编码的字符与十六进制数值所使用的字符相同,故 Base16 编码又被称为 十六进制编码。
2023-10-21 19:05:24 1318
原创 大河弯弯:CSS 文档流与三大元素显示模式
文档流是指网页上元素的 默认布局顺序。在 CSS 中,显示模式指的是 HTML 元素在文档流中 如何被渲染和布局的一种特性,不同的显示模式决定了元素如何占据空间以及与其他元素相互交互的方式。CSS 中存在 三种十分常见的显示模式,即块级元素,内联元素,内联块级元素。想象你有一本书,这本书中的内容是 从上到下,从左到右 顺序阅读的。同样的,HTML文档的元素默认也是从上到下,块级元素会垂直排列,内联元素会水平排列。
2023-10-20 19:11:55 1921
原创 比特听命:补码的产生过程与整数在计算机中的存储
通过将整数转化为二进制的补码表示,加法和减法运算便可以 使用相同的硬件电路进行处理。当进行 两个正整数的减法运算 时,只需要 将减数理解为负数 再与被减数进行加法运算即可。在进行不同或相同(正负性)符号 的补码运算时,无需对符号位进行特殊处理,符号位与补码中的其他二进制位可一同进行加法或减法运算。在进行加或减的补码运算后,得到的结果是其补码表示。若需要自行将其转化为十进制数,往往需要先通过 逆补码运算,即 进行补码到原码的还原过程。在得到原码后便可 轻松的 将其转化为十进制数。
2023-10-15 16:41:33 403
原创 目录启示:使用 use 关键字为命名空间内的元素建立非限定名称
在 PHP 中,use 关键字的默认操作对象是 类。若您需要将 函数 或 常量 导入至当前命名空间,请在 use 关键字后添加 function 或 const 以告知 PHP 解释器。在 PHP 中,use ... as ... 语句用于导入命名空间中的 类、接口、函数 或 常量并为它们创建一个 别名,以便可以在当前代码块中使用别名来引用相关的元素。
2023-10-14 14:16:49 343
原创 目录启示:PHP 中 命名空间及其成员的访问
在使用 namespace 访问当前命名空间元素时,namespace 后需要紧跟反斜线 \,后跟子命名空间或 其他元素(类、接口、函数 和 常量)。在使用非限定名称对元素进行访问时,类名称 总是基于当前命名空间进行解析。因此 在其他命名空间中尝试访问全局命名空间中的类时,必须使用完全限定名称。在任何 PHP 版本中,使用完全限定名称或限定名称对未定义常量进行访问都将导致 Fatal 异常,PHP 程序都将为此立即终止。
2023-10-14 11:30:20 364
原创 目录启示:PHP 与命名空间的声明
在同一 PHP 脚本文件中,有括号命名空间声明与无括号命名空间声明 不能混用。否则,PHP 将为此抛出 Fatal error 异常并立即停止运行。在 PHP 中,以 PHP 作为名称开头的命名空间通常用于表示 PHP 本身的 核心命名空间。这些命名空间用于组织 PHP 语言 内置的类、接口、函数和常量。虽然您可以在自己的代码中创建以 PHP 开头的命名空间,但最好不要这样做,以 避免混淆和冲突。
2023-10-13 20:58:39 509
原创 沉睡的木乃伊:var_export() 与可解析字符串
var_export() 和 eval() 可以用于实现数据持久化,因为它们共同提供了一种 将数据结构序列化为字符串,然后在需要时重新创建该数据结构的方法。这个过程可以用于将数据保存在文件或数据库中,然后在以后重新加载和使用它。var_export() 生成的输出易于阅读,它以有效的 PHP 代码形式表示变量的 值和类型,使开发人员能够快速理解变量的内容。
2023-10-13 10:45:56 741
原创 具有动态属性支持的通用空类:stdClass
在 PHP8.2.0 废弃动态属性后,stdClass 类仍旧支持动态属性机制,您并不需要尝试为 stdClass 添加 #[\AllowDynamicProperties] 注解。在 PHP 内部,stdClass 常作为一个 容器,用于存储 键值对(键值对是一种数据结构,通常用于将一个值与一个唯一标识符或键相关联。在对象中,键可以理解为属性,值可以理解为属性值)。当 PHP 需要为一些操作创建一个对象,但又 不需要特定的类结构时,就会使用 stdClass。
2023-10-12 11:39:12 600
原创 C++ 与复合数据类型:透过类理解结构体
C++ 最初被设计为 C with classes,它是C语言的一个超集。由于C语言已支持结构体,C++便继承了这一特性。为了确保与 C 的 兼容性,C++ 保持了 struct 的 语法和语义。但为了 利用面向对象的特性,C++ 扩展了 struct,使其与 C++ 中的类 近乎一模一样。尽管 struct 和 class 在语法上 几乎相同,但程序员通常会按照一致的约定来使用它们,例如 使用 struct 来表示纯粹的存储结构(用于存放多种不同数据类型数据的结构),而 使用 class 来表示。
2023-10-11 16:39:46 210
原创 指挥棒:C++ 与运算符
逻辑与运算符仅当前一个操作数的转换结果为 true 时,才会计算后一个个操作数。逻辑或运算符仅当前一个操作数的转换结果为 false 时,才会计算后一个操作数。逻辑与运算符的第前一个操作数的转换结果为 false 以及逻辑或运算符的前一个操作数为 true 时,都将发生 短路,即后一个操作数不会被计算。
2023-10-10 18:24:53 337
原创 C++ 与基本数据类型:整型、布尔型与字符型
数据类型用于确定变量存储的 数据所占用的内存空间大小和支持的操作。数据类型分为基本数据类型和复合数据类型两大类。基本数据类型是编程语言中的原始数据类型,通常由编程语言提供,用于存储 单一的、简单的 数据值。数据类型在 `C++` 中是 `静态类型`,这意味着 `在变量声明时必须指定其数据类型`,编译器在编译时会检查 `类型一致性`,从而提高了代码的稳定性和安全性。选择适当的数据类型对于编写 `高效、可读性强` 的代码非常重要,因为它会影响变量的内存空间占用、运行速度以及程序的正确性。
2023-10-10 16:57:21 927
原创 DATA URL:嵌入 URL 中的数据资源
小尺寸图片、文本等数据 直接嵌入在 URL 中,不需要通过网络连接从服务器中获取。有利于 降低服务器压力,提高 HTTP 请求的效率(HTTP 连接的建立与维护所耗费的资源多用于大型资源),从而提高网页的加载速度。Base64 编码使用的字符集是 URL 兼容的,这意味着它不包含 URL 特殊字符,如问号、斜杠、等号等。因此图片等二进制资源常使用 Base64 进行编码以方便资源的传输。但 Base64 编码通常会导致数据占用空间增大约 33%,这意味着资源在 DATA URL 中占用的内存空间会比原始资源
2023-10-08 10:08:55 2158
原创 CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http
HTTP 请求报文中的 User-Agent 请求头是一个用来 标识发送请求的客户端(通常是浏览器或其他网络应用程序)的字符串。这个字符串通常包含了客户端的应用程序名称、版本号、操作系统信息和一些其他相关的信息,用来 帮助服务器识别请求的来源。User-Agent 请求头的 主要目的 是为了让服务器能够根据客户端的不同特性来适配响应内容,以提供更好的用户体验。
2023-10-07 20:39:32 1929 8
原创 PHP 伪协议:使用 php://input 访问原始 POST 数据
php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。enable_post_data_reading 是 PHP 中的一个布尔配置项,该配置项决定了 是否在 PHP 启动时读取和解析 POST 数据以填充 $_POST 与 $_FILES 超全局变量。在 默认情况 下,enable_post_data_reading 是 开启 的。
2023-10-07 19:11:56 7842
原创 PHP 伪协议:使用 php://filter 为数据流应用过滤器
php://filter 的主要作用是提供一种机制,让您可以轻松地在数据流上应用一个或多个过滤器。convert.base64-encode 与 convert.base64-decode 是 php://filter 所支持的过滤器,使用这两个过滤器等同于使用 base64_encode() 与 base64_decode() 对数据流进行处理。在为 php://filter 指定过滤器时,可以通过 管道符 | 指定多个过滤器(过滤器列表),这些过滤器将按照 从左至右 的顺序 依次 对数据流进行处理。
2023-10-07 13:10:45 3040 1
原创 PHP 行事准则:allow_url_fopen 与 allow_url_include
在开启 allow_url_include 配置项后,PHP 仅能够对远程文件进行读写等文件操作。在开启 allow_url_fopen 配置项后,PHP 将能够通过 include 等函数 将远程文件包含至当前文件并将其作为 PHP 代码进行执行。allow_url_include 的生效依赖于 allow_url_fopen 配置项的开启。自 PHP5.2 版本开始,allow_url_include 配置项的默认配置均为 Off,而 allow_url_fopen 配置项的默认配置始终为 On。
2023-10-06 16:04:59 3040 1
原创 PHP 行事准则:PHP 配置文件
php.ini-production 和 php.ini-developer 是 PHP5.3 及后续版本 提供的两个不同的 PHP 配置文件。在 PHP 中,配置文件是用来控制 PHP 运行时行为 的重要组成部分。PHP 配置文件包含一系列的配置指令,用于 定义 PHP 的工作方式和行为。在 PHP5.3 以前,PHP 官方也提供 PHP 配置文件,即 php.ini-dist 与 php.ini-recommended,分别与此后的 php.ini-development 及 php.ini-produ
2023-10-06 13:30:17 438
原创 古记事法:Windows 下 16 位汇编环境搭建指南(DOSBox-X 篇)
DOSBox-X 是一个 开源的 x86 模拟器,主要用于运行 早期操作系统 MS-DOS 中的应用程序。与原始的 DOSBox 相比,DOSBox-X 提供了 更多的特性并对原有缺陷进行了改进,使其 更加适合用于模拟早期的 PC 环境。如果你希望在不支持 16 位应用程序(如 Debug)的操作系统中使用它们,那么你需要一个模拟器,而 DOSBox-X 就是一个很好的选择。WOW 创建了一个 运行时环境(计算机程序在其执行期间所需的软件和硬件环境),模拟采用旧架构的 Windows。当一个旧的应用程序尝试
2023-10-03 09:21:06 1630
原创 PHP 反序列化漏洞:__PHP_Incomplete_Class 与 serialize(unserialize($x)) !== $x;
__PHP_Incomplete_Class 对象的出现使 serialize(unserialize($x)) !== $x; 也成为了可能。在 PHP 中,当你尝试将序列化文本进行反序列化操作以获得一个 对象 时,若 与序列化文本相关联的类还没有在当前 PHP 上下文中被定义或包含时,PHP 就会使用 __PHP_Incomplete_Class 对象来代替这个对象。
2023-10-02 16:05:03 1232
原创 PHP 反序列化漏洞:身份标识
身份标识即对象的属性所使用的访问修饰符在序列化文本中的体现,私有属性与受保护属性的身份标识分别是 NUL所属类的名称NUL 与 NUL*NUL ,公有属性则无身份标识以与前两者相区分。空字符这类控制字符是无法通过复制粘贴这一操作进行传输的。在尝试利用 PHP 反序列化漏洞时,往往需要使用到 URL。如果将 包含身份标识的序列化文本进行 URL 编码处理,那么其中的 控制字符就能同 URL 一同转移了。
2023-10-02 10:35:41 472
原创 上古神器:十六位应用程序 Debug 的基本使用
在 Debug 中,A 命令即 Assemble 的简写,该命令用于以汇编语言的形式在内存中写入机器指令。Debug 是一个在 MS-DOS 和一些 Windows 系统中提供的命令行工具,用于 诊断程序在运行时产生的错误、异常或意外行为,并据此采取措施来解决问题,以确保程序能够按照预期的方式运行。在早期的 MS-DOS 和 Windows 系统中,Debug 是一个非常有用的工具,尤其是对于 底层(系统级编程) 程序员来说。
2023-10-02 08:24:21 572
原创 PHP 反序列化漏洞:手写序列化文本
我们仍需要 `对 PHP 中各种数据类型的序列化文本的结构有一定认识`。在某些特殊场景下,`手写序列化文本` 才是最好的选择🧙🏻♂️。除字符串前缀 s: 中的字母 对大小写不敏感外,其他数据类型的前缀中的字母都 仅存在一种大小写形式(大写或小写)。在 PHP 中,当对象被序列化时,对象的非公共属性的名称会被特殊处理以表示其可见性。
2023-10-01 13:31:57 401
原创 MD5 绕过第三式:ffifdyop
二进制数据会被转化为 ASCII 字符✨,如果某一个字符串在经过 MD5 哈希后,得到的二进制数据转化为 ASCII 文本后恰能够与周围的文本形成 SQL 注入语句,那么我们就能够绕过限制,成功发起攻击😈。ffifdyop 经过两次转化后得到的结果是 'or'6�]��!r,��b。位于 or 两侧的单引号可以用于闭合两端的单引号,使得 or 不再被 MySQL 认为是字符串,而是一个关键字,发挥着 逻辑或运算符 的作用。
2023-09-30 18:11:15 618
原创 [WUSTCTF 2020]朴实无华:PHP 下的 intval 绕过技巧
在 PHP7.2.5 以下的某个版本以前,intval() 函数无法正确解析字符 E 或 e,于是 intval 在解析到 E 或 e 时立即停止,这导致科学计数法实际并未生效。intval() 在 PHP7.2.5 及以上版本 中的表现符合预期,与我们对科学计数法的认知相符。intval() 函数 在 PHP7.2.5 以下的某个版本以前(仅测试了 PHP7.2.5 与 PHP7.0.0,PHP7.0.0 中,intval() 的表现存在异常,而在 PHP7.2.5 则表现正常。) 表现异常。
2023-09-29 19:29:50 3096
原创 再生之术:Root 密码遗忘的 CentOS8 Stream 解决方案
考虑到 Linux 需要在各种各样的硬件上运行,有些硬件需要 特定的驱动才能进行访问。直接在内核映像中包含所有可能的驱动将使内核映像变得非常庞大。使用 initrd 或 initramfs 可以加载一个 小的、特定的、只包含必要驱动及相关工具的环境。临时文件系统中的 /sysroot 文件包含了实际的 root 文件系统,进入该文件系统不需要经过任何验证。通过 /sysroot 文件,我们将能够 在不使用 root 密码的情况下拥有 root 用户的权限。
2023-09-28 21:22:49 1780
原创 PHP 变动:用于创建常量数组的 define() 与 const
PHP 在 5.6 开始支持常量数组,此版本以前的 PHP 仅支持 Scalar Values(int、 float、string、boolean 或 null) 作为常量值,若将数组作为常量的值,则 PHP 将抛出 Fatal error 异常。与 const 的功能类似,define() 也是 PHP 中用于定义常量的函数。define() 函数 在 PHP7.0.0 版本开始支持定义值为数组的常量。
2023-09-28 21:19:02 866
原创 MD5 绕过第二式:数组绕过
2004 年,王小云院士在密码学大会上宣布 四个国际通用 的哈希算法 MD5、 HAVAL- 128、MD4 和 RIPEMD 已被破解,震惊全球👏。在会上,王小云公布了一种方法,可以更有效地找到哈希函数的两个不同输入,这两个输入会产生相同的哈希值(这一现象被称为哈希冲突)。理论上,为了找到能够产生哈希碰撞的另一数据,可能需要尝试的次数接近 2 的 80 次方💥。但是,王小云的方法大大减少了这个数字,虽然仍然需要巨大的计算量,但这个方法确实暴露了MD5 的潜在弱点。美国对于王小云的研究大为震撼,
2023-09-27 20:32:49 1054
原创 MD5 绕过第一式:弱比较绕过
在 PHP 中,隐式类型转换(Implicit Type Conversion)是指在某些操作中,PHP 会自动 将数据由一种数据类型转换为另一个数据类型,而无需显式地编写 类型转换 代码。在 PHP 中,若弱比较运算符的两个操作数 均为字符串。PHP 将 依据不同 PHP 版本下字符串转化为数值的规则 将两个操作数转化为数值。在 PHP 中,若弱比较运算符的两个操作数分别为 数值 与 字符串。PHP 将 依据不同 PHP 版本的转化规则 将两个操作数中的一个转化为另一种数据类型。
2023-09-27 09:57:21 1332
原创 PHP 变动:PHP 8 版本下字符串与数值的弱比较
PHP8 仍旧保留了隐式类型转换 这一特性,但在字符串与数值的弱比较方面做出了优化。在 字符串与数值的弱比较 过程中,PHP 将 依据字符串的不同 选择 将字符串转换为数值 或 将数值转换为字符串 后再进行比较。具体规则如下:若字符串 符合数值字符串的定义,则 PHP 尝试 将字符串转化为数值 后再进行比较。若字符串 不符合数值字符串的定义,则 PHP 尝试 将数值转化为字符串 后再进行比较。
2023-09-24 12:05:47 810
原创 CTF 全讲解:[SWPUCTF 2021 新生赛]jicao
了解 PHP 弱比较的同学可能会想着通过 POST 提交数据 id=0 来使得判断语句成立。这是由于在 PHP 中,倘若 数值与字符串进行弱比较,则 PHP 会优先将字符串转化为数值后再进行比较。而 wllmNB 转化为数值的结果为零,与 $id 的比较结果将为 true。这样思考有一定的依据,但 忽略了一个事实,即通过 POST 与 GET 向服务器提交的数据都将以 字符串的方式 存储在 $_GET 与 $_POST 中。你以为提交 POST 数据 id=1 后,$id 中存储的数据将为 数值 1 ,而
2023-09-23 14:04:11 1687
原创 PHP 反序列化漏洞:序列化与反序列化
序列化操作将数据结构转换为可以 存储或传输的格式的过程(包裹最基本的功能),其主要目的是 将数据转化为一种通用的格式(虽然快递中的内容千变万化,但你总不能光看快递的外观就知道里面装着什么),以便在不同的环境中使用(世界上可能存在没见过快递的人,但破坏总是人的天赋)😈。
2023-09-22 19:58:24 413
原创 CTF 全讲解:[SWPUCTF 2022 新生赛]webdog1__start
得分项:信息收集、MD5 绕过、弱比较、命令执行漏洞、嵌套 eval()、Linux 命令、URL 编码、信息收集、PHP 源码审计、空格绕过、限制长度
2023-09-17 22:37:20 1193 5
原创 Socket 传情:使用 Python 发送 GET 请求
根据 HTTP/1.1 规范,Host 请求头在请求报文中是 必需的。指定了目标主机及端口号(HTTP 协议默认使用 80 端口),并且在使用 HTTP/1.1 版本的协议中,该字段是 强制性 的。根据 HTTP/1.1 规范,如果服务器接收到的请求没有 Host 请求头字段,服务器应该返回状态码为 400 Bad Request 的响应,表示 请求有误。HTTP 协议规定在 HTTP 报文中,应使用 `CRLF(\r\n)` 作为行结束符。
2023-06-16 18:27:11 1149
原创 Python 类型检测:isinstance() 与 type()
isinstance() 函数用于检查一个对象是否是指定类或其子类的实例。它会考虑继承关系,如果对象是指定类或其子类的实例,返回 True,否则返回 False。type() 函数用于获取对象的实际类型,不考虑继承关系。它返回的是对象的实际类型,而不是对象所属的类或其父类。在 Python 中,我们可以通过 继承(Inheritance) 来创建一个类从另一个类派生的子类。子类继承了父类的属性和方法,并且可以添加自己特定的属性和方法。
2023-06-16 10:52:59 852
原创 Python 内幕揭秘:深度刨析 Windows 系统下的 os.path.join()
在 Windows 系统中,os.path.join() 的本质是 ntpath.join()。os.path.join()函数的实现依赖于不同的操作系统和底层文件系统。在Windows 操作系统中,os.path.join() 使用 ntpath.py 内置模块来处理路径;而在 POSIX 系统(类 Unix 系统)中,则使用 posixpath.py 内置模块来处理路径。
2023-06-15 10:03:54 1905
原创 Python 内幕揭秘:深度刨析类 Unix 系统下的 os.path.join()
在 POSIX 系统(类 Unix 系统)中,os.path.join() 使用 posixpath.py 内置模块来处理路径。在 类 Unix 系统中,os.path.join() 的本质是 posixpath.join()。os.path.join()函数的实现依赖于不同的操作系统和底层文件系统。在Windows 操作系统中,os.path.join() 使用 ntpath.py 内置模块来处理路径;而在 POSIX 系统(类 Unix 系统)中,则使用 posixpath.py 内置模块来处理路径。
2023-06-13 11:36:26 634
原创 Socket 编程:基础概念辨析
BSD UNIX 的套接字 API 成为了其他操作系统的基础,并逐渐演化成为了现代操作系统中使用的标准网络编程接口。BSD UNIX 的套接字 API(Application Programming Interface) 定义了一组函数和数据结构,用于创建、绑定、连接、发送和接收数据等操作。这些 API 为网络编程提供了底层的支持,使得开发者可以使用套接字进行跨网络的通信。套接字(Socket) 是一种 抽象的通信端点,用于在计算机网络中进行 进程间的通信。套接字提供了一种编程接口,允许不同的计算机通过网络
2023-06-12 18:11:32 742
原创 Socket 传情:用 Python 编织 TCP 网络
创建一个监听套接字对象,指定地址族(IPV4 或 IPV6)和套接字类型(TCP 套接字 或 UDP 套接字)。通过使用 bind() 方法为监听套接字指定套接字地址。调用 listen() 方法以指示监听套接字 开始 对客户端的连接请求进行监听。通过调用 accept() 方法接受客户端的连接请求,该方法将返回一个连接套接字及客户端套接字的套接字地址。通过连接套接字与客户端进行通信,使用 recv() 方法接收客户端发送的数据,使用 send() 方法向客户端发送响应。重复步骤 5,直到通信完成。关闭服务
2023-06-12 17:49:42 1637
原创 超越象限:解密 α 碎片的归属问题
将两类坐标系进行叠加后,整个二位笛卡尔坐标系都将被 完全覆盖。角 α / N 的所有可能都将从属于叠加坐标系中的八个区域中的某一个。通过将二维笛卡尔坐标系中的每一个象限划分为 N 份以进行 区域的划分,并以 逆时针方向 按第一象限、第二象限、第三象限及第四象限的顺序 标识区域。若 N 为 负数,则以逆时针方向按第四象限、第三象限、第二象限及第一象限的顺序标识区域。
2023-05-31 20:26:16 771
原创 二维笛卡尔坐标系下的角的概念
由角的动态定义及二维笛卡尔坐标系所提供的方向定义,角的概念也被扩展为了 任意角,任意角具体可分为正角、负角和零角。终边相同角是指具有 `相同` 始边(始边均与 `X` 轴重合)与终边的角。笛卡尔坐标系是由法国哲学家和数学家 笛卡尔(René Descartes)于 17 世纪提出的一种几何表示方法。笛卡尔通过引入坐标系,将 几何问题 转化为 代数问题,从而 使得几何问题的分析和计算成为可能。
2023-05-29 21:29:48 1531
基于 Packet Tracer 的网络模拟实验:依赖于 TACACS+ 与 RADIUS 服务器的 AAA 认证
2023-12-09
Widows 系统下 16 位汇编环境搭建所需工具
2023-10-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人