Web漏洞分析-SQL注入XXE注入(中上)

news2024/11/18 19:34:44

      随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原理、攻击方式和防御策略。
       SQL注入是一种臭名昭著的攻击方式,通过在输入框中插入恶意SQL语句,黑客可以绕过身份验证,进而访问、篡改或删除数据库中的数据。我们将探讨SQL注入的不同形式,以及如何通过正确的输入验证和参数化查询等手段来有效预防这类攻击。
       另一方面,XXE注入则利用XML处理器解析XML输入时的弱点,使攻击者能够读取本地文件、发起远程请求等。我们将详细分析XXE注入的工作原理,并介绍如何使用安全的XML解析器配置来降低风险。通过了解这两种漏洞的内在机制,我们希望能够为开发者、安全从业者以及对网络安全感兴趣的人们提供关于Web应用安全的深度认识。在这个信息互联的时代,保护我们的Web应用免受SQL注入和XXE注入等威胁是至关重要的。

三、SQL盲注

1、SQL盲注概述

(1)、正确浏览器前端反应

(2)错误浏览器前端反应

如果数据库运行返回结果时只反馈对错不会返回数据库兰中的信息此时可以采用逻辑判断是否正确的盲注来获取信息

(3)、盲注是不能通过直接显示的途径来获取数据库数据的方法

在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。一般情况下,盲注可分为三类:

①、布尔盲注

②、时间盲注

③、报错型盲注

(4)、报错型盲注

①、正确时浏览器前端的反应

②、错误时浏览器前端的反应

(5)、布尔盲注

某些查询是不需要返回结果的,仅判断查询语句是否正确执行即可,所以其返回可以看做一个布尔值,正常显示为true,报错或是其他不正常显示为false。

①、查询语句

SELECT userid FROM member WHERE u_name=$Sname AND u_pass=$pass;

②、注入语句

name=-1' and (select mid(u name,1,1) from member where userid=1)='a'

name=-1' and (select mid(u_name,2,1) from member where userid=1)='d'

name=-1' and (select mid(u name,3,1) from member where userid=1)='m'

name=-1' and (select mid(u name.4,1) from member where userid=1)='i'

name=-1' and (select mid(u name5,1) from member where userid=1)='n'

(6)、时间盲注

某些查询是不需要返回结果的,仅判断查询语句是否正确执行即可,,但是由于某些限制,布尔盲注的关键字符带入不进去,这时候可以使用sleep来进行时间盲注,取页面执行时间(结束时间-开始时间)来判断sleep函数是否正常执行,所以其是否正常执行可以看做一个布尔值,正常显示为true,报错或是其他不正常显示为false

①、查询语句:

SELECT userid FROM member WHERE u name=$name AND u_pass=$pass;

②、注入语句

name=-1' and (select mid(u name,1,1) from member where userid=1)='a' and (select sleep(3))

name=-1' and (select mid(u name,2,1) from member where userid=1)='d' and (select sleep(3))

name=-1' and (select mid(u name,3,1) from member where userid=1)='m' and (select sleep(3)

name=-1' and (select mid(u name,4,1) from member where userid=1)-'i' and (select sleep(3))

name=-1' and (select mid(u name,5,1) from member where userid=1)='n' and (select sleep(3))

(7)、二分法SQL盲注示例

2、SQL盲注常用函数

(1)、使用条件语句

(2)、布尔型

left(a,b)从左侧截取 a 的前 b 位:left(database0,1)>'s'

substr(a,b,c)从 b 位置开始, 截取字符串 a的 c长度

Ascii()将某个字符转换为 ascii 值:ascii(substr(user),1,1]]=101#

mid(a,b,c)从位置 b 开始,截取 a字符串的 c位:

regexp正则表达式的用法,user()结果为 root, regexp 为匹配 root 的正则表达式:selectuser()

(3)、常见报错注入函数

