MD5 绕过第一式:弱比较绕过
文章目录
- 参考
- 环境
- MD5
- 韧性
- 脆弱性
- md5()
- 隐式类型转换
- 字符串连接
- 数学运算
- 布尔判断
- 相等运算符
- 科学计数法
- 科学计数法
- 前缀 0E 与 0e
- PHP8 与 PHP 其他版本下字符串转化为数值的具体规则
- PHP8
- 数值字符串
- 优化
- 其他版本
- 更为详细的讲解
- 字符串与字符串的弱比较
- 字符串与数值的弱比较
- 0e215962017
参考
项目 | 描述 |
---|---|
搜索引擎 | Bing、Google |
AI 大模型 | 文心一言、通义千问、讯飞星火认知大模型、ChatGPT |
PHP 手册 | PHP Manual |
wsfgrdgh | PHP8中字符串与数字的比较更智能 |
PHP RFC 文档 | Saner string to number comparisons |
环境
项目 | 描述 |
---|---|
PHP | 5.5.0 、5.6.8 、7.0.0 、7.2.5 、7.4.9 、8.0.0 、8.2.9 |
MD5
MD5(Message Digest Algorithm 5)
是一种常用的哈希函数算法,用于将 任意长度
的数据转换为 固定长度
的哈希值。MD5
是 MD4
算法的改进版本,由 Ronald Rivest
在 1992
年设计并广泛使用。
MD5 算法的 输出结果
是一个 128
位,即长度为 16
字节的哈希值,通常表示为一个 32 位
的 十六进制数
。
韧性
-
不可逆性
MD5 是一种单向哈希函数
,具有不可逆性的特性。这意味着无法
通过已知的 MD5 哈希值
来准确地确定原始输入数据
。 -
雪崩效应
MD5 的雪崩效应是指对输入数据微小改变
会导致输出哈希值发生巨大变化
的特性。具体来说,即使输入数据只有一个比特位的改变,其计算得到的 MD5 哈希值也会产生全局性的变化
,而不仅仅在修改的位置上体现出差异。 -
唯一性
理想情况下
,对于不同的输入数据,MD5 算法生成的哈希值应该是唯一的。也就是说
,不同的输入数据应该产生不同的哈希值。 -
快速性
MD5 是一种快速计算哈希值的算法,适用于对大量数据进行哈希计算
的场景。
脆弱性
MD5 算法的 哈希输出空间
相对较小,仅有 128
位(仅能容纳 128 位二进制数据),而 输入空间是无限的
,这种 输入与输出的不匹配性
导致了哈希碰撞的 可能性
。攻击者可以使用 巧妙构造的输入数据
,通过精心选择的 碰撞攻击算法
,找到 具有相同哈希值的不同输入
。
-
碰撞攻击
由于 MD5 的设计特点
和算法结构
,使得攻击者能够使用巧妙构造的输入数据来找到碰撞。碰撞攻击的发现使得 MD5 不再适用于对数据完整性和身份验证进行可靠保护。 -
预计算攻击
由于 MD5 的计算速度较快
,攻击者可以预先计算常见输入数据的 MD5 哈希值并将其存储在哈希表中
。这样,在实际攻击过程中,攻击者可以通过将需要进行破解的哈希值与预先计算的哈希值进行比对
来实现对哈希值的快速破解。
md5()
在 PHP 中,md5()
函数用于计算给定字符串的 MD5 哈希值
,该函数采用一个字符串作为输入并返回其 对应的哈希值
。
md5(string $string, bool $binary = false): string
其中:
项目 | 描述 |
---|---|
$string | 要计算 MD5 哈希值的字符串。 |
$binary | 参数值为一个 布尔类型 的数据,用于指定返回的哈希值是 二进制格式 还是 十六进制格式 。默认为 false ,表示返回 十六进制格式 的哈希值,如果设置为 true ,则返回 二进制格式 的哈希值。 |
举个栗子
<?php// 尝试将字符串 Hello World 转换为 MD5 哈希值
var_dump(md5('Hello World'));// 尝试将字符串 12 转换为 MD5 哈希值
var_dump(md5('12'));// 当函数 md5() 的输入值为数值时将自动将非数值数据转换为数值数据
var_dump(md5(12));
执行效果
string(32) "b10a8db164e0754105b7a99be72e3fe5"
string(32) "c20ad4d76fe97759aa27a0c99bff6710"
string(32) "c20ad4d76fe97759aa27a0c99bff6710"
注:
md5
函数的 $binary
参数的值设置为 true
,此时若将转换结果输出至终端中将出现 乱码
的现象。这是因为 PHP 会 自动尝试
将 二进制数据
转换为 可以显示的文本信息
。PHP 会将二进制数据中的 每一个字节
转化为对应的 ASCII 字符
,而转化结果中包含了 部分不可打印字符(回车符、空字符等)
,这些不可见字符将以 乱码
的形式展现。其中,回车符
虽然为 不可见字符
,但在文本中起着将文本内容换行的作用。对此,请参考如下示例:
<?php// 尝试将哈希值以二进制方式输出至终端中
var_dump(md5('Hello World', true));// 尝试将哈希值的二进制表达转换为十六进制后输出至终端中
var_dump(bin2hex(md5('Hello World', true)));
执行效果
由于二进制数据转化为文本的结果中包含不可见字符 换行符
,所以 var_dump(md5('Hello World', true));
的输出结果中以 两行
的形式呈现。
string(16) "�
��d�uA����.?�"
string(32) "b10a8db164e0754105b7a99be72e3fe5"
隐式类型转换
在 PHP 中,隐式类型转换(Implicit Type Conversion)
是指在某些操作中,PHP 会 自动
将数据 由一种数据类型转换为另一个数据类型
,而 无需显式
地编写 类型转换
代码。
PHP 的隐式类型转换会按照一定规则(具体情况具体分析)对操作数进行转换,以使得相关操作 能够正常进行
下去。
字符串连接
在通过使用句点运算符 .
进行字符串连接操作时,PHP 将会尝试将其他数据类型 转换为字符串数据类型
。对此,请参考如下示例:
<?php// 尝试将两个字符串进行拼接
var_dump('Hello ' . 'World');// 尝试将数值与字符串进行拼接
var_dump('1 + 1 = ' . 2);// 尝试将两个数值进行拼接
var_dump(1 . 1);
执行效果
string(11) "Hello World"
string(9) "1 + 1 = 2"
string(2) "11"
数学运算
在通过 数学运算符
进行数学运算时,PHP 将会尝试将其他数据类型的数据 转换为数值类型
。对此,请参考如下示例:
<?php// 尝试对布尔值 true 与数值 1 进行减法运算
var_dump(true - 1);// 尝试对布尔值 true 与 false 进行加法运算
var_dump(true + false);// 尝试进行字符串之间的乘法运算
var_dump('2' * '150');// 字符串 100djdj 将被转换为 100
var_dump('100djdj' / 10);// 字符串 djdj100 将被转换为零
var_dump('djdj100' / 10);
执行效果
int(0)
int(1)
int(300)
int(10)
int(0)
布尔判断
在需要使用布尔值的位置,PHP 将尝试将非布尔值的数据 转换为布尔类型的数据
。对此,请参考如下示例:
<?php// 尝试将空字符串转换为布尔值
if(''){print('Hello World' . "\n");
}// 尝试将字符串 Hello World 转换为布尔值
if('Hello World'){print('Hello China' . "\n");
}// 尝试将数值 999 转换为布尔值
if(999){print('久久久' . "\n");
}
执行效果
Hello China
久久久
相等运算符
在 PHP 中存在两种相等运算符,即弱类型相等运算符 ==
和强类型相等运算符 ===
,两者都可以用于判断两个操作数是否相等,但存在一些区别。
两者的 区别
在于,弱类型相等运算符
在对操作数进行比较之前,将 自动
进行类型转换以 使两者所属的数据类型相同
。而 强类型相等运算符
在进行比较时,要求两个值的 类型
和 值
都必须 完全相同
,不进行类型转换
。对此,请参考如下示例:
<?php// 在通过弱类型比较运算符对数值与字符串进
// 行比较时,PHP 优先将字符串转换为数值。// 由于两者转换为同一类型后,值相同,
// 故将返回 true。
var_dump('123' == 123);// 由于两者的数据类型及值均不相同,故
// 将返沪 false。
var_dump('123' === 123);
执行效果
bool(true)
bool(false)
科学计数法
科学计数法
在 PHP 中,e
与 E
均表示 科学计数法(Scientific Notation)
。科学计数法由 基数
和 指数
两部分组成,常用于
表示非常大或非常小的数值。
在科学计数法中,基数 通常
是一个浮点数,介于 1
到 10
之间,而指数是一个整数,表示要将基数乘以 10
的多少次方。基数与指数之间以字符 e
或 E
进行分隔。
举个栗子
<?php// 3.78 * 10 ^ 3
var_dump(3.78e3);// 3 * 10 ^ -1
var_dump(3E-1);
执行效果
float(3780)
float(0.3)
前缀 0E 与 0e
零的任何指数次幂都为零
,因此以 0E
或 0e
为前缀的科学计数法表示的数值的结果都将为数值零。对此,请参考如下示例:
<?phpvar_dump(0e3280);
var_dump((float)'0e30284083');
var_dump((float)'0esjlfjsld');
执行效果
float(0)
float(0)
float(0)
PHP8 与 PHP 其他版本下字符串转化为数值的具体规则
PHP8
数值字符串
数值字符串
是指一个包含数字字符的字符串,数值字符串可以用于直接表示一个数值。
举个栗子
"123"
"-42"
"+384""3.14"
"-0.5"
"0.0000"
"00000000.0000""2.5e3"
"1.2e-2"
"+42.0E0""0004746"
"0305940"
" 484748 "
" 4847 "
" 3847"
注:
- 包含
代表其他进制(非十进制)数值的符号
的字符串不能被称为数值字符串(数学中通常不使用这些符号来标识其他进制的数值
),如0x1F
、0b10101
等字符串。在 PHP 中,八进制数值
通过前导零
来表示,但在数值字符串中
,前导零将被视为普通数字,不具备标识八进制数值的功能
。 - 如果存在将其他进制(非十进制)的字符串转化为数值的需求,可以考虑使用
intval()
等函数进行显式类型转化。 包含空格等空白字符的字符串
为什么也可以是数值字符串?你可以理解为一眼望去是数值的就是数值字符串
😔。
优化
PHP8 仍旧保留了隐式类型转换
这一特性,但在字符串与数值的弱比较方面做出了优化。在 字符串与数值的弱比较
过程中,PHP 将 依据字符串的不同
选择 将字符串转换为数值
或 将数值转换为字符串
后再进行比较。具体规则如下:
- 若字符串
符合数值字符串的定义
,则 PHP 尝试将字符串转化为数值
后再进行比较。 - 若字符串
不符合数值字符串的定义
,则 PHP 尝试将数值转化为字符串
后再进行比较。
其他版本
在 PHP 的 隐式类型转换过程
中,字符串转化为数值的具体规则如下:
- 若字符串的
首个字符不为数字且不为空格等空白字符
,则将该字符串转化为零。 - 若字符串的
首个字符不为数字但为空格等空白字符
,则尝试读取其余字符,将遇到数字前的所有空白字符均转化为零,将遇到数字后的所有空白字符视为非数字字符;在遇到非数字字符时停止对字符串的读取并将已读取字符转化为数值
。 - 若字符串的
首个字符为数字
,则尝试读取其余字符,在遇到非数字字符(除符合科学计数法格式的字符 e 或 E外)时停止对字符串的读取并将已读取字符转化为数值
。
举个栗子
目标字符串 | 转化结果 |
---|---|
Hello123 | 0 |
1Hell2o3 | 1 |
0x8aHello123 | 0 |
9.384Hello | 9.384 |
0008743738Hello948 | 8743738 |
1.223e100 | 122.3 |
注:
PHP 在执行字符串到数值的隐式类型转换过程,均 以十进制表示法
为依据。同上述例子一般,0x8aHello123
中的 0x8a
并不会被识别为十六进制数,由于十进制中不存在 x
,故 PHP 在识别到字符 x
时就将立即停止读取并将读取到的字符串 0
转化为数值,故最终的转化结果为零。
更为详细的讲解
如果对 PHP8 与 PHP 其他版本下字符串转化为数值的规则希望能有更为详细的讲解,可以参考我的另一篇博客 PHP 变动:PHP 8 版本下字符串与数值的弱比较。
字符串与字符串的弱比较
在 PHP 中,若弱比较运算符的两个操作数 均为字符串
。PHP 将 依据不同 PHP 版本下字符串转化为数值的规则
将两个操作数转化为数值。
在 MD5 的绕过过程中,常常使用 MD5 加密结果符合如下格式
的字符串:
前缀为 `0e` 或 `0E` (后续格式说明仅针对 PHP 8 及以上版本)且后续字符均为数字的字符串。
而 byGcY
和 0e215962017
就是符合这一规则的字符串。
攻击目标中若存在 包含 MD5 解密的弱比较环节
,我们便可以使用这么一些字符串尝试 使得判断结果朝符合我们的预期
。
举个栗子
<?php# 变量 $user_input 中存放着用户的输入
$user_input = '0e215962017';# != 为弱类型不等运算符,强类型不等运算符为 !==
if (md5('byGcY') != md5($user_input)) {print("Come to my city" . "\n");
} elseif ("Hack Me" == md5($user_input)) {print("Be my king" . "\n");
} else {print("Look at my invincible defense" . "\n");
}# byGcY 与 0e215962017 的 MD5
# 加密结果均以 0e 为前缀,且 md5() 函数的返回
# 结果的数据类型为字符串,故将发生字符串到数值的
# 隐式类型转化。
var_dump(md5('byGcY'));
var_dump(md5($user_input));
执行效果
Look at my invincible defense
string(32) "0e591948146966052067035298880982"
string(32) "0e291242476940776845150308577824"
注:
在 PHP 中,若弱类型比较运算符的操作数 均为字符串
,当且仅当字符串操作数在当前 PHP 版本中均能够转化为数值时
,PHP 才会将其转化为数值进行比较。否则,按照字符串的比较规则进行比较。
字符串与数值的弱比较
在 PHP 中,若弱比较运算符的两个操作数分别为 数值
与 字符串
。PHP 将 依据不同 PHP 版本的转化规则
将两个操作数中的一个转化为另一种数据类型。
同 字符串与字符串的弱比较一般
,当攻击目标中存在 包含 MD5 解密的弱比较环节
,可以通过构造字符串利用弱比较规则 使得判断结果朝符合我们的预期
。
举个栗子
<?php$user_input = '0e215962017';
$hello = 'Hello WOrld';if (0.000 != md5($user_input)) {print("Come to my city" . "\n");
} elseif (68 == md5($hello)) {print("Be my king" . "\n");
} else {print("Look at my invincible defense" . "\n");
}# 由于 $hello 中的 MD5 加密结果以数字 68 开头,在
# PHP8 以下版本中,该字符串将被转化为数值 68。
var_dump(md5($hello));
执行效果
上述示例在 PHP8 以下版本
中的运行结果为:
Be my king
string(32) "68c131c6982a0bbbbae667624d8eca7d"
上述示例在 PHP8 版本
中的运行结果为:
Look at my invincible defense
string(32) "68c131c6982a0bbbbae667624d8eca7d"
0e215962017
0e215962017
这个字符串比较特殊,因为 该字符串及该字符串的 MD5 加密结果均以 0e
为前缀。在参加有关 MD5 绕过的安全竞赛时,你可能将遇到与如下类似的题目:
<?php$user_input = '0e215962017';if ($user_input == md5($user_input)) {print("Come to my city,Be my king" . "\n");
} else {print("Look at my invincible defense" . "\n");
}var_dump(md5($user_input));
执行结果
Come to my city,Be my king
string(32) "0e291242476940776845150308577824"
相关文章:
MD5 绕过第一式:弱比较绕过
文章目录 参考环境MD5韧性脆弱性md5() 隐式类型转换字符串连接数学运算布尔判断相等运算符 科学计数法科学计数法前缀 0E 与 0e PHP8 与 PHP 其他版本下字符串转化为数值的具体规则PHP8数值字符串优化 其他版本更为详细的讲解 字符串与字符串的弱比较字符串与数值的弱比较0e215…...
红黑树是如何实现的?
文章目录 一、红黑树的概念二、红黑树的性质三、红黑树和AVL树对比四、红黑树的插入1. 红黑树的结点定义2. 父亲的颜色3. 叔叔的颜色为红色4. 叔叔不存在5. 叔叔存在且为黑6. 插入的抽象图 五、红黑树的验证1. 检查平衡2. 计算高度与旋转次数3. 验证 六、 红黑树与AVL树的比较 …...
实验室没人导该怎么办
实验室没人教该怎么办 Q: 国内top5高校研一,课题开始老板就给了一个大方向,之后怎么做实验都是自己看文献研究的,终于开始动手做实验,才发现别人根本不想管你,宁愿抱着电脑看剧也不想教你,十分焦虑,该怎么办? A: 按照大多数实验室的惯例,老板一定会指派一个小老板…...
pytest简明教程
1. 简介 pytest是一款基于Python的测试框架。与Python自带的unittest相比,pytes语法更加简洁,断言更加强大,并且在自动测试以及插件生态上比unittest都要更加强大。 1.1. 安装pytest pip install pytest1.2. pytest命名规则 pytest默认会…...
解决方案:解决https页面加载http资源报错
HTTPS页面加载HTTP资源会报错的原因是出于安全性考虑。 HTTPS(HyperText Transfer Protocol Secure)是一种通过使用SSL/TLS加密通信来保护数据传输的协议,它确保了客户端和服务器之间的安全连接。 当HTTPS页面尝试加载非加密的HTTP资源时&a…...
嵌入式开源库之libmodbus学习笔记
socat 安装sudo apt-get install socat创建终端 socat -d -d pty,b115200 pty,b115200查看终端 ls /dev/pts/ minicom 安装 sudo apt-get install minicom链接虚拟终端 sudo minicom -D /dev/pts/3以十六进制显示 minicom -D /dev/pts/1 -H设置波特率 minicom -D /dev/pts/1…...
Spring MVC 中的数据验证技术
一、前言 在Web开发中,数据验证是不可或缺的一部分。Spring MVC 框架提供了强大的数据验证支持,可以帮助我们轻松地对用户提交的数据进行验证。 二、实现 Spring MVC 使用 JSR-303 验证规范(Hibernate Validator 是其参考实现)…...
windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error
问题描述 今天在学习nginx时,想在hosts配置一个nginx的域名映射,但是发现访问nginx服务的ip时可以访问通,在dos命令窗口ping配置的域名映射也可以ping通,但是一旦在浏览器通过http请求访问配置的hosts域名映射时却出现 500 Inter…...
如何将图片转为ico格式
这里主要是记录一个网站,如果你有更好的办法欢迎留言~ ico简介 ICO(Icon)是一种用于表示图标的文件格式,常用于Windows操作系统中。ICO格式的图片通常用于表示应用程序、文件夹、网站等的图标。 ICO文件可以包含多个图标&#x…...
ElasticSearch - 基于 JavaRestClient 操作索引库和文档
目录 一、RestClient操作索引库 1.1、RestClient是什么? 1.2、JavaRestClient 实现创建、删除索引库 1.2.1、前言 1.2.1、初始化 JavaRestClient 1.2.2、创建索引库 1.2.3、判断索引库是否存在 1.2.4、删除索引库 1.3、JavaRestClient 实现文档的 CRUD 1.3…...
【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法
论文题目:《MagFace: A Universal Representation for Face Recognition and Quality Assessment》-CVPR2021 论文地址:https://arxiv.org/abs/2103.06627v4 代码地址:https://github.com/IrvingMeng/MagFace...
FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持
目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…...
智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?
我们来看一条七年前的真实新闻报道,2016 年《福布斯》在报道中提到“2020 年会有 1000 万台的自动驾驶汽车”。然而 2023 年的现在,真正实现 L4 级别自动驾驶的汽车,仍然远远没有达到这个预测的数量。 另一边,数据显示,…...
APScheduler包——python tornado框架中实现定时任务
介绍: APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时…...
BASH shell脚本篇3——字符串处理
这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能…...
【SSL】用Certbot生成免费HTTPS证书
1. 实验背景 服务器:CentOS7.x 示例域名: www.example.com 域名对应的web站点目录: /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…...
报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist
Linux大小写区分,导致部署项目时MySQL出现错误 问题原因:找不到Teacher这张表。因为在windows下的mysql表名不区分大小写,所以在windows下运行项目没问题。在linux中,mysql会区分大小写,所以sql语句表名用大写的就会找…...
.NET的PLC帮助类
TCP和UDP协议: TCP(传输控制协议)和UDP(用户数据报协议)是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务,但具有不同的特性和功能。 TCP协议是一种提供可靠、面向连接的字节流服务的传输协…...
Linux中nfs:failed: Operation not supported
先给出思路: 一个简单粗暴的方式:卸载重装排除未知问题,步骤如下: 一、在 Linux 上卸载 NFS 服务器,步骤: 停止 NFS 服务: sudo service nfs-kernel-server stop如果您使用的是不同的发行版&am…...
ElasticSearch映射与模板介绍
一、前言 前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用,ES现在已升级到8.5版本,有些概念和SDK用法都有很大变化,后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。 二、映射 ES环…...
通过 Azure 日志分析加强云安全
Microsoft Azure 云服务在安全日志存储、访问、可伸缩性、降低成本和易于部署方面提供了巨大的优势,因此在企业中很受欢迎。 Microsoft Azure 日志记录工具(如 Log360)可帮助管理 Azure 云基础结构中所有设备和应用程序(如虚拟机…...
[H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试
模式:按照上述抓图,actions层,1帧,写初始化代码,10帧写返回代码到2帧代码,2-10帧之间一直循环。1帧及10帧代码如下: 如果程序在1-10之间循环,会反复创建变量i,多个监听器等。所以,第一帧最好执行一次即可,程序在2-10帧之间一直循环。...
基于SpringBoot的服装生产管理系统的设计与实现
目录 前言 一、技术栈 二、系统功能介绍 登录界面的实现 系统主界面的实现 用户管理模块的实现 人事安排管理模块的实现 工资管理模块的实现 考勤管理模块的实现 样板管理模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本协力服装厂服装生…...
动态内存操作(2)
接上一篇文章http://t.csdn.cn/1ONDq,这次我们继续讲解关于动态内存的相关知识。 一、常见的动态内存错误 1.对NULL指针进行解引用操作 #include<stdio.h> #include<stdlib.h> #include<limits.h> int main() {int* p (int*)malloc(INT_MAX/4);…...
Windows-Delphi 窗口置顶
露从今夜白,月是故乡明。 1.Delphi将窗口置顶 if topHwnd <> 0 thenbeginSetWindowPos(topHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);tmr1.Enabled : True;end; 其中topHwnd是目标窗口的句柄。 2.窗口取消置顶 if topHwnd <> 0 th…...
CVE-2020-11978 Apache Airflow 命令注入漏洞分析与利用
简介 漏洞软件:Apache Airflow影响版本:< 1.10.10 环境 Vulhub 漏洞测试靶场 复现步骤 进入 /root/vulhub/airflow/CVE-2020-11978/ 目录运行以下命令启动环境 # 初始化数据库 docker compose run airflow-init # 开启服务 docker compose up -…...
面试经典算法1:DFS
一、前言 1、题目描述和代码仅供参考,如果有问题欢迎指出 2、解题代码采用acm模式(自己处理输入输出),不采用核心代码模式(只编程核心函数) 3、解题代码采用C语言(ai一键翻译任意语言ÿ…...
Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!
文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…...
SmartCode ViewerX VNC 3.11 Crack
SmartCode ViewerX VNC 查看器 ActiveX 轻松地将 VNC 查看器功能添加到您的应用程序中 SmartCode ViewerX VNC Viewer ActiveX 使开发人员可以使用一组直观的 ActiveX 属性和方法完全访问 VNC 查看器功能。借助ViewerX控件,开发人员可以轻松地为其应用程序提供屏幕共…...
傻瓜式Java操作MySQL数据库备份
文章目录 前言存储数据库存储数据表 前言 数据库备份是开发工作中经常要做的事情,好处是mysql提供了一个非常好的命令 mysqldump,直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便,遇到定时备份或者指定备份那么就需…...
网站建设北京贵/郑州网站制作
一、Hadoop简介 Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。 HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datan…...
免费用的云服务器/seo网站排名软件
在这里插入代码片45个Vue开源项目汇总在过去的一年里,我们比较了将近 12,000 个 Vue.js 开源项目和库,从中挑选了最好的 45 个 这些项目和库可以分为 3 类:1.用户界面(1~19)2.Vue.js 工具(20~36)3.项目(37~45)这是一个非常好的清单,精心挑选了 2018 年 1 月至 12 月期…...
团队网站模板/盐城seo排名
从MySQL binlog得到你要的SQL。根据不同设置,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL,带来的衍生功能 安装 $ git clone https://github.com/danfengcao/binlog2sql.git …...
建网站空间的详细说明/seo网站推广计划
概念在Java中,对象的生命周期包括以下几个阶段:创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶段(Unreachable)收集阶段(Collected)终结阶段(Finalized)对象空间重分配阶段(De-allocated)Java对象在JVM中的生命周期当你通过new语句创建…...
网站网站优化/长沙网站建设公司
1、什么是Mybatis?(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格…...
网页设计师必须知道的网站/汕头seo服务
HQChart使用教程29-走势图如何对接第3方数据6-websocket分钟数据介绍流程图部分代码设置网络协议回调获取分时图实例和更新回调websocket接收到数据注意点demo地址介绍 hqchart内部没有websocket数据源,所有只能通过外部数据源挂接的方式,挂接第3方webs…...