①、floor(Mysql): and (select 1 from (select count(*),concat(version0,floor(rand(0)*2))x

from information schema.tables group by x)a);

②、Extractvalue(Mysql): and extractvalue(1, concat(0x5c, (select table name from information schema.tables limit 1)));

③、Updatexml(Mysql) :and 1=(updatexml(1,concat(0x3a,(select user())),1))

④、EXP: Exp(~(select * from (select user0)a))

⑤、UTL INADDR.get host address(Oracle): and 1=utl inaddr.get host address((select banner(from svs.v Sversion where rownume

(4)、函数

①、left(a,b)函数

(1)、LEFTO函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。LEFT(str,length);

如果str或length参数为NULL,则返回NULL值。

(2)、str是要提取子字符串的字符串

(3)、length是一个正整数,指定将从左边返回的字符数

②、left () 函数

(1)、length为0或为负,则LEFT返回一个空字符串

(2)、length大于str字符串的长度,则LEFT返回整个str字符串

③、length ()函数

(1)、Length () 介绍

(2)、返回字符串str的长度,以字节为单位。一个多字节字符算作多字节

(3)、在mysql内置函数里面查看字符串长度的还有一个函数是char length,两个函数的区别是:length:一个汉字是算三个字符,一个数字或字母算一个字符。 char length: 不管汉字还是数字或者是字母都算是一个字符。

(4)、这意味着对于包含五个两字节字符的字符串LENGTH()返回10,而CHAR_LENGTHO返回5

④、substr ()或substring函数

(1)、SBUSTR(str,pos); 就是从pos开始的位置,一直截取到最后

  1. 、SUBSTR(str,pos,len);表示从pos开始的位置,截取len个字符(空白也算字符)

⑤、ord ()和mid ()函数

(1)、函数ord()函数返回字符串str的最左面字符的ASCII代码值。

(2)、函数mid()用于得到一个字符串的一部分。这个函数被MySOL支持,但不被MS SQL Server和Oracle支持。在SQLServer,Oracle 数据库中,我们可以使用 SQL SUBSTRING函数或者 SQLSUBSTR函数作为替代。

⑥、cast()和convert()函数

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。

⑦、ifnull ()函数

IFNULL(A,B)意义是当字段A是NULL时取B,不是NULL时取A的值

⑧、延时函数sleep ()或benchmark()

通过在MySQL中执行select sleep(N)可以让此语句运行N秒钟

前提条件:指定条件的记录存在时才会停止指定的秒数

例如:查询条件为name=’pig’,结果表明记录不存在,执行时间为0

基于时间的盲注在使用延迟函数上可以有两个选择:

BENCHMARK(count,expr)函数,

(2) sleep(time)函数

前者通过将 expr语句执行 count次来达到延迟的目的,后者是直接延迟 time时间。

benchmark是Mysql的一个内置函数,其作用是来测试一些函数的执行速度。benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式。

⑨、Xpath类型函数(MysglVersion >=5.1.5)

(1) updatexml ()函数功能:改变文档中符合条件的节点的值

UPDATEXML (XML document, XPath string, new_value);

第一个参数:XML document是String格式,为XML文档对象的名称

第二个参数: XPath_string (Xpath格式的字符串)

第三个参数: new_value,String格式,替换查找到的符合条件的数据

updatexml最多只能显示32位,超过长度可以配合substr()

⑩、Xpath类型函数

(1) extractvalue ()函数功能:对XML文档进行查询的函数,其实就是相当于HTML文件中用标签查找元素。

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/...这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法的内容就是想要查询的内容。

、其他函数

Floor()+count()+group by

Exp()

Bigint (Mysql Version >=5.4.45)

、SQL盲注常用函数应用

实验:基于SQLI平台Less-5的报错盲注利用

3、SQL时间盲注利用

1)、时间盲注

SQL时间类型的盲注本质是利用插入的SQL语句执行造成时间延迟

(2)、MySQL时间盲注几种延时方法

(3)、MySQL时间盲注几种延时方法

①、get lock函数()需要使用 mysgl_pconnect函数来连接数据库在一个session中可以先锁定一个变量例如: select get_lock(do9gy,1)

②、然后通过另一个session 再次执行get_lock函数 select get_lock(‘do9gy’,5),此时会产生5 秒的延迟,其效果类似于sleep(5)。

(4)、MySQL时间盲注几种延时方法

①、笛卡尔积

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积 (Cartesian product)又称直积,表示为XxY,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

(5)、SQL时间盲注利用

实验:基于SQLI平台Less-9的时间盲注利用

4、SQL布尔盲注利用

(1)、MySQL布尔盲注

Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息。

(2)、SQL布尔盲注利用(实验关注获取)

实验:基于SQLI平台Less-8的布尔盲注利用

四、SQLmap

1、SQLMAP简介

(1)、SQLmap

SOLMAP是一个自动化的SOL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞。

2、SQLMAP安装

(1)、SQLMAP安装

官网:

http://sqlmap.org

Github:

https://github.com/sqlmapproject/sqlmap

注意问题: 安装之前系统需要配置Python2.7环境

3、SQLMAP参数

(1)、验证方法

sqlmap.py -u www.test.com/index.php?id=1

(2)、验证过程

①、判断可注入的参数

②、判断可以用哪种SQL注入技术来注入

③、识别出所有存在的注入类型

④、尝试去判定数据库版本,开发语言,操作系统版本

(3)、获取目标的方式

①、参数 :-m 从文件中取出保存的url进行检测

②、参数: -r 从文本文件中获取http请求

③、参数:-g 测试注入Google的搜索结果的GET参数

④、参数: -l从Burp或者WebScarab代理中获取日志

⑤、参数: -u 直接输入目标URL

(4)、请求目标的相关方式

①、参数 :--data 把数据以POST方式提交

②、参数:--param-del GET或POST的数据用&以外的其他字符分割

③、参数:--cookie,--load-cookies,--drop-set-cookie 设置cookie

④、参数: --referer 伪造HTTP中的referer

⑤、参数:--headers 增加额外的http头

⑥、参数:--timeout 设置超时时间

⑦、参数: --retries 设置重试次数

(5)、注入测试相关参数

①、参数 :--level 探测等级。共有七个等级,默认为1

②、参数:--risk 风险等级,共4个

③、参数: -p,--skip手动用-p参数设置想要测试的参数,--skip设置跳过的参数

(6)、注入技术参数

①、参数 :--technique 指定sqlmap使用的探测技术

②、参数:--time-sec 设定延迟注入的时间

③、参数:--union-cols 设定UNION查询字段数

④、参数:--second-order 设置二次注入的url

7)、列数据相关参数

①、参数:--b,--banner 列出版本号

②、参数:--current-db 返当前使用的数据库

③、参数:--users 列出所有管理用户

④、参数:--passwords 列出并破解数据库用户的hash

⑤、参数:--privileges 列出数据库管理员权限

(8)、与操作系统权限获取相关的参数

(9)、探测WAF相关的参数

(10)、绕过WAF相关的参数

SQLMAP中有一个tamper目录,主要存放的是WAF绕过脚本,比如:

base64encode.pybetween.py、greatest.py等。

4、SQLMAP使用

(1)、SQLMAP的注入场景

①、基于布尔的盲注:即可以根据返回页面判断条件真假的注入

②、基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加) 来判断。

③、根据用户选择,读取哪些数据

④、基于报错的注入: 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

⑤、联合查询注入:可以使用union的情况下的注入

⑥、堆查询注入:可以同时执行多条语句的执行时的注入。

(2)、常见用法:

①、sqlmap -u http://192.168.0.110/page.php?id=10 --current -db //爆当前库

②、sqlmap -u http://192.168.0.110/page.php?id=10 -D数据库名 -tables //爆表段

③、sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 -T表名columns //爆字段

④、sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 -T表名 -C 字段名,字段名,字段名...(互相用逗号隔开) --dump 显示数据

(3)、爆当前库

sqlmap -u http://192.168.0.110/page.php?id=10 --current -db

(4)、爆表名

sqlmap -u http://192.168.0.110/page.php?id=10 -D数据库名 --tables

5)、爆字段

sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 T表名-coumns

5、SQLMAP实例

(1)、实验1:

 基于SQLI平台的Less-8 (布尔盲注) Less-9(时间盲注)Less-18 (文件头注入) 中的sqlmap注入 (tech参数)

(2)实验2:

 基于SQLI平台的Less-11 (POST型注入) (form参数)

6、SQLMAP的tamper功能

(1)、SQLMAP的tamper功能

①、SQLMAP中有一个tamper目录,主要存放的是WAF绕过脚本,比如:base64encode.py、between.py、greatest.py等。

②、tamper脚本是SQLMAP的中用于绕过WAF或应对网站过滤逻辑的脚本,SOLMAP的自带了一些tamper脚本,可以在SQLMAP的的tamper目录下查看他们。用户也可以根据已有的tamper脚本来编写自己的tamper脚本 (绕过逻辑)

主要存放的是WAF绕过脚本,比如: base64encode.py、between.py、greatest.py等

(2)、SQLMAP的插件的用法示例:

$ sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get int.php?id=1" --tampertamper/

betweenpy,tamper/randomcasepy, tamper/space2comment.py -v 3

多个tamper脚本之间用空格隔开

(3)、Tamper脚本编写

如图所示便是一个相对完整有效的tamper脚本

其作用是接过要执行的payload,进行相应的绕过逻辑后,返回修改后的payload

①、等号被过滤了----->[equaltolike.py]0------>like代替等号

Example:

*Input: SELECT*FROM users WHERE id=1

*Output: SELECT* FROM users WHERE id LIKE 1

②、替换字符和单引号被过滤---[apostrophenullencode.py]()

Example:

("1 AND 1'='1")

"1 AND %00%271%00%27=%00%271'

③、url编码转换------>[charencode.py]()

SELECT FIELD FROM%20TABLE编码后:

%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

(先把字符串转成ASCII编码,然后再转成十六进制)

比如“\”,它的ascii码是92,92的十六进制是5c,“\”的url编码就是%5c

④、字符串 unicode 编码绕过--->[charunicodeencode.py]()

SELECT%20FIELD%20FROM TABLE

编码后:

%u0053%u0045%u004cu0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%0044%u0020%u0046。。。。

Unicode编码的字符以%u为前缀,后面是这个字符的十六进制unicode的码点。

⑤、SQLMAP的tamper功能实验

实验1: sqlmap的tamper原理

实验2: sqlmap-tamper脚本编写

7、SQLMAP检测原理剖析

(1)、SQLMAP的漏洞检测过程,包括前置发包 (一系列探子请求) 、布尔盲注、错误注入、union注入、时间盲注这五个过程

两个基础检测算法 (响应相似度对比技术,高斯分布识别响应机制)

①、响应相似度对比技术在SQLMAP中大量使用;

②、高斯分布识别响应机制在unin注入 (selectnull列数探测技术和时间盲注过程中使用)

(2)、SQLMAP检测之前置发包

在SQLMAP检测SOL注入点的过程中,会有一系列前置发包,这些前置发包主要包括下述一些发包检测逻辑:

  • 网站连通性检测:目的为网站连通性检测
  • WAF探测:目的为检测网站是否受WAF保护
  • 网页稳定性检测:目的为检测网页是否稳定
  • 参数动态性检测:目的为检测参数是否具有动态性
  • 启发式注入检测:目的为探测该参数点是否是动态的、是否为可能的注入点。payload生成是由," ()六种字符随机组成的长度为10的字符串
  • 误报检测: 布尔盲注中使用响应相似度分析技术来确定是否存在注入点,时间盲注中使用高斯算法来确定是否存在注入点,这两种判断方式存在误报的可能,为了防止误报,SQLMAP引入误报检测机制。

(3)、响应相似度对比技术

①、在SQLMAP检测的整个过程中,会有一个原始响应的定义,指的是在网站连通性检测的过程中如果网站成功响应,则把该响应定义为原始响应(包括状态码、HTTP响应头、HTTP响应体)

②、SQLMAP中,原始响应作为对比过程中被对比的对象,一个请求成功响应后,与原始响应进行对比,得出对比结果。

③、算法输出为True表示当前响应与原始响应相似,算法输出为False表示当前响应与原始响应不相似

(4)、SQLMAP检测之union注入主要流程

虚线之上表示前置发包过程,虚线之下表示针对每个注入点都会进行循环发包的流程

union注入的流程可以分为两步走:

①、第一步为确定列数,以order by列数探测技术为主,selectnull列数探测技术为辅形成列数确定技术:

②、第二步为在确定列数的基础上,查找某一个字段是字符串字段,保证数据库信息可以从该字段注出。

(1)、order by列数探测技术

(2)、select null列数探测技术

(3)、select null字符串位置确定技术

(5)、SQLMAP检测之实践注入主要流程

虚线之上表示前置发包过程,虚线之下表示针对每个注入点都会进行循环发包的流程。

时间盲注过程中大量使用响应延迟判断技术,从流程图中可以看到,在针对每一个注入点循环发包时候,一共使用了三次响应延迟判断技术。

确定存在时间注入后,再进入误报检测流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1283266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐写2-MISC-bugku-解题步骤

——CTF解题专栏—— 声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。 题目信息: 题目:隐写2 作者:harry 提示:f1g{xxx} 解题附件: 解题思路…

蓝桥杯物联网竞赛_STM32L071_9_按键矩阵扩展模块

原理图: 矩阵按键原理图: 实验板接口原理图: 得到对应图: 扫描按键原理: 按键的COLUMN1、2、3分别制0,每次只允许其中一个为0其他都是1(POW1和POW2正常状况为上拉),当有…

深入了解Java Duration类,对时间的精细操作

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概6000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

为了让亲戚也能用上chatgpt,我决定建一个代理站点

(本文试着用gpt优化了一下,效果有,但是不多) ChatGPT在编程中的应用 当ChatGPT刚出来的时候,我尝试了几次,感觉它就像是一个高级版的搜索引擎。但在过去的一个月里,我在公司经常使用GPT来查询…

ruby安装(vscode、rubymine)

https://rubyinstaller.org/downloads/ 下载exe安装即可 会弹出 输入3 安装成功 vscode插件市场安装ruby插件 新建一个目录,打开terminal bundle init //进行初始化(如果执行不了,应该是环境变量没生效,重启vscode&#…

Pillow操控图像,Python必备神器全面解析!

更多资料获取 📚 个人网站:ipengtao.com Pillow 是一个强大的 Python 图像处理库,它提供了丰富的功能,能够处理图像的加载、编辑、处理和保存。这个库建立在 Python Imaging Library (PIL) 的基础上,并延续了 PIL 的开…

芯擎科技与芯华章深度合作,软硬件协同开发加速车规级芯片创新

12月4日,系统级验证EDA解决方案提供商芯华章,与国产高端车规芯片设计公司芯擎科技正式建立战略合作。双方强强联手,芯擎科技导入芯华章相关EDA验证工具,赋能车规级芯片和应用软件的协同开发,助力大规模缩短产品上市周期…

预测胶质瘤预后的铜结合蛋白的转录组学特征

今天给同学们分享一篇生信文章“Transcriptomic Characterization of Copper-Binding Proteins for Predicting Prognosis in Glioma”,这篇文章发表在Brain Sci期刊上,影响因子为3.3。 结果解读: 铜结合蛋白的转录组表达 共有85种蛋白质被确…

【驾校管理系统源码】基于Springboot+Vue个人驾校预约管理系统

🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎领取: Eclipse运行教学: Idea运行项目教学: Pycharm调试项目教学&#…

嵌入式rk3399系统问题

1、修改分辨率 修改4k分辨率: 1. 执行命令:cvt 3840 2160 50获得返回结果(2k分辨率为cvt 1920 1080 50),如图中所示: 2.修改文件:sudo vim /usr/share/X11/xorg.conf.d/20-modesetting.conf将获取到的Modeline如图中所…

二值图像分割统一项目

1. 项目文件介绍 本章为二值图像的分割任务做统一实现,下面是项目的实现目录 项目和文章绑定了,之前没用过,不知道行不行 data 文件夹下负责摆放数据的训练集测试集inference 负责放待推理的图片(支持多张图片预测分割)run_results 是网络训…

业务场景中Hive解析Json常用案例

业务场景中Hive解析Json常用案例 json在线工具 json格式转换在线工具 https://tool.lu/json/format格式互转: // 格式化可以合并整行显示 {"name":"John Doe","age":35,"email":"johnexample.com"}// 格式化…

vm net 方式 静态ip配置访问主机IP和外网

1、win 11 安装vm,镜像文件 F:\software\VMwork\CentOS-7-x86_64-Everything-1804.iso 2、配置网络 net 方式 3、右击网络--》属性---》更改适配器设置--》vmnet8 属性 如果没有vm1、vm8 虚拟机编辑---》虚拟机网络编辑器-->还原默认设置 注意:这…

ONLYOFFICE 协作空间 2.0 现已发布:新增公共房间、插件、重新分配数据、RTL 界面等功能

更新后的 ONLYOFFICE 协作空间新增诸多实用功能,全平台实现多项优化功能。请继续阅读,了解所有更新。 ONLYOFFICE 协作空间是什么 ONLYOFFICE 协作空间是一款开源效率平台,让您与同事、团队成员、客户、合作伙伴、承包商、赞助商和其他第三方…

大学生如何搭建自己的网站

这篇是我在大一的时候,写过的一篇文章。 前言 作为一名大学生,我觉得搭建个人网站很有意义。 这篇博客讲述的是这个寒假,我是如何从零到搭建好个人网站的过程。我提供的主要是具体的思路,也附带了一些零零散散的细节。时间跨度…

GVIM 配置 for begin/end class/endclass 等配对

有时候我们的代码很长,或者结构比较复杂,多个if/else 或者begin/end 快嵌套,为了阅读方便,利用gvim插件实现块跳转还是很有实用性的,下面的.vimrc的配置,简单方便。 使用方式: 将光标定位到块头…

全球与中国汽车电力电子市场:增长趋势、竞争格局与前景展望

目前,世界各国都致力于转向更环保、更永续的传统交通替代方案。 电动车满足所有要求,因为它们具有零废气排放、改善空气品质、减少温室气体排放并创造更清洁、更健康的环境。此外,电动车的运作成本比传统内燃机驱动的汽车低,因为…

HTML5+CSS3+Vue小实例:饮料瓶造型文字旋转特效

实例:饮料瓶造型文字旋转特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】【JS】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" …

linux 内核regulator

问题 在sys文件系统下没有生成cpu 调频的相关节点。 日志对比 [ 3.588745] cpu cpu4: Looking up cpu-supply from device tree [ 3.588753] cpu cpu4: Failed to get reg [ 3.588791] cpu cpu4: Looking up cpu-supply from device tree [ 3.588808] Failed to i…

React 笔记 jsx

严格约定&#xff1a;React 组件必须以大写字母开头&#xff0c;而 HTML 标签则必须是小写字母。 React JSX JSX 是由 React 推广的 JavaScript 语法扩展。 用于表达组件的 特殊语法的 js 函数 要求标签必须闭合&#xff1b;返回的组件必须包裹在一个父标签内&#xff1b; …